diff --git a/.gn b/.gn index eaf210ef..bbc0a8e 100644 --- a/.gn +++ b/.gn
@@ -259,7 +259,7 @@ # additions, we keep the build fast and clean. If you think you need to add a # new call, please consider: # -# - Do not use a script to check for the existance of a file or directory to +# - Do not use a script to check for the existence of a file or directory to # enable a different mode. Instead, use GN build args to enable or disable # functionality and set options. An example is checking for a file in the # src-internal repo to see if the corresponding src-internal feature should
diff --git a/BUILD.gn b/BUILD.gn index 2543a3a..0cf62b2 100644 --- a/BUILD.gn +++ b/BUILD.gn
@@ -421,7 +421,7 @@ ] } - if ((is_win || is_mac || is_linux || is_chromeos) && + if ((is_win || is_mac || is_linux || is_chromeos || is_fuchsia) && (target_cpu == "x86" || target_cpu == "x64")) { deps += [ "//third_party/swiftshader" ] } @@ -736,6 +736,7 @@ "//headless:headless_shell", "//headless:headless_tests", "//webrunner", + "//webrunner:archive_sources", "//webrunner:webrunner_unittests", ] }
diff --git a/DEPS b/DEPS index 498e858a..72e063c7 100644 --- a/DEPS +++ b/DEPS
@@ -105,7 +105,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'bc6f9c9a8c6b83bc91496c28d85541855747a5da', + 'skia_revision': 'f1a25c06cd1558efb20b88835302ffcbfdd47de1', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. @@ -117,7 +117,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': '9b6a3f92603260e8b324fa3e0e2936f4bf5ae414', + 'angle_revision': '7ae70d8fb360a3defe4d6734687748a786d565ae', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling build tools # and whatever else without interference from each other. @@ -125,11 +125,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': '9e22c542d6be9bdc4066a224264b9d3a1fb73018', + 'swiftshader_revision': 'c47cd435bf6f631aedffa820867350c40e602c41', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '4174b5ab6ac9024acb9b42acbb61d628a2a679e3', + 'pdfium_revision': '0c7cf97859dd38f2cd94532cdd423abff7130853', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling openmax_dl # and whatever else without interference from each other. @@ -161,11 +161,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling HarfBuzz # and whatever else without interference from each other. - 'harfbuzz_revision': '2b76767bf572364d3d647cdd139f2044a7ad06b2', + 'harfbuzz_revision': 'b6fdcf4f8bd09e065c767939125861c9dc8ff18f', # 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': '0d25dda9b148bcd2dad9e1080b1dc57eaf9d2c2a', + 'catapult_revision': '21cd5a309631b78d6deedc1ca56ca83ead9fbadd', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -181,7 +181,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. - 'feed_revision': '180fca04760493784b3183a2220fce639e96f1a5', + 'feed_revision': '75614b922b359cc739614fb53b34817cabd69d82', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling android_sdk_build-tools_version # and whatever else without interference from each other. @@ -552,7 +552,7 @@ # Build tools for Chrome OS. Note: This depends on third_party/pyelftools. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '3e655b0ac271f1add5830b990b6138e23743dfa8', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '62dc9deeea75fba1cb5087d8447177baf71f19f0', 'condition': 'checkout_linux', }, @@ -577,7 +577,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '284b5e0c60ac489df16a7926207c5d255d2ca6d6', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '6a4e31b4882f85224e08a70af20c7df766eb525d', 'src/third_party/devtools-node-modules': Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'), @@ -585,6 +585,11 @@ 'src/third_party/dom_distiller_js/dist': Var('chromium_git') + '/chromium/dom-distiller/dist.git' + '@' + '60b46718e28f553ab57e3d2bbda5b3b41456f417', + 'src/third_party/dynamicmodule': { + 'url': Var('chromium_git') + '/dynamicmodule' + '@' + 'c6d37ea1003931dd44b78f936ca0882956aa3107', + 'condition': 'checkout_android', + }, + 'src/third_party/elfutils/src': { 'url': Var('chromium_git') + '/external/elfutils.git' + '@' + '249673729a7e5dbd5de4f3760bdcaa3d23d154d7', 'condition': 'checkout_android_native_support', @@ -612,7 +617,7 @@ }, 'src/third_party/ffmpeg': - Var('chromium_git') + '/chromium/third_party/ffmpeg.git' + '@' + 'de23348fef6fd063b066e9652005973f86ed52ff', + Var('chromium_git') + '/chromium/third_party/ffmpeg.git' + '@' + '5659adb8fc6f7228699d4cf45d95f73624d5aeb7', 'src/third_party/flac': Var('chromium_git') + '/chromium/deps/flac.git' + '@' + 'af862024c8c8fa0ae07ced05e89013d881b00596', @@ -925,7 +930,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '74182d1df594d4b007526412d2a46a87a7f85f21', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'c500e36711d5f546b5b41695de1d6cf194207692', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + 'ac0d98b5cee6c024b0cffeb4f8f45b6fc5ccdb78', @@ -1047,7 +1052,7 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '21dbf06b5aa6c7dc8cf56314d4a3f96f57956c53', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '5f0ce99c04eb18313dd24b3dc31cc6246496d6d5', + Var('webrtc_git') + '/src.git' + '@' + 'f4cf64ec066953d7b175b124a7617557d0c7f27c', 'src/third_party/xdg-utils': { 'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d',
diff --git a/PRESUBMIT.py b/PRESUBMIT.py index 3e7c03a7..3b87479 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py
@@ -813,6 +813,28 @@ files) ] return [] +def _CheckNoStrCatRedefines(input_api, output_api): + """Checks no windows headers with StrCat redefined are included directly.""" + files = [] + pattern_deny = input_api.re.compile( + r'^#include\s*[<"](shlwapi|atlbase|propvarutil|sphelper).h[">]', + input_api.re.MULTILINE) + pattern_allow = input_api.re.compile( + r'^#include\s"base/win/windows_defines.inc"', + input_api.re.MULTILINE) + for f in input_api.AffectedSourceFiles(input_api.FilterSourceFile): + contents = input_api.ReadFile(f) + if pattern_deny.search(contents) and not pattern_allow.search(contents): + files.append(f.LocalPath()) + + if len(files): + return [output_api.PresubmitError( + 'Do not #include shlwapi.h, atlbase.h, propvarutil.h or sphelper.h ' + 'directly since they pollute code with StrCat macro. Instead, ' + 'include matching header from base/win. See http://crbug.com/856536', + files) ] + return [] + def _CheckNoUNIT_TESTInSourceFiles(input_api, output_api): """Checks to make sure no source files use UNIT_TEST."""
diff --git a/PRESUBMIT_test.py b/PRESUBMIT_test.py index ce9e79b6..175d51a 100755 --- a/PRESUBMIT_test.py +++ b/PRESUBMIT_test.py
@@ -1858,6 +1858,42 @@ results = PRESUBMIT._CheckUniquePtr(mock_input_api, MockOutputApi()) self.assertEqual(0, len(results)) +class CheckNoDirectIncludesHeadersWhichRedefineStrCat(unittest.TestCase): + def testBlocksDirectIncludes(self): + mock_input_api = MockInputApi() + mock_input_api.files = [ + MockFile('dir/foo_win.cc', ['#include "shlwapi.h"']), + MockFile('dir/bar.h', ['#include <propvarutil.h>']), + MockFile('dir/baz.h', ['#include <atlbase.h>']), + MockFile('dir/jumbo.h', ['#include "sphelper.h"']), + ] + results = PRESUBMIT._CheckNoStrCatRedefines(mock_input_api, MockOutputApi()) + self.assertEquals(1, len(results)) + self.assertEquals(4, len(results[0].items)) + self.assertTrue('StrCat' in results[0].message) + self.assertTrue('foo_win.cc' in results[0].items[0]) + self.assertTrue('bar.h' in results[0].items[1]) + self.assertTrue('baz.h' in results[0].items[2]) + self.assertTrue('jumbo.h' in results[0].items[3]) + + def testAllowsToIncludeWrapper(self): + mock_input_api = MockInputApi() + mock_input_api.files = [ + MockFile('dir/baz_win.cc', ['#include "base/win/shlwapi.h"']), + MockFile('dir/baz-win.h', ['#include "base/win/atl.h"']), + ] + results = PRESUBMIT._CheckNoStrCatRedefines(mock_input_api, MockOutputApi()) + self.assertEquals(0, len(results)) + + def testAllowsToCreateWrapper(self): + mock_input_api = MockInputApi() + mock_input_api.files = [ + MockFile('base/win/shlwapi.h', [ + '#include <shlwapi.h>', + '#include "base/win/windows_defines.inc"']), + ] + results = PRESUBMIT._CheckNoStrCatRedefines(mock_input_api, MockOutputApi()) + self.assertEquals(0, len(results)) class TranslationScreenshotsTest(unittest.TestCase): # An empty grd file.
diff --git a/WATCHLISTS b/WATCHLISTS index e48f29c..81eeffd 100644 --- a/WATCHLISTS +++ b/WATCHLISTS
@@ -207,7 +207,7 @@ 'filepath': '^base/task/', }, 'base_task_scheduler': { - 'filepath': '^base/task_scheduler', + 'filepath': '^base/task/task_scheduler', }, 'base_win': { 'filepath': '^base/win', @@ -718,7 +718,8 @@ 'filepath': 'chromeos/CHROMEOS_LKGM', }, 'chromeos_login': { - 'filepath': 'chrome/browser/chromeos/login/|'\ + 'filepath': 'ash/login/|'\ + 'chrome/browser/chromeos/login/|'\ 'chrome/browser/ui/webui/chromeos/login/|'\ 'chrome/browser/resources/chromeos/login/|'\ 'ui/login/', @@ -933,6 +934,23 @@ 'gpu_passthrough_cmd_decoder': { 'filepath': 'gpu/command_buffer/service/.*passthrough', }, + 'guest_view': { + 'filepath': 'chrome/browser/apps/guest_view|'\ + 'chrome/browser/extensions/api/web_view|'\ + 'chrome/browser/guest_view|'\ + 'chrome/common/extensions/api/webview*.json|'\ + 'chrome/common/extensions/docs|'\ + 'chrome/renderer/resources/extensions/web_view|'\ + 'components/guest_view|'\ + 'content/browser/browser_plugin|'\ + 'content/renderer/browser_plugin|'\ + 'extensions/browser/api/guest_view|'\ + 'extensions/browser/guest_view|'\ + 'extensions/common/guest_view|'\ + 'extensions/common/mojo/guest_view.mojom|'\ + 'extensions/common/api/*view*.json|'\ + 'extensions/renderer/guest_view', + }, 'headless': { 'filepath': 'headless/' }, @@ -1253,7 +1271,7 @@ 'optimization_hints', }, 'origin_trials': { - 'filepath': 'origin_trials'\ + 'filepath': 'origin_trial'\ '|OriginTrial'\ '|ConditionalFeature', }, @@ -1385,9 +1403,6 @@ 'filepath': 'chrome/(browser|common|renderer)/safe_browsing/|'\ 'components/safe_browsing/', }, - 'safe_browsing_db': { - 'filepath': 'components/safe_browsing_db/', - }, 'screen_orientation': { 'filepath': 'screen_orientation', }, @@ -1776,8 +1791,7 @@ 'background_fetch': ['peter@chromium.org', 'rayankans+watch@chromium.org', 'nator@chromium.org'], - 'background_sync': ['chasej+watch@chromium.org', - 'iclelland+watch@chromium.org', + 'background_sync': ['iclelland+watch@chromium.org', 'peter@chromium.org'], 'banners': ['dominickn+watch-banners@chromium.org', 'hanxi+watch@chromium.org', @@ -2020,7 +2034,8 @@ 'bpastene+watch@chromium.org', 'stevenjb+watch@chromium.org'], 'chromeos_login': ['achuith+watch@chromium.org', - 'alemate+watch@chromium.org'], + 'alemate+watch@chromium.org', + 'jdufault+watch@chromium.org'], 'chromeos_net': ['stevenjb+watch@chromium.org'], 'chromeos_power': ['derat+watch@chromium.org'], 'chromeos_timezone': ['alemate+watch@chromium.org'], @@ -2122,6 +2137,9 @@ 'tfarina@chromium.org'], 'gpu': ['piman+watch@chromium.org'], 'gpu_passthrough_cmd_decoder': ['geofflang+watch@chromium.org'], + 'guest_view': ['ekaramad@chromium.org', + 'macnee@chromium.org', + 'wjmaclean@chromium.org'], 'headless': ['headless-reviews@chromium.org'], 'history_ui': ['pam+watch@chromium.org'], 'i18n': ['jshin+watch@chromium.org'], @@ -2296,8 +2314,6 @@ 'runtime_enabled_features': ['jmedley+watch@chromium.org'], 'safe_browsing': ['timvolodine@chromium.org', 'vakh+watch@chromium.org'], - 'safe_browsing_db': ['timvolodine@chromium.org', - 'vakh+watch@chromium.org'], 'screen_orientation': ['mlamouri+watch-screen-orientation@chromium.org'], 'service_worker': ['horo+watch@chromium.org', 'jsbell+serviceworker@chromium.org',
diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn index 04db3b4..8f560ec7 100644 --- a/android_webview/BUILD.gn +++ b/android_webview/BUILD.gn
@@ -899,7 +899,7 @@ "//base:base_java", "//components/autofill/android:autofill_java", "//components/autofill/android:provider_java", - "//components/background_task_scheduler:background_task_scheduler_java", + "//components/background_task_scheduler:background_task_scheduler_task_ids_java", "//components/crash/android:java", "//components/embedder_support/android:web_contents_delegate_java", "//components/minidump_uploader:minidump_uploader_java", @@ -1048,7 +1048,7 @@ ":android_webview_variations_utils_java", ":system_webview_manifest", "//base:base_java", - "//components/background_task_scheduler:background_task_scheduler_java", + "//components/background_task_scheduler:background_task_scheduler_task_ids_java", "//components/minidump_uploader:minidump_uploader_java", "//components/version_info/android:version_constants_java", ]
diff --git a/android_webview/common/aw_content_client.cc b/android_webview/common/aw_content_client.cc index fd322faf..1514c944 100644 --- a/android_webview/common/aw_content_client.cc +++ b/android_webview/common/aw_content_client.cc
@@ -37,7 +37,8 @@ switches::kUseMobileUserAgent)) { product += " Mobile"; } - return content::BuildUserAgentFromProductAndExtraOSInfo(product, "; wv"); + return content::BuildUserAgentFromProductAndExtraOSInfo( + product, "; wv", true /* include_android_build_number */); } void AwContentClient::AddAdditionalSchemes(Schemes* schemes) {
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index f8abb0f..d885feb 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -23,6 +23,10 @@ assert(use_ozone) component("ash") { + friend = [ + ":ash_unittests", + ":test_support_common", + ] public = [ "accelerators/accelerator_commands.h", "accelerators/accelerator_confirmation_dialog.h", @@ -159,12 +163,12 @@ "frame/caption_buttons/frame_size_button.h", "frame/caption_buttons/frame_size_button_delegate.h", "frame/custom_frame_header.h", - "frame/custom_frame_view_ash.h", "frame/default_frame_header.h", "frame/detached_title_area_renderer.h", "frame/frame_header.h", "frame/frame_header_util.h", "frame/header_view.h", + "frame/non_client_frame_view_ash.h", "frame/wide_frame_view.h", "high_contrast/high_contrast_controller.h", "highlighter/highlighter_controller.h", @@ -647,7 +651,6 @@ "wm/tablet_mode/tablet_mode_browser_window_drag_delegate.h", "wm/tablet_mode/tablet_mode_controller.h", "wm/tablet_mode/tablet_mode_event_handler.h", - "wm/tablet_mode/tablet_mode_event_handler_classic.h", "wm/tablet_mode/tablet_mode_observer.h", "wm/tablet_mode/tablet_mode_window_drag_delegate.h", "wm/tablet_mode/tablet_mode_window_manager.h", @@ -660,9 +663,9 @@ "wm/window_animations.h", "wm/window_cycle_controller.h", "wm/window_cycle_event_filter.h", - "wm/window_cycle_event_filter_classic.h", "wm/window_cycle_list.h", "wm/window_dimmer.h", + "wm/window_finder.h", "wm/window_mirror_view.h", "wm/window_parenting_utils.h", "wm/window_positioner.h", @@ -817,12 +820,12 @@ "frame/caption_buttons/frame_caption_button_container_view.cc", "frame/caption_buttons/frame_size_button.cc", "frame/custom_frame_header.cc", - "frame/custom_frame_view_ash.cc", "frame/default_frame_header.cc", "frame/detached_title_area_renderer.cc", "frame/frame_header.cc", "frame/frame_header_util.cc", "frame/header_view.cc", + "frame/non_client_frame_view_ash.cc", "frame/wide_frame_view.cc", "high_contrast/high_contrast_controller.cc", "highlighter/highlighter_controller.cc", @@ -1179,6 +1182,8 @@ "wallpaper/wallpaper_view.cc", "wallpaper/wallpaper_widget_controller.cc", "wallpaper/wallpaper_window_state_manager.cc", + "window_factory.cc", + "window_factory.h", "wm/always_on_top_controller.cc", "wm/ash_focus_rules.cc", "wm/base_state.cc", @@ -1249,7 +1254,6 @@ "wm/tablet_mode/tablet_mode_browser_window_drag_delegate.cc", "wm/tablet_mode/tablet_mode_controller.cc", "wm/tablet_mode/tablet_mode_event_handler.cc", - "wm/tablet_mode/tablet_mode_event_handler_classic.cc", "wm/tablet_mode/tablet_mode_window_drag_delegate.cc", "wm/tablet_mode/tablet_mode_window_manager.cc", "wm/tablet_mode/tablet_mode_window_state.cc", @@ -1259,9 +1263,10 @@ "wm/widget_finder.cc", "wm/window_animations.cc", "wm/window_cycle_controller.cc", - "wm/window_cycle_event_filter_classic.cc", + "wm/window_cycle_event_filter.cc", "wm/window_cycle_list.cc", "wm/window_dimmer.cc", + "wm/window_finder.cc", "wm/window_mirror_view.cc", "wm/window_parenting_utils.cc", "wm/window_positioner.cc", @@ -1692,6 +1697,7 @@ "ash_service_unittest.cc", "assistant/assistant_controller_unittest.cc", "assistant/assistant_screen_context_controller_unittest.cc", + "assistant/ui/assistant_container_view_unittest.cc", "assistant/util/deep_link_util_unittest.cc", "autoclick/autoclick_unittest.cc", "cursor_unittest.cc", @@ -1730,8 +1736,8 @@ "frame/caption_buttons/frame_caption_button_container_view_unittest.cc", "frame/caption_buttons/frame_caption_button_unittest.cc", "frame/caption_buttons/frame_size_button_unittest.cc", - "frame/custom_frame_view_ash_unittest.cc", "frame/default_frame_header_unittest.cc", + "frame/non_client_frame_view_ash_unittest.cc", "highlighter/highlighter_controller_unittest.cc", "highlighter/highlighter_gesture_util_unittest.cc", "ime/ime_controller_unittest.cc", @@ -1947,6 +1953,7 @@ "wm/window_animations_unittest.cc", "wm/window_cycle_controller_unittest.cc", "wm/window_dimmer_unittest.cc", + "wm/window_finder_unittest.cc", "wm/window_manager_unittest.cc", "wm/window_modality_controller_unittest.cc", "wm/window_positioner_unittest.cc",
diff --git a/ash/README.md b/ash/README.md index 9de5c3b..951f871e 100644 --- a/ash/README.md +++ b/ash/README.md
@@ -41,6 +41,28 @@ //services/ui on a background thread in the browser process. This configuration was deprecated in April 2018. +SingleProcessMash +----------------- + +Before launching Mash we plan to launch SingleProcessMash. SingleProcessMash is +similar to "classic ash" in that ash and the browser still live in the same +process and on the same thread, but all non-ash UI code (such as browser +windows) will use the WindowService over mojo. This results in exercising much +of the same code as in mash, but everything is still in the process. + +In SingleProcessMash mode there are two aura::Envs. Ash (Shell) creates one and +the browser creates one. In order to ensure the right one is used do the +following: + +. When creating a Widget set the parent and/or context. If you don't need a + specific parent (container), more often than not using a context of + Shell::GetRootWindowForNewWindows() is what you want. +. If you are creating aura::Windows directly, use the ash::window_factory. +. If you need access to aura::Env, get it from Shell. Shell always returns the + right one, regardless of mode. + +See https://docs.google.com/document/d/11ha_KioDdXe4iZS2AML1foKnCJlNKm7Q1hFr6VW8dV4/edit for more details. + Mash Tests ----- ash_unittests has some tests specific to Mash, but in general Ash code should
diff --git a/ash/accelerators/accelerator_controller_unittest.cc b/ash/accelerators/accelerator_controller_unittest.cc index 12749e5..cb8eb15 100644 --- a/ash/accelerators/accelerator_controller_unittest.cc +++ b/ash/accelerators/accelerator_controller_unittest.cc
@@ -53,6 +53,7 @@ #include "ui/display/screen.h" #include "ui/events/event.h" #include "ui/events/event_sink.h" +#include "ui/events/keycodes/dom/dom_code.h" #include "ui/events/test/event_generator.h" #include "ui/message_center/message_center.h" #include "ui/views/widget/widget.h" @@ -586,6 +587,7 @@ views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); params.bounds = gfx::Rect(5, 5, 20, 20); views::Widget* widget = new views::Widget; + params.context = CurrentContext(); widget->Init(params); widget->Show(); widget->Activate(); @@ -624,7 +626,7 @@ ui::EventDispatchDetails details = sink->OnEventFromSource(&key_event1); EXPECT_TRUE(key_event1.handled() || details.dispatcher_destroyed); - ui::KeyEvent key_event2('A', ui::VKEY_A, ui::EF_NONE); + ui::KeyEvent key_event2('A', ui::VKEY_A, ui::DomCode::NONE, ui::EF_NONE); details = sink->OnEventFromSource(&key_event2); EXPECT_FALSE(key_event2.handled() || details.dispatcher_destroyed);
diff --git a/ash/app_launch_unittest.cc b/ash/app_launch_unittest.cc index d4101b7..89ac6d9 100644 --- a/ash/app_launch_unittest.cc +++ b/ash/app_launch_unittest.cc
@@ -10,6 +10,7 @@ #include "services/service_manager/public/cpp/service_test.h" #include "services/ui/public/interfaces/constants.mojom.h" #include "services/ui/public/interfaces/window_server_test.mojom.h" +#include "ui/base/ui_base_features.h" #include "ui/views/layout/layout_provider.h" namespace ash { @@ -36,6 +37,11 @@ }; TEST_F(AppLaunchTest, TestQuickLaunch) { + // This test launches ash in a separate service. That doesn't make sense with + // SingleProcessMash. + if (features::IsSingleProcessMash()) + return; + connector()->StartService(mojom::kServiceName); connector()->StartService(quick_launch::mojom::kServiceName);
diff --git a/ash/app_list/app_list_presenter_delegate_unittest.cc b/ash/app_list/app_list_presenter_delegate_unittest.cc index 17533aee..ea136cf 100644 --- a/ash/app_list/app_list_presenter_delegate_unittest.cc +++ b/ash/app_list/app_list_presenter_delegate_unittest.cc
@@ -1154,7 +1154,7 @@ // Turn on tablet mode. The background sheild opacity should be 10%. EnableTabletMode(true); - EXPECT_EQ(0.1f, background_layer->opacity()); + EXPECT_EQ(0.2f, background_layer->opacity()); } // Tests that the background blur is disabled for the app list.
diff --git a/ash/app_list/model/folder_image.cc b/ash/app_list/model/folder_image.cc index 168544e..879fc84 100644 --- a/ash/app_list/model/folder_image.cc +++ b/ash/app_list/model/folder_image.cc
@@ -31,12 +31,20 @@ // The margin of item icon in folder icon. constexpr int kItemIconMargin = 2; +// The shadow blur of icon. +constexpr int kIconShadowBlur = 5; + +// The shadow color of icon. +constexpr SkColor kIconShadowColor = SkColorSetA(SK_ColorBLACK, 31); + // Generates the folder icon with the top 4 child item icons laid in 2x2 tile. class FolderImageSource : public gfx::CanvasImageSource { public: typedef std::vector<gfx::ImageSkia> Icons; - FolderImageSource(const Icons& icons, const gfx::Size& size); + FolderImageSource(const Icons& icons, + const gfx::Size& size, + bool draw_shadow); ~FolderImageSource() override; private: @@ -51,12 +59,18 @@ Icons icons_; gfx::Size size_; + bool draw_shadow_; // True if |icons| have shadows. DISALLOW_COPY_AND_ASSIGN(FolderImageSource); }; -FolderImageSource::FolderImageSource(const Icons& icons, const gfx::Size& size) - : gfx::CanvasImageSource(size, false), icons_(icons), size_(size) { +FolderImageSource::FolderImageSource(const Icons& icons, + const gfx::Size& size, + bool draw_shadow) + : gfx::CanvasImageSource(size, false), + icons_(icons), + size_(size), + draw_shadow_(draw_shadow) { DCHECK(icons.size() <= FolderImage::kNumFolderTopItems); } @@ -70,10 +84,26 @@ if (icon.isNull()) return; - gfx::ImageSkia resized(gfx::ImageSkiaOperations::CreateResizedImage( + const gfx::ImageSkia resized(gfx::ImageSkiaOperations::CreateResizedImage( icon, skia::ImageOperations::RESIZE_BEST, icon_size)); - canvas->DrawImageInt(resized, 0, 0, resized.width(), resized.height(), x, y, - resized.width(), resized.height(), true); + if (!draw_shadow_) { + canvas->DrawImageInt(resized, 0, 0, resized.width(), resized.height(), x, y, + resized.width(), resized.height(), true); + return; + } + + // Draw a shadowed icon on the specified location. + const gfx::ImageSkia shadowed( + gfx::ImageSkiaOperations::CreateImageWithDropShadow( + resized, gfx::ShadowValues( + 1, gfx::ShadowValue(gfx::Vector2d(), kIconShadowBlur, + kIconShadowColor)))); + const gfx::Size shadow_size = shadowed.size(); + x -= (shadow_size.width() - icon_size.width()) / 2; + y -= (shadow_size.height() - icon_size.height()) / 2; + canvas->DrawImageInt(shadowed, 0, 0, shadow_size.width(), + shadow_size.height(), x, y, shadow_size.width(), + shadow_size.height(), true); } void FolderImageSource::Draw(gfx::Canvas* canvas) { @@ -84,7 +114,7 @@ cc::PaintFlags flags; flags.setStyle(cc::PaintFlags::kFill_Style); flags.setAntiAlias(true); - flags.setColor(FolderImage::kFolderBubbleColor); + flags.setColor(AppListConfig::instance().folder_bubble_color()); canvas->DrawCircle(bubble_center, AppListConfig::instance().folder_bubble_radius(), flags); @@ -145,10 +175,10 @@ // static const size_t FolderImage::kNumFolderTopItems = 4; -const SkColor FolderImage::kFolderBubbleColor = - SkColorSetARGB(0x1F, 0xFF, 0xFF, 0xFF); -FolderImage::FolderImage(AppListItemList* item_list) : item_list_(item_list) { +FolderImage::FolderImage(AppListItemList* item_list) + : item_list_(item_list), + is_new_style_launcher_enabled_(features::IsNewStyleLauncherEnabled()) { item_list_->AddObserver(this); } @@ -308,8 +338,10 @@ top_icons.push_back(item->icon()); const gfx::Size icon_size = AppListConfig::instance().folder_unclipped_icon_size(); - icon_ = gfx::ImageSkia( - std::make_unique<FolderImageSource>(top_icons, icon_size), icon_size); + icon_ = gfx::ImageSkia(std::make_unique<FolderImageSource>( + top_icons, icon_size, + is_new_style_launcher_enabled_ /* draw_shadow */), + icon_size); for (auto& observer : observers_) observer.OnFolderImageUpdated();
diff --git a/ash/app_list/model/folder_image.h b/ash/app_list/model/folder_image.h index 273774e..1fff6f59 100644 --- a/ash/app_list/model/folder_image.h +++ b/ash/app_list/model/folder_image.h
@@ -42,8 +42,6 @@ // Number of the top items in a folder, which are shown inside the folder icon // and animated when opening and closing a folder. static const size_t kNumFolderTopItems; - // Color of the folder ink bubble, 12% white.. - static const SkColor kFolderBubbleColor; explicit FolderImage(AppListItemList* item_list); ~FolderImage() override; @@ -106,6 +104,9 @@ // Top items for generating folder icon. std::vector<AppListItem*> top_items_; + // True if new style launcher feature is enabled. + const bool is_new_style_launcher_enabled_; + base::ObserverList<FolderImageObserver> observers_; };
diff --git a/ash/app_list/views/app_list_folder_view.cc b/ash/app_list/views/app_list_folder_view.cc index cbddd09..4109a70 100644 --- a/ash/app_list/views/app_list_folder_view.cc +++ b/ash/app_list/views/app_list_folder_view.cc
@@ -81,8 +81,10 @@ : folder_view_->folder_item_icon_bounds(); const SkColor background_color = AppListConfig::instance().folder_background_color(); - from_color_ = show_ ? FolderImage::kFolderBubbleColor : background_color; - to_color_ = show_ ? background_color : FolderImage::kFolderBubbleColor; + from_color_ = show_ ? AppListConfig::instance().folder_bubble_color() + : background_color; + to_color_ = show_ ? background_color + : AppListConfig::instance().folder_bubble_color(); SetTweenType(gfx::Tween::FAST_OUT_SLOW_IN); SetSlideDuration(kFolderTransitionInDurationMs); @@ -114,10 +116,6 @@ } void AnimationEnded(const gfx::Animation* animation) override { - if (!show_) { - folder_view_->background_view()->SetBackground(nullptr); - folder_view_->background_view()->SchedulePaint(); - } folder_view_->RecordAnimationSmoothness(); } @@ -204,12 +202,8 @@ class TopIconAnimation : public AppListFolderView::Animation, public TopIconAnimationObserver { public: - TopIconAnimation(bool show, - bool hide_for_reparent, - AppListFolderView* folder_view) - : show_(show), - hide_for_reparent_(hide_for_reparent), - folder_view_(folder_view) {} + TopIconAnimation(bool show, AppListFolderView* folder_view) + : show_(show), folder_view_(folder_view) {} ~TopIconAnimation() override { for (auto* view : top_icon_views_) @@ -285,10 +279,8 @@ SetFirstPageItemViewsVisible(true); // Show the folder icon when closing the folder. - if ((!show_ || hide_for_reparent_) && - folder_view_->GetActivatedFolderItemView()) { + if (!show_ && folder_view_->GetActivatedFolderItemView()) folder_view_->GetActivatedFolderItemView()->SetIconVisible(true); - } } private: @@ -343,9 +335,6 @@ // True if opening the folder. const bool show_; - // True if an item in the folder is being reparented to root grid view. - const bool hide_for_reparent_; - AppListFolderView* const folder_view_; // Not owned. std::vector<TopIconAnimationView*> top_icon_views_; @@ -525,8 +514,7 @@ // Animate the bounds and opacity of items in the first page of the opened // folder. - top_icon_animation_ = - std::make_unique<TopIconAnimation>(show, hide_for_reparent, this); + top_icon_animation_ = std::make_unique<TopIconAnimation>(show, this); top_icon_animation_->ScheduleAnimation(); // Animate the bounds and opacity of the contents container.
diff --git a/ash/app_list/views/app_list_item_view.cc b/ash/app_list/views/app_list_item_view.cc index 971af7d..104920c 100644 --- a/ash/app_list/views/app_list_item_view.cc +++ b/ash/app_list/views/app_list_item_view.cc
@@ -69,6 +69,18 @@ // The duration in milliseconds of dragged view hover animation. constexpr int kDraggedViewHoverAnimationDuration = 250; +// The shadow blur of title. +constexpr int kTitleShadowBlur = 28; + +// The shadow color of title. +constexpr SkColor kTitleShadowColor = SkColorSetA(SK_ColorBLACK, 82); + +// The shadow blur of icon. +constexpr int kIconShadowBlur = 10; + +// The shadow color of icon. +constexpr SkColor kIconShadowColor = SkColorSetA(SK_ColorBLACK, 31); + // The class clips the provided folder icon image. class ClippedFolderIconImageSource : public gfx::CanvasImageSource { public: @@ -108,9 +120,15 @@ AppListItemView::AppListItemView(AppsGridView* apps_grid_view, AppListItem* item, AppListViewDelegate* delegate) + : AppListItemView(apps_grid_view, item, delegate, item->IsInFolder()) {} + +AppListItemView::AppListItemView(AppsGridView* apps_grid_view, + AppListItem* item, + AppListViewDelegate* delegate, + bool is_in_folder) : Button(apps_grid_view), is_folder_(item->GetItemType() == AppListFolderItem::kItemType), - is_in_folder_(item->IsInFolder()), + is_in_folder_(is_in_folder), item_weak_(item), delegate_(delegate), apps_grid_view_(apps_grid_view), @@ -126,6 +144,17 @@ icon_->set_can_process_events_within_subtree(false); icon_->SetVerticalAlignment(views::ImageView::LEADING); + if (is_new_style_launcher_enabled_ && !is_in_folder_ && !is_folder_) { + // To display shadow for icon while not affecting the icon's bounds, icon + // shadow is behind the icon. + icon_shadow_ = new views::ImageView; + icon_shadow_->SetPaintToLayer(); + icon_shadow_->layer()->SetFillsBoundsOpaquely(false); + icon_shadow_->set_can_process_events_within_subtree(false); + icon_shadow_->SetVerticalAlignment(views::ImageView::LEADING); + AddChildView(icon_shadow_); + } + title_->SetBackgroundColor(SK_ColorTRANSPARENT); title_->SetAutoColorReadabilityEnabled(false); title_->SetHandlesTooltips(false); @@ -136,6 +165,11 @@ title_->SetEnabledColor(apps_grid_view_->is_in_folder() ? kFolderGridTitleColor : AppListConfig::instance().grid_title_color()); + if (is_new_style_launcher_enabled_ && !is_in_folder_) { + title_->SetShadows( + gfx::ShadowValues(1, gfx::ShadowValue(gfx::Vector2d(), kTitleShadowBlur, + kTitleShadowColor))); + } SetTitleSubpixelAA(); @@ -167,6 +201,8 @@ // Clear icon and bail out if item icon is empty. if (icon.isNull()) { icon_->SetImage(nullptr); + if (icon_shadow_) + icon_shadow_->SetImage(nullptr); return; } @@ -178,6 +214,19 @@ shadow_animator_->SetOriginalImage(resized); else icon_->SetImage(resized); + + if (icon_shadow_) { + // Create a shadow for the shown icon. + gfx::ImageSkia shadowed = + gfx::ImageSkiaOperations::CreateImageWithDropShadow( + GetIconImage(), + gfx::ShadowValues(1, + gfx::ShadowValue(gfx::Vector2d(), kIconShadowBlur, + kIconShadowColor))); + icon_shadow_->SetImage(shadowed); + } + + Layout(); } void AppListItemView::SetUIState(UIState ui_state) { @@ -433,7 +482,7 @@ cc::PaintFlags flags; flags.setStyle(cc::PaintFlags::kFill_Style); flags.setAntiAlias(true); - flags.setColor(FolderImage::kFolderBubbleColor); + flags.setColor(AppListConfig::instance().folder_bubble_color()); canvas->DrawCircle(center, preview_circle_radius, flags); } @@ -466,6 +515,11 @@ const gfx::Rect icon_bounds = GetIconBoundsForTargetViewBounds(rect, icon_->GetImage().size()); icon_->SetBoundsRect(icon_bounds); + if (icon_shadow_) { + const gfx::Rect icon_shadow_bounds = + GetIconBoundsForTargetViewBounds(rect, icon_shadow_->GetImage().size()); + icon_shadow_->SetBoundsRect(icon_shadow_bounds); + } if (is_new_style_launcher_enabled_ && is_folder_) { // Add a folder icon mask to clip the folder icon. folder_icon_mask_ = views::Painter::CreatePaintedLayer( @@ -688,6 +742,8 @@ void AppListItemView::SetIconVisible(bool visible) { icon_->SetVisible(visible); + if (icon_shadow_) + icon_shadow_->SetVisible(visible); } void AppListItemView::SetDragUIState() { @@ -707,10 +763,7 @@ const gfx::Rect& target_bounds, const gfx::Size& title_size) { gfx::Rect rect(target_bounds); - rect.set_y(rect.bottom() - - AppListConfig::instance().grid_title_bottom_padding() - - title_size.height()); - rect.set_height(title_size.height()); + rect.Inset(0, AppListConfig::instance().grid_title_top_padding(), 0, 0); rect.ClampToCenteredSize(title_size); return rect; }
diff --git a/ash/app_list/views/app_list_item_view.h b/ash/app_list/views/app_list_item_view.h index f6aadc18c..cf2116a 100644 --- a/ash/app_list/views/app_list_item_view.h +++ b/ash/app_list/views/app_list_item_view.h
@@ -47,6 +47,10 @@ AppListItemView(AppsGridView* apps_grid_view, AppListItem* item, AppListViewDelegate* delegate); + AppListItemView(AppsGridView* apps_grid_view, + AppListItem* item, + AppListViewDelegate* delegate, + bool is_in_folder); ~AppListItemView() override; // Set the icon of this image, adding a drop shadow if |has_shadow|. @@ -213,11 +217,12 @@ AppListItem* item_weak_; // Owned by AppListModel. Can be NULL. - AppListViewDelegate* delegate_; // Unowned. - AppsGridView* apps_grid_view_; // Parent view, owns this. - views::ImageView* icon_; // Strongly typed child view. - views::Label* title_; // Strongly typed child view. - views::ProgressBar* progress_bar_; // Strongly typed child view. + AppListViewDelegate* delegate_; // Unowned. + AppsGridView* apps_grid_view_; // Parent view, owns this. + views::ImageView* icon_; // Strongly typed child view. + views::Label* title_; // Strongly typed child view. + views::ProgressBar* progress_bar_; // Strongly typed child view. + views::ImageView* icon_shadow_ = nullptr; // Strongly typed child view. std::unique_ptr<AppListMenuModelAdapter> context_menu_;
diff --git a/ash/app_list/views/app_list_view.cc b/ash/app_list/views/app_list_view.cc index f59c912..935a4c2 100644 --- a/ash/app_list/views/app_list_view.cc +++ b/ash/app_list/views/app_list_view.cc
@@ -93,7 +93,7 @@ constexpr float kAppListAnimationDurationFromFullscreenMs = 250; // The app list opacity when the tablet mode is enabled. -constexpr float kAppListOpacityInTabletMode = 0.1; +constexpr float kAppListOpacityInTabletMode = 0.2; // The background corner radius in peeking and fullscreen state. constexpr int kAppListPeekingBackgroundRadius = 28;
diff --git a/ash/app_list/views/apps_grid_view.cc b/ash/app_list/views/apps_grid_view.cc index 95a485e..651b3ec 100644 --- a/ash/app_list/views/apps_grid_view.cc +++ b/ash/app_list/views/apps_grid_view.cc
@@ -720,9 +720,10 @@ // Create a new AppListItemView to duplicate the original_drag_view in the // folder's grid view. - AppListItemView* view = new AppListItemView( - this, original_drag_view->item(), - contents_view_->GetAppListMainView()->view_delegate()); + AppListItemView* view = + new AppListItemView(this, original_drag_view->item(), + contents_view_->GetAppListMainView()->view_delegate(), + false /* is_in_folder */); AddChildView(view); drag_view_ = view; drag_view_->SetPaintToLayer();
diff --git a/ash/app_list/views/suggestion_chip_view.cc b/ash/app_list/views/suggestion_chip_view.cc index bd23983..7ec2ecd 100644 --- a/ash/app_list/views/suggestion_chip_view.cc +++ b/ash/app_list/views/suggestion_chip_view.cc
@@ -37,6 +37,7 @@ constexpr SkColor kAppListTextColor = gfx::kGoogleGrey100; constexpr SkColor kAppListRippleColor = SkColorSetA(gfx::kGoogleGrey100, 0x0F); constexpr SkColor kAppListFocusColor = SkColorSetA(gfx::kGoogleGrey100, 0x14); +constexpr int kAppListMaxTextWidth = 192; // Shared style: constexpr int kIconMarginDip = 8; @@ -119,7 +120,7 @@ assistant_style_ ? ash::assistant::ui::GetDefaultFontList().DeriveWithSizeDelta(2) : AppListConfig::instance().app_title_font()); - text_view_->SetText(params.text); + SetText(params.text); AddChildView(text_view_); } @@ -199,6 +200,11 @@ void SuggestionChipView::SetText(const base::string16& text) { text_view_->SetText(text); + if (!assistant_style_) { + gfx::Size size = text_view_->GetPreferredSize(); + size.set_width(std::min(kAppListMaxTextWidth, size.width())); + text_view_->SetPreferredSize(size); + } } const base::string16& SuggestionChipView::GetText() const {
diff --git a/ash/ash_service_unittest.cc b/ash/ash_service_unittest.cc index 6aafc69..5962523 100644 --- a/ash/ash_service_unittest.cc +++ b/ash/ash_service_unittest.cc
@@ -26,6 +26,7 @@ #include "ui/aura/mus/window_tree_host_mus_init_params.h" #include "ui/aura/test/env_test_helper.h" #include "ui/aura/window.h" +#include "ui/base/ui_base_features.h" #include "ui/display/display.h" #include "ui/display/display_list.h" #include "ui/display/screen_base.h" @@ -93,6 +94,11 @@ } TEST_F(AshServiceTest, OpenWindow) { + // This test launches ash in a separate service. That doesn't make sense with + // SingleProcessMash. + if (features::IsSingleProcessMash()) + return; + display::ScreenBase screen; screen.display_list().AddDisplay( display::Display(1, gfx::Rect(0, 0, 200, 200)),
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd index a1fc57a..ab1732e 100644 --- a/ash/ash_strings.grd +++ b/ash/ash_strings.grd
@@ -1709,6 +1709,18 @@ <message name="IDS_ASH_ASSISTANT_NOTIFICATION_DISPLAY_SOURCE" desc="The name for the source of the assistant notification."> Assistant </message> + <message name="IDS_ASH_SETTINGS_LOCK_SCREEN_NOTIFICATION_TITLE" desc="The title of options to change the behavior of notifications on the lock screen."> + On the lock screen + </message> + <message name="IDS_ASH_SETTINGS_LOCK_SCREEN_NOTIFICATION_SHOW" desc="One of options of the lock screen notification mode to show all the notifications and its contents on the lock screen."> + Show all notification content + </message> + <message name="IDS_ASH_SETTINGS_LOCK_SCREEN_NOTIFICATION_HIDE" desc="One of options of the lock screen notification mode to hide all the notifications on the lock screen."> + Don't show notifications at all + </message> + <message name="IDS_ASH_SETTINGS_LOCK_SCREEN_NOTIFICATION_HIDE_SENSITIVE" desc="One of options of the lock screen notification mode to hide sensitive contents and show the others on the lock screen."> + Hide sensitive content + </message> <message name="IDS_ASH_ASSISTANT_OPT_IN_UNLOCK_MORE_FEATURES" desc="Message shown in Assistant UI when the user is opted out to promote an opted in experience."> Unlock more Assistant features. </message>
diff --git a/ash/assistant/assistant_screen_context_controller.cc b/ash/assistant/assistant_screen_context_controller.cc index fc253862..2ebdaf7 100644 --- a/ash/assistant/assistant_screen_context_controller.cc +++ b/ash/assistant/assistant_screen_context_controller.cc
@@ -112,7 +112,6 @@ AssistantScreenContextController::AssistantScreenContextController( AssistantController* assistant_controller) : assistant_controller_(assistant_controller), - assistant_screen_context_subscriber_binding_(this), screen_context_request_factory_(this) { assistant_controller_->AddObserver(this); Shell::Get()->highlighter_controller()->AddObserver(this); @@ -126,11 +125,6 @@ void AssistantScreenContextController::SetAssistant( chromeos::assistant::mojom::Assistant* assistant) { assistant_ = assistant; - - // Subscribe to Assistant screen context events. - chromeos::assistant::mojom::AssistantScreenContextSubscriberPtr ptr; - assistant_screen_context_subscriber_binding_.Bind(mojo::MakeRequest(&ptr)); - assistant_->AddAssistantScreenContextSubscriber(std::move(ptr)); } void AssistantScreenContextController::AddModelObserver( @@ -171,14 +165,15 @@ } void AssistantScreenContextController::RequestScreenContext( - const gfx::Rect& rect) { + const gfx::Rect& rect, + bool from_user) { // Abort any request in progress and update request state. screen_context_request_factory_.InvalidateWeakPtrs(); assistant_screen_context_model_.SetRequestState( ScreenContextRequestState::kInProgress); assistant_->RequestScreenContext( - rect, + rect, from_user, base::BindOnce( &AssistantScreenContextController::OnScreenContextRequestFinished, screen_context_request_factory_.GetWeakPtr())); @@ -214,13 +209,13 @@ return; // Request screen context for the entire screen. - RequestScreenContext(gfx::Rect()); + RequestScreenContext(gfx::Rect(), /*from_user=*/false); } void AssistantScreenContextController::OnHighlighterSelectionRecognized( const gfx::Rect& rect) { // Request screen context for the selected region. - RequestScreenContext(rect); + RequestScreenContext(rect, /*from_user=*/true); } void AssistantScreenContextController::OnScreenContextRequestFinished() { @@ -228,14 +223,6 @@ ScreenContextRequestState::kIdle); } -void AssistantScreenContextController::OnContextualHtmlResponse( - const std::string& html) { - // TODO(dmblack): Cache |html| in the |assistant_screen_context_model_| and - // notify a pool of observers. This HTML string is from a trusted source and - // will be rendered in a WebContents as is. - NOTIMPLEMENTED(); -} - std::unique_ptr<ui::LayerTreeOwner> AssistantScreenContextController::CreateLayerForAssistantSnapshotForTest() { aura::Window* root_window = Shell::GetPrimaryRootWindow();
diff --git a/ash/assistant/assistant_screen_context_controller.h b/ash/assistant/assistant_screen_context_controller.h index 24aed7f8..41c540c 100644 --- a/ash/assistant/assistant_screen_context_controller.h +++ b/ash/assistant/assistant_screen_context_controller.h
@@ -14,9 +14,6 @@ #include "ash/highlighter/highlighter_controller.h" #include "ash/public/interfaces/assistant_controller.mojom.h" #include "base/macros.h" -#include "base/observer_list.h" -#include "chromeos/services/assistant/public/mojom/assistant.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" #include "ui/gfx/geometry/rect.h" namespace ui { @@ -29,8 +26,7 @@ class AssistantScreenContextModelObserver; class ASH_EXPORT AssistantScreenContextController - : public chromeos::assistant::mojom::AssistantScreenContextSubscriber, - public AssistantControllerObserver, + : public AssistantControllerObserver, public AssistantUiModelObserver, public HighlighterController::Observer { public: @@ -70,19 +66,13 @@ // Invoked on screen context request finished event. void OnScreenContextRequestFinished(); - // chromeos::assistant::mojom::AssistantScreenContextSubscriber: - void OnContextualHtmlResponse(const std::string& html) override; - std::unique_ptr<ui::LayerTreeOwner> CreateLayerForAssistantSnapshotForTest(); private: - void RequestScreenContext(const gfx::Rect& rect); + void RequestScreenContext(const gfx::Rect& rect, bool from_user); AssistantController* const assistant_controller_; // Owned by Shell. - mojo::Binding<chromeos::assistant::mojom::AssistantScreenContextSubscriber> - assistant_screen_context_subscriber_binding_; - // Owned by AssistantController. chromeos::assistant::mojom::Assistant* assistant_ = nullptr;
diff --git a/ash/assistant/assistant_ui_controller.cc b/ash/assistant/assistant_ui_controller.cc index 0f9abadf..ddfa45f59 100644 --- a/ash/assistant/assistant_ui_controller.cc +++ b/ash/assistant/assistant_ui_controller.cc
@@ -283,4 +283,8 @@ : AssistantUiMode::kMainUi); } +AssistantContainerView* AssistantUiController::GetViewForTest() { + return container_view_; +} + } // namespace ash
diff --git a/ash/assistant/assistant_ui_controller.h b/ash/assistant/assistant_ui_controller.h index 246efaf3..521261d7 100644 --- a/ash/assistant/assistant_ui_controller.h +++ b/ash/assistant/assistant_ui_controller.h
@@ -100,6 +100,8 @@ void HideUi(AssistantSource source); void ToggleUi(AssistantSource source); + AssistantContainerView* GetViewForTest(); + private: // Updates UI mode to |ui_mode| if specified. Otherwise UI mode is updated on // the basis of interaction/widget visibility state.
diff --git a/ash/assistant/ui/assistant_container_view.cc b/ash/assistant/ui/assistant_container_view.cc index f0efe38..0741339 100644 --- a/ash/assistant/ui/assistant_container_view.cc +++ b/ash/assistant/ui/assistant_container_view.cc
@@ -12,6 +12,7 @@ #include "ash/assistant/ui/assistant_main_view.h" #include "ash/assistant/ui/assistant_mini_view.h" #include "ash/assistant/ui/assistant_web_view.h" +#include "ash/shell.h" #include "base/strings/utf_string_conversions.h" #include "ui/display/display.h" #include "ui/display/screen.h" @@ -149,6 +150,7 @@ void AssistantContainerView::OnBeforeBubbleWidgetInit( views::Widget::InitParams* params, views::Widget* widget) const { + params->context = Shell::Get()->GetRootWindowForNewWindows(); params->corner_radius = kCornerRadiusDip; params->keep_on_top = true; params->shadow_type = views::Widget::InitParams::SHADOW_TYPE_DROP; @@ -186,18 +188,33 @@ } void AssistantContainerView::RequestFocus() { - if (assistant_main_view_) - assistant_main_view_->RequestFocus(); + if (!GetWidget() || !GetWidget()->IsActive()) + return; + + switch (assistant_controller_->ui_controller()->model()->ui_mode()) { + case AssistantUiMode::kMiniUi: + if (assistant_mini_view_) + assistant_mini_view_->RequestFocus(); + break; + case AssistantUiMode::kMainUi: + if (assistant_main_view_) + assistant_main_view_->RequestFocus(); + break; + case AssistantUiMode::kWebUi: + if (assistant_web_view_) + assistant_web_view_->RequestFocus(); + break; + } } +// TODO(dmblack): Handle dynamic re-anchoring due to shelf repositioning, etc. void AssistantContainerView::SetAnchor() { - // TODO(dmblack): Handle multiple displays, dynamic shelf repositioning, and - // any other corner cases. - // Anchors to bottom center of primary display's work area. - display::Display primary_display = - display::Screen::GetScreen()->GetPrimaryDisplay(); + // Anchor to the display matching where new windows will be opened. + display::Display display = display::Screen::GetScreen()->GetDisplayMatching( + Shell::Get()->GetRootWindowForNewWindows()->GetBoundsInScreen()); - gfx::Rect work_area = primary_display.work_area(); + // Anchor to the bottom center of the work area. + gfx::Rect work_area = display.work_area(); gfx::Rect anchor = gfx::Rect(work_area.x(), work_area.bottom() - kMarginDip, work_area.width(), 0); @@ -215,8 +232,6 @@ break; case AssistantUiMode::kMainUi: assistant_main_view_->SetVisible(true); - if (GetWidget() && GetWidget()->IsActive()) - RequestFocus(); break; case AssistantUiMode::kWebUi: assistant_web_view_->SetVisible(true); @@ -224,6 +239,7 @@ } PreferredSizeChanged(); + RequestFocus(); } } // namespace ash
diff --git a/ash/assistant/ui/assistant_container_view_unittest.cc b/ash/assistant/ui/assistant_container_view_unittest.cc new file mode 100644 index 0000000..5d120bb --- /dev/null +++ b/ash/assistant/ui/assistant_container_view_unittest.cc
@@ -0,0 +1,118 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/assistant/ui/assistant_container_view.h" + +#include "ash/assistant/assistant_controller.h" +#include "ash/assistant/assistant_ui_controller.h" +#include "ash/shell.h" +#include "ash/test/ash_test_base.h" +#include "ash/voice_interaction/voice_interaction_controller.h" +#include "base/macros.h" +#include "base/test/scoped_feature_list.h" +#include "chromeos/chromeos_switches.h" +#include "chromeos/services/assistant/test_support/mock_assistant.h" +#include "ui/compositor/scoped_animation_duration_scale_mode.h" + +namespace ash { + +namespace { + +class AssistantContainerViewTest : public AshTestBase { + public: + AssistantContainerViewTest() = default; + ~AssistantContainerViewTest() override = default; + + void SetUp() override { + // Enable Assistant feature. + scoped_feature_list_.InitAndEnableFeature( + chromeos::switches::kAssistantFeature); + ASSERT_TRUE(chromeos::switches::IsAssistantEnabled()); + + AshTestBase::SetUp(); + + // Enable Assistant in settings. + Shell::Get()->voice_interaction_controller()->NotifySettingsEnabled(true); + + // Cache controller. + controller_ = Shell::Get()->assistant_controller(); + DCHECK(controller_); + + // Cache UI controller. + ui_controller_ = controller_->ui_controller(); + DCHECK(ui_controller_); + + SetUpMocks(); + + // After mocks are set up our Assistant service is ready for use. Indicate + // this by changing status from NOT_READY to STOPPED. + Shell::Get()->voice_interaction_controller()->NotifyStatusChanged( + mojom::VoiceInteractionState::STOPPED); + } + + AssistantUiController* ui_controller() { return ui_controller_; } + + private: + void SetUpMocks() { + // Mock the Assistant service. + assistant_ = std::make_unique<chromeos::assistant::MockAssistant>(); + assistant_binding_ = + std::make_unique<mojo::Binding<chromeos::assistant::mojom::Assistant>>( + assistant_.get()); + chromeos::assistant::mojom::AssistantPtr assistant; + assistant_binding_->Bind(mojo::MakeRequest(&assistant)); + controller_->SetAssistant(std::move(assistant)); + + // Mock any screen context requests by immediately invoking callback. + ON_CALL(*assistant_, + DoRequestScreenContext(testing::_, testing::_, testing::_)) + .WillByDefault(testing::Invoke( + [](const gfx::Rect& rect, bool from_user, + base::OnceClosure* callback) { std::move(*callback).Run(); })); + } + + base::test::ScopedFeatureList scoped_feature_list_; + + std::unique_ptr<chromeos::assistant::MockAssistant> assistant_; + + std::unique_ptr<mojo::Binding<chromeos::assistant::mojom::Assistant>> + assistant_binding_; + + AssistantController* controller_ = nullptr; + AssistantUiController* ui_controller_ = nullptr; + + DISALLOW_COPY_AND_ASSIGN(AssistantContainerViewTest); +}; + +} // namespace + +TEST_F(AssistantContainerViewTest, InitialAnchoring) { + // Guarantee short but non-zero duration for animations. + ui::ScopedAnimationDurationScaleMode scoped_animation_duration( + ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION); + + // Show Assistant UI and grab a reference to our view under test. + ui_controller()->ShowUi(AssistantSource::kUnspecified); + AssistantContainerView* view = ui_controller()->GetViewForTest(); + + // We expect the view to appear in the work area where new windows will open. + gfx::Rect expected_work_area = + display::Screen::GetScreen() + ->GetDisplayMatching( + Shell::Get()->GetRootWindowForNewWindows()->GetBoundsInScreen()) + .work_area(); + + // We expect a bottom margin. + constexpr int bottom_margin = 8; + + // We expect the view to be horizontally centered and bottom aligned. + gfx::Rect expected_bounds = gfx::Rect(expected_work_area); + expected_bounds.ClampToCenteredSize(view->size()); + expected_bounds.set_y(expected_work_area.bottom() - view->height() - + bottom_margin); + + ASSERT_EQ(expected_bounds, view->GetBoundsInScreen()); +} + +} // namespace ash
diff --git a/ash/assistant/ui/main_stage/assistant_footer_view.cc b/ash/assistant/ui/main_stage/assistant_footer_view.cc index 48cc602..deaa419 100644 --- a/ash/assistant/ui/main_stage/assistant_footer_view.cc +++ b/ash/assistant/ui/main_stage/assistant_footer_view.cc
@@ -4,12 +4,19 @@ #include "ash/assistant/ui/main_stage/assistant_footer_view.h" -#include <memory> - #include "ash/assistant/assistant_controller.h" #include "ash/assistant/assistant_setup_controller.h" +#include "ash/assistant/ui/assistant_ui_constants.h" #include "ash/assistant/ui/main_stage/assistant_opt_in_view.h" #include "ash/assistant/ui/main_stage/suggestion_container_view.h" +#include "ash/assistant/util/animation_util.h" +#include "ash/shell.h" +#include "ash/voice_interaction/voice_interaction_controller.h" +#include "base/bind.h" +#include "base/time/time.h" +#include "ui/compositor/callback_layer_animation_observer.h" +#include "ui/compositor/layer_animation_element.h" +#include "ui/compositor/layer_animator.h" #include "ui/views/layout/fill_layout.h" namespace ash { @@ -19,12 +26,33 @@ // Appearance. constexpr int kPreferredHeightDip = 48; +// Animation. +constexpr base::TimeDelta kAnimationFadeInDelay = + base::TimeDelta::FromMilliseconds(167); +constexpr base::TimeDelta kAnimationFadeInDuration = + base::TimeDelta::FromMilliseconds(167); +constexpr base::TimeDelta kAnimationFadeOutDuration = + base::TimeDelta::FromMilliseconds(167); + } // namespace AssistantFooterView::AssistantFooterView( AssistantController* assistant_controller) - : assistant_controller_(assistant_controller) { + : assistant_controller_(assistant_controller), + animation_observer_(std::make_unique<ui::CallbackLayerAnimationObserver>( + /*animation_started_callback=*/base::BindRepeating( + &AssistantFooterView::OnAnimationStarted, + base::Unretained(this)), + /*animation_ended_callback=*/base::BindRepeating( + &AssistantFooterView::OnAnimationEnded, + base::Unretained(this)))), + voice_interaction_observer_binding_(this) { InitLayout(); + + // Observe voice interaction for changes to consent state. + mojom::VoiceInteractionObserverPtr ptr; + voice_interaction_observer_binding_.Bind(mojo::MakeRequest(&ptr)); + Shell::Get()->voice_interaction_controller()->AddObserver(std::move(ptr)); } AssistantFooterView::~AssistantFooterView() = default; @@ -45,19 +73,99 @@ PreferredSizeChanged(); } -// TODO(dmblack): Handle opted out/in state. void AssistantFooterView::InitLayout() { SetLayoutManager(std::make_unique<views::FillLayout>()); + // Initial view state is based on user consent state. + const bool setup_completed = + Shell::Get()->voice_interaction_controller()->setup_completed(); + // Suggestion container. suggestion_container_ = new SuggestionContainerView(assistant_controller_); + suggestion_container_->set_can_process_events_within_subtree(setup_completed); + + // Suggestion container will be animated on its own layer. + suggestion_container_->SetPaintToLayer(); + suggestion_container_->layer()->SetFillsBoundsOpaquely(false); + suggestion_container_->layer()->SetOpacity(setup_completed ? 1.f : 0.f); + AddChildView(suggestion_container_); // Opt in view. opt_in_view_ = new AssistantOptInView(); - opt_in_view_->SetVisible(false); + opt_in_view_->set_can_process_events_within_subtree(!setup_completed); opt_in_view_->set_delegate(assistant_controller_->setup_controller()); + + // Opt in view will be animated on its own layer. + opt_in_view_->SetPaintToLayer(); + opt_in_view_->layer()->SetFillsBoundsOpaquely(false); + opt_in_view_->layer()->SetOpacity(setup_completed ? 0.f : 1.f); + AddChildView(opt_in_view_); } +void AssistantFooterView::OnVoiceInteractionSetupCompleted(bool completed) { + // When the consent state changes, we need to hide/show the appropriate views. + views::View* hide_view = + completed ? static_cast<views::View*>(opt_in_view_) + : static_cast<views::View*>(suggestion_container_); + + views::View* show_view = + completed ? static_cast<views::View*>(suggestion_container_) + : static_cast<views::View*>(opt_in_view_); + + // When the motion spec is disabled, we don't animate the transition. + if (!assistant::ui::kIsMotionSpecEnabled) { + OnAnimationStarted(*animation_observer_); + + hide_view->layer()->SetOpacity(0.f); + show_view->layer()->SetOpacity(1.f); + + OnAnimationEnded(*animation_observer_); + return; + } + + using namespace assistant::util; + + // Hide the view for the previous consent state by fading to 0% opacity. + hide_view->layer()->GetAnimator()->StartAnimation( + CreateLayerAnimationSequence( + CreateOpacityElement(0.f, kAnimationFadeOutDuration))); + + // Show the view for the next consent state by fading to 100% opacity with + // delay. + StartLayerAnimationSequence( + show_view->layer()->GetAnimator(), + CreateLayerAnimationSequence( + ui::LayerAnimationElement::CreatePauseElement( + ui::LayerAnimationElement::AnimatableProperty::OPACITY, + kAnimationFadeInDelay), + CreateOpacityElement(1.f, kAnimationFadeInDuration)), + // Observe the animation. + animation_observer_.get()); + + // Set the observer to active to receive animation callback events. + animation_observer_->SetActive(); +} + +void AssistantFooterView::OnAnimationStarted( + const ui::CallbackLayerAnimationObserver& observer) { + // Our views should not process events while animating. + suggestion_container_->set_can_process_events_within_subtree(false); + opt_in_view_->set_can_process_events_within_subtree(false); +} + +bool AssistantFooterView::OnAnimationEnded( + const ui::CallbackLayerAnimationObserver& observer) { + const bool setup_completed = + Shell::Get()->voice_interaction_controller()->setup_completed(); + + // Only the view relevant to our consent state should process events. + suggestion_container_->set_can_process_events_within_subtree(setup_completed); + opt_in_view_->set_can_process_events_within_subtree(!setup_completed); + + // Return false to prevent the observer from destroying itself. + return false; +} + } // namespace ash
diff --git a/ash/assistant/ui/main_stage/assistant_footer_view.h b/ash/assistant/ui/main_stage/assistant_footer_view.h index 48a21c0..b690784 100644 --- a/ash/assistant/ui/main_stage/assistant_footer_view.h +++ b/ash/assistant/ui/main_stage/assistant_footer_view.h
@@ -5,16 +5,25 @@ #ifndef ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_FOOTER_VIEW_H_ #define ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_FOOTER_VIEW_H_ +#include <memory> + +#include "ash/public/interfaces/voice_interaction_controller.mojom.h" #include "base/macros.h" +#include "mojo/public/cpp/bindings/binding_set.h" #include "ui/views/view.h" +namespace ui { +class CallbackLayerAnimationObserver; +} // namespace ui + namespace ash { class AssistantController; class AssistantOptInView; class SuggestionContainerView; -class AssistantFooterView : public views::View { +class AssistantFooterView : public views::View, + mojom::VoiceInteractionObserver { public: explicit AssistantFooterView(AssistantController* assistant_controller); ~AssistantFooterView() override; @@ -25,14 +34,32 @@ void ChildPreferredSizeChanged(views::View* child) override; void ChildVisibilityChanged(views::View* child) override; + // mojom::VoiceInteractionObserver: + void OnVoiceInteractionStatusChanged( + mojom::VoiceInteractionState state) override {} + void OnVoiceInteractionSettingsEnabled(bool enabled) override {} + void OnVoiceInteractionContextEnabled(bool enabled) override {} + void OnVoiceInteractionHotwordEnabled(bool enabled) override {} + void OnVoiceInteractionSetupCompleted(bool completed) override; + void OnAssistantFeatureAllowedChanged( + mojom::AssistantAllowedState state) override {} + private: void InitLayout(); + void OnAnimationStarted(const ui::CallbackLayerAnimationObserver& observer); + bool OnAnimationEnded(const ui::CallbackLayerAnimationObserver& observer); + AssistantController* const assistant_controller_; // Owned by Shell. SuggestionContainerView* suggestion_container_; // Owned by view hierarchy. AssistantOptInView* opt_in_view_; // Owned by view hierarchy. + std::unique_ptr<ui::CallbackLayerAnimationObserver> animation_observer_; + + mojo::Binding<mojom::VoiceInteractionObserver> + voice_interaction_observer_binding_; + DISALLOW_COPY_AND_ASSIGN(AssistantFooterView); };
diff --git a/ash/assistant/ui/main_stage/assistant_main_stage.cc b/ash/assistant/ui/main_stage/assistant_main_stage.cc index adaf2688..b840088 100644 --- a/ash/assistant/ui/main_stage/assistant_main_stage.cc +++ b/ash/assistant/ui/main_stage/assistant_main_stage.cc
@@ -67,6 +67,12 @@ constexpr base::TimeDelta kFooterAnimationFadeOutDuration = base::TimeDelta::FromMilliseconds(100); +// Footer entry animation. +constexpr base::TimeDelta kFooterEntryAnimationFadeInDelay = + base::TimeDelta::FromMilliseconds(283); +constexpr base::TimeDelta kFooterEntryAnimationFadeInDuration = + base::TimeDelta::FromMilliseconds(167); + // Greeting animation. constexpr base::TimeDelta kGreetingAnimationFadeInDelay = base::TimeDelta::FromMilliseconds(33); @@ -541,7 +547,7 @@ AssistantSource source) { if (visible) { // When Assistant UI is shown and the motion spec is enabled, we animate in - // the appearance of the greeting label. + // the appearance of the greeting label and footer. if (assistant::ui::kIsMotionSpecEnabled) { using namespace assistant::util; @@ -550,7 +556,7 @@ gfx::Transform transform; transform.Translate(0, kGreetingAnimationTranslationDip); - // Set up or pre-animation values. + // Set up our pre-animation values. greeting_label_->layer()->SetOpacity(0.f); greeting_label_->layer()->SetTransform(transform); @@ -566,6 +572,15 @@ ui::LayerAnimationElement::AnimatableProperty::OPACITY, kGreetingAnimationFadeInDelay), CreateOpacityElement(1.f, kGreetingAnimationFadeInDuration))}); + + // Animate the footer from 0% to 100% opacity with delay. + footer_->layer()->SetOpacity(0.f); + footer_->layer()->GetAnimator()->StartAnimation( + CreateLayerAnimationSequence( + ui::LayerAnimationElement::CreatePauseElement( + ui::LayerAnimationElement::AnimatableProperty::OPACITY, + kFooterEntryAnimationFadeInDelay), + CreateOpacityElement(1.f, kFooterEntryAnimationFadeInDuration))); } return; }
diff --git a/ash/assistant/ui/main_stage/assistant_opt_in_view.cc b/ash/assistant/ui/main_stage/assistant_opt_in_view.cc index ac4127d..549fa8d 100644 --- a/ash/assistant/ui/main_stage/assistant_opt_in_view.cc +++ b/ash/assistant/ui/main_stage/assistant_opt_in_view.cc
@@ -36,9 +36,11 @@ // AssistantOptInContainer ----------------------------------------------------- -class AssistantOptInContainer : public views::View { +class AssistantOptInContainer : public views::Button { public: - AssistantOptInContainer() = default; + explicit AssistantOptInContainer(views::ButtonListener* listener) + : views::Button(listener) {} + ~AssistantOptInContainer() override = default; // views::View: @@ -70,7 +72,7 @@ // AssistantOptInView ---------------------------------------------------------- -AssistantOptInView::AssistantOptInView() : views::Button(/*listener=*/this) { +AssistantOptInView::AssistantOptInView() { InitLayout(); } @@ -96,7 +98,8 @@ views::BoxLayout::MainAxisAlignment::MAIN_AXIS_ALIGNMENT_CENTER); // Container. - AssistantOptInContainer* container = new AssistantOptInContainer(); + AssistantOptInContainer* container = + new AssistantOptInContainer(/*listener=*/this); layout_manager = container->SetLayoutManager(std::make_unique<views::BoxLayout>(
diff --git a/ash/assistant/ui/main_stage/assistant_opt_in_view.h b/ash/assistant/ui/main_stage/assistant_opt_in_view.h index 3d6a6be..431351a 100644 --- a/ash/assistant/ui/main_stage/assistant_opt_in_view.h +++ b/ash/assistant/ui/main_stage/assistant_opt_in_view.h
@@ -27,7 +27,7 @@ // AssistantOptInView ---------------------------------------------------------- -class AssistantOptInView : public views::Button, public views::ButtonListener { +class AssistantOptInView : public views::View, public views::ButtonListener { public: AssistantOptInView(); ~AssistantOptInView() override;
diff --git a/ash/assistant/ui/main_stage/assistant_progress_indicator.h b/ash/assistant/ui/main_stage/assistant_progress_indicator.h index c19abc8..a54e2e4 100644 --- a/ash/assistant/ui/main_stage/assistant_progress_indicator.h +++ b/ash/assistant/ui/main_stage/assistant_progress_indicator.h
@@ -28,7 +28,7 @@ // Caches the last call to VisibilityChanged. Because we trigger this event // artificially, we want to make sure that we don't over trigger. - bool is_visible_; + bool is_visible_ = false; DISALLOW_COPY_AND_ASSIGN(AssistantProgressIndicator); };
diff --git a/ash/components/fast_ink/fast_ink_view.cc b/ash/components/fast_ink/fast_ink_view.cc index ecf29c6b..085756a 100644 --- a/ash/components/fast_ink/fast_ink_view.cc +++ b/ash/components/fast_ink/fast_ink_view.cc
@@ -313,7 +313,8 @@ // but with potential tearing. Note that we have to draw into a temporary // surface and copy it into GPU memory buffer to avoid flicker. gpu_memory_buffer_ = - aura::Env::GetInstance() + widget_->GetNativeWindow() + ->env() ->context_factory() ->GetGpuMemoryBufferManager() ->CreateGpuMemoryBuffer(buffer_size_, @@ -395,7 +396,8 @@ // new instance to be created in lost context situations is acceptable and // keeps the code simple. if (!resource->context_provider) { - resource->context_provider = aura::Env::GetInstance() + resource->context_provider = widget_->GetNativeWindow() + ->env() ->context_factory() ->SharedMainThreadContextProvider(); if (!resource->context_provider) {
diff --git a/ash/components/shortcut_viewer/DEPS b/ash/components/shortcut_viewer/DEPS index a82dc79..1213962 100644 --- a/ash/components/shortcut_viewer/DEPS +++ b/ash/components/shortcut_viewer/DEPS
@@ -9,6 +9,7 @@ specific_include_rules = { "keyboard_shortcut_view_unittest\.cc": [ + "+ash/shell.h", "+ash/test/ash_test_base.h", "+services/ui/public/cpp/input_devices", ],
diff --git a/ash/components/shortcut_viewer/shortcut_viewer_application.cc b/ash/components/shortcut_viewer/shortcut_viewer_application.cc index 4d251c4..17c6cb4 100644 --- a/ash/components/shortcut_viewer/shortcut_viewer_application.cc +++ b/ash/components/shortcut_viewer/shortcut_viewer_application.cc
@@ -68,7 +68,7 @@ void ShortcutViewerApplication::OnDeviceListsComplete() { ui::InputDeviceManager::GetInstance()->RemoveObserver(this); - KeyboardShortcutView::Toggle(user_gesture_time_); + KeyboardShortcutView::Toggle(user_gesture_time_, nullptr); } void ShortcutViewerApplication::Toggle(base::TimeTicks user_gesture_time) { @@ -77,11 +77,10 @@ // This app needs InputDeviceManager information that loads asynchronously via // InputDeviceClient. If the device list is incomplete, wait for it to load. DCHECK(ui::InputDeviceManager::HasInstance()); - if (ui::InputDeviceManager::GetInstance()->AreDeviceListsComplete()) { - KeyboardShortcutView::Toggle(user_gesture_time_); - } else { + if (ui::InputDeviceManager::GetInstance()->AreDeviceListsComplete()) + KeyboardShortcutView::Toggle(user_gesture_time_, nullptr); + else ui::InputDeviceManager::GetInstance()->AddObserver(this); - } } void ShortcutViewerApplication::AddBinding(
diff --git a/ash/components/shortcut_viewer/views/keyboard_shortcut_view.cc b/ash/components/shortcut_viewer/views/keyboard_shortcut_view.cc index 55c5e0f0..dc93008 100644 --- a/ash/components/shortcut_viewer/views/keyboard_shortcut_view.cc +++ b/ash/components/shortcut_viewer/views/keyboard_shortcut_view.cc
@@ -102,7 +102,8 @@ } // static -views::Widget* KeyboardShortcutView::Toggle(base::TimeTicks start_time) { +views::Widget* KeyboardShortcutView::Toggle(base::TimeTicks start_time, + aura::Window* context) { if (g_ksv_view) { if (g_ksv_view->GetWidget()->IsActive()) g_ksv_view->GetWidget()->Close(); @@ -119,6 +120,7 @@ // Intentionally don't set bounds. The window will be sized and centered // based on CalculatePreferredSize(). views::Widget* widget = new views::Widget; + params.context = context; widget->Init(params); // Set frame view Active and Inactive colors, both are SK_ColorWHITE.
diff --git a/ash/components/shortcut_viewer/views/keyboard_shortcut_view.h b/ash/components/shortcut_viewer/views/keyboard_shortcut_view.h index dfc37b7..14b72e7a9 100644 --- a/ash/components/shortcut_viewer/views/keyboard_shortcut_view.h +++ b/ash/components/shortcut_viewer/views/keyboard_shortcut_view.h
@@ -15,6 +15,10 @@ #include "ui/chromeos/search_box/search_box_view_delegate.h" #include "ui/views/widget/widget_delegate.h" +namespace aura { +class Window; +} + namespace base { class TimeTicks; } @@ -42,7 +46,12 @@ // 3. Close the window if it is open and active. // |start_time| is the time of the user gesture that caused the window to // show. Used for metrics. - static views::Widget* Toggle(base::TimeTicks start_time); + // |context| is used to determine which display to place the Window on. + // |context| is only necessary when called from within Chrome. + // TODO: remove |context|, it's not needed once KeyboardShortcutView is only + // launched as an app. + static views::Widget* Toggle(base::TimeTicks start_time, + aura::Window* context); // views::View: const char* GetClassName() const override;
diff --git a/ash/components/shortcut_viewer/views/keyboard_shortcut_view_unittest.cc b/ash/components/shortcut_viewer/views/keyboard_shortcut_view_unittest.cc index 1ee42d9..9ed12969 100644 --- a/ash/components/shortcut_viewer/views/keyboard_shortcut_view_unittest.cc +++ b/ash/components/shortcut_viewer/views/keyboard_shortcut_view_unittest.cc
@@ -27,6 +27,10 @@ KeyboardShortcutViewTest() = default; ~KeyboardShortcutViewTest() override = default; + views::Widget* Toggle() { + return KeyboardShortcutView::Toggle(base::TimeTicks(), CurrentContext()); + } + // ash::AshTestBase: void SetUp() override { ash::AshTestBase::SetUp(); @@ -78,7 +82,7 @@ // Shows and closes the widget for KeyboardShortcutViewer. TEST_F(KeyboardShortcutViewTest, ShowAndClose) { // Show the widget. - views::Widget* widget = KeyboardShortcutView::Toggle(base::TimeTicks()); + views::Widget* widget = Toggle(); EXPECT_TRUE(widget); // Cleaning up. @@ -86,7 +90,7 @@ } TEST_F(KeyboardShortcutViewTest, StartupTimeHistogram) { - views::Widget* widget = KeyboardShortcutView::Toggle(base::TimeTicks()); + views::Widget* widget = Toggle(); base::RunLoop runloop; widget->GetCompositor()->RequestPresentationTimeForNextFrame(base::BindOnce( [](base::RepeatingClosure closure, @@ -100,7 +104,7 @@ // KeyboardShortcutViewer window should be centered in screen. TEST_F(KeyboardShortcutViewTest, CenterWindowInScreen) { // Show the widget. - views::Widget* widget = KeyboardShortcutView::Toggle(base::TimeTicks()); + views::Widget* widget = Toggle(); EXPECT_TRUE(widget); gfx::Rect root_window_bounds = @@ -121,7 +125,7 @@ // Test that the number of side tabs equals to the number of categories. TEST_F(KeyboardShortcutViewTest, SideTabsCount) { // Show the widget. - views::Widget* widget = KeyboardShortcutView::Toggle(base::TimeTicks()); + views::Widget* widget = Toggle(); int category_number = 0; ShortcutCategory current_category = ShortcutCategory::kUnknown; @@ -142,7 +146,7 @@ // Test that the top line in two views should be center aligned. TEST_F(KeyboardShortcutViewTest, TopLineCenterAlignedInItemView) { // Show the widget. - views::Widget* widget = KeyboardShortcutView::Toggle(base::TimeTicks()); + views::Widget* widget = Toggle(); for (const auto& item_view : GetShortcutViews()) { // We only initialize the first visible category and other non-visible panes @@ -172,7 +176,7 @@ // Test that the focus is on search box when window inits and exits search mode. TEST_F(KeyboardShortcutViewTest, FocusOnSearchBox) { // Show the widget. - views::Widget* widget = KeyboardShortcutView::Toggle(base::TimeTicks()); + views::Widget* widget = Toggle(); // Case 1: when window creates. The focus should be on search box. EXPECT_TRUE(GetSearchBoxView()->search_box()->HasFocus()); @@ -209,7 +213,7 @@ // Test that the window can be closed by accelerator. TEST_F(KeyboardShortcutViewTest, CloseWindowByAccelerator) { // Show the widget. - views::Widget* widget = KeyboardShortcutView::Toggle(base::TimeTicks()); + views::Widget* widget = Toggle(); EXPECT_FALSE(widget->IsClosed()); ui::test::EventGenerator* event_generator = GetEventGenerator(); @@ -220,18 +224,18 @@ // Test that the window can be activated or closed by toggling. TEST_F(KeyboardShortcutViewTest, ToggleWindow) { // Show the widget. - views::Widget* widget = KeyboardShortcutView::Toggle(base::TimeTicks()); + views::Widget* widget = Toggle(); EXPECT_FALSE(widget->IsClosed()); // Call |Toggle()| to activate the inactive widget. EXPECT_TRUE(widget->IsActive()); widget->Deactivate(); EXPECT_FALSE(widget->IsActive()); - KeyboardShortcutView::Toggle(base::TimeTicks()); + Toggle(); EXPECT_TRUE(widget->IsActive()); // Call |Toggle()| to close the active widget. - KeyboardShortcutView::Toggle(base::TimeTicks()); + Toggle(); EXPECT_TRUE(widget->IsClosed()); }
diff --git a/ash/components/strings/ash_components_strings_mr.xtb b/ash/components/strings/ash_components_strings_mr.xtb index 59ef7c48..be828e1 100644 --- a/ash/components/strings/ash_components_strings_mr.xtb +++ b/ash/components/strings/ash_components_strings_mr.xtb
@@ -5,7 +5,7 @@ <translation id="1122869341872663659"><ph name="QUERY" /> साठी <ph name="N" /> शोध परिणाम दाखवत आहे</translation> <translation id="1195667586424773550">लिंक ड्रॅग करून टॅबच्या अॅड्रेस बारवर आणा</translation> <translation id="1204450209689312104">एक नवीन विंडो गुप्त मोडमध्ये उघडा</translation> -<translation id="1251638888133819822">पूर्णस्क्रीन भिंग सुरू किंवा बंद करा</translation> +<translation id="1251638888133819822">क्षेत्रे भिंग सुरू किंवा बंद करा</translation> <translation id="1290373024480130896"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="MODIFIER3" /><ph name="SEPARATOR3" /><ph name="KEY" /></translation> <translation id="1293699935367580298">Esc</translation> <translation id="1299858300159559687">तुमचे हे पेज प्रिंट करा</translation> @@ -67,7 +67,7 @@ <translation id="344577624355799426"><ph name="ALT" /> किंवा <ph name="SEARCH" /><ph name="SEPARATOR" /><ph name="DOWN" /></translation> <translation id="353037708190149633">एका नवीन फोल्डरमध्ये बुकमार्क म्हणून तुमच्या या विंडोमधील उघडलेली सर्व पेज सेव्ह करा</translation> <translation id="355103131818127604">बॅकग्राउंडला एका नवीन टॅबमध्ये लिंक उघडा</translation> -<translation id="3622741593887335780">झूम इन करा (डॉक केलेले असताना किंवा पूर्णस्क्रीन मॅग्निफायर सुरू केलेले असताना)</translation> +<translation id="3622741593887335780">झूम इन करा (डॉक केलेले असताना किंवा क्षेत्रे मॅग्निफायर सुरू केलेले असताना)</translation> <translation id="3649256019230929621">विंडो लहान करा</translation> <translation id="3655154169297074232">टॅब आणि विंडो</translation> <translation id="3668361878347172356">तुमची याआधीची क्रिया पुन्हा करा</translation> @@ -136,7 +136,7 @@ <translation id="6425378783626925378">तुमच्या शेल्फवरील १-८ आयकनवर क्लिक करा</translation> <translation id="6435207348963613811">तुमच्या शेल्फवरील आधीचे आयटम हायलाइट करा</translation> <translation id="6445033640292336367">टॅबला त्याच्या मूळ स्थितीत परत न्या</translation> -<translation id="6474744297082284761">झूम अाउट करा (डॉक केलेले असताना किंवा पूर्णस्क्रीन मॅग्निफायर सुरू केलेले असताना)</translation> +<translation id="6474744297082284761">झूम अाउट करा (डॉक केलेले असताना किंवा क्षेत्रे मॅग्निफायर सुरू केलेले असताना)</translation> <translation id="649811797655257835">फाइल निवडा, त्यानंतर <ph name="SPACE" /> दाबा</translation> <translation id="6556040137485212400">सर्वाधिक काळासाठी न वापरली गेलेली विंडो उघडा</translation> <translation id="666343722268997814">हायलाइट केलेल्या आयटमसाठी राइट क्लिक मेनू उघडा</translation> @@ -182,7 +182,7 @@ <translation id="8644639153978066712">फायली अॅप मध्ये लपलेल्या फायली प्रदर्शित करा</translation> <translation id="8717459106217102612">आधीचा शब्द किंवा अक्षर निवडा</translation> <translation id="8727232706774971183">तुमच्या सूचना पाहा</translation> -<translation id="8855885154700222542">पूर्णस्क्रीन की</translation> +<translation id="8855885154700222542">क्षेत्रे की</translation> <translation id="88986195241502842">पृष्ठ खाली</translation> <translation id="8924883688469390268">मागील वापरकर्त्यावर स्विच करा</translation> <translation id="8977648847395357314">अॅड्रेस बारमध्ये आशय निवडा</translation>
diff --git a/ash/content/display/screen_orientation_controller_chromeos_unittest.cc b/ash/content/display/screen_orientation_controller_chromeos_unittest.cc index cb9daef..074eee52 100644 --- a/ash/content/display/screen_orientation_controller_chromeos_unittest.cc +++ b/ash/content/display/screen_orientation_controller_chromeos_unittest.cc
@@ -186,6 +186,9 @@ base::CommandLine::ForCurrentProcess()->AppendSwitch( ::switches::kUseFirstDisplayAsInternal); AshTestBase::SetUp(); + // This test creates WebContents, which ash does not do in its window + // hierarchy. + SetRunningOutsideAsh(); } // Tests that a content::WebContents can lock rotation.
diff --git a/ash/display/cursor_window_controller.cc b/ash/display/cursor_window_controller.cc index fda1aae..5e4a199 100644 --- a/ash/display/cursor_window_controller.cc +++ b/ash/display/cursor_window_controller.cc
@@ -16,6 +16,7 @@ #include "ash/root_window_controller.h" #include "ash/session/session_controller.h" #include "ash/shell.h" +#include "ash/window_factory.h" #include "base/command_line.h" #include "base/metrics/histogram_macros.h" #include "components/prefs/pref_service.h" @@ -219,7 +220,7 @@ void CursorWindowController::UpdateLocation() { if (!cursor_window_) return; - gfx::Point point = aura::Env::GetInstance()->last_mouse_location(); + gfx::Point point = Shell::Get()->aura_env()->last_mouse_location(); point.Offset(-bounds_in_screen_.x(), -bounds_in_screen_.y()); point.Offset(-hot_point_.x(), -hot_point_.y()); gfx::Rect bounds = cursor_window_->bounds(); @@ -263,7 +264,7 @@ } else { // Reusing the window does not work when the display is disconnected. // Just creates a new one instead. crbug.com/384218. - cursor_window_.reset(new aura::Window(delegate_.get())); + cursor_window_ = window_factory::NewWindow(delegate_.get()); cursor_window_->SetTransparent(true); cursor_window_->Init(ui::LAYER_TEXTURED); cursor_window_->SetEventTargetingPolicy( @@ -371,7 +372,7 @@ void CursorWindowController::UpdateCursorView() { cursor_view_.reset(new cursor::CursorView( - container_, aura::Env::GetInstance()->last_mouse_location(), + container_, Shell::Get()->aura_env()->last_mouse_location(), is_cursor_motion_blur_enabled_)); UpdateCursorImage(); }
diff --git a/ash/display/display_manager_unittest.cc b/ash/display/display_manager_unittest.cc index 0fc1954..9659641 100644 --- a/ash/display/display_manager_unittest.cc +++ b/ash/display/display_manager_unittest.cc
@@ -2053,7 +2053,7 @@ // Make sure just rotating will not change native location. UpdateDisplay("300x200,200x150"); aura::Window::Windows root_windows = Shell::GetAllRootWindows(); - aura::Env* env = aura::Env::GetInstance(); + aura::Env* env = Shell::Get()->aura_env(); ui::test::EventGenerator generator1(root_windows[0]); ui::test::EventGenerator generator2(root_windows[1]); @@ -3589,7 +3589,7 @@ // Make sure just zooming will not change native location. UpdateDisplay("600x400*2,400x300"); aura::Window::Windows root_windows = Shell::GetAllRootWindows(); - aura::Env* env = aura::Env::GetInstance(); + aura::Env* env = Shell::Get()->aura_env(); ui::test::EventGenerator generator1(root_windows[0]); ui::test::EventGenerator generator2(root_windows[1]);
diff --git a/ash/display/display_util.cc b/ash/display/display_util.cc index 698663a..3e2d26c3 100644 --- a/ash/display/display_util.cc +++ b/ash/display/display_util.cc
@@ -133,7 +133,7 @@ Shell::GetPrimaryRootWindow()->GetHost()->ConvertScreenInPixelsToDIP( &new_point_in_screen); } - aura::Env::GetInstance()->SetLastMouseLocation(new_point_in_screen); + Shell::Get()->aura_env()->SetLastMouseLocation(new_point_in_screen); } }
diff --git a/ash/display/mirror_window_controller.cc b/ash/display/mirror_window_controller.cc index 5522c46..add0108 100644 --- a/ash/display/mirror_window_controller.cc +++ b/ash/display/mirror_window_controller.cc
@@ -16,6 +16,7 @@ #include "ash/public/cpp/config.h" #include "ash/root_window_settings.h" #include "ash/shell.h" +#include "ash/window_factory.h" #include "base/strings/stringprintf.h" #include "base/threading/thread_task_runner_handle.h" #include "ui/aura/client/capture_client.h" @@ -122,6 +123,10 @@ return display::kInvalidDisplayId; } +ui::ContextFactoryPrivate* GetContextFactoryPrivate() { + return Shell::Get()->aura_env()->context_factory_private(); +} + } // namespace struct MirrorWindowController::MirroringHostInfo { @@ -213,7 +218,7 @@ host->Show(); aura::Window* mirror_window = host_info->mirror_window = - new aura::Window(nullptr); + window_factory::NewWindow().release(); mirror_window->Init(ui::LAYER_SOLID_COLOR); host->window()->AddChild(mirror_window); host_info->ash_host->SetRootWindowTransformer(std::move(transformer)); @@ -223,15 +228,12 @@ DCHECK_NE(gfx::kNullAcceleratedWidget, host->GetAcceleratedWidget()); if (reflector_) { reflector_->AddMirroringLayer(mirror_window->layer()); - } else if (aura::Env::GetInstance()->context_factory_private()) { - reflector_ = - aura::Env::GetInstance() - ->context_factory_private() - ->CreateReflector( - Shell::GetRootWindowForDisplayId(reflecting_source_id_) - ->GetHost() - ->compositor(), - mirror_window->layer()); + } else if (GetContextFactoryPrivate()) { + reflector_ = GetContextFactoryPrivate()->CreateReflector( + Shell::GetRootWindowForDisplayId(reflecting_source_id_) + ->GetHost() + ->compositor(), + mirror_window->layer()); } } else { AshWindowTreeHost* ash_host = @@ -261,8 +263,7 @@ if (mirroring_host_info_map_.empty() && reflector_) { // Close the mirror window if all displays are disconnected. - aura::Env::GetInstance()->context_factory_private()->RemoveReflector( - reflector_.get()); + GetContextFactoryPrivate()->RemoveReflector(reflector_.get()); reflector_.reset(); } } @@ -301,8 +302,7 @@ void MirrorWindowController::Close(bool delay_host_deletion) { if (reflector_) { - aura::Env::GetInstance()->context_factory_private()->RemoveReflector( - reflector_.get()); + GetContextFactoryPrivate()->RemoveReflector(reflector_.get()); reflector_.reset(); }
diff --git a/ash/display/mouse_cursor_event_filter_unittest.cc b/ash/display/mouse_cursor_event_filter_unittest.cc index a3165a2a..ef5341a 100644 --- a/ash/display/mouse_cursor_event_filter_unittest.cc +++ b/ash/display/mouse_cursor_event_filter_unittest.cc
@@ -50,12 +50,12 @@ // Touch the right edge of the primary root window. Pointer should warp. EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(499, 11))); EXPECT_EQ("501,11", // by 2px. - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); // Touch the left edge of the secondary root window. Pointer should warp. EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(500, 11))); EXPECT_EQ("498,11", // by 2px. - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); // Touch the left edge of the primary root window. EXPECT_FALSE(TestIfMouseWarpsAt(gfx::Point(0, 11))); @@ -86,13 +86,13 @@ // because 1px left of (0, 500) is outside the primary root window. EXPECT_FALSE(TestIfMouseWarpsAt(gfx::Point(501, 500))); EXPECT_EQ("501,500", - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); // Touch the left edge of the secondary root window. Pointer should warp // because 1px left of (0, 480) is inside the primary root window. EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(500, 480))); EXPECT_EQ("498,480", // by 2px. - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); } // Verifies if the mouse pointer correctly moves between displays with @@ -107,18 +107,18 @@ .placement_list[0] .position); - aura::Env::GetInstance()->SetLastMouseLocation(gfx::Point(900, 123)); + Shell::Get()->aura_env()->SetLastMouseLocation(gfx::Point(900, 123)); EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(499, 123))); EXPECT_EQ("500,123", - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); // Touch the edge of 2nd display again and make sure it warps to // 1st dislay. EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(500, 123))); // TODO(oshima): Due to a bug in EventGenerator, the screen coordinates // is shrunk by dsf once. Fix this. EXPECT_EQ("498,61", - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); } // Verifies if MouseCursorEventFilter::set_mouse_warp_enabled() works as @@ -129,12 +129,12 @@ event_filter()->set_mouse_warp_enabled(false); EXPECT_FALSE(TestIfMouseWarpsAt(gfx::Point(499, 11))); EXPECT_EQ("499,11", - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); event_filter()->set_mouse_warp_enabled(true); EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(499, 11))); EXPECT_EQ("501,11", - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); } // Verifies cursor's device scale factor is updated when a cursor has moved
diff --git a/ash/display/root_window_transformers_unittest.cc b/ash/display/root_window_transformers_unittest.cc index 0b6ed8e..143e9fc 100644 --- a/ash/display/root_window_transformers_unittest.cc +++ b/ash/display/root_window_transformers_unittest.cc
@@ -188,7 +188,7 @@ generator1.MoveMouseToInHost(40, 80); EXPECT_EQ("50,90", event_handler.GetLocationAndReset()); EXPECT_EQ("50,90", - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); EXPECT_EQ(display::Display::ROTATE_0, GetActiveDisplayRotation(display1.id())); EXPECT_EQ(display::Display::ROTATE_0, GetActiveDisplayRotation(display2_id)); @@ -209,7 +209,7 @@ generator1.MoveMouseToInHost(39, 120); EXPECT_EQ("110,70", event_handler.GetLocationAndReset()); EXPECT_EQ("110,70", - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); EXPECT_EQ(display::Display::ROTATE_90, GetActiveDisplayRotation(display1.id())); EXPECT_EQ(display::Display::ROTATE_0, GetActiveDisplayRotation(display2_id)); @@ -235,7 +235,7 @@ generator2.MoveMouseToInHost(172, 219); EXPECT_EQ("95,80", event_handler.GetLocationAndReset()); EXPECT_EQ("145,200", - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); EXPECT_EQ(display::Display::ROTATE_90, GetActiveDisplayRotation(display1.id())); EXPECT_EQ(display::Display::ROTATE_270,
diff --git a/ash/display/screen_ash.cc b/ash/display/screen_ash.cc index cf61b7a..0637ebf 100644 --- a/ash/display/screen_ash.cc +++ b/ash/display/screen_ash.cc
@@ -10,14 +10,15 @@ #include "ash/root_window_settings.h" #include "ash/shelf/shelf_widget.h" #include "ash/shell.h" -#include "ash/shell_state.h" #include "ash/wm/root_window_finder.h" #include "base/command_line.h" #include "base/logging.h" #include "ui/aura/client/screen_position_client.h" #include "ui/aura/env.h" +#include "ui/aura/mus/window_tree_host_mus.h" #include "ui/aura/window.h" #include "ui/aura/window_event_dispatcher.h" +#include "ui/base/ui_base_features.h" #include "ui/display/display.h" #include "ui/display/display_finder.h" #include "ui/display/manager/display_manager.h" @@ -39,7 +40,9 @@ public: explicit ScreenForShutdown(display::Screen* screen_ash) : display_list_(screen_ash->GetAllDisplays()), - primary_display_(screen_ash->GetPrimaryDisplay()) {} + primary_display_(screen_ash->GetPrimaryDisplay()) { + SetDisplayForNewWindows(primary_display_.id()); + } // display::Screen overrides: gfx::Point GetCursorScreenPoint() override { return gfx::Point(); } @@ -69,9 +72,6 @@ display::Display GetPrimaryDisplay() const override { return primary_display_; } - display::Display GetDisplayForNewWindows() const override { - return primary_display_; - } void AddObserver(display::DisplayObserver* observer) override { NOTREACHED() << "Observer should not be added during shutdown"; } @@ -91,7 +91,7 @@ ScreenAsh::~ScreenAsh() = default; gfx::Point ScreenAsh::GetCursorScreenPoint() { - return aura::Env::GetInstance()->last_mouse_location(); + return Shell::Get()->aura_env()->last_mouse_location(); } bool ScreenAsh::IsWindowUnderCursor(gfx::NativeWindow window) { @@ -123,6 +123,17 @@ gfx::NativeView window) const { if (!window) return GetPrimaryDisplay(); + + if (::features::IsSingleProcessMash()) { + // In IsSingleProcessMash() ScreenAsh is also called from non-ash code. + // Non-ash code creates aura Windows that are not parented to Ash's root + // Windows. Check for this first. + aura::WindowTreeHostMus* window_tree_host_mus = + aura::WindowTreeHostMus::ForWindow(window); + if (window_tree_host_mus) + return window_tree_host_mus->GetDisplay(); + } + const aura::Window* root_window = window->GetRootWindow(); if (!root_window) return GetPrimaryDisplay(); @@ -183,11 +194,6 @@ WindowTreeHostManager::GetPrimaryDisplayId()); } -display::Display ScreenAsh::GetDisplayForNewWindows() const { - return GetDisplayNearestWindow( - Shell::Get()->shell_state()->GetRootWindowForNewWindows()); -} - void ScreenAsh::AddObserver(display::DisplayObserver* observer) { GetDisplayManager()->AddObserver(observer); }
diff --git a/ash/display/screen_ash.h b/ash/display/screen_ash.h index 209fe4a..e0b4693 100644 --- a/ash/display/screen_ash.h +++ b/ash/display/screen_ash.h
@@ -42,7 +42,6 @@ display::Display GetDisplayMatching( const gfx::Rect& match_rect) const override; display::Display GetPrimaryDisplay() const override; - display::Display GetDisplayForNewWindows() const override; void AddObserver(display::DisplayObserver* observer) override; void RemoveObserver(display::DisplayObserver* observer) override;
diff --git a/ash/display/screen_position_controller_unittest.cc b/ash/display/screen_position_controller_unittest.cc index 5597fc4..5456f48e 100644 --- a/ash/display/screen_position_controller_unittest.cc +++ b/ash/display/screen_position_controller_unittest.cc
@@ -11,6 +11,7 @@ #include "ash/shell.h" #include "ash/shell_test_api.h" #include "ash/test/ash_test_base.h" +#include "ash/window_factory.h" #include "base/test/scoped_feature_list.h" #include "ui/aura/env.h" #include "ui/aura/test/test_window_delegate.h" @@ -39,7 +40,7 @@ void SetUp() override { AshTestBase::SetUp(); - window_.reset(new aura::Window(&window_delegate_)); + window_ = window_factory::NewWindow(&window_delegate_); window_->SetType(aura::client::WINDOW_TYPE_NORMAL); window_->Init(ui::LAYER_NOT_DRAWN); ParentWindowInPrimaryRootWindow(window_.get()); @@ -320,10 +321,10 @@ class ConvertToScreenEventHandler : public ui::EventHandler { public: ConvertToScreenEventHandler() : could_convert_to_screen_(true) { - aura::Env::GetInstance()->AddPreTargetHandler(this); + Shell::Get()->aura_env()->AddPreTargetHandler(this); } ~ConvertToScreenEventHandler() override { - aura::Env::GetInstance()->RemovePreTargetHandler(this); + Shell::Get()->aura_env()->RemovePreTargetHandler(this); } bool could_convert_to_screen() const { return could_convert_to_screen_; } @@ -365,7 +366,7 @@ // ScreenPositionClient has been detached from the root window. GetEventGenerator()->MoveMouseTo(800, 200); EXPECT_TRUE(window_->GetBoundsInScreen().Contains( - aura::Env::GetInstance()->last_mouse_location())); + Shell::Get()->aura_env()->last_mouse_location())); aura::Window::Windows root_windows = Shell::Get()->GetAllRootWindows(); aura::WindowTracker tracker;
diff --git a/ash/display/shared_display_edge_indicator.cc b/ash/display/shared_display_edge_indicator.cc index 19c668a94..cc3af89 100644 --- a/ash/display/shared_display_edge_indicator.cc +++ b/ash/display/shared_display_edge_indicator.cc
@@ -5,6 +5,7 @@ #include "ash/display/shared_display_edge_indicator.h" #include "ash/public/cpp/shell_window_ids.h" +#include "ash/root_window_controller.h" #include "ash/shell.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/aura/client/screen_position_client.h" @@ -43,8 +44,12 @@ views::Widget* CreateWidget(const gfx::Rect& bounds, views::View* contents_view) { + display::Display display = + display::Screen::GetScreen()->GetDisplayMatching(bounds); views::Widget* widget = new views::Widget; views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP); + params.context = Shell::GetRootWindowControllerWithDisplayId(display.id()) + ->GetRootWindow(); params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; params.keep_on_top = true; widget->set_focus_on_creation(false); @@ -52,8 +57,6 @@ widget->SetVisibilityChangedAnimationsEnabled(false); widget->GetNativeWindow()->SetName("SharedEdgeIndicator"); widget->SetContentsView(contents_view); - display::Display display = - display::Screen::GetScreen()->GetDisplayMatching(bounds); aura::Window* window = widget->GetNativeWindow(); aura::client::ScreenPositionClient* screen_position_client = aura::client::GetScreenPositionClient(window->GetRootWindow());
diff --git a/ash/display/unified_mouse_warp_controller_unittest.cc b/ash/display/unified_mouse_warp_controller_unittest.cc index 36efbfe..7280e46ba 100644 --- a/ash/display/unified_mouse_warp_controller_unittest.cc +++ b/ash/display/unified_mouse_warp_controller_unittest.cc
@@ -86,7 +86,7 @@ aura::Window* root = Shell::GetPrimaryRootWindow(); gfx::Point new_location_in_unified_host = - aura::Env::GetInstance()->last_mouse_location(); + Shell::Get()->aura_env()->last_mouse_location(); // Convert screen to the host. root->GetHost()->ConvertDIPToPixels(&new_location_in_unified_host); @@ -148,7 +148,7 @@ for (const auto& group : warp_groups) { EXPECT_TRUE(TestIfMouseWarpsAt(group.native_point_at_edge)); - gfx::Point new_location = aura::Env::GetInstance()->last_mouse_location(); + gfx::Point new_location = Shell::Get()->aura_env()->last_mouse_location(); EXPECT_EQ(group.expected_point_after_warp, new_location); // Convert screen to the host. @@ -399,12 +399,12 @@ // Touch the right edge of the first display. Pointer should warp. EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(499, 10))); EXPECT_EQ("501,10", // by 2px. - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); // Touch the left edge of the second display. Pointer should warp. EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(600, 10))); EXPECT_EQ("498,10", // by 2px. - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); { SCOPED_TRACE("1x1 NO WARP"); NoWarpTestBody(); @@ -418,12 +418,12 @@ // Touch the right edge of the first display. Pointer should warp. EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(499, 10))); EXPECT_EQ("250,5", // moved to 501 by 2px, divided by 2 (dsf). - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); // Touch the left edge of the second display. Pointer should warp. EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(600, 10))); EXPECT_EQ("249,5", // moved to 498 by 2px, divided by 2 (dsf). - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); { SCOPED_TRACE("2x1 NO WARP"); @@ -438,12 +438,12 @@ // Touch the right edge of the first display. Pointer should warp. EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(499, 10))); EXPECT_EQ("501,10", // by 2px. - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); // Touch the left edge of the second display. Pointer should warp. EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(600, 10))); EXPECT_EQ("498,10", // by 2px. - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); { SCOPED_TRACE("1x2 NO WARP"); NoWarpTestBody(); @@ -457,12 +457,12 @@ // Touch the right edge of the first display. Pointer should warp. EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(499, 10))); EXPECT_EQ("250,5", // by 2px. - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); // Touch the left edge of the second display. Pointer should warp. EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(600, 10))); EXPECT_EQ("249,5", // moved to 498 by 2px, divided by 2 (dsf). - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); { SCOPED_TRACE("1x2 NO WARP"); NoWarpTestBody();
diff --git a/ash/display/window_tree_host_manager_unittest.cc b/ash/display/window_tree_host_manager_unittest.cc index f3af3147..ab364c7 100644 --- a/ash/display/window_tree_host_manager_unittest.cc +++ b/ash/display/window_tree_host_manager_unittest.cc
@@ -1657,7 +1657,7 @@ UpdateDisplay("200x200,300x300"); aura::Window::Windows root_windows = Shell::GetAllRootWindows(); - aura::Env* env = aura::Env::GetInstance(); + aura::Env* env = Shell::Get()->aura_env(); ui::test::EventGenerator generator(root_windows[0]); @@ -1698,7 +1698,7 @@ UpdateDisplay("500x300"); aura::Window::Windows root_windows = Shell::GetAllRootWindows(); - aura::Env* env = aura::Env::GetInstance(); + aura::Env* env = Shell::Get()->aura_env(); ui::test::EventGenerator generator(root_windows[0]); @@ -1733,7 +1733,7 @@ EXPECT_EQ("-300,0 300x300", display_manager()->GetSecondaryDisplay().bounds().ToString()); - aura::Env* env = aura::Env::GetInstance(); + aura::Env* env = Shell::Get()->aura_env(); // Set the initial position. root_windows[0]->MoveCursorTo(gfx::Point(-150, 250)); @@ -1760,7 +1760,7 @@ UpdateMouseLocationAfterDisplayChange_SwapPrimary) { UpdateDisplay("200x200,200x200*2/r"); - aura::Env* env = aura::Env::GetInstance(); + aura::Env* env = Shell::Get()->aura_env(); Shell* shell = Shell::Get(); WindowTreeHostManager* window_tree_host_manager = shell->window_tree_host_manager(); @@ -1784,7 +1784,7 @@ // and rotation are updated when the primary display is disconnected. TEST_F(WindowTreeHostManagerTest, UpdateMouseLocationAfterDisplayChange_PrimaryDisconnected) { - aura::Env* env = aura::Env::GetInstance(); + aura::Env* env = Shell::Get()->aura_env(); Shell* shell = Shell::Get(); WindowTreeHostManager* window_tree_host_manager = shell->window_tree_host_manager(); @@ -1815,7 +1815,7 @@ TEST_F(WindowTreeHostManagerTest, UpdateNonVisibleMouseLocationAfterDisplayChange_PrimaryDisconnected) { - aura::Env* env = aura::Env::GetInstance(); + aura::Env* env = Shell::Get()->aura_env(); Shell* shell = Shell::Get(); WindowTreeHostManager* window_tree_host_manager = shell->window_tree_host_manager();
diff --git a/ash/drag_drop/drag_drop_controller_unittest.cc b/ash/drag_drop/drag_drop_controller_unittest.cc index a3176d4..0b9241b 100644 --- a/ash/drag_drop/drag_drop_controller_unittest.cc +++ b/ash/drag_drop/drag_drop_controller_unittest.cc
@@ -15,7 +15,6 @@ #include "ui/aura/client/capture_client.h" #include "ui/aura/client/drag_drop_client_observer.h" #include "ui/aura/client/drag_drop_delegate.h" -#include "ui/aura/env.h" #include "ui/aura/test/test_window_delegate.h" #include "ui/aura/window_event_dispatcher.h" #include "ui/aura/window_tree_host.h" @@ -229,7 +228,7 @@ kPerformDropInvoked }; - EventTargetTestDelegate(aura::Window* window) : window_(window) {} + explicit EventTargetTestDelegate(aura::Window* window) : window_(window) {} State state() const { return state_; } // aura::client::DragDropDelegate: @@ -260,16 +259,6 @@ DISALLOW_COPY_AND_ASSIGN(EventTargetTestDelegate); }; -std::unique_ptr<views::Widget> CreateFramelessWidget() { - std::unique_ptr<views::Widget> widget = std::make_unique<views::Widget>(); - views::Widget::InitParams params; - params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS; - params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; - widget->Init(params); - widget->Show(); - return widget; -} - void AddViewToWidgetAndResize(views::Widget* widget, views::View* view) { if (!widget->GetContentsView()) { views::View* contents_view = new views::View; @@ -352,6 +341,17 @@ } protected: + std::unique_ptr<views::Widget> CreateFramelessWidget() { + std::unique_ptr<views::Widget> widget = std::make_unique<views::Widget>(); + views::Widget::InitParams params; + params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS; + params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; + params.context = CurrentContext(); + widget->Init(params); + widget->Show(); + return widget; + } + std::unique_ptr<TestDragDropController> drag_drop_controller_; private:
diff --git a/ash/drag_drop/drag_drop_interactive_uitest.cc b/ash/drag_drop/drag_drop_interactive_uitest.cc index 7c06da7..5b76232 100644 --- a/ash/drag_drop/drag_drop_interactive_uitest.cc +++ b/ash/drag_drop/drag_drop_interactive_uitest.cc
@@ -67,12 +67,14 @@ }; views::Widget* CreateWidget(views::View* contents_view, - const gfx::Rect& bounds) { + const gfx::Rect& bounds, + aura::Window* context) { views::Widget* widget = new views::Widget; views::Widget::InitParams params; params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS; params.accept_events = true; params.bounds = bounds; + params.context = context; widget->Init(params); widget->SetContentsView(contents_view); @@ -120,12 +122,12 @@ draggable_view->set_drag_controller(NULL); draggable_view->SetBounds(0, 0, 100, 100); views::Widget* source = - CreateWidget(draggable_view, gfx::Rect(0, 0, 100, 100)); + CreateWidget(draggable_view, gfx::Rect(0, 0, 100, 100), CurrentContext()); TargetView* target_view = new TargetView(); target_view->SetBounds(0, 0, 100, 100); views::Widget* target = - CreateWidget(target_view, gfx::Rect(400, 0, 100, 100)); + CreateWidget(target_view, gfx::Rect(400, 0, 100, 100), CurrentContext()); // Make sure they're on the different root windows. EXPECT_EQ(root_windows[0], source->GetNativeView()->GetRootWindow());
diff --git a/ash/drag_drop/drag_drop_tracker.cc b/ash/drag_drop/drag_drop_tracker.cc index 63ba697e17..687004d 100644 --- a/ash/drag_drop/drag_drop_tracker.cc +++ b/ash/drag_drop/drag_drop_tracker.cc
@@ -6,6 +6,7 @@ #include "ash/public/cpp/shell_window_ids.h" #include "ash/shell.h" +#include "ash/window_factory.h" #include "ash/wm/root_window_finder.h" #include "ui/aura/client/window_parenting_client.h" #include "ui/aura/window.h" @@ -32,18 +33,20 @@ }; // Creates a window for capturing drag events. -aura::Window* CreateCaptureWindow(aura::Window* context_root, - aura::WindowDelegate* delegate) { +std::unique_ptr<aura::Window> CreateCaptureWindow( + aura::Window* context_root, + aura::WindowDelegate* delegate) { static CaptureWindowActivationDelegate* activation_delegate_instance = NULL; if (!activation_delegate_instance) activation_delegate_instance = new CaptureWindowActivationDelegate; - aura::Window* window = new aura::Window(delegate); + std::unique_ptr<aura::Window> window = window_factory::NewWindow(delegate); // Set type of window as popup to prevent different window manager codes // trying to manage this window. window->SetType(aura::client::WINDOW_TYPE_POPUP); window->Init(ui::LAYER_NOT_DRAWN); - aura::client::ParentWindowWithContext(window, context_root, gfx::Rect()); - ::wm::SetActivationDelegate(window, activation_delegate_instance); + aura::client::ParentWindowWithContext(window.get(), context_root, + gfx::Rect()); + ::wm::SetActivationDelegate(window.get(), activation_delegate_instance); window->Show(); DCHECK(window->bounds().size().IsEmpty()); return window;
diff --git a/ash/drag_drop/drag_image_view.cc b/ash/drag_drop/drag_image_view.cc index bf97652..910d0db 100644 --- a/ash/drag_drop/drag_image_view.cc +++ b/ash/drag_drop/drag_image_view.cc
@@ -32,6 +32,8 @@ params.opacity = Widget::InitParams::TRANSLUCENT_WINDOW; params.parent = root_window->GetChildById(kShellWindowId_DragImageAndTooltipContainer); + if (!params.parent) + params.context = root_window; // Happens in tests. drag_widget->Init(params); drag_widget->SetOpacity(1.f); return drag_widget;
diff --git a/ash/events/event_rewriter_controller.cc b/ash/events/event_rewriter_controller.cc index cb66bbc..a5b87dc 100644 --- a/ash/events/event_rewriter_controller.cc +++ b/ash/events/event_rewriter_controller.cc
@@ -21,7 +21,7 @@ EventRewriterController::EventRewriterController() { // Add the controller as an observer for new root windows. - aura::Env::GetInstance()->AddObserver(this); + Shell::Get()->aura_env()->AddObserver(this); std::unique_ptr<KeyboardDrivenEventRewriter> keyboard_driven_event_rewriter = std::make_unique<KeyboardDrivenEventRewriter>(); @@ -35,7 +35,7 @@ } EventRewriterController::~EventRewriterController() { - aura::Env::GetInstance()->RemoveObserver(this); + Shell::Get()->aura_env()->RemoveObserver(this); // Remove the rewriters from every root window EventSource and destroy them. for (const auto& rewriter : rewriters_) { for (auto* window : Shell::GetAllRootWindows())
diff --git a/ash/extended_desktop_unittest.cc b/ash/extended_desktop_unittest.cc index 373940a..ae7431c 100644 --- a/ash/extended_desktop_unittest.cc +++ b/ash/extended_desktop_unittest.cc
@@ -11,6 +11,7 @@ #include "ash/system/tray/system_tray.h" #include "ash/system/unified/unified_system_tray.h" #include "ash/test/ash_test_base.h" +#include "ash/window_factory.h" #include "ash/wm/root_window_finder.h" #include "ash/wm/window_properties.h" #include "ash/wm/window_util.h" @@ -155,6 +156,7 @@ views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); params.bounds = bounds; views::Widget* widget = new views::Widget; + params.context = CurrentContext(); widget->Init(params); widget->Show(); return widget; @@ -345,7 +347,7 @@ TEST_F(ExtendedDesktopTest, Capture) { // This test deals with input events but not visuals so don't throttle input // on visuals. - aura::Env::GetInstance()->set_throttle_input_on_resize_for_testing(false); + Shell::Get()->aura_env()->set_throttle_input_on_resize_for_testing(false); UpdateDisplay("1000x600,600x400"); aura::Window::Windows root_windows = Shell::GetAllRootWindows(); @@ -652,7 +654,7 @@ wm::ActivateWindow(window); // Create a transient child window of |window| without parenting to |window| // yet. - std::unique_ptr<aura::Window> child(new aura::Window(nullptr)); + std::unique_ptr<aura::Window> child = window_factory::NewWindow(); child->SetType(aura::client::WINDOW_TYPE_NORMAL); child->Init(ui::LAYER_TEXTURED); child->SetBounds(gfx::Rect(50, 50, 50, 50)); @@ -867,7 +869,7 @@ TEST_F(ExtendedDesktopTest, PassiveGrab) { // This test deals with input events but not visuals so don't throttle input // on visuals. - aura::Env::GetInstance()->set_throttle_input_on_resize_for_testing(false); + Shell::Get()->aura_env()->set_throttle_input_on_resize_for_testing(false); EventLocationRecordingEventHandler event_handler; ash::Shell::Get()->AddPreTargetHandler(&event_handler);
diff --git a/ash/focus_cycler_unittest.cc b/ash/focus_cycler_unittest.cc index e77b9371..ef32f00 100644 --- a/ash/focus_cycler_unittest.cc +++ b/ash/focus_cycler_unittest.cc
@@ -284,6 +284,7 @@ widget_params.delegate = test_widget_delegate.get(); widget_params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; + widget_params.context = CurrentContext(); browser_widget->Init(widget_params); browser_widget->Show();
diff --git a/ash/frame/caption_buttons/frame_caption_button_container_view_unittest.cc b/ash/frame/caption_buttons/frame_caption_button_container_view_unittest.cc index 17deb81..0238e861 100644 --- a/ash/frame/caption_buttons/frame_caption_button_container_view_unittest.cc +++ b/ash/frame/caption_buttons/frame_caption_button_container_view_unittest.cc
@@ -59,6 +59,7 @@ new TestWidgetDelegate(maximize_allowed == MAXIMIZE_ALLOWED, minimize_allowed == MINIMIZE_ALLOWED); params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; + params.context = CurrentContext(); widget->Init(params); return widget; }
diff --git a/ash/frame/caption_buttons/frame_size_button_unittest.cc b/ash/frame/caption_buttons/frame_size_button_unittest.cc index 1ab2eae..3094a4f 100644 --- a/ash/frame/caption_buttons/frame_size_button_unittest.cc +++ b/ash/frame/caption_buttons/frame_size_button_unittest.cc
@@ -107,6 +107,7 @@ views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); params.delegate = delegate; params.bounds = gfx::Rect(10, 10, 100, 100); + params.context = CurrentContext(); widget->Init(params); widget->Show(); return widget;
diff --git a/ash/frame/detached_title_area_renderer.cc b/ash/frame/detached_title_area_renderer.cc index 0d8fea5b..d651037a 100644 --- a/ash/frame/detached_title_area_renderer.cc +++ b/ash/frame/detached_title_area_renderer.cc
@@ -8,6 +8,7 @@ #include "ash/frame/caption_buttons/caption_button_model.h" #include "ash/frame/header_view.h" +#include "ash/shell.h" #include "ash/wm/property_util.h" #include "ash/wm/window_state.h" #include "services/ui/public/interfaces/window_tree_constants.mojom.h" @@ -102,7 +103,7 @@ std::unique_ptr<views::Widget::InitParams> params = CreateInitParams("DetachedTitleAreaRendererForClient"); views::NativeWidgetAura* native_widget = - new views::NativeWidgetAura(widget_, true); + new views::NativeWidgetAura(widget_, true, Shell::Get()->aura_env()); aura::SetWindowType(native_widget->GetNativeWindow(), ui::mojom::WindowType::POPUP); ApplyProperties(native_widget->GetNativeWindow(), property_converter,
diff --git a/ash/frame/header_view.cc b/ash/frame/header_view.cc index 14848c6..4cff581 100644 --- a/ash/frame/header_view.cc +++ b/ash/frame/header_view.cc
@@ -10,8 +10,8 @@ #include "ash/frame/caption_buttons/caption_button_model.h" #include "ash/frame/caption_buttons/frame_back_button.h" #include "ash/frame/caption_buttons/frame_caption_button_container_view.h" -#include "ash/frame/custom_frame_view_ash.h" #include "ash/frame/default_frame_header.h" +#include "ash/frame/non_client_frame_view_ash.h" #include "ash/public/cpp/config.h" #include "ash/public/cpp/window_properties.h" #include "ash/shell.h" @@ -132,7 +132,8 @@ target_widget, this, caption_button_container_); } else { DCHECK_EQ(mojom::WindowStyle::BROWSER, window_style); - DCHECK(!::features::IsAshInBrowserProcess()); + DCHECK(!::features::IsAshInBrowserProcess() || + ::features::IsSingleProcessMash()); appearance_provider_ = std::make_unique<WindowPropertyAppearanceProvider>( target_widget_->GetNativeWindow()); auto frame_header = std::make_unique<CustomFrameHeader>(
diff --git a/ash/frame/custom_frame_view_ash.cc b/ash/frame/non_client_frame_view_ash.cc similarity index 76% rename from ash/frame/custom_frame_view_ash.cc rename to ash/frame/non_client_frame_view_ash.cc index d398e63a..393e072 100644 --- a/ash/frame/custom_frame_view_ash.cc +++ b/ash/frame/non_client_frame_view_ash.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/frame/custom_frame_view_ash.h" +#include "ash/frame/non_client_frame_view_ash.h" #include <algorithm> #include <memory> @@ -43,19 +43,20 @@ namespace { /////////////////////////////////////////////////////////////////////////////// -// CustomFrameViewAshWindowStateDelegate +// NonClientFrameViewAshWindowStateDelegate // Handles a user's fullscreen request (Shift+F4/F4). Puts the window into // immersive fullscreen if immersive fullscreen is enabled for non-browser // windows. -class CustomFrameViewAshWindowStateDelegate : public wm::WindowStateDelegate, - public wm::WindowStateObserver, - public aura::WindowObserver, - public TabletModeObserver { +class NonClientFrameViewAshWindowStateDelegate : public wm::WindowStateDelegate, + public wm::WindowStateObserver, + public aura::WindowObserver, + public TabletModeObserver { public: - CustomFrameViewAshWindowStateDelegate(wm::WindowState* window_state, - CustomFrameViewAsh* custom_frame_view, - bool enable_immersive) + NonClientFrameViewAshWindowStateDelegate( + wm::WindowState* window_state, + NonClientFrameViewAsh* custom_frame_view, + bool enable_immersive) : window_state_(nullptr) { // Add a window state observer to exit fullscreen properly in case // fullscreen is exited without going through @@ -78,7 +79,7 @@ immersive_fullscreen_controller_.get()); } - ~CustomFrameViewAshWindowStateDelegate() override { + ~NonClientFrameViewAshWindowStateDelegate() override { if (Shell::Get()->tablet_mode_controller()) Shell::Get()->tablet_mode_controller()->RemoveObserver(this); @@ -162,10 +163,10 @@ } } - CustomFrameViewAsh* GetFrameView() { + NonClientFrameViewAsh* GetFrameView() { views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window_state_->window()); - return static_cast<CustomFrameViewAsh*>( + return static_cast<NonClientFrameViewAsh*>( widget->non_client_view()->frame_view()); } @@ -173,22 +174,22 @@ std::unique_ptr<ImmersiveFullscreenController> immersive_fullscreen_controller_; - DISALLOW_COPY_AND_ASSIGN(CustomFrameViewAshWindowStateDelegate); + DISALLOW_COPY_AND_ASSIGN(NonClientFrameViewAshWindowStateDelegate); }; } // namespace // static -bool CustomFrameViewAsh::use_empty_minimum_size_for_test_ = false; +bool NonClientFrameViewAsh::use_empty_minimum_size_for_test_ = false; /////////////////////////////////////////////////////////////////////////////// -// CustomFrameViewAsh::OverlayView +// NonClientFrameViewAsh::OverlayView // View which takes up the entire widget and contains the HeaderView. HeaderView // is a child of OverlayView to avoid creating a larger texture than necessary // when painting the HeaderView to its own layer. -class CustomFrameViewAsh::OverlayView : public views::View, - public views::ViewTargeterDelegate { +class NonClientFrameViewAsh::OverlayView : public views::View, + public views::ViewTargeterDelegate { public: explicit OverlayView(HeaderView* header_view); ~OverlayView() override; @@ -211,16 +212,15 @@ DISALLOW_COPY_AND_ASSIGN(OverlayView); }; -CustomFrameViewAsh::OverlayView::OverlayView(HeaderView* header_view) +NonClientFrameViewAsh::OverlayView::OverlayView(HeaderView* header_view) : header_view_(header_view) { AddChildView(header_view); - SetEventTargeter( - std::unique_ptr<views::ViewTargeter>(new views::ViewTargeter(this))); + SetEventTargeter(std::make_unique<views::ViewTargeter>(this)); } -CustomFrameViewAsh::OverlayView::~OverlayView() = default; +NonClientFrameViewAsh::OverlayView::~OverlayView() = default; -void CustomFrameViewAsh::OverlayView::SetHeaderHeight( +void NonClientFrameViewAsh::OverlayView::SetHeaderHeight( base::Optional<int> height) { if (header_height_ == height) return; @@ -230,9 +230,9 @@ } /////////////////////////////////////////////////////////////////////////////// -// CustomFrameViewAsh::OverlayView, views::View overrides: +// NonClientFrameViewAsh::OverlayView, views::View overrides: -void CustomFrameViewAsh::OverlayView::Layout() { +void NonClientFrameViewAsh::OverlayView::Layout() { // Layout |header_view_| because layout affects the result of // GetPreferredOnScreenHeight(). header_view_->Layout(); @@ -251,9 +251,9 @@ } /////////////////////////////////////////////////////////////////////////////// -// CustomFrameViewAsh::OverlayView, views::ViewTargeterDelegate overrides: +// NonClientFrameViewAsh::OverlayView, views::ViewTargeterDelegate overrides: -bool CustomFrameViewAsh::OverlayView::DoesIntersectRect( +bool NonClientFrameViewAsh::OverlayView::DoesIntersectRect( const views::View* target, const gfx::Rect& rect) const { CHECK_EQ(target, this); @@ -263,12 +263,12 @@ } //////////////////////////////////////////////////////////////////////////////// -// CustomFrameViewAsh, public: +// NonClientFrameViewAsh, public: // static -const char CustomFrameViewAsh::kViewClassName[] = "CustomFrameViewAsh"; +const char NonClientFrameViewAsh::kViewClassName[] = "NonClientFrameViewAsh"; -CustomFrameViewAsh::CustomFrameViewAsh( +NonClientFrameViewAsh::NonClientFrameViewAsh( views::Widget* frame, ImmersiveFullscreenControllerDelegate* immersive_delegate, bool enable_immersive, @@ -290,47 +290,47 @@ wm::WindowState* window_state = wm::GetWindowState(frame_window); if (!window_state->HasDelegate()) { window_state->SetDelegate(std::unique_ptr<wm::WindowStateDelegate>( - new CustomFrameViewAshWindowStateDelegate(window_state, this, - enable_immersive))); + new NonClientFrameViewAshWindowStateDelegate(window_state, this, + enable_immersive))); } Shell::Get()->AddShellObserver(this); Shell::Get()->split_view_controller()->AddObserver(this); } -CustomFrameViewAsh::~CustomFrameViewAsh() { +NonClientFrameViewAsh::~NonClientFrameViewAsh() { Shell::Get()->RemoveShellObserver(this); if (Shell::Get()->split_view_controller()) Shell::Get()->split_view_controller()->RemoveObserver(this); } -void CustomFrameViewAsh::InitImmersiveFullscreenControllerForView( +void NonClientFrameViewAsh::InitImmersiveFullscreenControllerForView( ImmersiveFullscreenController* immersive_fullscreen_controller) { immersive_fullscreen_controller->Init(immersive_delegate_, frame_, header_view_); } -void CustomFrameViewAsh::SetFrameColors(SkColor active_frame_color, - SkColor inactive_frame_color) { +void NonClientFrameViewAsh::SetFrameColors(SkColor active_frame_color, + SkColor inactive_frame_color) { aura::Window* frame_window = frame_->GetNativeWindow(); frame_window->SetProperty(ash::kFrameActiveColorKey, active_frame_color); frame_window->SetProperty(ash::kFrameInactiveColorKey, inactive_frame_color); } -void CustomFrameViewAsh::SetCaptionButtonModel( +void NonClientFrameViewAsh::SetCaptionButtonModel( std::unique_ptr<CaptionButtonModel> model) { header_view_->caption_button_container()->SetModel(std::move(model)); header_view_->UpdateCaptionButtons(); } -void CustomFrameViewAsh::SetHeaderHeight(base::Optional<int> height) { +void NonClientFrameViewAsh::SetHeaderHeight(base::Optional<int> height) { overlay_view_->SetHeaderHeight(height); } -HeaderView* CustomFrameViewAsh::GetHeaderView() { +HeaderView* NonClientFrameViewAsh::GetHeaderView() { return header_view_; } -gfx::Rect CustomFrameViewAsh::GetClientBoundsForWindowBounds( +gfx::Rect NonClientFrameViewAsh::GetClientBoundsForWindowBounds( const gfx::Rect& window_bounds) const { gfx::Rect client_bounds(window_bounds); client_bounds.Inset(0, NonClientTopBorderHeight(), 0, 0); @@ -338,54 +338,54 @@ } //////////////////////////////////////////////////////////////////////////////// -// CustomFrameViewAsh, views::NonClientFrameView overrides: +// NonClientFrameViewAsh, views::NonClientFrameView overrides: -gfx::Rect CustomFrameViewAsh::GetBoundsForClientView() const { +gfx::Rect NonClientFrameViewAsh::GetBoundsForClientView() const { gfx::Rect client_bounds = bounds(); client_bounds.Inset(0, NonClientTopBorderHeight(), 0, 0); return client_bounds; } -gfx::Rect CustomFrameViewAsh::GetWindowBoundsForClientBounds( +gfx::Rect NonClientFrameViewAsh::GetWindowBoundsForClientBounds( const gfx::Rect& client_bounds) const { gfx::Rect window_bounds = client_bounds; window_bounds.Inset(0, -NonClientTopBorderHeight(), 0, 0); return window_bounds; } -int CustomFrameViewAsh::NonClientHitTest(const gfx::Point& point) { +int NonClientFrameViewAsh::NonClientHitTest(const gfx::Point& point) { return FrameBorderNonClientHitTest(this, point); } -void CustomFrameViewAsh::GetWindowMask(const gfx::Size& size, - gfx::Path* window_mask) { +void NonClientFrameViewAsh::GetWindowMask(const gfx::Size& size, + gfx::Path* window_mask) { // No window masks in Aura. } -void CustomFrameViewAsh::ResetWindowControls() { +void NonClientFrameViewAsh::ResetWindowControls() { header_view_->ResetWindowControls(); } -void CustomFrameViewAsh::UpdateWindowIcon() {} +void NonClientFrameViewAsh::UpdateWindowIcon() {} -void CustomFrameViewAsh::UpdateWindowTitle() { +void NonClientFrameViewAsh::UpdateWindowTitle() { header_view_->SchedulePaintForTitle(); } -void CustomFrameViewAsh::SizeConstraintsChanged() { +void NonClientFrameViewAsh::SizeConstraintsChanged() { header_view_->UpdateCaptionButtons(); } -void CustomFrameViewAsh::ActivationChanged(bool active) { +void NonClientFrameViewAsh::ActivationChanged(bool active) { // The icons differ between active and inactive. header_view_->SchedulePaint(); frame_->non_client_view()->Layout(); } //////////////////////////////////////////////////////////////////////////////// -// CustomFrameViewAsh, views::View overrides: +// NonClientFrameViewAsh, views::View overrides: -gfx::Size CustomFrameViewAsh::CalculatePreferredSize() const { +gfx::Size NonClientFrameViewAsh::CalculatePreferredSize() const { gfx::Size pref = frame_->client_view()->GetPreferredSize(); gfx::Rect bounds(0, 0, pref.width(), pref.height()); return frame_->non_client_view() @@ -393,7 +393,7 @@ .size(); } -void CustomFrameViewAsh::Layout() { +void NonClientFrameViewAsh::Layout() { if (!enabled()) return; views::NonClientFrameView::Layout(); @@ -402,11 +402,11 @@ NonClientTopBorderHeight()); } -const char* CustomFrameViewAsh::GetClassName() const { +const char* NonClientFrameViewAsh::GetClassName() const { return kViewClassName; } -gfx::Size CustomFrameViewAsh::GetMinimumSize() const { +gfx::Size NonClientFrameViewAsh::GetMinimumSize() const { if (use_empty_minimum_size_for_test_ || !enabled()) return gfx::Size(); @@ -423,7 +423,7 @@ return min_size; } -gfx::Size CustomFrameViewAsh::GetMaximumSize() const { +gfx::Size NonClientFrameViewAsh::GetMaximumSize() const { gfx::Size max_client_size(frame_->client_view()->GetMaximumSize()); int width = 0; int height = 0; @@ -436,11 +436,11 @@ return gfx::Size(width, height); } -void CustomFrameViewAsh::SchedulePaintInRect(const gfx::Rect& r) { +void NonClientFrameViewAsh::SchedulePaintInRect(const gfx::Rect& r) { // We may end up here before |header_view_| has been added to the Widget. if (header_view_->GetWidget()) { - // The HeaderView is not a child of CustomFrameViewAsh. Redirect the paint - // to HeaderView instead. + // The HeaderView is not a child of NonClientFrameViewAsh. Redirect the + // paint to HeaderView instead. gfx::RectF to_paint(r); views::View::ConvertRectToTarget(this, header_view_, &to_paint); header_view_->SchedulePaintInRect(gfx::ToEnclosingRect(to_paint)); @@ -449,26 +449,26 @@ } } -void CustomFrameViewAsh::SetVisible(bool visible) { +void NonClientFrameViewAsh::SetVisible(bool visible) { overlay_view_->SetVisible(visible); views::View::SetVisible(visible); // We need to re-layout so that client view will occupy entire window. InvalidateLayout(); } -const views::View* CustomFrameViewAsh::GetAvatarIconViewForTest() const { +const views::View* NonClientFrameViewAsh::GetAvatarIconViewForTest() const { return header_view_->avatar_icon(); } -SkColor CustomFrameViewAsh::GetActiveFrameColorForTest() const { +SkColor NonClientFrameViewAsh::GetActiveFrameColorForTest() const { return frame_->GetNativeWindow()->GetProperty(ash::kFrameActiveColorKey); } -SkColor CustomFrameViewAsh::GetInactiveFrameColorForTest() const { +SkColor NonClientFrameViewAsh::GetInactiveFrameColorForTest() const { return frame_->GetNativeWindow()->GetProperty(ash::kFrameInactiveColorKey); } -void CustomFrameViewAsh::UpdateHeaderView() { +void NonClientFrameViewAsh::UpdateHeaderView() { SplitViewController* split_view_controller = Shell::Get()->split_view_controller(); if (in_overview_mode_ && split_view_controller->IsSplitViewModeActive() && @@ -482,32 +482,32 @@ } } -void CustomFrameViewAsh::SetShouldPaintHeader(bool paint) { +void NonClientFrameViewAsh::SetShouldPaintHeader(bool paint) { header_view_->SetShouldPaintHeader(paint); } -void CustomFrameViewAsh::OnOverviewModeStarting() { +void NonClientFrameViewAsh::OnOverviewModeStarting() { in_overview_mode_ = true; UpdateHeaderView(); } -void CustomFrameViewAsh::OnOverviewModeEnded() { +void NonClientFrameViewAsh::OnOverviewModeEnded() { in_overview_mode_ = false; UpdateHeaderView(); } -void CustomFrameViewAsh::OnSplitViewStateChanged( +void NonClientFrameViewAsh::OnSplitViewStateChanged( SplitViewController::State /* previous_state */, SplitViewController::State /* current_state */) { UpdateHeaderView(); } //////////////////////////////////////////////////////////////////////////////// -// CustomFrameViewAsh, private: +// NonClientFrameViewAsh, private: // views::NonClientFrameView: -bool CustomFrameViewAsh::DoesIntersectRect(const views::View* target, - const gfx::Rect& rect) const { +bool NonClientFrameViewAsh::DoesIntersectRect(const views::View* target, + const gfx::Rect& rect) const { CHECK_EQ(target, this); // NonClientView hit tests the NonClientFrameView first instead of going in // z-order. Return false so that events get to the OverlayView. @@ -515,11 +515,11 @@ } FrameCaptionButtonContainerView* -CustomFrameViewAsh::GetFrameCaptionButtonContainerViewForTest() { +NonClientFrameViewAsh::GetFrameCaptionButtonContainerViewForTest() { return header_view_->caption_button_container(); } -int CustomFrameViewAsh::NonClientTopBorderHeight() const { +int NonClientFrameViewAsh::NonClientTopBorderHeight() const { // The frame should not occupy the window area when it's in fullscreen, // not visible or disabled. if (frame_->IsFullscreen() || !visible() || !enabled() ||
diff --git a/ash/frame/custom_frame_view_ash.h b/ash/frame/non_client_frame_view_ash.h similarity index 88% rename from ash/frame/custom_frame_view_ash.h rename to ash/frame/non_client_frame_view_ash.h index 8f41f53..e44ec54b 100644 --- a/ash/frame/custom_frame_view_ash.h +++ b/ash/frame/non_client_frame_view_ash.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_FRAME_CUSTOM_FRAME_VIEW_ASH_H_ -#define ASH_FRAME_CUSTOM_FRAME_VIEW_ASH_H_ +#ifndef ASH_FRAME_NON_CLIENT_FRAME_VIEW_ASH_H_ +#define ASH_FRAME_NON_CLIENT_FRAME_VIEW_ASH_H_ #include <memory> @@ -35,33 +35,33 @@ // The window header overlay slides onscreen when the user hovers the mouse at // the top of the screen. See also views::CustomFrameView and // BrowserNonClientFrameViewAsh. -class ASH_EXPORT CustomFrameViewAsh : public views::NonClientFrameView, - public ShellObserver, - public SplitViewController::Observer { +class ASH_EXPORT NonClientFrameViewAsh : public views::NonClientFrameView, + public ShellObserver, + public SplitViewController::Observer { public: // Internal class name. static const char kViewClassName[]; // |enable_immersive| controls whether ImmersiveFullscreenController is - // created for the CustomFrameViewAsh; if true and a WindowStateDelegate has - // not been set on the WindowState associated with |frame|, then an + // created for the NonClientFrameViewAsh; if true and a WindowStateDelegate + // has not been set on the WindowState associated with |frame|, then an // ImmersiveFullscreenController is created. // If ImmersiveFullscreenControllerDelegate is not supplied, HeaderView is // used as the ImmersiveFullscreenControllerDelegate. - explicit CustomFrameViewAsh( + explicit NonClientFrameViewAsh( views::Widget* frame, ImmersiveFullscreenControllerDelegate* immersive_delegate = nullptr, bool enable_immersive = true, mojom::WindowStyle window_style = mojom::WindowStyle::DEFAULT, std::unique_ptr<CaptionButtonModel> model = nullptr); - ~CustomFrameViewAsh() override; + ~NonClientFrameViewAsh() override; // Sets the caption button modeland updates the caption buttons. void SetCaptionButtonModel(std::unique_ptr<CaptionButtonModel> model); // Inits |immersive_fullscreen_controller| so that the controller reveals // and hides |header_view_| in immersive fullscreen. - // CustomFrameViewAsh does not take ownership of + // NonClientFrameViewAsh does not take ownership of // |immersive_fullscreen_controller|. void InitImmersiveFullscreenControllerForView( ImmersiveFullscreenController* immersive_fullscreen_controller); @@ -131,8 +131,8 @@ private: class OverlayView; - friend class CustomFrameViewAshSizeLock; - friend class CustomFrameTestWidgetDelegate; + friend class NonClientFrameViewAshSizeLock; + friend class NonClientFrameViewAshTestWidgetDelegate; friend class TestWidgetConstraintsDelegate; // views::NonClientFrameView: @@ -165,9 +165,9 @@ // actually may be still be false after overview mode has started. bool in_overview_mode_ = false; - DISALLOW_COPY_AND_ASSIGN(CustomFrameViewAsh); + DISALLOW_COPY_AND_ASSIGN(NonClientFrameViewAsh); }; } // namespace ash -#endif // ASH_FRAME_CUSTOM_FRAME_VIEW_ASH_H_ +#endif // ASH_FRAME_NON_CLIENT_FRAME_VIEW_ASH_H_
diff --git a/ash/frame/custom_frame_view_ash_unittest.cc b/ash/frame/non_client_frame_view_ash_unittest.cc similarity index 69% rename from ash/frame/custom_frame_view_ash_unittest.cc rename to ash/frame/non_client_frame_view_ash_unittest.cc index 9b5c9e97..2e4a1c1 100644 --- a/ash/frame/custom_frame_view_ash_unittest.cc +++ b/ash/frame/non_client_frame_view_ash_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/frame/custom_frame_view_ash.h" +#include "ash/frame/non_client_frame_view_ash.h" #include <memory> @@ -32,6 +32,7 @@ #include "ui/aura/window_targeter.h" #include "ui/base/accelerators/accelerator.h" #include "ui/base/accelerators/test_accelerator_target.h" +#include "ui/base/ui_base_features.h" #include "ui/compositor/test/draw_waiter_for_test.h" #include "ui/events/test/event_generator.h" #include "ui/gfx/geometry/rect.h" @@ -40,37 +41,49 @@ #include "ui/gfx/vector_icon_types.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_delegate.h" +#include "ui/wm/core/window_util.h" namespace ash { -// A views::WidgetDelegate which uses a CustomFrameViewAsh. -class CustomFrameTestWidgetDelegate : public views::WidgetDelegateView { +// A views::WidgetDelegate which uses a NonClientFrameViewAsh. +class NonClientFrameViewAshTestWidgetDelegate + : public views::WidgetDelegateView { public: - CustomFrameTestWidgetDelegate() = default; - ~CustomFrameTestWidgetDelegate() override = default; + NonClientFrameViewAshTestWidgetDelegate( + mojom::WindowStyle window_style = mojom::WindowStyle::DEFAULT) + : window_style_(window_style) {} + ~NonClientFrameViewAshTestWidgetDelegate() override = default; views::NonClientFrameView* CreateNonClientFrameView( views::Widget* widget) override { - custom_frame_view_ = new CustomFrameViewAsh(widget); - return custom_frame_view_; + non_client_frame_view_ = + new NonClientFrameViewAsh(widget, nullptr, true, window_style_); + return non_client_frame_view_; } - int GetCustomFrameViewTopBorderHeight() { - return custom_frame_view_->NonClientTopBorderHeight(); + int GetNonClientFrameViewTopBorderHeight() { + return non_client_frame_view_->NonClientTopBorderHeight(); } - CustomFrameViewAsh* custom_frame_view() const { return custom_frame_view_; } + NonClientFrameViewAsh* non_client_frame_view() const { + return non_client_frame_view_; + } - HeaderView* header_view() const { return custom_frame_view_->header_view_; } + HeaderView* header_view() const { + return non_client_frame_view_->header_view_; + } private: // Not owned. - CustomFrameViewAsh* custom_frame_view_; + NonClientFrameViewAsh* non_client_frame_view_ = nullptr; - DISALLOW_COPY_AND_ASSIGN(CustomFrameTestWidgetDelegate); + mojom::WindowStyle window_style_; + + DISALLOW_COPY_AND_ASSIGN(NonClientFrameViewAshTestWidgetDelegate); }; -class TestWidgetConstraintsDelegate : public CustomFrameTestWidgetDelegate { +class TestWidgetConstraintsDelegate + : public NonClientFrameViewAshTestWidgetDelegate { public: TestWidgetConstraintsDelegate() = default; ~TestWidgetConstraintsDelegate() override = default; @@ -96,19 +109,19 @@ void set_maximum_size(const gfx::Size& max_size) { maximum_size_ = max_size; } const gfx::Rect& GetFrameCaptionButtonContainerViewBounds() { - return custom_frame_view() + return non_client_frame_view() ->GetFrameCaptionButtonContainerViewForTest() ->bounds(); } void EndFrameCaptionButtonContainerViewAnimations() { FrameCaptionButtonContainerView::TestApi test( - custom_frame_view()->GetFrameCaptionButtonContainerViewForTest()); + non_client_frame_view()->GetFrameCaptionButtonContainerViewForTest()); test.EndAnimations(); } int GetTitleBarHeight() const { - return custom_frame_view()->NonClientTopBorderHeight(); + return non_client_frame_view()->NonClientTopBorderHeight(); } private: @@ -118,34 +131,36 @@ DISALLOW_COPY_AND_ASSIGN(TestWidgetConstraintsDelegate); }; -using CustomFrameViewAshTest = AshTestBase; +using NonClientFrameViewAshTest = AshTestBase; // Verifies the client view is not placed at a y location of 0. -TEST_F(CustomFrameViewAshTest, ClientViewCorrectlyPlaced) { +TEST_F(NonClientFrameViewAshTest, ClientViewCorrectlyPlaced) { std::unique_ptr<views::Widget> widget = - CreateTestWidget(new CustomFrameTestWidgetDelegate); + CreateTestWidget(new NonClientFrameViewAshTestWidgetDelegate); EXPECT_NE(0, widget->client_view()->bounds().y()); } // Test that the height of the header is correct upon initially displaying // the widget. -TEST_F(CustomFrameViewAshTest, HeaderHeight) { - CustomFrameTestWidgetDelegate* delegate = new CustomFrameTestWidgetDelegate; +TEST_F(NonClientFrameViewAshTest, HeaderHeight) { + NonClientFrameViewAshTestWidgetDelegate* delegate = + new NonClientFrameViewAshTestWidgetDelegate; std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); // The header should have enough room for the window controls. The // header/content separator line overlays the window controls. EXPECT_EQ(GetAshLayoutSize(AshLayoutSize::kNonBrowserCaption).height(), - delegate->custom_frame_view()->GetHeaderView()->height()); + delegate->non_client_frame_view()->GetHeaderView()->height()); } // Regression test for https://crbug.com/839955 -TEST_F(CustomFrameViewAshTest, ActiveStateOfButtonMatchesWidget) { - CustomFrameTestWidgetDelegate* delegate = new CustomFrameTestWidgetDelegate; +TEST_F(NonClientFrameViewAshTest, ActiveStateOfButtonMatchesWidget) { + NonClientFrameViewAshTestWidgetDelegate* delegate = + new NonClientFrameViewAshTestWidgetDelegate; std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); FrameCaptionButtonContainerView::TestApi test_api( - delegate->custom_frame_view() + delegate->non_client_frame_view() ->GetHeaderView() ->caption_button_container()); @@ -157,7 +172,7 @@ // Activate a different widget so the original one loses activation. std::unique_ptr<views::Widget> widget2 = - CreateTestWidget(new CustomFrameTestWidgetDelegate); + CreateTestWidget(new NonClientFrameViewAshTestWidgetDelegate); widget2->Show(); ui::DrawWaiterForTest::WaitForCommit(widget->GetLayer()->GetCompositor()); @@ -165,15 +180,16 @@ EXPECT_FALSE(test_api.size_button()->paint_as_active()); } -// Verify that CustomFrameViewAsh returns the correct minimum and maximum frame -// sizes when the client view does not specify any size constraints. -TEST_F(CustomFrameViewAshTest, NoSizeConstraints) { +// Verify that NonClientFrameViewAsh returns the correct minimum and maximum +// frame sizes when the client view does not specify any size constraints. +TEST_F(NonClientFrameViewAshTest, NoSizeConstraints) { TestWidgetConstraintsDelegate* delegate = new TestWidgetConstraintsDelegate; std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); - CustomFrameViewAsh* custom_frame_view = delegate->custom_frame_view(); - gfx::Size min_frame_size = custom_frame_view->GetMinimumSize(); - gfx::Size max_frame_size = custom_frame_view->GetMaximumSize(); + NonClientFrameViewAsh* non_client_frame_view = + delegate->non_client_frame_view(); + gfx::Size min_frame_size = non_client_frame_view->GetMinimumSize(); + gfx::Size max_frame_size = non_client_frame_view->GetMaximumSize(); EXPECT_EQ(delegate->GetTitleBarHeight(), min_frame_size.height()); @@ -182,9 +198,9 @@ EXPECT_EQ(0, max_frame_size.height()); } -// Verify that CustomFrameViewAsh returns the correct minimum and maximum frame -// sizes when the client view specifies size constraints. -TEST_F(CustomFrameViewAshTest, MinimumAndMaximumSize) { +// Verify that NonClientFrameViewAsh returns the correct minimum and maximum +// frame sizes when the client view specifies size constraints. +TEST_F(NonClientFrameViewAshTest, MinimumAndMaximumSize) { gfx::Size min_client_size(500, 500); gfx::Size max_client_size(800, 800); TestWidgetConstraintsDelegate* delegate = new TestWidgetConstraintsDelegate; @@ -192,9 +208,10 @@ delegate->set_maximum_size(max_client_size); std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); - CustomFrameViewAsh* custom_frame_view = delegate->custom_frame_view(); - gfx::Size min_frame_size = custom_frame_view->GetMinimumSize(); - gfx::Size max_frame_size = custom_frame_view->GetMaximumSize(); + NonClientFrameViewAsh* non_client_frame_view = + delegate->non_client_frame_view(); + gfx::Size min_frame_size = non_client_frame_view->GetMinimumSize(); + gfx::Size max_frame_size = non_client_frame_view->GetMaximumSize(); EXPECT_EQ(min_client_size.width(), min_frame_size.width()); EXPECT_EQ(max_client_size.width(), max_frame_size.width()); @@ -204,9 +221,9 @@ max_frame_size.height()); } -// Verify that CustomFrameViewAsh returns the correct minimum frame size when +// Verify that NonClientFrameViewAsh returns the correct minimum frame size when // the kMinimumSize property is set. -TEST_F(CustomFrameViewAshTest, HonorsMinimumSizeProperty) { +TEST_F(NonClientFrameViewAshTest, HonorsMinimumSizeProperty) { const gfx::Size min_client_size(500, 500); TestWidgetConstraintsDelegate* delegate = new TestWidgetConstraintsDelegate; delegate->set_minimum_size(min_client_size); @@ -217,37 +234,39 @@ widget->GetNativeWindow()->SetProperty(aura::client::kMinimumSize, new gfx::Size(min_window_size)); - CustomFrameViewAsh* custom_frame_view = delegate->custom_frame_view(); - const gfx::Size min_frame_size = custom_frame_view->GetMinimumSize(); + NonClientFrameViewAsh* non_client_frame_view = + delegate->non_client_frame_view(); + const gfx::Size min_frame_size = non_client_frame_view->GetMinimumSize(); EXPECT_EQ(min_window_size, min_frame_size); } -// Verify that CustomFrameViewAsh updates the avatar icon based on the +// Verify that NonClientFrameViewAsh updates the avatar icon based on the // avatar icon window property. -TEST_F(CustomFrameViewAshTest, AvatarIcon) { +TEST_F(NonClientFrameViewAshTest, AvatarIcon) { TestWidgetConstraintsDelegate* delegate = new TestWidgetConstraintsDelegate; std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); - CustomFrameViewAsh* custom_frame_view = delegate->custom_frame_view(); - EXPECT_FALSE(custom_frame_view->GetAvatarIconViewForTest()); + NonClientFrameViewAsh* non_client_frame_view = + delegate->non_client_frame_view(); + EXPECT_FALSE(non_client_frame_view->GetAvatarIconViewForTest()); // Avatar image becomes available. widget->GetNativeWindow()->SetProperty( aura::client::kAvatarIconKey, new gfx::ImageSkia(gfx::test::CreateImage(27, 27).AsImageSkia())); - EXPECT_TRUE(custom_frame_view->GetAvatarIconViewForTest()); + EXPECT_TRUE(non_client_frame_view->GetAvatarIconViewForTest()); // Avatar image is gone; the ImageView for the avatar icon should be // removed. widget->GetNativeWindow()->ClearProperty(aura::client::kAvatarIconKey); - EXPECT_FALSE(custom_frame_view->GetAvatarIconViewForTest()); + EXPECT_FALSE(non_client_frame_view->GetAvatarIconViewForTest()); } // The visibility of the size button is updated when tablet mode is toggled. // Verify that the layout of the HeaderView is updated for the size button's // new visibility. -TEST_F(CustomFrameViewAshTest, HeaderViewNotifiedOfChildSizeChange) { +TEST_F(NonClientFrameViewAshTest, HeaderViewNotifiedOfChildSizeChange) { TestWidgetConstraintsDelegate* delegate = new TestWidgetConstraintsDelegate; std::unique_ptr<views::Widget> widget = CreateTestWidget( delegate, kShellWindowId_DefaultContainer, gfx::Rect(0, 0, 400, 500)); @@ -266,78 +285,143 @@ EXPECT_EQ(initial, after_restore); } +// Tests that a window is minimized, toggling tablet mode doesn't trigger +// caption button update (https://crbug.com/822890). +TEST_F(NonClientFrameViewAshTest, ToggleTabletModeOnMinimizedWindow) { + NonClientFrameViewAshTestWidgetDelegate* delegate = + new NonClientFrameViewAshTestWidgetDelegate; + std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); + FrameCaptionButtonContainerView::TestApi test( + delegate->non_client_frame_view() + ->GetHeaderView() + ->caption_button_container()); + widget->Maximize(); + + // Restore icon for size button in maximized window state. Compare by name + // because the address may not be the same for different build targets in the + // component build. + EXPECT_STREQ(kWindowControlRestoreIcon.name, + test.size_button()->icon_definition_for_test()->name); + widget->Minimize(); + + // Enter and exit tablet mode while the window is minimized. + Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(true); + Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(false); + + // When unminimizing in non-tablet mode, size button should match with + // maximized window state, which is restore icon. + ::wm::Unminimize(widget->GetNativeWindow()); + EXPECT_TRUE(widget->IsMaximized()); + EXPECT_STREQ(kWindowControlRestoreIcon.name, + test.size_button()->icon_definition_for_test()->name); +} + +// Tests that FrameCaptionButtonContainer has been relaid out in response to +// tablet mode being toggled. +TEST_F(NonClientFrameViewAshTest, ToggleTabletModeRelayout) { + // In classic Ash, this is covered by + // BrowserNonClientFrameViewAshTest.ToggleTabletModeRelayout. + if (::features::IsAshInBrowserProcess()) + return; + + NonClientFrameViewAshTestWidgetDelegate* delegate = + new NonClientFrameViewAshTestWidgetDelegate(mojom::WindowStyle::BROWSER); + std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); + FrameCaptionButtonContainerView* caption_buttons = + delegate->non_client_frame_view() + ->GetHeaderView() + ->caption_button_container(); + FrameCaptionButtonContainerView::TestApi test(caption_buttons); + + EXPECT_FALSE(widget->IsMaximized()); + const gfx::Rect initial = caption_buttons->bounds(); + ash::TabletModeController* tablet_mode_controller = + Shell::Get()->tablet_mode_controller(); + tablet_mode_controller->EnableTabletModeWindowManager(true); + test.EndAnimations(); + const gfx::Rect during_maximize = caption_buttons->bounds(); + EXPECT_GT(initial.height(), during_maximize.height()); + tablet_mode_controller->EnableTabletModeWindowManager(false); + test.EndAnimations(); + const gfx::Rect after_restore = caption_buttons->bounds(); + EXPECT_EQ(initial, after_restore); +} + // Verify that when in tablet mode with a maximized window, the height of the // header is zero. -TEST_F(CustomFrameViewAshTest, FrameHiddenInTabletModeForMaximizedWindows) { - CustomFrameTestWidgetDelegate* delegate = new CustomFrameTestWidgetDelegate; +TEST_F(NonClientFrameViewAshTest, FrameHiddenInTabletModeForMaximizedWindows) { + NonClientFrameViewAshTestWidgetDelegate* delegate = + new NonClientFrameViewAshTestWidgetDelegate; std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); widget->Maximize(); Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(true); - EXPECT_EQ(0, delegate->GetCustomFrameViewTopBorderHeight()); + EXPECT_EQ(0, delegate->GetNonClientFrameViewTopBorderHeight()); } // Verify that when in tablet mode with a non maximized window, the height of // the header is non zero. -TEST_F(CustomFrameViewAshTest, FrameShownInTabletModeForNonMaximizedWindows) { - auto* delegate = new CustomFrameTestWidgetDelegate(); +TEST_F(NonClientFrameViewAshTest, + FrameShownInTabletModeForNonMaximizedWindows) { + auto* delegate = new NonClientFrameViewAshTestWidgetDelegate(); std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(true); EXPECT_EQ(GetAshLayoutSize(AshLayoutSize::kNonBrowserCaption).height(), - delegate->GetCustomFrameViewTopBorderHeight()); + delegate->GetNonClientFrameViewTopBorderHeight()); } // Verify that if originally in fullscreen mode, and enter tablet mode, the // height of the header remains zero. -TEST_F(CustomFrameViewAshTest, +TEST_F(NonClientFrameViewAshTest, FrameRemainsHiddenInTabletModeWhenTogglingFullscreen) { - CustomFrameTestWidgetDelegate* delegate = new CustomFrameTestWidgetDelegate; + NonClientFrameViewAshTestWidgetDelegate* delegate = + new NonClientFrameViewAshTestWidgetDelegate; std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); widget->SetFullscreen(true); - EXPECT_EQ(0, delegate->GetCustomFrameViewTopBorderHeight()); + EXPECT_EQ(0, delegate->GetNonClientFrameViewTopBorderHeight()); Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(true); - EXPECT_EQ(0, delegate->GetCustomFrameViewTopBorderHeight()); + EXPECT_EQ(0, delegate->GetNonClientFrameViewTopBorderHeight()); Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(false); - EXPECT_EQ(0, delegate->GetCustomFrameViewTopBorderHeight()); + EXPECT_EQ(0, delegate->GetNonClientFrameViewTopBorderHeight()); } -TEST_F(CustomFrameViewAshTest, OpeningAppsInTabletMode) { +TEST_F(NonClientFrameViewAshTest, OpeningAppsInTabletMode) { auto* delegate = new TestWidgetConstraintsDelegate; std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); widget->Maximize(); Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(true); - EXPECT_EQ(0, delegate->GetCustomFrameViewTopBorderHeight()); + EXPECT_EQ(0, delegate->GetNonClientFrameViewTopBorderHeight()); // Verify that after minimizing and showing the widget, the height of the // header is zero. widget->Minimize(); widget->Show(); EXPECT_TRUE(widget->IsMaximized()); - EXPECT_EQ(0, delegate->GetCustomFrameViewTopBorderHeight()); + EXPECT_EQ(0, delegate->GetNonClientFrameViewTopBorderHeight()); // Verify that when we toggle maximize, the header is shown. For example, // maximized can be toggled in tablet mode by using the accessibility // keyboard. wm::WMEvent event(wm::WM_EVENT_TOGGLE_MAXIMIZE); wm::GetWindowState(widget->GetNativeWindow())->OnWMEvent(&event); - EXPECT_EQ(0, delegate->GetCustomFrameViewTopBorderHeight()); + EXPECT_EQ(0, delegate->GetNonClientFrameViewTopBorderHeight()); Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(false); EXPECT_EQ(GetAshLayoutSize(AshLayoutSize::kNonBrowserCaption).height(), - delegate->GetCustomFrameViewTopBorderHeight()); + delegate->GetNonClientFrameViewTopBorderHeight()); } // Test if creating a new window in tablet mode uses maximzied state // and immersive mode. -TEST_F(CustomFrameViewAshTest, GetPreferredOnScreenHeightInTabletMaximzied) { +TEST_F(NonClientFrameViewAshTest, GetPreferredOnScreenHeightInTabletMaximzied) { Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(true); auto* delegate = new TestWidgetConstraintsDelegate; std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); - auto* frame_view = static_cast<ash::CustomFrameViewAsh*>( + auto* frame_view = static_cast<ash::NonClientFrameViewAsh*>( widget->non_client_view()->frame_view()); auto* header_view = static_cast<HeaderView*>(frame_view->GetHeaderView()); ASSERT_TRUE(widget->IsMaximized()); @@ -353,9 +437,9 @@ // Verify windows that are minimized and then entered into tablet mode will have // no header when unminimized in tablet mode. -TEST_F(CustomFrameViewAshTest, MinimizedWindowsInTabletMode) { +TEST_F(NonClientFrameViewAshTest, MinimizedWindowsInTabletMode) { std::unique_ptr<views::Widget> widget = - CreateTestWidget(new CustomFrameTestWidgetDelegate); + CreateTestWidget(new NonClientFrameViewAshTestWidgetDelegate); widget->GetNativeWindow()->SetProperty(aura::client::kResizeBehaviorKey, ui::mojom::kResizeBehaviorCanMaximize); widget->Maximize(); @@ -367,8 +451,8 @@ widget->client_view()->bounds()); } -TEST_F(CustomFrameViewAshTest, HeaderVisibilityInOverviewMode) { - auto* delegate = new CustomFrameTestWidgetDelegate(); +TEST_F(NonClientFrameViewAshTest, HeaderVisibilityInOverviewMode) { + auto* delegate = new NonClientFrameViewAshTestWidgetDelegate(); std::unique_ptr<views::Widget> widget = CreateTestWidget( delegate, kShellWindowId_DefaultContainer, gfx::Rect(0, 0, 400, 500)); @@ -381,8 +465,9 @@ EXPECT_TRUE(delegate->header_view()->should_paint()); } -TEST_F(CustomFrameViewAshTest, HeaderVisibilityInSplitview) { - auto create_widget = [this](CustomFrameTestWidgetDelegate* delegate) { +TEST_F(NonClientFrameViewAshTest, HeaderVisibilityInSplitview) { + auto create_widget = [this]( + NonClientFrameViewAshTestWidgetDelegate* delegate) { std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); // Windows need to be resizable and maximizable to be used in splitview. widget->GetNativeWindow()->SetProperty( @@ -392,9 +477,9 @@ return widget; }; - auto* delegate1 = new CustomFrameTestWidgetDelegate(); + auto* delegate1 = new NonClientFrameViewAshTestWidgetDelegate(); auto widget1 = create_widget(delegate1); - auto* delegate2 = new CustomFrameTestWidgetDelegate(); + auto* delegate2 = new NonClientFrameViewAshTestWidgetDelegate(); auto widget2 = create_widget(delegate2); Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(true); @@ -405,7 +490,7 @@ Shell::Get()->split_view_controller()->SnapWindow(widget1->GetNativeWindow(), SplitViewController::LEFT); EXPECT_TRUE(delegate1->header_view()->should_paint()); - EXPECT_EQ(0, delegate1->GetCustomFrameViewTopBorderHeight()); + EXPECT_EQ(0, delegate1->GetNonClientFrameViewTopBorderHeight()); EXPECT_FALSE(delegate2->header_view()->should_paint()); // Verify that when both windows are snapped, the header is drawn for both. @@ -413,8 +498,8 @@ SplitViewController::RIGHT); EXPECT_TRUE(delegate1->header_view()->should_paint()); EXPECT_TRUE(delegate2->header_view()->should_paint()); - EXPECT_EQ(0, delegate1->GetCustomFrameViewTopBorderHeight()); - EXPECT_EQ(0, delegate2->GetCustomFrameViewTopBorderHeight()); + EXPECT_EQ(0, delegate1->GetNonClientFrameViewTopBorderHeight()); + EXPECT_EQ(0, delegate2->GetNonClientFrameViewTopBorderHeight()); // Toggle overview mode so we return back to left snapped mode. Verify that // the header is again drawn for the snapped window, but not for the unsnapped @@ -423,7 +508,7 @@ ASSERT_EQ(SplitViewController::LEFT_SNAPPED, Shell::Get()->split_view_controller()->state()); EXPECT_TRUE(delegate1->header_view()->should_paint()); - EXPECT_EQ(0, delegate1->GetCustomFrameViewTopBorderHeight()); + EXPECT_EQ(0, delegate1->GetNonClientFrameViewTopBorderHeight()); EXPECT_FALSE(delegate2->header_view()->should_paint()); Shell::Get()->split_view_controller()->EndSplitView(); @@ -471,13 +556,13 @@ } // namespace -TEST_F(CustomFrameViewAshTest, BackButton) { +TEST_F(NonClientFrameViewAshTest, BackButton) { ash::AcceleratorController* controller = ash::Shell::Get()->accelerator_controller(); std::unique_ptr<TestButtonModel> model = std::make_unique<TestButtonModel>(); TestButtonModel* model_ptr = model.get(); - auto* delegate = new CustomFrameTestWidgetDelegate(); + auto* delegate = new NonClientFrameViewAshTestWidgetDelegate(); std::unique_ptr<views::Widget> widget = CreateTestWidget( delegate, kShellWindowId_DefaultContainer, gfx::Rect(0, 0, 400, 500)); @@ -491,14 +576,15 @@ ui::TestAcceleratorTarget target_back_release; controller->Register({accelerator_back_release}, &target_back_release); - CustomFrameViewAsh* custom_frame_view = delegate->custom_frame_view(); - custom_frame_view->SetCaptionButtonModel(std::move(model)); + NonClientFrameViewAsh* non_client_frame_view = + delegate->non_client_frame_view(); + non_client_frame_view->SetCaptionButtonModel(std::move(model)); HeaderView* header_view = - static_cast<HeaderView*>(custom_frame_view->GetHeaderView()); + static_cast<HeaderView*>(non_client_frame_view->GetHeaderView()); EXPECT_FALSE(header_view->GetBackButton()); model_ptr->SetVisible(CAPTION_BUTTON_ICON_BACK, true); - custom_frame_view->SizeConstraintsChanged(); + non_client_frame_view->SizeConstraintsChanged(); EXPECT_TRUE(header_view->GetBackButton()); EXPECT_FALSE(header_view->GetBackButton()->enabled()); @@ -512,7 +598,7 @@ EXPECT_EQ(0, target_back_release.accelerator_count()); model_ptr->SetEnabled(CAPTION_BUTTON_ICON_BACK, true); - custom_frame_view->SizeConstraintsChanged(); + non_client_frame_view->SizeConstraintsChanged(); EXPECT_TRUE(header_view->GetBackButton()); EXPECT_TRUE(header_view->GetBackButton()->enabled()); @@ -526,52 +612,57 @@ EXPECT_EQ(1, target_back_release.accelerator_count()); model_ptr->SetVisible(CAPTION_BUTTON_ICON_BACK, false); - custom_frame_view->SizeConstraintsChanged(); + non_client_frame_view->SizeConstraintsChanged(); EXPECT_FALSE(header_view->GetBackButton()); } // Make sure that client view occupies the entire window when the // frame is hidden. -TEST_F(CustomFrameViewAshTest, FrameVisibility) { - CustomFrameTestWidgetDelegate* delegate = new CustomFrameTestWidgetDelegate; +TEST_F(NonClientFrameViewAshTest, FrameVisibility) { + NonClientFrameViewAshTestWidgetDelegate* delegate = + new NonClientFrameViewAshTestWidgetDelegate; gfx::Rect window_bounds(10, 10, 200, 100); std::unique_ptr<views::Widget> widget = CreateTestWidget( delegate, kShellWindowId_DefaultContainer, window_bounds); // The height is smaller by the top border height. gfx::Size client_bounds(200, 68); - CustomFrameViewAsh* custom_frame_view = delegate->custom_frame_view(); + NonClientFrameViewAsh* non_client_frame_view = + delegate->non_client_frame_view(); EXPECT_EQ(client_bounds, widget->client_view()->GetLocalBounds().size()); - custom_frame_view->SetVisible(false); + non_client_frame_view->SetVisible(false); widget->GetRootView()->Layout(); EXPECT_EQ(gfx::Size(200, 100), widget->client_view()->GetLocalBounds().size()); EXPECT_FALSE(widget->non_client_view()->frame_view()->visible()); - EXPECT_EQ(window_bounds, - custom_frame_view->GetClientBoundsForWindowBounds(window_bounds)); + EXPECT_EQ( + window_bounds, + non_client_frame_view->GetClientBoundsForWindowBounds(window_bounds)); - custom_frame_view->SetVisible(true); + non_client_frame_view->SetVisible(true); widget->GetRootView()->Layout(); EXPECT_EQ(client_bounds, widget->client_view()->GetLocalBounds().size()); EXPECT_TRUE(widget->non_client_view()->frame_view()->visible()); - EXPECT_EQ(32, delegate->GetCustomFrameViewTopBorderHeight()); - EXPECT_EQ(gfx::Rect(gfx::Point(10, 42), client_bounds), - custom_frame_view->GetClientBoundsForWindowBounds(window_bounds)); + EXPECT_EQ(32, delegate->GetNonClientFrameViewTopBorderHeight()); + EXPECT_EQ( + gfx::Rect(gfx::Point(10, 42), client_bounds), + non_client_frame_view->GetClientBoundsForWindowBounds(window_bounds)); } -TEST_F(CustomFrameViewAshTest, CustomButtonModel) { +TEST_F(NonClientFrameViewAshTest, CustomButtonModel) { std::unique_ptr<TestButtonModel> model = std::make_unique<TestButtonModel>(); TestButtonModel* model_ptr = model.get(); - auto* delegate = new CustomFrameTestWidgetDelegate(); + auto* delegate = new NonClientFrameViewAshTestWidgetDelegate(); std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); - CustomFrameViewAsh* custom_frame_view = delegate->custom_frame_view(); - custom_frame_view->SetCaptionButtonModel(std::move(model)); + NonClientFrameViewAsh* non_client_frame_view = + delegate->non_client_frame_view(); + non_client_frame_view->SetCaptionButtonModel(std::move(model)); HeaderView* header_view = - static_cast<HeaderView*>(custom_frame_view->GetHeaderView()); + static_cast<HeaderView*>(non_client_frame_view->GetHeaderView()); FrameCaptionButtonContainerView::TestApi test_api( header_view->caption_button_container()); @@ -586,49 +677,49 @@ // Back button model_ptr->SetVisible(CAPTION_BUTTON_ICON_BACK, true); - custom_frame_view->SizeConstraintsChanged(); + non_client_frame_view->SizeConstraintsChanged(); EXPECT_TRUE(header_view->GetBackButton()->visible()); EXPECT_FALSE(header_view->GetBackButton()->enabled()); model_ptr->SetEnabled(CAPTION_BUTTON_ICON_BACK, true); - custom_frame_view->SizeConstraintsChanged(); + non_client_frame_view->SizeConstraintsChanged(); EXPECT_TRUE(header_view->GetBackButton()->enabled()); // size button model_ptr->SetVisible(CAPTION_BUTTON_ICON_MAXIMIZE_RESTORE, true); - custom_frame_view->SizeConstraintsChanged(); + non_client_frame_view->SizeConstraintsChanged(); EXPECT_TRUE(test_api.size_button()->visible()); EXPECT_FALSE(test_api.size_button()->enabled()); model_ptr->SetEnabled(CAPTION_BUTTON_ICON_MAXIMIZE_RESTORE, true); - custom_frame_view->SizeConstraintsChanged(); + non_client_frame_view->SizeConstraintsChanged(); EXPECT_TRUE(test_api.size_button()->enabled()); // minimize button model_ptr->SetVisible(CAPTION_BUTTON_ICON_MINIMIZE, true); - custom_frame_view->SizeConstraintsChanged(); + non_client_frame_view->SizeConstraintsChanged(); EXPECT_TRUE(test_api.minimize_button()->visible()); EXPECT_FALSE(test_api.minimize_button()->enabled()); model_ptr->SetEnabled(CAPTION_BUTTON_ICON_MINIMIZE, true); - custom_frame_view->SizeConstraintsChanged(); + non_client_frame_view->SizeConstraintsChanged(); EXPECT_TRUE(test_api.minimize_button()->enabled()); // menu button model_ptr->SetVisible(CAPTION_BUTTON_ICON_MENU, true); - custom_frame_view->SizeConstraintsChanged(); + non_client_frame_view->SizeConstraintsChanged(); EXPECT_TRUE(test_api.menu_button()->visible()); EXPECT_FALSE(test_api.menu_button()->enabled()); model_ptr->SetEnabled(CAPTION_BUTTON_ICON_MENU, true); - custom_frame_view->SizeConstraintsChanged(); + non_client_frame_view->SizeConstraintsChanged(); EXPECT_TRUE(test_api.menu_button()->enabled()); // zoom button EXPECT_STREQ(kWindowControlMaximizeIcon.name, test_api.size_button()->icon_definition_for_test()->name); model_ptr->set_zoom_mode(true); - custom_frame_view->SizeConstraintsChanged(); + non_client_frame_view->SizeConstraintsChanged(); EXPECT_STREQ(kWindowControlZoomIcon.name, test_api.size_button()->icon_definition_for_test()->name); widget->Maximize(); @@ -636,14 +727,15 @@ test_api.size_button()->icon_definition_for_test()->name); } -TEST_F(CustomFrameViewAshTest, WideFrame) { - auto* delegate = new CustomFrameTestWidgetDelegate(); +TEST_F(NonClientFrameViewAshTest, WideFrame) { + auto* delegate = new NonClientFrameViewAshTestWidgetDelegate(); std::unique_ptr<views::Widget> widget = CreateTestWidget( delegate, kShellWindowId_DefaultContainer, gfx::Rect(100, 0, 400, 500)); - CustomFrameViewAsh* custom_frame_view = delegate->custom_frame_view(); + NonClientFrameViewAsh* non_client_frame_view = + delegate->non_client_frame_view(); HeaderView* header_view = - static_cast<HeaderView*>(custom_frame_view->GetHeaderView()); + static_cast<HeaderView*>(non_client_frame_view->GetHeaderView()); widget->Maximize(); std::unique_ptr<WideFrameView> wide_frame_view = @@ -718,8 +810,8 @@ EXPECT_FALSE(widget->IsMaximized()); } -TEST_F(CustomFrameViewAshTest, WideFrameButton) { - auto* delegate = new CustomFrameTestWidgetDelegate(); +TEST_F(NonClientFrameViewAshTest, WideFrameButton) { + auto* delegate = new NonClientFrameViewAshTestWidgetDelegate(); std::unique_ptr<views::Widget> widget = CreateTestWidget( delegate, kShellWindowId_DefaultContainer, gfx::Rect(100, 0, 400, 500)); @@ -755,15 +847,15 @@ namespace { -class CustomFrameViewAshFrameColorTest - : public CustomFrameViewAshTest, +class NonClientFrameViewAshFrameColorTest + : public NonClientFrameViewAshTest, public testing::WithParamInterface<bool> { public: - CustomFrameViewAshFrameColorTest() = default; - ~CustomFrameViewAshFrameColorTest() override = default; + NonClientFrameViewAshFrameColorTest() = default; + ~NonClientFrameViewAshFrameColorTest() override = default; private: - DISALLOW_COPY_AND_ASSIGN(CustomFrameViewAshFrameColorTest); + DISALLOW_COPY_AND_ASSIGN(NonClientFrameViewAshFrameColorTest); }; class TestWidgetDelegate : public TestWidgetConstraintsDelegate { @@ -790,9 +882,9 @@ } // namespace -// Verify that CustomFrameViewAsh updates the active color based on the +// Verify that NonClientFrameViewAsh updates the active color based on the // ash::kFrameActiveColorKey window property. -TEST_P(CustomFrameViewAshFrameColorTest, kFrameActiveColorKey) { +TEST_P(NonClientFrameViewAshFrameColorTest, kFrameActiveColorKey) { TestWidgetDelegate* delegate = new TestWidgetDelegate(GetParam()); std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); @@ -806,12 +898,12 @@ widget->GetNativeWindow()->GetProperty(ash::kFrameActiveColorKey); EXPECT_EQ(active_color, new_color); EXPECT_EQ(new_color, - delegate->custom_frame_view()->GetActiveFrameColorForTest()); + delegate->non_client_frame_view()->GetActiveFrameColorForTest()); } -// Verify that CustomFrameViewAsh updates the inactive color based on the +// Verify that NonClientFrameViewAsh updates the inactive color based on the // ash::kFrameInactiveColorKey window property. -TEST_P(CustomFrameViewAshFrameColorTest, KFrameInactiveColor) { +TEST_P(NonClientFrameViewAshFrameColorTest, KFrameInactiveColor) { TestWidgetDelegate* delegate = new TestWidgetDelegate(GetParam()); std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); @@ -826,12 +918,12 @@ widget->GetNativeWindow()->GetProperty(ash::kFrameInactiveColorKey); EXPECT_EQ(active_color, new_color); EXPECT_EQ(new_color, - delegate->custom_frame_view()->GetInactiveFrameColorForTest()); + delegate->non_client_frame_view()->GetInactiveFrameColorForTest()); } -// Verify that CustomFrameViewAsh updates the active color based on the +// Verify that NonClientFrameViewAsh updates the active color based on the // ash::kFrameActiveColorKey window property. -TEST_P(CustomFrameViewAshFrameColorTest, WideFrameInitialColor) { +TEST_P(NonClientFrameViewAshFrameColorTest, WideFrameInitialColor) { TestWidgetDelegate* delegate = new TestWidgetDelegate(GetParam()); std::unique_ptr<views::Widget> widget = CreateTestWidget(delegate); aura::Window* window = widget->GetNativeWindow(); @@ -854,6 +946,6 @@ } // Run frame color tests with and without custom wm::WindowStateDelegate. -INSTANTIATE_TEST_CASE_P(, CustomFrameViewAshFrameColorTest, testing::Bool()); +INSTANTIATE_TEST_CASE_P(, NonClientFrameViewAshFrameColorTest, testing::Bool()); } // namespace ash
diff --git a/ash/frame/wide_frame_view.cc b/ash/frame/wide_frame_view.cc index 98ea286..afe1e16 100644 --- a/ash/frame/wide_frame_view.cc +++ b/ash/frame/wide_frame_view.cc
@@ -5,8 +5,8 @@ #include "ash/frame/wide_frame_view.h" #include "ash/frame/caption_buttons/frame_caption_button_container_view.h" -#include "ash/frame/custom_frame_view_ash.h" #include "ash/frame/header_view.h" +#include "ash/frame/non_client_frame_view_ash.h" #include "ash/public/cpp/ash_layout_constants.h" #include "ash/public/cpp/immersive/immersive_fullscreen_controller.h" #include "ash/public/cpp/window_properties.h" @@ -195,7 +195,7 @@ } HeaderView* WideFrameView::GetTargetHeaderView() { - auto* frame_view = static_cast<CustomFrameViewAsh*>( + auto* frame_view = static_cast<NonClientFrameViewAsh*>( target_->non_client_view()->frame_view()); return static_cast<HeaderView*>(frame_view->GetHeaderView()); }
diff --git a/ash/frame/wide_frame_view.h b/ash/frame/wide_frame_view.h index 5fd8506..9324b19 100644 --- a/ash/frame/wide_frame_view.h +++ b/ash/frame/wide_frame_view.h
@@ -30,8 +30,8 @@ // // TODO(oshima): Currently client is responsible for hooking this up to // the target widget because ImmersiveFullscreenController is not owned by -// CustomFrameViewAsh. Investigate if we integrate this into -// CustomFrameViewAsh. +// NonClientFrameViewAsh. Investigate if we integrate this into +// NonClientFrameViewAsh. class ASH_EXPORT WideFrameView : public views::WidgetDelegateView, public aura::WindowObserver,
diff --git a/ash/host/DEPS b/ash/host/DEPS index 7ffc8e2..a11daf2 100644 --- a/ash/host/DEPS +++ b/ash/host/DEPS
@@ -4,6 +4,7 @@ "+ash/ime", "+ash/ash_export.h", "+ash/public/cpp/ash_switches.h", + "+ash/window_factory.h", ] specific_include_rules = {
diff --git a/ash/host/ash_window_tree_host.cc b/ash/host/ash_window_tree_host.cc index 916b5995a..30d5b3f 100644 --- a/ash/host/ash_window_tree_host.cc +++ b/ash/host/ash_window_tree_host.cc
@@ -38,11 +38,6 @@ AshWindowTreeHost::~AshWindowTreeHost() = default; void AshWindowTreeHost::TranslateLocatedEvent(ui::LocatedEvent* event) { - // NOTE: This code is not called in mus/mash, it is handled on the server - // side. - // TODO(sky): remove this when mus is the default http://crbug.com/763996. - DCHECK_EQ(aura::Env::Mode::LOCAL, aura::Env::GetInstance()->mode()); - if (event->IsTouchEvent()) return;
diff --git a/ash/host/ash_window_tree_host_platform.cc b/ash/host/ash_window_tree_host_platform.cc index 511987a7..2a4ceb2 100644 --- a/ash/host/ash_window_tree_host_platform.cc +++ b/ash/host/ash_window_tree_host_platform.cc
@@ -10,6 +10,7 @@ #include "ash/host/transformer_helper.h" #include "ash/shell.h" #include "ash/shell_delegate.h" +#include "ash/window_factory.h" #include "base/feature_list.h" #include "base/trace_event/trace_event.h" #include "services/ui/public/cpp/input_devices/input_device_controller_client.h" @@ -35,14 +36,16 @@ AshWindowTreeHostPlatform::AshWindowTreeHostPlatform( ui::PlatformWindowInitProperties properties) - : aura::WindowTreeHostPlatform(std::move(properties)), + : aura::WindowTreeHostPlatform(std::move(properties), + window_factory::NewWindow()), transformer_helper_(this) { transformer_helper_.Init(); InitInputMethodIfNecessary(); } AshWindowTreeHostPlatform::AshWindowTreeHostPlatform() - : transformer_helper_(this) { + : aura::WindowTreeHostPlatform(window_factory::NewWindow()), + transformer_helper_(this) { CreateCompositor(); transformer_helper_.Init(); InitInputMethodIfNecessary();
diff --git a/ash/keyboard/arc/arc_input_method_surface_manager_unittest.cc b/ash/keyboard/arc/arc_input_method_surface_manager_unittest.cc index 5d7967b..5c925ab 100644 --- a/ash/keyboard/arc/arc_input_method_surface_manager_unittest.cc +++ b/ash/keyboard/arc/arc_input_method_surface_manager_unittest.cc
@@ -3,11 +3,14 @@ // found in the LICENSE file. #include "ash/keyboard/arc/arc_input_method_surface_manager.h" + +#include "ash/shell.h" #include "ash/test/ash_test_base.h" #include "base/macros.h" #include "components/exo/input_method_surface.h" #include "components/exo/surface.h" #include "components/exo/wm_helper.h" +#include "ui/aura/env.h" namespace ash { @@ -18,7 +21,7 @@ void SetUp() override { AshTestBase::SetUp(); - wm_helper_ = std::make_unique<exo::WMHelper>(); + wm_helper_ = std::make_unique<exo::WMHelper>(Shell::Get()->aura_env()); exo::WMHelper::SetInstance(wm_helper_.get()); }
diff --git a/ash/keyboard/test_keyboard_ui.cc b/ash/keyboard/test_keyboard_ui.cc index a665ef29..6437f07 100644 --- a/ash/keyboard/test_keyboard_ui.cc +++ b/ash/keyboard/test_keyboard_ui.cc
@@ -5,6 +5,7 @@ #include "ash/keyboard/test_keyboard_ui.h" #include "ash/shell.h" +#include "ash/window_factory.h" #include "ash/wm/window_util.h" #include "ui/aura/window.h" #include "ui/aura/window_tree_host.h" @@ -21,7 +22,7 @@ aura::Window* TestKeyboardUI::GetKeyboardWindow() { if (!keyboard_window_) { - keyboard_window_.reset(new aura::Window(&delegate_)); + keyboard_window_ = window_factory::NewWindow(&delegate_); keyboard_window_->Init(ui::LAYER_NOT_DRAWN); } return keyboard_window_.get();
diff --git a/ash/login/ui/animated_rounded_image_view.h b/ash/login/ui/animated_rounded_image_view.h index 42cd7fa..77593879 100644 --- a/ash/login/ui/animated_rounded_image_view.h +++ b/ash/login/ui/animated_rounded_image_view.h
@@ -24,7 +24,7 @@ enum class Playback { kFirstFrameOnly, // Only the first frame in the animation will be shown. kSingle, // Play the animation only once. - kRepeat, // Play the animation repeatly. + kRepeat, // Play the animation repeatedly. }; // Provides animation frames. @@ -49,6 +49,9 @@ // Set playback type of the animation. void SetAnimationPlayback(Playback playback); + // Get the current type of animation playback. + Playback playback() const { return playback_; } + // views::View: gfx::Size CalculatePreferredSize() const override; void OnPaint(gfx::Canvas* canvas) override;
diff --git a/ash/login/ui/login_user_view.cc b/ash/login/ui/login_user_view.cc index 6c74aba..027ae4a 100644 --- a/ash/login/ui/login_user_view.cc +++ b/ash/login/ui/login_user_view.cc
@@ -153,9 +153,10 @@ return; } + // Don't change the playback style which was set in SetAnimationEnabled. image_->SetAnimationDecoder( std::make_unique<PassthroughAnimationDecoder>(animation), - AnimatedRoundedImageView::Playback::kRepeat); + image_->playback()); } AnimatedRoundedImageView* image_ = nullptr; @@ -317,7 +318,7 @@ } views::View* LoginUserView::TestApi::dropdown() const { - return view_->user_dropdown_; + return view_->dropdown_; } LoginBubble* LoginUserView::TestApi::menu() const { @@ -369,14 +370,14 @@ 2 * (kDistanceBetweenUsernameAndDropdownDp + kDropdownIconSizeDp); user_label_ = new UserLabel(style, label_width); if (show_dropdown) { - user_dropdown_ = new LoginButton(this); - user_dropdown_->set_has_ink_drop_action_on_click(false); - user_dropdown_->SetPreferredSize( + dropdown_ = new LoginButton(this); + dropdown_->set_has_ink_drop_action_on_click(false); + dropdown_->SetPreferredSize( gfx::Size(kDropdownIconSizeDp, kDropdownIconSizeDp)); - user_dropdown_->SetImage( + dropdown_->SetImage( views::Button::STATE_NORMAL, gfx::CreateVectorIcon(kLockScreenDropdownIcon, SK_ColorWHITE)); - user_dropdown_->SetFocusBehavior(FocusBehavior::ALWAYS); + dropdown_->SetFocusBehavior(FocusBehavior::ALWAYS); } if (show_domain) user_domain_ = new UserDomainInfoView(); @@ -405,8 +406,8 @@ }; setup_layer(user_image_); setup_layer(user_label_); - if (user_dropdown_) - setup_layer(user_dropdown_); + if (dropdown_) + setup_layer(dropdown_); if (user_domain_) setup_layer(user_domain_); @@ -462,8 +463,8 @@ make_opacity_sequence()); user_label_->layer()->GetAnimator()->StartAnimation( make_opacity_sequence()); - if (user_dropdown_) { - user_dropdown_->layer()->GetAnimator()->StartAnimation( + if (dropdown_) { + dropdown_->layer()->GetAnimator()->StartAnimation( make_opacity_sequence()); } if (user_domain_) { @@ -516,14 +517,14 @@ void LoginUserView::ButtonPressed(views::Button* sender, const ui::Event& event) { // Handle click on the dropdown arrow. - if (sender == user_dropdown_) { - DCHECK(user_dropdown_); + if (sender == dropdown_) { + DCHECK(dropdown_); if (!user_menu_->IsVisible()) { user_menu_->ShowUserMenu( base::UTF8ToUTF16(current_user_->basic_user_info->display_name), base::UTF8ToUTF16(current_user_->basic_user_info->display_email), current_user_->basic_user_info->type, current_user_->is_device_owner, - user_dropdown_ /*anchor_view*/, user_dropdown_ /*bubble_opener*/, + dropdown_ /*anchor_view*/, dropdown_ /*bubble_opener*/, current_user_->can_remove /*show_remove_user*/, on_remove_warning_shown_, on_remove_); } else { @@ -544,8 +545,8 @@ void LoginUserView::UpdateCurrentUserState() { auto email = base::UTF8ToUTF16(current_user_->basic_user_info->display_email); tap_button_->SetAccessibleName(email); - if (user_dropdown_) { - user_dropdown_->SetAccessibleName(l10n_util::GetStringFUTF16( + if (dropdown_) { + dropdown_->SetAccessibleName(l10n_util::GetStringFUTF16( IDS_ASH_LOGIN_POD_MENU_BUTTON_ACCESSIBLE_NAME, email)); } @@ -590,10 +591,10 @@ is_opaque_ ? kOpaqueUserViewOpacity : kTransparentUserViewOpacity; user_image_->layer()->SetOpacity(target_opacity); user_label_->layer()->SetOpacity(target_opacity); - if (user_dropdown_) { - std::unique_ptr<ui::ScopedLayerAnimationSettings> user_dropdown_settings = - build_settings(user_dropdown_); - user_dropdown_->layer()->SetOpacity(target_opacity); + if (dropdown_) { + std::unique_ptr<ui::ScopedLayerAnimationSettings> dropdown_settings = + build_settings(dropdown_); + dropdown_->layer()->SetOpacity(target_opacity); } if (user_domain_) { @@ -611,8 +612,8 @@ AddChildView(user_image_); AddChildView(user_label_); AddChildView(tap_button_); - if (user_dropdown_) - AddChildView(user_dropdown_); + if (dropdown_) + AddChildView(dropdown_); if (user_domain_) AddChildView(user_domain_); @@ -636,16 +637,16 @@ views::ColumnSet* label_dropdown = layout->AddColumnSet(kLabelDropdownColumnId); label_dropdown->AddPaddingColumn(1.0f /*resize_percent*/, 0 /*width*/); - if (user_dropdown_) { + if (dropdown_) { label_dropdown->AddPaddingColumn( - 0 /*resize_percent*/, user_dropdown_->GetPreferredSize().width() + + 0 /*resize_percent*/, dropdown_->GetPreferredSize().width() + kDistanceBetweenUsernameAndDropdownDp); } label_dropdown->AddColumn(views::GridLayout::CENTER, views::GridLayout::CENTER, 0 /*resize_percent*/, views::GridLayout::USE_PREF, 0 /*fixed_width*/, 0 /*min_width*/); - if (user_dropdown_) { + if (dropdown_) { label_dropdown->AddPaddingColumn(0 /*resize_percent*/, kDistanceBetweenUsernameAndDropdownDp); label_dropdown->AddColumn(views::GridLayout::CENTER, @@ -678,8 +679,8 @@ // Label/dropdown. layout->StartRow(0 /*vertical_resize*/, kLabelDropdownColumnId); layout->AddView(user_label_); - if (user_dropdown_) - layout->AddView(user_dropdown_); + if (dropdown_) + layout->AddView(dropdown_); if (user_domain_) { add_padding(kVerticalSpacingBetweenUserNameAndDomainDp);
diff --git a/ash/login/ui/login_user_view.h b/ash/login/ui/login_user_view.h index b6b4e60..c1e9841 100644 --- a/ash/login/ui/login_user_view.h +++ b/ash/login/ui/login_user_view.h
@@ -115,8 +115,7 @@ LoginDisplayStyle display_style_; UserImage* user_image_ = nullptr; UserLabel* user_label_ = nullptr; - // TODO(jdufault): Rename user_dropdown_ to dropdown_. - LoginButton* user_dropdown_ = nullptr; + LoginButton* dropdown_ = nullptr; TapButton* tap_button_ = nullptr; // TODO(jdufault): Rename user_menu_ to menu_ or popup_menu_. std::unique_ptr<LoginBubble> user_menu_;
diff --git a/ash/magnifier/docked_magnifier_controller.cc b/ash/magnifier/docked_magnifier_controller.cc index 8ec30a5..79158e30 100644 --- a/ash/magnifier/docked_magnifier_controller.cc +++ b/ash/magnifier/docked_magnifier_controller.cc
@@ -453,7 +453,7 @@ // reflector and the viewport widget and its layers. New viewport and // reflector may be recreated later if |new_root_window| is not |nullptr|. if (reflector_) { - aura::Env::GetInstance()->context_factory_private()->RemoveReflector( + Shell::Get()->aura_env()->context_factory_private()->RemoveReflector( reflector_.get()); reflector_.reset(); } @@ -481,10 +481,10 @@ if (new_input_method) new_input_method->AddObserver(this); - DCHECK(aura::Env::GetInstance()->context_factory_private()); + DCHECK(Shell::Get()->aura_env()->context_factory_private()); DCHECK(viewport_widget_); reflector_ = - aura::Env::GetInstance()->context_factory_private()->CreateReflector( + Shell::Get()->aura_env()->context_factory_private()->CreateReflector( current_source_root_window_->layer()->GetCompositor(), viewport_magnifier_layer_.get()); }
diff --git a/ash/magnifier/magnification_controller_unittest.cc b/ash/magnifier/magnification_controller_unittest.cc index 53543e9..e539683d 100644 --- a/ash/magnifier/magnification_controller_unittest.cc +++ b/ash/magnifier/magnification_controller_unittest.cc
@@ -277,7 +277,7 @@ } TEST_F(MagnificationControllerTest, PanWindow2xLeftToRight) { - const aura::Env* env = aura::Env::GetInstance(); + const aura::Env* env = Shell::Get()->aura_env(); ui::test::EventGenerator* event_generator = GetEventGenerator(); event_generator->MoveMouseToInHost(gfx::Point(0, 0)); @@ -381,7 +381,7 @@ } TEST_F(MagnificationControllerTest, PanWindow2xRightToLeft) { - const aura::Env* env = aura::Env::GetInstance(); + const aura::Env* env = Shell::Get()->aura_env(); ui::test::EventGenerator* event_generator = GetEventGenerator(); event_generator->MoveMouseToInHost(gfx::Point(799, 300)); @@ -434,7 +434,7 @@ } TEST_F(MagnificationControllerTest, PanWindowToRight) { - const aura::Env* env = aura::Env::GetInstance(); + const aura::Env* env = Shell::Get()->aura_env(); ui::test::EventGenerator* event_generator = GetEventGenerator(); event_generator->MoveMouseToInHost(gfx::Point(400, 300)); @@ -480,7 +480,7 @@ } TEST_F(MagnificationControllerTest, PanWindowToLeft) { - const aura::Env* env = aura::Env::GetInstance(); + const aura::Env* env = Shell::Get()->aura_env(); ui::test::EventGenerator* event_generator = GetEventGenerator(); event_generator->MoveMouseToInHost(gfx::Point(400, 300));
diff --git a/ash/message_center/ash_message_center_lock_screen_controller.cc b/ash/message_center/ash_message_center_lock_screen_controller.cc index d9cd14af..48864e0 100644 --- a/ash/message_center/ash_message_center_lock_screen_controller.cc +++ b/ash/message_center/ash_message_center_lock_screen_controller.cc
@@ -7,6 +7,7 @@ #include "ash/login/ui/lock_screen.h" #include "ash/login/ui/lock_window.h" #include "ash/public/cpp/ash_features.h" +#include "ash/public/cpp/ash_pref_names.h" #include "ash/session/session_controller.h" #include "ash/shelf/shelf.h" #include "ash/shell.h" @@ -16,6 +17,7 @@ #include "ash/system/toast/toast_manager.h" #include "ash/system/unified/unified_system_tray.h" #include "base/strings/utf_string_conversions.h" +#include "components/prefs/pref_service.h" #include "ui/base/l10n/l10n_util.h" namespace ash { @@ -31,7 +33,17 @@ if (!features::IsLockScreenNotificationsEnabled()) return Mode::HIDE; - return Mode::SHOW; + PrefService* user_prefs = + Shell::Get()->session_controller()->GetLastActiveUserPrefService(); + const std::string& mode = + user_prefs->GetString(prefs::kMessageCenterLockScreenMode); + if (mode == prefs::kMessageCenterLockScreenModeShow) + return Mode::SHOW; + if (mode == prefs::kMessageCenterLockScreenModeHideSensitive && + features::IsLockScreenHideSensitiveNotificationsSupported()) + return Mode::HIDE_SENSITIVE; + + return Mode::HIDE; } namespace {
diff --git a/ash/message_center/message_center_bubble.cc b/ash/message_center/message_center_bubble.cc index fc12048d..0959c5c 100644 --- a/ash/message_center/message_center_bubble.cc +++ b/ash/message_center/message_center_bubble.cc
@@ -106,19 +106,11 @@ message_center_view_->SetMaxHeight(max_height_); } -void MessageCenterBubble::SetSettingsVisible() { - if (message_center_view_) - message_center_view_->SetSettingsVisible(true); - else - initially_settings_visible_ = true; -} - void MessageCenterBubble::InitializeContents( views::TrayBubbleView* new_bubble_view) { bubble_view_ = new_bubble_view; bubble_view_->GetWidget()->AddObserver(this); - message_center_view_ = new MessageCenterView(message_center_, max_height_, - initially_settings_visible_); + message_center_view_ = new MessageCenterView(message_center_, max_height_); bubble_view_->AddChildView(new ContentsView(this, message_center_view_)); message_center_view_->SetMaxHeight(max_height_); message_center_view_->Init();
diff --git a/ash/message_center/message_center_bubble.h b/ash/message_center/message_center_bubble.h index 8cece3e..23d2459 100644 --- a/ash/message_center/message_center_bubble.h +++ b/ash/message_center/message_center_bubble.h
@@ -41,8 +41,6 @@ void SetMaxHeight(int height); int max_height() const { return max_height_; } - void SetSettingsVisible(); - // Called after the bubble view has been constructed. Creates and initializes // the bubble contents. void InitializeContents(views::TrayBubbleView* bubble_view); @@ -67,9 +65,6 @@ // InitializeContents. MessageCenterView* message_center_view_ = nullptr; - // Use settings view as the initially visible content if true. - bool initially_settings_visible_ = false; - int max_height_; base::WeakPtrFactory<MessageCenterBubble> weak_ptr_factory_{this};
diff --git a/ash/message_center/message_center_button_bar.cc b/ash/message_center/message_center_button_bar.cc index d19d3f1e..ea3eb570 100644 --- a/ash/message_center/message_center_button_bar.cc +++ b/ash/message_center/message_center_button_bar.cc
@@ -106,7 +106,6 @@ MessageCenterButtonBar::MessageCenterButtonBar( MessageCenterView* message_center_view, MessageCenter* message_center, - bool settings_initially_visible, bool locked) : message_center_view_(message_center_view), message_center_(message_center), @@ -191,8 +190,8 @@ AddChildView(button_container_); - SetCloseAllButtonEnabled(!settings_initially_visible); - SetBackArrowVisible(settings_initially_visible); + SetCloseAllButtonEnabled(true); + SetBackArrowVisible(false); } MessageCenterButtonBar::~MessageCenterButtonBar() = default;
diff --git a/ash/message_center/message_center_button_bar.h b/ash/message_center/message_center_button_bar.h index 1b7c7e6..800cae8 100644 --- a/ash/message_center/message_center_button_bar.h +++ b/ash/message_center/message_center_button_bar.h
@@ -34,7 +34,6 @@ public: MessageCenterButtonBar(MessageCenterView* message_center_view, message_center::MessageCenter* message_center, - bool settings_initially_visible, bool locked); ~MessageCenterButtonBar() override;
diff --git a/ash/message_center/message_center_controller.cc b/ash/message_center/message_center_controller.cc index 34d5dcf..a654bc8 100644 --- a/ash/message_center/message_center_controller.cc +++ b/ash/message_center/message_center_controller.cc
@@ -6,6 +6,7 @@ #include "ash/message_center/arc_notification_manager_delegate_impl.h" #include "ash/message_center/ash_message_center_lock_screen_controller.h" +#include "ash/public/cpp/ash_pref_names.h" #include "ash/public/cpp/ash_switches.h" #include "ash/public/cpp/vector_icons/vector_icons.h" #include "ash/session/session_controller.h" @@ -15,6 +16,8 @@ #include "base/command_line.h" #include "base/unguessable_token.h" #include "components/account_id/account_id.h" +#include "components/pref_registry/pref_registry_syncable.h" +#include "components/prefs/pref_registry_simple.h" #include "ui/base/l10n/l10n_util.h" #include "ui/message_center/message_center.h" #include "ui/message_center/public/cpp/notification.h" @@ -26,6 +29,15 @@ namespace ash { +// static +void MessageCenterController::RegisterProfilePrefs( + PrefRegistrySimple* registry) { + registry->RegisterStringPref( + prefs::kMessageCenterLockScreenMode, + prefs::kMessageCenterLockScreenModeHide, + user_prefs::PrefRegistrySyncable::SYNCABLE_PREF | PrefRegistry::PUBLIC); +} + namespace { // A notification blocker that unconditionally blocks toasts. Implements
diff --git a/ash/message_center/message_center_controller.h b/ash/message_center/message_center_controller.h index 09c2324e..0ee7df7 100644 --- a/ash/message_center/message_center_controller.h +++ b/ash/message_center/message_center_controller.h
@@ -16,6 +16,8 @@ #include "mojo/public/cpp/bindings/associated_binding.h" #include "mojo/public/cpp/bindings/binding_set.h" +class PrefRegistrySimple; + namespace message_center { struct NotifierId; } @@ -27,6 +29,8 @@ class ASH_EXPORT MessageCenterController : public mojom::AshMessageCenterController { public: + static void RegisterProfilePrefs(PrefRegistrySimple* registry); + MessageCenterController(); ~MessageCenterController() override;
diff --git a/ash/message_center/message_center_ui_controller.cc b/ash/message_center/message_center_ui_controller.cc index 246ce4f..111d1bba 100644 --- a/ash/message_center/message_center_ui_controller.cc +++ b/ash/message_center/message_center_ui_controller.cc
@@ -107,16 +107,6 @@ popups_visible_ = false; } -void MessageCenterUiController::ShowNotifierSettingsBubble() { - if (popups_visible_) - HidePopupBubbleInternal(); - - message_center_visible_ = delegate_->ShowNotifierSettings(); - message_center_->SetVisibility(message_center::VISIBILITY_SETTINGS); - - NotifyUiControllerChanged(); -} - void MessageCenterUiController::OnNotificationAdded( const std::string& notification_id) { OnMessageCenterChanged(); @@ -141,11 +131,6 @@ OnMessageCenterChanged(); } -void MessageCenterUiController::OnNotificationSettingsClicked(bool handled) { - if (!handled) - ShowNotifierSettingsBubble(); -} - void MessageCenterUiController::OnNotificationDisplayed( const std::string& notification_id, const message_center::DisplaySource source) {
diff --git a/ash/message_center/message_center_ui_controller.h b/ash/message_center/message_center_ui_controller.h index a42d600..e06711a2 100644 --- a/ash/message_center/message_center_ui_controller.h +++ b/ash/message_center/message_center_ui_controller.h
@@ -50,9 +50,6 @@ // Returns whether the popup was visible before. bool HidePopupBubble(); - // Toggles the visibility of the settings view in the message center bubble. - void ShowNotifierSettingsBubble(); - bool message_center_visible() { return message_center_visible_; } bool popups_visible() { return popups_visible_; } MessageCenterUiDelegate* delegate() { return delegate_; } @@ -73,7 +70,6 @@ const std::string& notification_id, const base::Optional<int>& button_index, const base::Optional<base::string16>& reply) override; - void OnNotificationSettingsClicked(bool handled) override; void OnNotificationDisplayed( const std::string& notification_id, const message_center::DisplaySource source) override;
diff --git a/ash/message_center/message_center_ui_controller_unittest.cc b/ash/message_center/message_center_ui_controller_unittest.cc index 29469909..16d99722 100644 --- a/ash/message_center/message_center_ui_controller_unittest.cc +++ b/ash/message_center/message_center_ui_controller_unittest.cc
@@ -40,7 +40,6 @@ return show_popups_success_; } void HideMessageCenter() override {} - bool ShowNotifierSettings() override { return true; } bool show_popups_success_ = true; bool show_message_center_success_ = true;
diff --git a/ash/message_center/message_center_ui_delegate.h b/ash/message_center/message_center_ui_delegate.h index 92caa1d..ef427eb7 100644 --- a/ash/message_center/message_center_ui_delegate.h +++ b/ash/message_center/message_center_ui_delegate.h
@@ -32,9 +32,6 @@ // Remove the message center from the UI. virtual void HideMessageCenter() = 0; - - // Display the notifier settings as a bubble. - virtual bool ShowNotifierSettings() = 0; }; } // namespace ash
diff --git a/ash/message_center/message_center_view.cc b/ash/message_center/message_center_view.cc index bba5c357..3337d21 100644 --- a/ash/message_center/message_center_view.cc +++ b/ash/message_center/message_center_view.cc
@@ -181,24 +181,19 @@ // MessageCenterView /////////////////////////////////////////////////////////// -MessageCenterView::MessageCenterView( - MessageCenter* message_center, - int max_height, - bool initially_settings_visible) +MessageCenterView::MessageCenterView(MessageCenter* message_center, + int max_height) : message_center_(message_center), - settings_visible_(initially_settings_visible), + settings_visible_(false), is_locked_(Shell::Get()->session_controller()->IsScreenLocked()) { if (is_locked_ && !AshMessageCenterLockScreenController::IsEnabled()) mode_ = Mode::LOCKED; - else if (initially_settings_visible) - mode_ = Mode::SETTINGS; message_center_->AddObserver(this); set_notify_enter_exit_on_child(true); SetFocusBehavior(views::View::FocusBehavior::NEVER); - button_bar_ = new MessageCenterButtonBar( - this, message_center, initially_settings_visible, is_locked_); + button_bar_ = new MessageCenterButtonBar(this, message_center, is_locked_); button_bar_->SetCloseAllButtonEnabled(false); const int button_height = button_bar_->GetPreferredSize().height(); @@ -523,11 +518,6 @@ void MessageCenterView::AnimationEnded(const gfx::Animation* animation) { DCHECK_EQ(animation, settings_transition_animation_.get()); - message_center::Visibility visibility = - mode_ == Mode::SETTINGS ? message_center::VISIBILITY_SETTINGS - : message_center::VISIBILITY_MESSAGE_CENTER; - message_center_->SetVisibility(visibility); - if (source_view_) { source_view_->SetVisible(false); }
diff --git a/ash/message_center/message_center_view.h b/ash/message_center/message_center_view.h index dbd87d12..c753cbc 100644 --- a/ash/message_center/message_center_view.h +++ b/ash/message_center/message_center_view.h
@@ -48,8 +48,7 @@ public views::ViewObserver { public: MessageCenterView(message_center::MessageCenter* message_center, - int max_height, - bool initially_settings_visible); + int max_height); ~MessageCenterView() override; void Init();
diff --git a/ash/message_center/message_center_view_unittest.cc b/ash/message_center/message_center_view_unittest.cc index 762851e..2f0838e 100644 --- a/ash/message_center/message_center_view_unittest.cc +++ b/ash/message_center/message_center_view_unittest.cc
@@ -13,12 +13,16 @@ #include "ash/message_center/message_center_style.h" #include "ash/message_center/message_list_view.h" #include "ash/public/cpp/ash_features.h" +#include "ash/public/cpp/ash_pref_names.h" +#include "ash/session/session_controller.h" +#include "ash/shell.h" #include "ash/test/ash_test_base.h" #include "base/logging.h" #include "base/macros.h" #include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_feature_list.h" +#include "components/prefs/pref_service.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/message_center/fake_message_center.h" #include "ui/message_center/notification_list.h" @@ -127,9 +131,7 @@ // in it, hence MockMessageCenterView. class MockMessageCenterView : public MessageCenterView { public: - MockMessageCenterView(MessageCenter* message_center, - int max_height, - bool initially_settings_visible); + MockMessageCenterView(MessageCenter* message_center, int max_height); bool SetRepositionTarget() override; @@ -140,11 +142,8 @@ }; MockMessageCenterView::MockMessageCenterView(MessageCenter* message_center, - int max_height, - bool initially_settings_visible) - : MessageCenterView(message_center, - max_height, - initially_settings_visible) {} + int max_height) + : MessageCenterView(message_center, max_height) {} // Always say that the current reposition session is still active, by // returning true. Normally the reposition session is set based on where the @@ -209,9 +208,9 @@ void WaitForAnimationToFinish(); - private: void SetLockScreenNotificationsEnabled(); + private: views::View* MakeParent(views::View* child1, views::View* child2); // The ownership map of notifications; the key is the id. @@ -223,25 +222,18 @@ std::unique_ptr<base::RunLoop> run_loop_; - bool is_lock_screen_notifications_enabled_; base::test::ScopedFeatureList scoped_feature_list_; DISALLOW_COPY_AND_ASSIGN(MessageCenterViewTest); }; -MessageCenterViewTest::MessageCenterViewTest() - : is_lock_screen_notifications_enabled_(GetParam()) {} +MessageCenterViewTest::MessageCenterViewTest() = default; MessageCenterViewTest::~MessageCenterViewTest() = default; void MessageCenterViewTest::SetUp() { AshTestBase::SetUp(); - if (is_lock_screen_notifications_enabled_) { - SetLockScreenNotificationsEnabled(); - ASSERT_TRUE(AshMessageCenterLockScreenController::IsEnabled()); - } - MessageCenterView::disable_animation_for_testing = true; message_center_.reset(new FakeMessageCenterImpl()); @@ -268,7 +260,7 @@ // Then create a new MockMessageCenterView with that single notification. message_center_view_.reset( - new MockMessageCenterView(message_center_.get(), 600, false)); + new MockMessageCenterView(message_center_.get(), 600)); GetMessageCenterView()->SetBounds(0, 0, 380, 100); message_center_view_->SetNotifications(notifications); message_center_view_->set_owned_by_client(); @@ -277,6 +269,7 @@ views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP); params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; params.bounds = gfx::Rect(50, 50, 650, 650); + params.context = CurrentContext(); widget_->Init(params); views::View* root = widget_->GetRootView(); root->AddChildView(message_center_view_.get()); @@ -420,11 +413,18 @@ void MessageCenterViewTest::SetLockScreenNotificationsEnabled() { scoped_feature_list_.InitAndEnableFeature(features::kLockScreenNotifications); + + PrefService* user_prefs = + Shell::Get()->session_controller()->GetActivePrefService(); + user_prefs->SetString(prefs::kMessageCenterLockScreenMode, + prefs::kMessageCenterLockScreenModeShow); + + ASSERT_TRUE(AshMessageCenterLockScreenController::IsEnabled()); } /* Unit tests *****************************************************************/ -TEST_P(MessageCenterViewTest, CallTest) { +TEST_F(MessageCenterViewTest, CallTest) { // Verify that this didn't generate more than 2 Layout() call per descendant // NotificationView or more than a total of 20 GetPreferredSize() and // GetHeightForWidth() calls per descendant NotificationView. 20 is a very @@ -436,7 +436,7 @@ GetNotificationCount() * 20); } -TEST_P(MessageCenterViewTest, Size) { +TEST_F(MessageCenterViewTest, Size) { EXPECT_EQ(2, GetMessageListView()->child_count()); EXPECT_EQ(GetMessageListView()->height(), GetCalculatedMessageListViewHeight()); @@ -454,7 +454,7 @@ // TODO(tetsui): The test is broken because there's no guarantee anymore that // height would change after setting longer message, as NotificationViewMD // implements collapse / expand functionality of long message. -TEST_P(MessageCenterViewTest, DISABLED_SizeAfterUpdate) { +TEST_F(MessageCenterViewTest, DISABLED_SizeAfterUpdate) { EXPECT_EQ(2, GetMessageListView()->child_count()); int width = GetMessageListView()->width() - GetMessageListView()->GetInsets().width(); @@ -495,7 +495,7 @@ GetMessageListView()->GetInsets().height()); } -TEST_P(MessageCenterViewTest, SizeAfterUpdateBelowWithRepositionTarget) { +TEST_F(MessageCenterViewTest, SizeAfterUpdateBelowWithRepositionTarget) { EXPECT_EQ(2, GetMessageListView()->child_count()); // Make sure that notification 2 is placed above notification 1. EXPECT_LT(GetNotificationView(kNotificationId2)->bounds().y(), @@ -525,7 +525,7 @@ GetMessageListView()->GetInsets().height()); } -TEST_P(MessageCenterViewTest, SizeAfterUpdateOfRepositionTarget) { +TEST_F(MessageCenterViewTest, SizeAfterUpdateOfRepositionTarget) { EXPECT_EQ(2, GetMessageListView()->child_count()); // Make sure that notification 2 is placed above notification 1. EXPECT_LT(GetNotificationView(kNotificationId2)->bounds().y(), @@ -555,7 +555,7 @@ GetMessageListView()->GetInsets().height()); } -TEST_P(MessageCenterViewTest, SizeAfterRemove) { +TEST_F(MessageCenterViewTest, SizeAfterRemove) { int original_height = GetMessageListView()->height(); EXPECT_EQ(2, GetMessageListView()->child_count()); RemoveNotification(kNotificationId1, false); @@ -569,7 +569,7 @@ EXPECT_EQ(original_height, GetMessageListView()->height()); } -TEST_P(MessageCenterViewTest, PositionAfterUpdate) { +TEST_F(MessageCenterViewTest, PositionAfterUpdate) { // Make sure that the notification 2 is placed above the notification 1. EXPECT_LT(GetNotificationView(kNotificationId2)->bounds().y(), GetNotificationView(kNotificationId1)->bounds().y()); @@ -599,7 +599,7 @@ current_vertical_pos_from_bottom); } -TEST_P(MessageCenterViewTest, PositionAfterRemove) { +TEST_F(MessageCenterViewTest, PositionAfterRemove) { // Make sure that the notification 2 is placed above the notification 1. EXPECT_LT(GetNotificationView(kNotificationId2)->bounds().y(), GetNotificationView(kNotificationId1)->bounds().y()); @@ -636,7 +636,7 @@ EXPECT_EQ(previous_height, GetMessageListView()->height()); } -TEST_P(MessageCenterViewTest, CloseButton) { +TEST_F(MessageCenterViewTest, CloseButton) { views::Button* close_button = GetButtonBar()->GetCloseAllButtonForTest(); EXPECT_NE(nullptr, close_button); @@ -645,7 +645,7 @@ EXPECT_TRUE(GetMessageCenter()->remove_all_closable_notification_called_); } -TEST_P(MessageCenterViewTest, CloseButtonEnablity) { +TEST_F(MessageCenterViewTest, CloseButtonEnablity) { views::Button* close_button = GetButtonBar()->GetCloseAllButtonForTest(); EXPECT_NE(nullptr, close_button); @@ -742,7 +742,7 @@ EXPECT_FALSE(close_button->enabled()); } -TEST_P(MessageCenterViewTest, CheckModeWithSettingsVisibleAndHidden) { +TEST_F(MessageCenterViewTest, CheckModeWithSettingsVisibleAndHidden) { // Check the initial state. EXPECT_EQ(Mode::NOTIFICATIONS, GetMessageCenterViewInternalMode()); // Show the settings. @@ -753,7 +753,7 @@ EXPECT_EQ(Mode::NOTIFICATIONS, GetMessageCenterViewInternalMode()); } -TEST_P(MessageCenterViewTest, CheckModeWithRemovingAndAddingNotifications) { +TEST_F(MessageCenterViewTest, CheckModeWithRemovingAndAddingNotifications) { // Check the initial state. EXPECT_EQ(Mode::NOTIFICATIONS, GetMessageCenterViewInternalMode()); @@ -772,7 +772,7 @@ EXPECT_EQ(Mode::NOTIFICATIONS, GetMessageCenterViewInternalMode()); } -TEST_P(MessageCenterViewTest, CheckModeWithSettingsVisibleAndHiddenOnEmpty) { +TEST_F(MessageCenterViewTest, CheckModeWithSettingsVisibleAndHiddenOnEmpty) { // Set up by removing all existing notifications. RemoveDefaultNotifications(); @@ -786,7 +786,7 @@ EXPECT_EQ(Mode::NO_NOTIFICATIONS, GetMessageCenterViewInternalMode()); } -TEST_P(MessageCenterViewTest, +TEST_F(MessageCenterViewTest, CheckModeWithRemovingNotificationDuringSettingsVisible) { // Check the initial state. EXPECT_EQ(Mode::NOTIFICATIONS, GetMessageCenterViewInternalMode()); @@ -804,7 +804,7 @@ EXPECT_EQ(Mode::NO_NOTIFICATIONS, GetMessageCenterViewInternalMode()); } -TEST_P(MessageCenterViewTest, +TEST_F(MessageCenterViewTest, CheckModeWithAddingNotificationDuringSettingsVisible) { // Set up by removing all existing notifications. RemoveDefaultNotifications(); @@ -831,16 +831,13 @@ EXPECT_EQ(Mode::NOTIFICATIONS, GetMessageCenterViewInternalMode()); } -TEST_P(MessageCenterViewTest, CheckModeWithLockingAndUnlocking) { +TEST_F(MessageCenterViewTest, CheckModeWithLockingAndUnlocking) { // Check the initial state. EXPECT_EQ(Mode::NOTIFICATIONS, GetMessageCenterViewInternalMode()); // Lock! SetLockedState(true); - EXPECT_EQ(AshMessageCenterLockScreenController::IsEnabled() - ? Mode::NOTIFICATIONS - : Mode::LOCKED, - GetMessageCenterViewInternalMode()); + EXPECT_EQ(Mode::LOCKED, GetMessageCenterViewInternalMode()); // Unlock! SetLockedState(false); @@ -852,33 +849,52 @@ // Lock! SetLockedState(true); - EXPECT_EQ(AshMessageCenterLockScreenController::IsEnabled() - ? Mode::NO_NOTIFICATIONS - : Mode::LOCKED, - GetMessageCenterViewInternalMode()); + EXPECT_EQ(Mode::LOCKED, GetMessageCenterViewInternalMode()); // Unlock! SetLockedState(false); EXPECT_EQ(Mode::NO_NOTIFICATIONS, GetMessageCenterViewInternalMode()); } -TEST_P(MessageCenterViewTest, CheckModeWithRemovingNotificationDuringLock) { +TEST_F(MessageCenterViewTest, + CheckModeWithLockingAndUnlockingWithLockScreenNotificationEnabled) { + SetLockScreenNotificationsEnabled(); + // Check the initial state. EXPECT_EQ(Mode::NOTIFICATIONS, GetMessageCenterViewInternalMode()); // Lock! SetLockedState(true); - EXPECT_EQ(AshMessageCenterLockScreenController::IsEnabled() - ? Mode::NOTIFICATIONS - : Mode::LOCKED, - GetMessageCenterViewInternalMode()); + EXPECT_EQ(Mode::NOTIFICATIONS, GetMessageCenterViewInternalMode()); + + // Unlock! + SetLockedState(false); + EXPECT_EQ(Mode::NOTIFICATIONS, GetMessageCenterViewInternalMode()); // Remove all existing notifications. RemoveDefaultNotifications(); - EXPECT_EQ(AshMessageCenterLockScreenController::IsEnabled() - ? Mode::NO_NOTIFICATIONS - : Mode::LOCKED, - GetMessageCenterViewInternalMode()); + EXPECT_EQ(Mode::NO_NOTIFICATIONS, GetMessageCenterViewInternalMode()); + + // Lock! + SetLockedState(true); + EXPECT_EQ(Mode::NO_NOTIFICATIONS, GetMessageCenterViewInternalMode()); + + // Unlock! + SetLockedState(false); + EXPECT_EQ(Mode::NO_NOTIFICATIONS, GetMessageCenterViewInternalMode()); +} + +TEST_F(MessageCenterViewTest, CheckModeWithRemovingNotificationDuringLock) { + // Check the initial state. + EXPECT_EQ(Mode::NOTIFICATIONS, GetMessageCenterViewInternalMode()); + + // Lock! + SetLockedState(true); + EXPECT_EQ(Mode::LOCKED, GetMessageCenterViewInternalMode()); + + // Remove all existing notifications. + RemoveDefaultNotifications(); + EXPECT_EQ(Mode::LOCKED, GetMessageCenterViewInternalMode()); // Unlock! SetLockedState(false); @@ -886,7 +902,29 @@ EXPECT_EQ(Mode::NO_NOTIFICATIONS, GetMessageCenterViewInternalMode()); } -TEST_P(MessageCenterViewTest, LockScreen) { +TEST_F( + MessageCenterViewTest, + CheckModeWithRemovingNotificationDuringLockWithLockScreenNotificationEnabled) { + SetLockScreenNotificationsEnabled(); + + // Check the initial state. + EXPECT_EQ(Mode::NOTIFICATIONS, GetMessageCenterViewInternalMode()); + + // Lock! + SetLockedState(true); + EXPECT_EQ(Mode::NOTIFICATIONS, GetMessageCenterViewInternalMode()); + + // Remove all existing notifications. + RemoveDefaultNotifications(); + EXPECT_EQ(Mode::NO_NOTIFICATIONS, GetMessageCenterViewInternalMode()); + + // Unlock! + SetLockedState(false); + + EXPECT_EQ(Mode::NO_NOTIFICATIONS, GetMessageCenterViewInternalMode()); +} + +TEST_F(MessageCenterViewTest, LockScreen) { EXPECT_TRUE(GetNotificationView(kNotificationId1)->IsDrawn()); EXPECT_TRUE(GetNotificationView(kNotificationId2)->IsDrawn()); @@ -907,39 +945,21 @@ // Lock! SetLockedState(true); - if (AshMessageCenterLockScreenController::IsEnabled()) { - EXPECT_TRUE(GetNotificationView(kNotificationId1)->IsDrawn()); - EXPECT_TRUE(GetNotificationView(kNotificationId2)->IsDrawn()); - } else { - EXPECT_FALSE(GetNotificationView(kNotificationId1)->IsDrawn()); - EXPECT_FALSE(GetNotificationView(kNotificationId2)->IsDrawn()); - } + EXPECT_FALSE(GetNotificationView(kNotificationId1)->IsDrawn()); + EXPECT_FALSE(GetNotificationView(kNotificationId2)->IsDrawn()); GetMessageCenterView()->SizeToPreferredSize(); - if (AshMessageCenterLockScreenController::IsEnabled()) { - EXPECT_NE(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); - EXPECT_NE(kEmptyMessageCenterViewHeight, GetMessageCenterView()->height()); - } else { - EXPECT_EQ(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); - } + EXPECT_EQ(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); RemoveNotification(kNotificationId1, false); GetMessageCenterView()->SizeToPreferredSize(); - if (AshMessageCenterLockScreenController::IsEnabled()) { - EXPECT_NE(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); - EXPECT_NE(kEmptyMessageCenterViewHeight, GetMessageCenterView()->height()); - } else { - EXPECT_EQ(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); - } + EXPECT_EQ(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); RemoveNotification(kNotificationId2, false); GetMessageCenterView()->SizeToPreferredSize(); - if (AshMessageCenterLockScreenController::IsEnabled()) - EXPECT_EQ(kEmptyMessageCenterViewHeight, GetMessageCenterView()->height()); - else - EXPECT_EQ(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); + EXPECT_EQ(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); AddNotification(std::make_unique<Notification>( NOTIFICATION_TYPE_SIMPLE, std::string(kNotificationId1), @@ -947,26 +967,13 @@ base::UTF8ToUTF16("display source"), GURL(), NotifierId(NotifierId::APPLICATION, "extension_id"), message_center::RichNotificationData(), nullptr)); - if (AshMessageCenterLockScreenController::IsEnabled()) - EXPECT_TRUE(GetNotificationView(kNotificationId1)->IsDrawn()); - else - EXPECT_FALSE(GetNotificationView(kNotificationId1)->IsDrawn()); + EXPECT_FALSE(GetNotificationView(kNotificationId1)->IsDrawn()); GetMessageCenterView()->SizeToPreferredSize(); - if (AshMessageCenterLockScreenController::IsEnabled()) { - EXPECT_NE(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); - EXPECT_NE(kEmptyMessageCenterViewHeight, GetMessageCenterView()->height()); - } else { - EXPECT_EQ(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); - } + EXPECT_EQ(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); - if (AshMessageCenterLockScreenController::IsEnabled()) { - EXPECT_TRUE(close_button->visible()); - EXPECT_TRUE(quiet_mode_button->visible()); - } else { - EXPECT_FALSE(close_button->visible()); - EXPECT_FALSE(quiet_mode_button->visible()); - } + EXPECT_FALSE(close_button->visible()); + EXPECT_FALSE(quiet_mode_button->visible()); EXPECT_FALSE(settings_button->visible()); EXPECT_FALSE(collapse_button->visible()); @@ -986,31 +993,104 @@ // Lock! SetLockedState(true); - if (AshMessageCenterLockScreenController::IsEnabled()) - EXPECT_TRUE(GetNotificationView(kNotificationId1)->IsDrawn()); - else - EXPECT_FALSE(GetNotificationView(kNotificationId1)->IsDrawn()); + EXPECT_FALSE(GetNotificationView(kNotificationId1)->IsDrawn()); GetMessageCenterView()->SizeToPreferredSize(); - if (AshMessageCenterLockScreenController::IsEnabled()) { - EXPECT_NE(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); - EXPECT_NE(kEmptyMessageCenterViewHeight, GetMessageCenterView()->height()); - } else { - EXPECT_EQ(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); - } + EXPECT_EQ(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); - if (AshMessageCenterLockScreenController::IsEnabled()) { - EXPECT_TRUE(close_button->visible()); - EXPECT_TRUE(quiet_mode_button->visible()); - } else { - EXPECT_FALSE(close_button->visible()); - EXPECT_FALSE(quiet_mode_button->visible()); - } + EXPECT_FALSE(close_button->visible()); + EXPECT_FALSE(quiet_mode_button->visible()); EXPECT_FALSE(settings_button->visible()); EXPECT_FALSE(collapse_button->visible()); } -TEST_P(MessageCenterViewTest, NoNotification) { +TEST_F(MessageCenterViewTest, LockScreenWithLockScreenNotificationEnabled) { + SetLockScreenNotificationsEnabled(); + + EXPECT_TRUE(GetNotificationView(kNotificationId1)->IsDrawn()); + EXPECT_TRUE(GetNotificationView(kNotificationId2)->IsDrawn()); + + views::Button* close_button = GetButtonBar()->GetCloseAllButtonForTest(); + ASSERT_TRUE(close_button); + views::Button* quiet_mode_button = + GetButtonBar()->GetQuietModeButtonForTest(); + ASSERT_TRUE(quiet_mode_button); + views::Button* settings_button = GetButtonBar()->GetSettingsButtonForTest(); + ASSERT_TRUE(settings_button); + views::Button* collapse_button = GetButtonBar()->GetCollapseButtonForTest(); + ASSERT_TRUE(collapse_button); + + EXPECT_TRUE(close_button->visible()); + EXPECT_TRUE(quiet_mode_button->visible()); + EXPECT_TRUE(settings_button->visible()); + + // Lock! + SetLockedState(true); + + EXPECT_TRUE(GetNotificationView(kNotificationId1)->IsDrawn()); + EXPECT_TRUE(GetNotificationView(kNotificationId2)->IsDrawn()); + + GetMessageCenterView()->SizeToPreferredSize(); + EXPECT_NE(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); + EXPECT_NE(kEmptyMessageCenterViewHeight, GetMessageCenterView()->height()); + + RemoveNotification(kNotificationId1, false); + + GetMessageCenterView()->SizeToPreferredSize(); + EXPECT_NE(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); + EXPECT_NE(kEmptyMessageCenterViewHeight, GetMessageCenterView()->height()); + + RemoveNotification(kNotificationId2, false); + + GetMessageCenterView()->SizeToPreferredSize(); + EXPECT_EQ(kEmptyMessageCenterViewHeight, GetMessageCenterView()->height()); + + AddNotification(std::make_unique<Notification>( + NOTIFICATION_TYPE_SIMPLE, std::string(kNotificationId1), + base::UTF8ToUTF16("title1"), base::UTF8ToUTF16("message"), gfx::Image(), + base::UTF8ToUTF16("display source"), GURL(), + NotifierId(NotifierId::APPLICATION, "extension_id"), + message_center::RichNotificationData(), nullptr)); + EXPECT_TRUE(GetNotificationView(kNotificationId1)->IsDrawn()); + + GetMessageCenterView()->SizeToPreferredSize(); + EXPECT_NE(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); + EXPECT_NE(kEmptyMessageCenterViewHeight, GetMessageCenterView()->height()); + + EXPECT_TRUE(close_button->visible()); + EXPECT_TRUE(quiet_mode_button->visible()); + EXPECT_FALSE(settings_button->visible()); + EXPECT_FALSE(collapse_button->visible()); + + // Unlock! + SetLockedState(false); + + EXPECT_TRUE(GetNotificationView(kNotificationId1)->IsDrawn()); + + GetMessageCenterView()->SizeToPreferredSize(); + EXPECT_NE(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); + EXPECT_NE(kEmptyMessageCenterViewHeight, GetMessageCenterView()->height()); + + EXPECT_TRUE(close_button->visible()); + EXPECT_TRUE(quiet_mode_button->visible()); + EXPECT_TRUE(settings_button->visible()); + + // Lock! + SetLockedState(true); + + EXPECT_TRUE(GetNotificationView(kNotificationId1)->IsDrawn()); + + GetMessageCenterView()->SizeToPreferredSize(); + EXPECT_NE(kLockedMessageCenterViewHeight, GetMessageCenterView()->height()); + EXPECT_NE(kEmptyMessageCenterViewHeight, GetMessageCenterView()->height()); + + EXPECT_TRUE(close_button->visible()); + EXPECT_TRUE(quiet_mode_button->visible()); + EXPECT_FALSE(settings_button->visible()); + EXPECT_FALSE(collapse_button->visible()); +} + +TEST_F(MessageCenterViewTest, NoNotification) { GetMessageCenterView()->SizeToPreferredSize(); EXPECT_NE(kEmptyMessageCenterViewHeight, GetMessageCenterView()->height()); RemoveNotification(kNotificationId1, false); @@ -1031,8 +1111,4 @@ EXPECT_NE(kEmptyMessageCenterViewHeight, GetMessageCenterView()->height()); } -INSTANTIATE_TEST_CASE_P(IsLockScreenNotificationsEnabled, - MessageCenterViewTest, - testing::Bool()); - } // namespace ash
diff --git a/ash/message_center/message_list_view.cc b/ash/message_center/message_list_view.cc index 0d4a9a6..8d305ad 100644 --- a/ash/message_center/message_list_view.cc +++ b/ash/message_center/message_list_view.cc
@@ -328,6 +328,27 @@ gfx::Insets(message_center::kMarginBetweenItemsInList))); } +int MessageListView::GetCountAboveVisibleRect() const { + DCHECK(scroller_); + + int height = 0; + int padding = 0; + for (int i = 0; i < child_count(); ++i) { + const views::View* child = child_at(i); + if (!child->visible()) + continue; + if (!IsValidChild(child)) + continue; + + height += child->bounds().height() + padding; + padding = GetMarginBetweenItems(); + + if (height >= scroller_->GetVisibleRect().y()) + return i; + } + return child_count(); +} + int MessageListView::GetHeightBelowVisibleRect() const { DCHECK(scroller_);
diff --git a/ash/message_center/message_list_view.h b/ash/message_center/message_list_view.h index c914d617..8492b81 100644 --- a/ash/message_center/message_list_view.h +++ b/ash/message_center/message_list_view.h
@@ -70,6 +70,9 @@ void SetBorderPadding(); + // Get the number of notifications above ScrollView's visible rect. + int GetCountAboveVisibleRect() const; + // Get the distance from the bottom of ScrollView's visible rect to the bottom // of the notification list. int GetHeightBelowVisibleRect() const;
diff --git a/ash/message_center/message_list_view_unittest.cc b/ash/message_center/message_list_view_unittest.cc index 9931496..f9644139 100644 --- a/ash/message_center/message_list_view_unittest.cc +++ b/ash/message_center/message_list_view_unittest.cc
@@ -110,6 +110,7 @@ views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP); params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; params.bounds = gfx::Rect(50, 50, 650, 650); + params.context = CurrentContext(); widget_->Init(params); views::View* root = widget_->GetRootView(); root->AddChildView(message_list_view_.get());
diff --git a/ash/metrics/desktop_task_switch_metric_recorder_unittest.cc b/ash/metrics/desktop_task_switch_metric_recorder_unittest.cc index 19e8d82..ff18c9c 100644 --- a/ash/metrics/desktop_task_switch_metric_recorder_unittest.cc +++ b/ash/metrics/desktop_task_switch_metric_recorder_unittest.cc
@@ -8,6 +8,7 @@ #include "ash/shell.h" #include "ash/test/ash_test_base.h" +#include "ash/window_factory.h" #include "base/test/metrics/user_action_tester.h" #include "ui/aura/client/window_types.h" #include "ui/aura/test/test_window_delegate.h" @@ -101,8 +102,8 @@ std::unique_ptr<aura::Window> DesktopTaskSwitchMetricRecorderTest::CreatePositionableWindow() const { - std::unique_ptr<aura::Window> window(new aura::Window( - aura::test::TestWindowDelegate::CreateSelfDestroyingDelegate())); + std::unique_ptr<aura::Window> window = window_factory::NewWindow( + aura::test::TestWindowDelegate::CreateSelfDestroyingDelegate()); window->SetType(aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_NOT_DRAWN); return window; @@ -110,8 +111,8 @@ std::unique_ptr<aura::Window> DesktopTaskSwitchMetricRecorderTest::CreateNonPositionableWindow() const { - std::unique_ptr<aura::Window> window(new aura::Window( - aura::test::TestWindowDelegate::CreateSelfDestroyingDelegate())); + std::unique_ptr<aura::Window> window = window_factory::NewWindow( + aura::test::TestWindowDelegate::CreateSelfDestroyingDelegate()); window->SetType(aura::client::WINDOW_TYPE_UNKNOWN); window->Init(ui::LAYER_NOT_DRAWN); return window;
diff --git a/ash/mojo_interface_factory.cc b/ash/mojo_interface_factory.cc index 84a4c0b4..51b2c31 100644 --- a/ash/mojo_interface_factory.cc +++ b/ash/mojo_interface_factory.cc
@@ -32,7 +32,6 @@ #include "ash/shelf/shelf_controller.h" #include "ash/shell.h" #include "ash/shell_delegate.h" -#include "ash/shell_state.h" #include "ash/shutdown_controller.h" #include "ash/system/locale/locale_notification_controller.h" #include "ash/system/model/system_tray_model.h" @@ -178,10 +177,6 @@ Shell::Get()->shelf_controller()->BindRequest(std::move(request)); } -void BindShellStateOnMainThread(mojom::ShellStateRequest request) { - Shell::Get()->shell_state()->BindRequest(std::move(request)); -} - void BindShutdownControllerRequestOnMainThread( mojom::ShutdownControllerRequest request) { Shell::Get()->shutdown_controller()->BindRequest(std::move(request)); @@ -302,8 +297,6 @@ registry->AddInterface( base::BindRepeating(&BindSessionControllerRequestOnMainThread), main_thread_task_runner); - registry->AddInterface(base::BindRepeating(&BindShellStateOnMainThread), - main_thread_task_runner); registry->AddInterface(base::BindRepeating(&BindShelfRequestOnMainThread), main_thread_task_runner); registry->AddInterface(
diff --git a/ash/public/cpp/OWNERS b/ash/public/cpp/OWNERS index 8da0832..09b138f0 100644 --- a/ash/public/cpp/OWNERS +++ b/ash/public/cpp/OWNERS
@@ -1,3 +1,5 @@ +per-file *shelf*=file://ash/shelf/OWNERS + per-file *.mojom=set noparent per-file *.mojom=file://ipc/SECURITY_OWNERS
diff --git a/ash/public/cpp/app_list/app_list_config.cc b/ash/public/cpp/app_list/app_list_config.cc index f8d20d27..2944e25 100644 --- a/ash/public/cpp/app_list/app_list_config.cc +++ b/ash/public/cpp/app_list/app_list_config.cc
@@ -16,7 +16,7 @@ grid_tile_spacing_(24), grid_icon_dimension_(48), grid_icon_bottom_padding_(3), - grid_title_bottom_padding_(0), + grid_title_top_padding_(86), grid_title_width_(80), grid_title_color_(SK_ColorWHITE), grid_focus_dimension_(64), @@ -46,6 +46,7 @@ folder_unclipped_icon_dimension_(48), folder_icon_radius_(24), folder_background_radius_(4), + folder_bubble_color_(SkColorSetARGB(0x1F, 0xFF, 0xFF, 0xFF)), item_icon_in_folder_icon_dimension_(16), folder_dropping_circle_radius_(39), folder_dropping_delay_(150), @@ -59,7 +60,7 @@ grid_tile_spacing_ = 0; grid_icon_dimension_ = 64; grid_icon_bottom_padding_ = 24; - grid_title_bottom_padding_ = 8; + grid_title_top_padding_ = 82; grid_title_width_ = 96; grid_focus_dimension_ = 80; grid_focus_corner_radius_ = 12; @@ -80,6 +81,7 @@ folder_unclipped_icon_dimension_ = 88; folder_icon_radius_ = 36; folder_background_radius_ = 12; + folder_bubble_color_ = SkColorSetARGB(0x7A, 0xF1, 0xF3, 0xF4); item_icon_in_folder_icon_dimension_ = 32; folder_dropping_circle_radius_ = 44; folder_dropping_delay_ = 0;
diff --git a/ash/public/cpp/app_list/app_list_config.h b/ash/public/cpp/app_list/app_list_config.h index 8a2e4d0..ca37626 100644 --- a/ash/public/cpp/app_list/app_list_config.h +++ b/ash/public/cpp/app_list/app_list_config.h
@@ -30,7 +30,7 @@ int grid_tile_spacing() const { return grid_tile_spacing_; } int grid_icon_dimension() const { return grid_icon_dimension_; } int grid_icon_bottom_padding() const { return grid_icon_bottom_padding_; } - int grid_title_bottom_padding() const { return grid_title_bottom_padding_; } + int grid_title_top_padding() const { return grid_title_top_padding_; } int grid_title_width() const { return grid_title_width_; } int grid_focus_dimension() const { return grid_focus_dimension_; } int grid_focus_corner_radius() const { return grid_focus_corner_radius_; } @@ -73,6 +73,7 @@ } int folder_icon_radius() const { return folder_icon_radius_; } int folder_background_radius() const { return folder_background_radius_; } + int folder_bubble_color() const { return folder_bubble_color_; } int folder_dropping_circle_radius() const { return folder_dropping_circle_radius_; } @@ -146,8 +147,8 @@ // The icon bottom padding in tile views in apps grid view. int grid_icon_bottom_padding_; - // The title bottom padding in tile views in apps grid view. - int grid_title_bottom_padding_; + // The title top padding in tile views in apps grid view. + int grid_title_top_padding_; // The title width and color of tile views in apps grid view. int grid_title_width_; @@ -220,6 +221,9 @@ // The corner radius of folder background. int folder_background_radius_; + // The color of folder bubble. + int folder_bubble_color_; + // The dimension of the item icon in folder icon. int item_icon_in_folder_icon_dimension_;
diff --git a/ash/public/cpp/ash_features.cc b/ash/public/cpp/ash_features.cc index 47b74e7..0dcd9eb 100644 --- a/ash/public/cpp/ash_features.cc +++ b/ash/public/cpp/ash_features.cc
@@ -28,6 +28,13 @@ const base::Feature kLockScreenNotifications{"LockScreenNotifications", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kLockScreenInlineReply{"LockScreenInlineReply", + base::FEATURE_DISABLED_BY_DEFAULT}; + +const base::Feature kLockScreenHideSensitiveNotificationsSupport{ + "LockScreenHideSensitiveNotificationsSupport", + base::FEATURE_ENABLED_BY_DEFAULT}; + const base::Feature kNewWallpaperPicker{"NewWallpaperPicker", base::FEATURE_ENABLED_BY_DEFAULT}; @@ -63,6 +70,15 @@ return base::FeatureList::IsEnabled(kLockScreenNotifications); } +bool IsLockScreenInlineReplyEnabled() { + return base::FeatureList::IsEnabled(kLockScreenInlineReply); +} + +bool IsLockScreenHideSensitiveNotificationsSupported() { + return base::FeatureList::IsEnabled( + kLockScreenHideSensitiveNotificationsSupport); +} + bool IsNewWallpaperPickerEnabled() { static bool use_new_wallpaper_picker = base::FeatureList::IsEnabled(kNewWallpaperPicker); @@ -89,8 +105,8 @@ bool IsViewsLoginEnabled() { // Always show webui login if --show-webui-login is present, which is passed - // by session manager for automatic recovery. Otherwise, only show views login - // if the feature is enabled. + // by session manager for automatic recovery. Otherwise, only show views + // login if the feature is enabled. return !base::CommandLine::ForCurrentProcess()->HasSwitch( ash::switches::kShowWebUiLogin) && base::FeatureList::IsEnabled(kViewsLogin);
diff --git a/ash/public/cpp/ash_features.h b/ash/public/cpp/ash_features.h index 9562912..d23b406 100644 --- a/ash/public/cpp/ash_features.h +++ b/ash/public/cpp/ash_features.h
@@ -39,6 +39,15 @@ // Enables notifications on the lock screen. ASH_PUBLIC_EXPORT extern const base::Feature kLockScreenNotifications; +// Enables inline reply on notifications on the lock screen. +// This option is effective when |kLockScreenNotification| is enabled. +ASH_PUBLIC_EXPORT extern const base::Feature kLockScreenInlineReply; + +// Supports the feature to hide sensitive content in notifications on the lock +// screen. This option is effective when |kLockScreenNotification| is enabled. +ASH_PUBLIC_EXPORT extern const base::Feature + kLockScreenHideSensitiveNotificationsSupport; + // Enables the new wallpaper picker. // TODO(wzang): Remove this after the feature is fully launched. // https://crbug.com/777293. @@ -72,6 +81,10 @@ ASH_PUBLIC_EXPORT bool IsLockScreenNotificationsEnabled(); +ASH_PUBLIC_EXPORT bool IsLockScreenInlineReplyEnabled(); + +ASH_PUBLIC_EXPORT bool IsLockScreenHideSensitiveNotificationsSupported(); + ASH_PUBLIC_EXPORT bool IsNewWallpaperPickerEnabled(); ASH_PUBLIC_EXPORT bool IsNightLightEnabled();
diff --git a/ash/public/cpp/ash_pref_names.cc b/ash/public/cpp/ash_pref_names.cc index 9645824..b20d6c3 100644 --- a/ash/public/cpp/ash_pref_names.cc +++ b/ash/public/cpp/ash_pref_names.cc
@@ -127,6 +127,20 @@ const char kLaunchPaletteOnEjectEvent[] = "settings.launch_palette_on_eject_event"; +// A string pref storing the type of lock screen notification mode. +// "show" -> show notifications on the lock screen +// "hide" -> hide notifications at all on the lock screen (default) +// "hideSensitive" -> hide sensitive content on the lock screen +// (other values are treated as "hide") +const char kMessageCenterLockScreenMode[] = + "ash.message_center.lock_screen_mode"; + +// Value of each options of the lock screen notification settings. They are +// used the pref of ash::prefs::kMessageCenterLockScreenMode. +const char kMessageCenterLockScreenModeShow[] = "show"; +const char kMessageCenterLockScreenModeHide[] = "hide"; +const char kMessageCenterLockScreenModeHideSensitive[] = "hideSensitive"; + // A boolean pref storing the enabled status of the NightLight feature. const char kNightLightEnabled[] = "ash.night_light.enabled";
diff --git a/ash/public/cpp/ash_pref_names.h b/ash/public/cpp/ash_pref_names.h index 230eab5..d445e69 100644 --- a/ash/public/cpp/ash_pref_names.h +++ b/ash/public/cpp/ash_pref_names.h
@@ -56,6 +56,12 @@ ASH_PUBLIC_EXPORT extern const char kEnableStylusTools[]; ASH_PUBLIC_EXPORT extern const char kLaunchPaletteOnEjectEvent[]; +// Lock screen notification settings. +ASH_PUBLIC_EXPORT extern const char kMessageCenterLockScreenMode[]; +ASH_PUBLIC_EXPORT extern const char kMessageCenterLockScreenModeShow[]; +ASH_PUBLIC_EXPORT extern const char kMessageCenterLockScreenModeHide[]; +ASH_PUBLIC_EXPORT extern const char kMessageCenterLockScreenModeHideSensitive[]; + ASH_PUBLIC_EXPORT extern const char kNightLightEnabled[]; ASH_PUBLIC_EXPORT extern const char kNightLightTemperature[]; ASH_PUBLIC_EXPORT extern const char kNightLightScheduleType[];
diff --git a/ash/public/cpp/frame_border_hit_test.cc b/ash/public/cpp/frame_border_hit_test.cc index 151d675..d78b58d 100644 --- a/ash/public/cpp/frame_border_hit_test.cc +++ b/ash/public/cpp/frame_border_hit_test.cc
@@ -6,6 +6,7 @@ #include "ash/public/cpp/ash_constants.h" #include "ui/aura/env.h" +#include "ui/aura/window.h" #include "ui/base/hit_test.h" #include "ui/views/view_properties.h" #include "ui/views/widget/widget.h" @@ -19,7 +20,7 @@ gfx::Rect expanded_bounds = view->bounds(); int outside_bounds = kResizeOutsideBoundsSize; - if (aura::Env::GetInstance()->is_touch_down()) + if (view->GetWidget()->GetNativeWindow()->env()->is_touch_down()) outside_bounds *= kResizeOutsideBoundsScaleForTouch; expanded_bounds.Inset(-outside_bounds, -outside_bounds);
diff --git a/ash/public/cpp/shelf_struct_mojom_traits.h b/ash/public/cpp/shelf_struct_mojom_traits.h index f53adab..4806b1c9 100644 --- a/ash/public/cpp/shelf_struct_mojom_traits.h +++ b/ash/public/cpp/shelf_struct_mojom_traits.h
@@ -66,6 +66,8 @@ return ash::mojom::ShelfItemStatus::CLOSED; case ash::STATUS_RUNNING: return ash::mojom::ShelfItemStatus::RUNNING; + case ash::STATUS_ACTIVE: + return ash::mojom::ShelfItemStatus::ACTIVE; case ash::STATUS_ATTENTION: return ash::mojom::ShelfItemStatus::ATTENTION; } @@ -82,6 +84,9 @@ case ash::mojom::ShelfItemStatus::RUNNING: *out = ash::STATUS_RUNNING; return true; + case ash::mojom::ShelfItemStatus::ACTIVE: + *out = ash::STATUS_ACTIVE; + return true; case ash::mojom::ShelfItemStatus::ATTENTION: *out = ash::STATUS_ATTENTION; return true;
diff --git a/ash/public/cpp/shelf_types.h b/ash/public/cpp/shelf_types.h index 8a8d46bc..0527851 100644 --- a/ash/public/cpp/shelf_types.h +++ b/ash/public/cpp/shelf_types.h
@@ -65,7 +65,14 @@ // The background when split view mode is active. SHELF_BACKGROUND_SPLIT_VIEW, - // The background when login/lock is active and the wallpaper is not blurred. + // The background when OOBE is active. + SHELF_BACKGROUND_OOBE, + + // The background when login/lock/user-add is active. + SHELF_BACKGROUND_LOGIN, + + // The background when login/lock/user-add is active and the wallpaper is not + // blurred. SHELF_BACKGROUND_LOGIN_NONBLURRED_WALLPAPER, }; @@ -135,6 +142,8 @@ STATUS_CLOSED, // A shelf item that has live instance. STATUS_RUNNING, + // A shelf item one of whose windows is currently active. + STATUS_ACTIVE, // A shelf item that needs user's attention. STATUS_ATTENTION, };
diff --git a/ash/public/interfaces/BUILD.gn b/ash/public/interfaces/BUILD.gn index 2d824fd1..cd8d7b9 100644 --- a/ash/public/interfaces/BUILD.gn +++ b/ash/public/interfaces/BUILD.gn
@@ -46,7 +46,6 @@ "process_creation_time_recorder.mojom", "session_controller.mojom", "shelf.mojom", - "shell_state.mojom", "shutdown.mojom", "split_view.mojom", "system_tray.mojom",
diff --git a/ash/public/interfaces/shelf.mojom b/ash/public/interfaces/shelf.mojom index 36d5defa..ba09d3d 100644 --- a/ash/public/interfaces/shelf.mojom +++ b/ash/public/interfaces/shelf.mojom
@@ -24,6 +24,7 @@ enum ShelfItemStatus { CLOSED, // A closed shelf item, i.e. has no live instance. RUNNING, // A shelf item that has live instance. + ACTIVE, // A shelf item that owns the currently active window. ATTENTION, // A shelf item that needs user's attention. };
diff --git a/ash/public/interfaces/shell_state.mojom b/ash/public/interfaces/shell_state.mojom deleted file mode 100644 index 675cfc0..0000000 --- a/ash/public/interfaces/shell_state.mojom +++ /dev/null
@@ -1,17 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -module ash.mojom; - -// Allows access to ash::Shell state. -interface ShellState { - // The client is immediately notified with the initial state. - AddClient(ShellStateClient client); -}; - -interface ShellStateClient { - // Updates the client's cache of the display id to use for new top-level - // windows. - SetDisplayIdForNewWindows(int64 display_id); -};
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc index 629f173..a361842 100644 --- a/ash/root_window_controller.cc +++ b/ash/root_window_controller.cc
@@ -43,6 +43,7 @@ #include "ash/touch/touch_hud_debug.h" #include "ash/touch/touch_observer_hud.h" #include "ash/wallpaper/wallpaper_widget_controller.h" +#include "ash/window_factory.h" #include "ash/wm/always_on_top_controller.h" #include "ash/wm/container_finder.h" #include "ash/wm/fullscreen_window_finder.h" @@ -246,7 +247,8 @@ const char* name, aura::Window* parent) { aura::Window* window = - new aura::Window(nullptr, aura::client::WINDOW_TYPE_UNKNOWN); + window_factory::NewWindow(nullptr, aura::client::WINDOW_TYPE_UNKNOWN) + .release(); window->Init(ui::LAYER_NOT_DRAWN); window->set_id(window_id); window->SetName(name);
diff --git a/ash/root_window_controller_unittest.cc b/ash/root_window_controller_unittest.cc index 25d07f0..1e97ff1a 100644 --- a/ash/root_window_controller_unittest.cc +++ b/ash/root_window_controller_unittest.cc
@@ -11,6 +11,7 @@ #include "ash/session/test_session_controller_client.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" +#include "ash/window_factory.h" #include "ash/wm/system_modal_container_layout_manager.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h" #include "ash/wm/window_properties.h" @@ -29,6 +30,7 @@ #include "ui/base/ime/dummy_text_input_client.h" #include "ui/base/ime/input_method.h" #include "ui/base/ime/text_input_client.h" +#include "ui/base/ui_base_features.h" #include "ui/display/manager/display_manager.h" #include "ui/display/test/display_manager_test_api.h" #include "ui/events/test/event_generator.h" @@ -178,6 +180,7 @@ Widget::InitParams params; params.bounds = gfx::Rect(650, 10, 100, 100); params.type = Widget::InitParams::TYPE_CONTROL; + params.context = CurrentContext(); unparented_control->Init(params); EXPECT_EQ(root_windows[1], unparented_control->GetNativeView()->GetRootWindow()); @@ -620,28 +623,28 @@ TEST_F(RootWindowControllerTest, DontDeleteWindowsNotOwnedByParent) { DestroyedWindowObserver observer1; aura::test::TestWindowDelegate delegate1; - aura::Window* window1 = new aura::Window(&delegate1); - window1->SetType(aura::client::WINDOW_TYPE_CONTROL); + std::unique_ptr<aura::Window> window1 = + window_factory::NewWindow(&delegate1, aura::client::WINDOW_TYPE_CONTROL); window1->set_owned_by_parent(false); - observer1.SetWindow(window1); + observer1.SetWindow(window1.get()); window1->Init(ui::LAYER_NOT_DRAWN); - aura::client::ParentWindowWithContext(window1, Shell::GetPrimaryRootWindow(), - gfx::Rect()); + aura::client::ParentWindowWithContext( + window1.get(), Shell::GetPrimaryRootWindow(), gfx::Rect()); DestroyedWindowObserver observer2; - aura::Window* window2 = new aura::Window(NULL); + std::unique_ptr<aura::Window> window2 = window_factory::NewWindow(); window2->set_owned_by_parent(false); - observer2.SetWindow(window2); + observer2.SetWindow(window2.get()); window2->Init(ui::LAYER_NOT_DRAWN); - Shell::GetPrimaryRootWindow()->AddChild(window2); + Shell::GetPrimaryRootWindow()->AddChild(window2.get()); Shell::GetPrimaryRootWindowController()->CloseChildWindows(); ASSERT_FALSE(observer1.destroyed()); - delete window1; + window1.reset(); ASSERT_FALSE(observer2.destroyed()); - delete window2; + window2.reset(); } // Verify that the context menu gets hidden when entering or exiting tablet
diff --git a/ash/session/multiprofiles_intro_dialog.cc b/ash/session/multiprofiles_intro_dialog.cc index 52717e67..ac2d7dd6 100644 --- a/ash/session/multiprofiles_intro_dialog.cc +++ b/ash/session/multiprofiles_intro_dialog.cc
@@ -57,8 +57,7 @@ } bool MultiprofilesIntroDialog::ShouldShowCloseButton() const { - // Material UI has no [X] in the corner of this dialog. - return !ui::MaterialDesignController::IsSecondaryUiMaterial(); + return false; } gfx::Size MultiprofilesIntroDialog::CalculatePreferredSize() const {
diff --git a/ash/session/session_aborted_dialog.cc b/ash/session/session_aborted_dialog.cc index 32d1faea..b069d78 100644 --- a/ash/session/session_aborted_dialog.cc +++ b/ash/session/session_aborted_dialog.cc
@@ -74,8 +74,7 @@ } bool SessionAbortedDialog::ShouldShowCloseButton() const { - // Material UI has no [X] in the corner of this dialog. - return !ui::MaterialDesignController::IsSecondaryUiMaterial(); + return false; } gfx::Size SessionAbortedDialog::CalculatePreferredSize() const {
diff --git a/ash/session/teleport_warning_dialog.cc b/ash/session/teleport_warning_dialog.cc index 0f5874b8..93e48a66 100644 --- a/ash/session/teleport_warning_dialog.cc +++ b/ash/session/teleport_warning_dialog.cc
@@ -66,8 +66,7 @@ } bool TeleportWarningDialog::ShouldShowCloseButton() const { - // Material UI has no [X] in the corner of this dialog. - return !ui::MaterialDesignController::IsSecondaryUiMaterial(); + return false; } gfx::Size TeleportWarningDialog::CalculatePreferredSize() const {
diff --git a/ash/shelf/shelf_background_animator.cc b/ash/shelf/shelf_background_animator.cc index d6b7af7..85d56ef 100644 --- a/ash/shelf/shelf_background_animator.cc +++ b/ash/shelf/shelf_background_animator.cc
@@ -11,7 +11,6 @@ #include "ash/public/cpp/ash_switches.h" #include "ash/public/cpp/login_constants.h" #include "ash/public/cpp/wallpaper_types.h" -#include "ash/session/session_controller.h" #include "ash/shelf/shelf.h" #include "ash/shelf/shelf_background_animator_observer.h" #include "ash/shelf/shelf_constants.h" @@ -59,42 +58,53 @@ // given |background_type|. std::pair<int, int> GetTargetColorAlphaValues( ShelfBackgroundType background_type) { - int target_shelf_color_alpha = 0; - int target_item_color_alpha = 0; + int target_shelf_color_alpha = SK_AlphaTRANSPARENT; + int target_item_color_alpha = SK_AlphaTRANSPARENT; switch (background_type) { case SHELF_BACKGROUND_DEFAULT: if (chromeos::switches::ShouldUseShelfNewUi()) { target_shelf_color_alpha = kShelfTranslucentAlpha; - target_item_color_alpha = 0; + target_item_color_alpha = SK_AlphaTRANSPARENT; } else { - target_shelf_color_alpha = 0; + target_shelf_color_alpha = SK_AlphaTRANSPARENT; target_item_color_alpha = kShelfTranslucentAlpha; } break; case SHELF_BACKGROUND_OVERLAP: if (chromeos::switches::ShouldUseShelfNewUi()) { target_shelf_color_alpha = kShelfTranslucentWithOverlapAlphaNewUi; - target_item_color_alpha = 0; + target_item_color_alpha = SK_AlphaTRANSPARENT; } else { target_shelf_color_alpha = kShelfTranslucentAlpha; - target_item_color_alpha = 0; + target_item_color_alpha = SK_AlphaTRANSPARENT; } break; case SHELF_BACKGROUND_MAXIMIZED: target_shelf_color_alpha = ShelfBackgroundAnimator::kMaxAlpha; - target_item_color_alpha = 0; + target_item_color_alpha = SK_AlphaTRANSPARENT; break; case SHELF_BACKGROUND_APP_LIST: - target_shelf_color_alpha = 0; - target_item_color_alpha = 0; + target_shelf_color_alpha = SK_AlphaTRANSPARENT; + target_item_color_alpha = SK_AlphaTRANSPARENT; break; case SHELF_BACKGROUND_SPLIT_VIEW: target_shelf_color_alpha = ShelfBackgroundAnimator::kMaxAlpha; - target_item_color_alpha = 0; + target_item_color_alpha = SK_AlphaTRANSPARENT; + break; + case SHELF_BACKGROUND_OOBE: + target_shelf_color_alpha = SK_AlphaTRANSPARENT; + target_item_color_alpha = SK_AlphaOPAQUE; + break; + case SHELF_BACKGROUND_LOGIN: + target_shelf_color_alpha = SK_AlphaTRANSPARENT; + target_item_color_alpha = SK_AlphaTRANSPARENT; break; case SHELF_BACKGROUND_LOGIN_NONBLURRED_WALLPAPER: - NOTREACHED(); + target_shelf_color_alpha = + login_constants::kNonBlurredWallpaperBackgroundAlpha; + target_item_color_alpha = + login_constants::kNonBlurredWallpaperBackgroundAlpha; break; } return std::pair<int, int>(target_shelf_color_alpha, target_item_color_alpha); @@ -127,8 +137,6 @@ Shelf* shelf, WallpaperController* wallpaper_controller) : shelf_(shelf), wallpaper_controller_(wallpaper_controller) { - if (Shell::HasInstance()) // Null in testing::Test. - Shell::Get()->session_controller()->AddObserver(this); if (wallpaper_controller_) wallpaper_controller_->AddObserver(this); if (shelf_) @@ -144,8 +152,6 @@ wallpaper_controller_->RemoveObserver(this); if (shelf_) shelf_->RemoveObserver(this); - if (Shell::HasInstance()) // Null in testing::Test. - Shell::Get()->session_controller()->RemoveObserver(this); } void ShelfBackgroundAnimator::AddObserver( @@ -197,11 +203,6 @@ AnimateBackground(target_background_type_, AnimationChangeType::ANIMATE); } -void ShelfBackgroundAnimator::OnSessionStateChanged( - session_manager::SessionState state) { - AnimateBackground(target_background_type_, AnimationChangeType::ANIMATE); -} - void ShelfBackgroundAnimator::OnBackgroundTypeChanged( ShelfBackgroundType background_type, AnimationChangeType change_type) { @@ -270,6 +271,8 @@ break; case SHELF_BACKGROUND_MAXIMIZED: case SHELF_BACKGROUND_SPLIT_VIEW: + case SHELF_BACKGROUND_OOBE: + case SHELF_BACKGROUND_LOGIN: case SHELF_BACKGROUND_LOGIN_NONBLURRED_WALLPAPER: duration_ms = 250; break; @@ -294,71 +297,55 @@ ShelfBackgroundType background_type, AnimationValues* shelf_background_values, AnimationValues* item_background_values) const { - // Always use the login base color if the wallpaper is not blurred. - if (background_type == SHELF_BACKGROUND_LOGIN_NONBLURRED_WALLPAPER) { - auto color = - SkColorSetA(login_constants::kDefaultBaseColor, - login_constants::kNonBlurredWallpaperBackgroundAlpha); - shelf_background_values->SetTargetValues(color); - item_background_values->SetTargetValues(color); - return; - } + // Fetches wallpaper color and darkens it. + auto darken_wallpaper = [&](int darkening_alpha) { + if (!wallpaper_controller_) + return kShelfDefaultBaseColor; + SkColor target_color = + wallpaper_controller_->GetProminentColor(GetShelfColorProfile()); + if (target_color == kInvalidWallpaperColor) + return kShelfDefaultBaseColor; + return color_utils::GetResultingPaintColor( + SkColorSetA(kShelfDefaultBaseColor, darkening_alpha), target_color); + }; - // Shell may not have instance in tests. - if (Shell::HasInstance()) { - auto session_state = Shell::Get()->session_controller()->GetSessionState(); - - // OOBE always uses a fixed shelf color. - if (session_state == session_manager::SessionState::OOBE) { - shelf_background_values->SetTargetValues(SK_ColorTRANSPARENT); - item_background_values->SetTargetValues(gfx::kGoogleGrey100); - return; - } - - // All other non-active sessions use transparent colors. - if (session_state != session_manager::SessionState::ACTIVE) { - shelf_background_values->SetTargetValues(SK_ColorTRANSPARENT); - item_background_values->SetTargetValues(SK_ColorTRANSPARENT); - return; - } + SkColor shelf_target_color = kShelfDefaultBaseColor; + SkColor item_target_color = kShelfDefaultBaseColor; + switch (background_type) { + case SHELF_BACKGROUND_DEFAULT: + case SHELF_BACKGROUND_OVERLAP: + case SHELF_BACKGROUND_APP_LIST: + shelf_target_color = darken_wallpaper(kShelfTranslucentColorDarkenAlpha); + item_target_color = shelf_target_color; + break; + case SHELF_BACKGROUND_MAXIMIZED: + shelf_target_color = darken_wallpaper(kShelfOpaqueColorDarkenAlpha); + item_target_color = shelf_target_color; + break; + case SHELF_BACKGROUND_SPLIT_VIEW: + shelf_target_color = darken_wallpaper(ShelfBackgroundAnimator::kMaxAlpha); + item_target_color = shelf_target_color; + break; + case SHELF_BACKGROUND_OOBE: + shelf_target_color = SK_ColorTRANSPARENT; + item_target_color = gfx::kGoogleGrey100; + break; + case SHELF_BACKGROUND_LOGIN: + shelf_target_color = SK_ColorTRANSPARENT; + item_target_color = SK_ColorTRANSPARENT; + break; + case SHELF_BACKGROUND_LOGIN_NONBLURRED_WALLPAPER: + shelf_target_color = login_constants::kDefaultBaseColor; + item_target_color = login_constants::kDefaultBaseColor; + break; } std::pair<int, int> target_color_alpha_values = GetTargetColorAlphaValues(background_type); - - SkColor target_color = - wallpaper_controller_ - ? wallpaper_controller_->GetProminentColor(GetShelfColorProfile()) - : kShelfDefaultBaseColor; - if (target_color == kInvalidWallpaperColor) { - target_color = kShelfDefaultBaseColor; - } else { - int darkening_alpha = 0; - - switch (background_type) { - case SHELF_BACKGROUND_DEFAULT: - case SHELF_BACKGROUND_OVERLAP: - case SHELF_BACKGROUND_APP_LIST: - darkening_alpha = kShelfTranslucentColorDarkenAlpha; - break; - case SHELF_BACKGROUND_MAXIMIZED: - darkening_alpha = kShelfOpaqueColorDarkenAlpha; - break; - case SHELF_BACKGROUND_SPLIT_VIEW: - darkening_alpha = ShelfBackgroundAnimator::kMaxAlpha; - break; - case SHELF_BACKGROUND_LOGIN_NONBLURRED_WALLPAPER: - NOTREACHED(); - break; - } - target_color = color_utils::GetResultingPaintColor( - SkColorSetA(kShelfDefaultBaseColor, darkening_alpha), target_color); - } - shelf_background_values->SetTargetValues( - SkColorSetA(target_color, target_color_alpha_values.first)); + SkColorSetA(shelf_target_color, target_color_alpha_values.first)); item_background_values->SetTargetValues( - SkColorSetA(target_color, target_color_alpha_values.second)); + SkColorSetA(item_target_color, target_color_alpha_values.second)); } void ShelfBackgroundAnimator::SetAnimationValues(double t) {
diff --git a/ash/shelf/shelf_background_animator.h b/ash/shelf/shelf_background_animator.h index b67237e..bee2374 100644 --- a/ash/shelf/shelf_background_animator.h +++ b/ash/shelf/shelf_background_animator.h
@@ -10,7 +10,6 @@ #include "ash/ash_export.h" #include "ash/public/cpp/shelf_types.h" -#include "ash/session/session_observer.h" #include "ash/shelf/shelf_observer.h" #include "ash/wallpaper/wallpaper_controller_observer.h" #include "base/macros.h" @@ -43,8 +42,7 @@ // states. class ASH_EXPORT ShelfBackgroundAnimator : public ShelfObserver, public gfx::AnimationDelegate, - public WallpaperControllerObserver, - public SessionObserver { + public WallpaperControllerObserver { public: // The maximum alpha value that can be used. static const int kMaxAlpha = SK_AlphaOPAQUE; @@ -96,9 +94,6 @@ // WallpaperControllerObserver: void OnWallpaperColorsChanged() override; - // SessionObserver: - void OnSessionStateChanged(session_manager::SessionState state) override; - private: friend class ShelfBackgroundAnimatorTestApi;
diff --git a/ash/shelf/shelf_background_animator_unittest.cc b/ash/shelf/shelf_background_animator_unittest.cc index 59ad4b1f..03cd47d 100644 --- a/ash/shelf/shelf_background_animator_unittest.cc +++ b/ash/shelf/shelf_background_animator_unittest.cc
@@ -9,8 +9,11 @@ #include "ash/animation/animation_change_type.h" #include "ash/public/cpp/ash_switches.h" #include "ash/session/test_session_controller_client.h" +#include "ash/shelf/shelf.h" #include "ash/shelf/shelf_background_animator_observer.h" #include "ash/shelf/shelf_constants.h" +#include "ash/shelf/shelf_widget.h" +#include "ash/shell.h" #include "ash/test/ash_test_base.h" #include "base/bind.h" #include "base/command_line.h" @@ -335,10 +338,6 @@ base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( switches::kAshShelfColor, switches::kAshShelfColorDisabled); AshTestBase::SetUp(); - - animator_.reset(new ShelfBackgroundAnimator(SHELF_BACKGROUND_DEFAULT, - nullptr, nullptr)); - test_api_.reset(new ShelfBackgroundAnimatorTestApi(animator_.get())); } protected: @@ -347,12 +346,6 @@ GetSessionControllerClient()->SetSessionState(state); } - // Test target. - std::unique_ptr<ShelfBackgroundAnimator> animator_; - - // Provides internal access to |animator_|. - std::unique_ptr<ShelfBackgroundAnimatorTestApi> test_api_; - private: DISALLOW_COPY_AND_ASSIGN(ShelfBackgroundTargetColorTest); }; @@ -363,63 +356,70 @@ // |ShelfBackgroundAnimatorTest|. TEST_F(ShelfBackgroundTargetColorTest, ShelfAndItemBackgroundColorUpdatedWithSessionState) { + // Use the real ShelfBackgroundAnimator instance because it needs to update + // for session state changes. + ShelfBackgroundAnimatorTestApi test_api( + Shelf::ForWindow(Shell::Get()->GetPrimaryRootWindow()) + ->shelf_widget() + ->background_animator_for_testing()); + // The shelf is not initialized until session state becomes active, so the // following two cases don't have visible effects until we support views-based // shelf for all session states, but it's still good to check them here. NotifySessionStateChanged(session_manager::SessionState::OOBE); - EXPECT_EQ(GetBaseColor(test_api_->shelf_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.shelf_background_target_color()), GetBaseColor(SK_ColorTRANSPARENT)); - EXPECT_EQ(GetBaseColor(test_api_->item_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.item_background_target_color()), GetBaseColor(gfx::kGoogleGrey100)); NotifySessionStateChanged(session_manager::SessionState::LOGIN_PRIMARY); - EXPECT_EQ(GetBaseColor(test_api_->shelf_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.shelf_background_target_color()), GetBaseColor(SK_ColorTRANSPARENT)); - EXPECT_EQ(GetBaseColor(test_api_->item_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.item_background_target_color()), GetBaseColor(SK_ColorTRANSPARENT)); SimulateUserLogin("user1@test.com"); NotifySessionStateChanged( session_manager::SessionState::LOGGED_IN_NOT_ACTIVE); - EXPECT_EQ(GetBaseColor(test_api_->shelf_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.shelf_background_target_color()), GetBaseColor(SK_ColorTRANSPARENT)); - EXPECT_EQ(GetBaseColor(test_api_->item_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.item_background_target_color()), GetBaseColor(SK_ColorTRANSPARENT)); // The shelf has a non-transparent background only when session state is // active. NotifySessionStateChanged(session_manager::SessionState::ACTIVE); - EXPECT_EQ(GetBaseColor(test_api_->shelf_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.shelf_background_target_color()), GetBaseColor(kShelfDefaultBaseColor)); - EXPECT_EQ(GetBaseColor(test_api_->item_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.item_background_target_color()), GetBaseColor(kShelfDefaultBaseColor)); NotifySessionStateChanged(session_manager::SessionState::LOCKED); - EXPECT_EQ(GetBaseColor(test_api_->shelf_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.shelf_background_target_color()), GetBaseColor(SK_ColorTRANSPARENT)); - EXPECT_EQ(GetBaseColor(test_api_->item_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.item_background_target_color()), GetBaseColor(SK_ColorTRANSPARENT)); // Ensure the shelf background color is correct after unlocking. NotifySessionStateChanged(session_manager::SessionState::ACTIVE); - EXPECT_EQ(GetBaseColor(test_api_->shelf_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.shelf_background_target_color()), GetBaseColor(kShelfDefaultBaseColor)); - EXPECT_EQ(GetBaseColor(test_api_->item_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.item_background_target_color()), GetBaseColor(kShelfDefaultBaseColor)); NotifySessionStateChanged(session_manager::SessionState::LOGIN_SECONDARY); - EXPECT_EQ(GetBaseColor(test_api_->shelf_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.shelf_background_target_color()), GetBaseColor(SK_ColorTRANSPARENT)); - EXPECT_EQ(GetBaseColor(test_api_->item_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.item_background_target_color()), GetBaseColor(SK_ColorTRANSPARENT)); // Ensure the shelf background color is correct after closing the user adding // screen. NotifySessionStateChanged(session_manager::SessionState::ACTIVE); - EXPECT_EQ(GetBaseColor(test_api_->shelf_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.shelf_background_target_color()), GetBaseColor(kShelfDefaultBaseColor)); - EXPECT_EQ(GetBaseColor(test_api_->item_background_target_color()), + EXPECT_EQ(GetBaseColor(test_api.item_background_target_color()), GetBaseColor(kShelfDefaultBaseColor)); }
diff --git a/ash/shelf/shelf_button.cc b/ash/shelf/shelf_button.cc index 7a5d1bbb..67c3865e 100644 --- a/ash/shelf/shelf_button.cc +++ b/ash/shelf/shelf_button.cc
@@ -15,6 +15,7 @@ #include "ash/system/tray/tray_popup_utils.h" #include "base/metrics/histogram_macros.h" #include "base/time/time.h" +#include "chromeos/chromeos_switches.h" #include "skia/ext/image_operations.h" #include "ui/accessibility/ax_node_data.h" #include "ui/base/ui_base_features.h" @@ -40,6 +41,9 @@ constexpr int kStatusIndicatorMaxAnimationSeconds = 10; constexpr int kStatusIndicatorOffsetFromBottom = 3; constexpr int kStatusIndicatorRadiusDip = 2; +constexpr int kStatusIndicatorMaxSize = 10; +constexpr int kStatusIndicatorActiveSize = 8; +constexpr int kStatusIndicatorActiveThickness = 2; constexpr int kNotificationIndicatorRadiusDip = 7; constexpr SkColor kIndicatorBorderColor = SkColorSetA(SK_ColorBLACK, 0x4D); constexpr SkColor kIndicatorColor = SK_ColorWHITE; @@ -189,8 +193,7 @@ : public views::View, public ShelfButtonAnimation::Observer { public: - AppStatusIndicatorView() - : show_attention_(false), animation_end_time_(base::TimeTicks()) { + AppStatusIndicatorView() : show_attention_(false), active_(false) { // Make sure the events reach the parent view for handling. set_can_process_events_within_subtree(false); } @@ -210,25 +213,50 @@ canvas->SaveLayerAlpha(alpha); } - DCHECK_EQ(width(), height()); - DCHECK_EQ(kStatusIndicatorRadiusDip, width() / 2); const float dsf = canvas->UndoDeviceScaleFactor(); const int kStrokeWidthPx = 1; gfx::PointF center = gfx::RectF(GetLocalBounds()).CenterPoint(); center.Scale(dsf); - - // Fill the center. cc::PaintFlags flags; - flags.setColor(kIndicatorColor); - flags.setAntiAlias(true); - canvas->DrawCircle(center, dsf * kStatusIndicatorRadiusDip - kStrokeWidthPx, - flags); + if (active_ && chromeos::switches::ShouldUseShelfNewUi()) { + // In the new UI, visually distinguish the active app. + flags.setColor(kIndicatorColor); + float indicator_width; + float indicator_height; + gfx::PointF origin; + if (horizontal_shelf_) { + indicator_width = kStatusIndicatorActiveSize; + indicator_height = kStatusIndicatorActiveThickness; + origin = gfx::PointF(center.x() - kStatusIndicatorActiveSize / 2, + center.y() - kStatusIndicatorActiveThickness / 2); + } else { + indicator_width = kStatusIndicatorActiveThickness; + indicator_height = kStatusIndicatorActiveSize; + origin = gfx::PointF(center.x() - kStatusIndicatorActiveThickness / 2, + center.y() - kStatusIndicatorActiveSize / 2); + } + canvas->DrawRect( + gfx::ScaleRect( + gfx::RectF(origin, gfx::SizeF(indicator_width, indicator_height)), + dsf), + flags); + } else { + DCHECK_EQ(width(), height()); + DCHECK_EQ(kStatusIndicatorMaxSize, width() / 2); - // Stroke the border. - flags.setColor(kIndicatorBorderColor); - flags.setStyle(cc::PaintFlags::kStroke_Style); - canvas->DrawCircle( - center, dsf * kStatusIndicatorRadiusDip - kStrokeWidthPx / 2.0f, flags); + // Fill the center. + flags.setColor(kIndicatorColor); + flags.setAntiAlias(true); + canvas->DrawCircle( + center, dsf * kStatusIndicatorRadiusDip - kStrokeWidthPx, flags); + + // Stroke the border. + flags.setColor(kIndicatorBorderColor); + flags.setStyle(cc::PaintFlags::kStroke_Style); + canvas->DrawCircle( + center, dsf * kStatusIndicatorRadiusDip - kStrokeWidthPx / 2.0f, + flags); + } } // ShelfButtonAnimation::Observer @@ -252,13 +280,29 @@ } } + void ShowActiveStatus(bool active) { + if (active_ == active) + return; + active_ = active; + SchedulePaint(); + } + + void SetHorizontalShelf(bool horizontal_shelf) { + if (horizontal_shelf_ == horizontal_shelf) + return; + horizontal_shelf_ = horizontal_shelf; + SchedulePaint(); + } + private: void UpdateAnimating() { if (base::TimeTicks::Now() > animation_end_time_) ShelfButtonAnimation::GetInstance()->RemoveObserver(this); } - bool show_attention_; + bool show_attention_ = false; + bool active_ = false; + bool horizontal_shelf_ = true; base::TimeTicks animation_end_time_; // For attention throbbing underline. DISALLOW_COPY_AND_ASSIGN(AppStatusIndicatorView); @@ -363,6 +407,9 @@ if (state & STATE_ATTENTION) indicator_->ShowAttention(true); + if (state & STATE_ACTIVE) + indicator_->ShowActiveStatus(true); + if (is_notification_indicator_enabled_ && (state & STATE_NOTIFICATION)) notification_indicator_->SetVisible(true); @@ -377,6 +424,8 @@ Layout(); if (state & STATE_ATTENTION) indicator_->ShowAttention(false); + if (state & STATE_ACTIVE) + indicator_->ShowActiveStatus(false); if (is_notification_indicator_enabled_ && (state & STATE_NOTIFICATION)) notification_indicator_->SetVisible(false); @@ -550,7 +599,7 @@ } gfx::Rect indicator_bounds(indicator_midpoint, gfx::Size()); - indicator_bounds.Inset(gfx::Insets(-kStatusIndicatorRadiusDip)); + indicator_bounds.Inset(gfx::Insets(-kStatusIndicatorMaxSize)); indicator_->SetBoundsRect(indicator_bounds); UpdateState(); @@ -658,11 +707,14 @@ } void ShelfButton::UpdateState() { - indicator_->SetVisible(!(state_ & STATE_HIDDEN) && - (state_ & STATE_ATTENTION || state_ & STATE_RUNNING)); - const bool is_horizontal_shelf = shelf_view_->shelf()->IsHorizontalAlignment(); + + indicator_->SetVisible(!(state_ & STATE_HIDDEN) && + (state_ & STATE_ATTENTION || state_ & STATE_RUNNING || + state_ & STATE_ACTIVE)); + indicator_->SetHorizontalShelf(is_horizontal_shelf); + icon_view_->SetHorizontalAlignment(is_horizontal_shelf ? views::ImageView::CENTER : views::ImageView::LEADING);
diff --git a/ash/shelf/shelf_button.h b/ash/shelf/shelf_button.h index 0df83fa..a525729 100644 --- a/ash/shelf/shelf_button.h +++ b/ash/shelf/shelf_button.h
@@ -41,6 +41,8 @@ STATE_DRAGGING = 1 << 4, // App has at least 1 notification. STATE_NOTIFICATION = 1 << 5, + // Underlying ShelfItem owns the window that is currently active. + STATE_ACTIVE = 1 << 6, }; ShelfButton(InkDropButtonListener* listener, ShelfView* shelf_view);
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc index a957eae1..8fd2a81 100644 --- a/ash/shelf/shelf_layout_manager.cc +++ b/ash/shelf/shelf_layout_manager.cc
@@ -518,11 +518,13 @@ if (state_.pre_lock_screen_animation_active) return SHELF_BACKGROUND_DEFAULT; - // Handle all non active screen states, including OOBE and pre-login. + // Handle all other non active screen states, including OOBE and pre-login. + if (state_.session_state == session_manager::SessionState::OOBE) + return SHELF_BACKGROUND_OOBE; if (state_.session_state != session_manager::SessionState::ACTIVE) { if (!Shell::Get()->wallpaper_controller()->IsWallpaperBlurred()) return SHELF_BACKGROUND_LOGIN_NONBLURRED_WALLPAPER; - return SHELF_BACKGROUND_OVERLAP; + return SHELF_BACKGROUND_LOGIN; } // If the app list is active, hide the shelf background to prevent overlap.
diff --git a/ash/shelf/shelf_layout_manager_unittest.cc b/ash/shelf/shelf_layout_manager_unittest.cc index 6218d257..b53ca5c 100644 --- a/ash/shelf/shelf_layout_manager_unittest.cc +++ b/ash/shelf/shelf_layout_manager_unittest.cc
@@ -34,6 +34,7 @@ #include "ash/system/unified/unified_system_tray.h" #include "ash/test/ash_test_base.h" #include "ash/wallpaper/wallpaper_controller.h" +#include "ash/window_factory.h" #include "ash/wm/lock_state_controller.h" #include "ash/wm/splitview/split_view_controller.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h" @@ -269,7 +270,7 @@ } aura::Window* CreateTestWindow() { - aura::Window* window = new aura::Window(nullptr); + aura::Window* window = window_factory::NewWindow().release(); window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); window->SetType(aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_TEXTURED); @@ -278,7 +279,7 @@ } aura::Window* CreateTestWindowInParent(aura::Window* root_window) { - aura::Window* window = new aura::Window(nullptr); + aura::Window* window = window_factory::NewWindow().release(); window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); window->SetType(aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_TEXTURED); @@ -286,19 +287,15 @@ return window; } - views::Widget* CreateTestWidgetWithParams( - const views::Widget::InitParams& params) { - views::Widget* out = new views::Widget; - out->Init(params); - out->Show(); - return out; - } - // Create a simple widget in the current context (will delete on TearDown). views::Widget* CreateTestWidget() { views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); params.bounds = gfx::Rect(0, 0, 200, 200); - return CreateTestWidgetWithParams(params); + params.context = CurrentContext(); + views::Widget* widget = new views::Widget; + widget->Init(params); + widget->Show(); + return widget; } void RunGestureDragTests(gfx::Vector2d); @@ -968,7 +965,7 @@ // Blurred wallpaper. ash::Shell::Get()->wallpaper_controller()->UpdateWallpaperBlur(/*blur=*/true); - EXPECT_EQ(SHELF_BACKGROUND_OVERLAP, GetShelfWidget()->GetBackgroundType()); + EXPECT_EQ(SHELF_BACKGROUND_LOGIN, GetShelfWidget()->GetBackgroundType()); // Non-blurred wallpaper. base::CommandLine::ForCurrentProcess()->AppendSwitch( @@ -1003,7 +1000,7 @@ LockScreen(); // Showing a widget in the lock screen should force the shelf to be visible. EXPECT_EQ(SHELF_VISIBLE, shelf->GetVisibilityState()); - EXPECT_EQ(SHELF_BACKGROUND_OVERLAP, GetShelfWidget()->GetBackgroundType()); + EXPECT_EQ(SHELF_BACKGROUND_LOGIN, GetShelfWidget()->GetBackgroundType()); UnlockScreen(); EXPECT_EQ(SHELF_AUTO_HIDE, shelf->GetVisibilityState());
diff --git a/ash/shelf/shelf_tooltip_bubble.cc b/ash/shelf/shelf_tooltip_bubble.cc index a8992b8..74058dc 100644 --- a/ash/shelf/shelf_tooltip_bubble.cc +++ b/ash/shelf/shelf_tooltip_bubble.cc
@@ -57,8 +57,7 @@ // Adjust the anchor location for asymmetrical borders of shelf item. if (anchor->border()) insets += anchor->border()->GetInsets(); - if (ui::MaterialDesignController::IsSecondaryUiMaterial()) - insets += gfx::Insets(-kBubblePaddingHorizontalBottom); + insets += gfx::Insets(-kBubblePaddingHorizontalBottom); set_anchor_view_insets(insets); views::BubbleDialogDelegateView::CreateBubble(this);
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc index e45a09d..7871a079 100644 --- a/ash/shelf/shelf_view.cc +++ b/ash/shelf/shelf_view.cc
@@ -226,15 +226,23 @@ switch (item.status) { case STATUS_CLOSED: button->ClearState(ShelfButton::STATE_RUNNING); + button->ClearState(ShelfButton::STATE_ACTIVE); + button->ClearState(ShelfButton::STATE_ATTENTION); + break; + case STATUS_ACTIVE: + button->AddState(ShelfButton::STATE_ACTIVE); + button->AddState(ShelfButton::STATE_RUNNING); button->ClearState(ShelfButton::STATE_ATTENTION); break; case STATUS_RUNNING: button->AddState(ShelfButton::STATE_RUNNING); + button->ClearState(ShelfButton::STATE_ACTIVE); button->ClearState(ShelfButton::STATE_ATTENTION); break; case STATUS_ATTENTION: button->ClearState(ShelfButton::STATE_RUNNING); button->AddState(ShelfButton::STATE_ATTENTION); + button->ClearState(ShelfButton::STATE_ACTIVE); break; }
diff --git a/ash/shelf/shelf_widget.h b/ash/shelf/shelf_widget.h index 9b16cf6..c42c1cc 100644 --- a/ash/shelf/shelf_widget.h +++ b/ash/shelf/shelf_widget.h
@@ -116,6 +116,9 @@ // Internal implementation detail. Do not expose outside of tests. ShelfView* shelf_view_for_testing() const { return shelf_view_; } + ShelfBackgroundAnimator* background_animator_for_testing() { + return &background_animator_; + } void set_activated_from_overflow_bubble(bool val) { activated_from_overflow_bubble_ = val;
diff --git a/ash/shelf/shelf_widget_unittest.cc b/ash/shelf/shelf_widget_unittest.cc index 7e35915a..cbe5164 100644 --- a/ash/shelf/shelf_widget_unittest.cc +++ b/ash/shelf/shelf_widget_unittest.cc
@@ -142,6 +142,7 @@ views::Widget* widget = new views::Widget; views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); params.bounds = gfx::Rect(0, 0, 200, 200); + params.context = CurrentContext(); // Widget is now owned by the parent window. widget->Init(params); widget->SetFullscreen(true); @@ -207,6 +208,7 @@ params.bounds = gfx::Rect(shelf_bounds.height() - kOverlapSize, shelf_bounds.y() - kWindowHeight + kOverlapSize, kWindowWidth, kWindowHeight); + params.context = CurrentContext(); // Widget is now owned by the parent window. widget->Init(params); // Explicitly set the bounds which will allow the widget to overlap the shelf. @@ -287,6 +289,7 @@ views::Widget* widget = new views::Widget; views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); params.bounds = gfx::Rect(0, 0, 200, 200); + params.context = CurrentContext(); // Widget is now owned by the parent window. widget->Init(params); widget->Show();
diff --git a/ash/shelf/shelf_window_watcher_unittest.cc b/ash/shelf/shelf_window_watcher_unittest.cc index 5ce1267..2356b65b 100644 --- a/ash/shelf/shelf_window_watcher_unittest.cc +++ b/ash/shelf/shelf_window_watcher_unittest.cc
@@ -15,6 +15,7 @@ #include "ash/session/session_controller.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" +#include "ash/window_factory.h" #include "ash/wm/window_resizer.h" #include "ash/wm/window_state.h" #include "third_party/skia/include/core/SkBitmap.h" @@ -116,7 +117,7 @@ aura::client::WINDOW_TYPE_TOOLTIP}; for (aura::client::WindowType type : no_item_types) { std::unique_ptr<aura::Window> window = - std::make_unique<aura::Window>(nullptr, type); + window_factory::NewWindow(nullptr, type); window->Init(ui::LAYER_NOT_DRAWN); Shell::GetPrimaryRootWindow() ->GetChildById(kShellWindowId_DefaultContainer) @@ -305,7 +306,7 @@ TEST_F(ShelfWindowWatcherTest, DontCreateShelfEntriesForChildWindows) { std::unique_ptr<aura::Window> window = - std::make_unique<aura::Window>(nullptr, aura::client::WINDOW_TYPE_NORMAL); + window_factory::NewWindow(nullptr, aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_NOT_DRAWN); window->SetProperty(kShelfIDKey, new std::string(ShelfID("a").Serialize())); window->SetProperty(kShelfItemTypeKey, static_cast<int32_t>(TYPE_DIALOG)); @@ -316,7 +317,7 @@ EXPECT_EQ(3, model_->item_count()); std::unique_ptr<aura::Window> child = - std::make_unique<aura::Window>(nullptr, aura::client::WINDOW_TYPE_NORMAL); + window_factory::NewWindow(nullptr, aura::client::WINDOW_TYPE_NORMAL); child->Init(ui::LAYER_NOT_DRAWN); child->SetProperty(kShelfIDKey, new std::string(ShelfID("b").Serialize())); child->SetProperty(kShelfItemTypeKey, static_cast<int32_t>(TYPE_DIALOG)); @@ -333,7 +334,7 @@ TEST_F(ShelfWindowWatcherTest, CreateShelfEntriesForTransientWindows) { std::unique_ptr<aura::Window> window = - std::make_unique<aura::Window>(nullptr, aura::client::WINDOW_TYPE_NORMAL); + window_factory::NewWindow(nullptr, aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_NOT_DRAWN); window->SetProperty(kShelfIDKey, new std::string(ShelfID("a").Serialize())); window->SetProperty(kShelfItemTypeKey, static_cast<int32_t>(TYPE_DIALOG)); @@ -344,7 +345,7 @@ EXPECT_EQ(3, model_->item_count()); std::unique_ptr<aura::Window> transient = - std::make_unique<aura::Window>(nullptr, aura::client::WINDOW_TYPE_NORMAL); + window_factory::NewWindow(nullptr, aura::client::WINDOW_TYPE_NORMAL); transient->Init(ui::LAYER_NOT_DRAWN); transient->SetProperty(kShelfIDKey, new std::string(ShelfID("b").Serialize()));
diff --git a/ash/shell.cc b/ash/shell.cc index b2b099c..e7e2e91 100644 --- a/ash/shell.cc +++ b/ash/shell.cc
@@ -49,7 +49,7 @@ #include "ash/events/event_rewriter_controller.h" #include "ash/first_run/first_run_helper.h" #include "ash/focus_cycler.h" -#include "ash/frame/custom_frame_view_ash.h" +#include "ash/frame/non_client_frame_view_ash.h" #include "ash/high_contrast/high_contrast_controller.h" #include "ash/highlighter/highlighter_controller.h" #include "ash/host/ash_window_tree_host_init_params.h" @@ -136,6 +136,7 @@ #include "ash/wm/lock_state_controller.h" #include "ash/wm/mru_window_tracker.h" #include "ash/wm/native_cursor_manager_ash_classic.h" +#include "ash/wm/non_client_frame_controller.h" #include "ash/wm/overlay_event_filter.h" #include "ash/wm/overview/window_selector_controller.h" #include "ash/wm/resize_shadow_controller.h" @@ -208,6 +209,7 @@ #include "ui/views/corewm/tooltip_aura.h" #include "ui/views/corewm/tooltip_controller.h" #include "ui/views/focus/focus_manager_factory.h" +#include "ui/views/mus/window_manager_frame_values.h" #include "ui/views/widget/native_widget_aura.h" #include "ui/views/widget/widget.h" #include "ui/wm/core/accelerator_filter.h" @@ -250,6 +252,7 @@ DockedMagnifierController::RegisterProfilePrefs(registry, for_test); LoginScreenController::RegisterProfilePrefs(registry, for_test); LogoutButtonTray::RegisterProfilePrefs(registry); + MessageCenterController::RegisterProfilePrefs(registry); NightLightController::RegisterProfilePrefs(registry); PaletteTray::RegisterProfilePrefs(registry); PaletteWelcomeBubble::RegisterProfilePrefs(registry); @@ -430,8 +433,8 @@ } void Shell::InitWaylandServer(std::unique_ptr<exo::FileHelper> file_helper) { - wayland_server_controller_ = - WaylandServerController::CreateIfNecessary(std::move(file_helper)); + wayland_server_controller_ = WaylandServerController::CreateIfNecessary( + std::move(file_helper), aura_env_); } void Shell::DestroyWaylandServer() { @@ -441,7 +444,7 @@ views::NonClientFrameView* Shell::CreateDefaultNonClientFrameView( views::Widget* widget) { // Use translucent-style window frames for dialogs. - return new CustomFrameViewAsh(widget); + return new NonClientFrameViewAsh(widget); } void Shell::SetDisplayWorkAreaInsets(Window* contains, @@ -687,7 +690,12 @@ Shell::Shell(std::unique_ptr<ShellDelegate> shell_delegate, service_manager::Connector* connector) - : ash_display_controller_(std::make_unique<AshDisplayController>()), + : owned_aura_env_(::features::IsSingleProcessMash() + ? aura::Env::CreateLocalInstanceForInProcess() + : nullptr), + aura_env_(owned_aura_env_.get() ? owned_aura_env_.get() + : aura::Env::GetInstance()), + ash_display_controller_(std::make_unique<AshDisplayController>()), brightness_control_delegate_( std::make_unique<system::BrightnessControllerChromeos>()), cast_config_(std::make_unique<CastConfigController>()), @@ -965,6 +973,17 @@ ui::ContextFactoryPrivate* context_factory_private, std::unique_ptr<base::Value> initial_display_prefs, std::unique_ptr<ui::ws2::GpuInterfaceProvider> gpu_interface_provider) { + if (::features::IsSingleProcessMash()) { + // In SingleProcessMash mode ScreenMus is not created, which means Ash needs + // to set the WindowManagerFrameValues. + views::WindowManagerFrameValues frame_values; + frame_values.normal_insets = frame_values.maximized_insets = + NonClientFrameController::GetPreferredClientAreaInsets(); + frame_values.max_title_bar_button_width = + NonClientFrameController::GetMaxTitleBarButtonWidth(); + views::WindowManagerFrameValues::SetInstance(frame_values); + } + // This creates the MessageCenter object which is used by some other objects // initialized here, so it needs to come early. message_center_controller_ = std::make_unique<MessageCenterController>(); @@ -1041,11 +1060,9 @@ // This will initialize aura::Env which requires |display_manager_| to // be initialized first. if (context_factory) - aura::Env::GetInstance()->set_context_factory(context_factory); - if (context_factory_private) { - aura::Env::GetInstance()->set_context_factory_private( - context_factory_private); - } + aura_env_->set_context_factory(context_factory); + if (context_factory_private) + aura_env_->set_context_factory_private(context_factory_private); // Night Light depends on the display manager, the display color manager, and // aura::Env, so initialize it after all have been initialized. @@ -1055,11 +1072,12 @@ // The WindowModalityController needs to be at the front of the input event // pretarget handler list to ensure that it processes input events when modal // windows are active. - window_modality_controller_.reset(new ::wm::WindowModalityController(this)); + window_modality_controller_ = + std::make_unique<::wm::WindowModalityController>(this, aura_env_); event_rewriter_controller_ = std::make_unique<EventRewriterController>(); - env_filter_.reset(new ::wm::CompoundEventFilter); + env_filter_ = std::make_unique<::wm::CompoundEventFilter>(); AddPreTargetHandler(env_filter_.get()); // FocusController takes ownership of AshFocusRules. @@ -1139,7 +1157,7 @@ power_button_controller_->OnDisplayModeChanged( display_configurator_->cached_displays()); - if (!::features::IsAshInBrowserProcess()) + if (!::features::IsAshInBrowserProcess() || ::features::IsSingleProcessMash()) client_image_registry_ = std::make_unique<ClientImageRegistry>(); drag_drop_controller_ = std::make_unique<DragDropController>(); @@ -1184,8 +1202,7 @@ viz::mojom::VideoDetectorObserverPtr observer; video_detector_ = std::make_unique<VideoDetector>(mojo::MakeRequest(&observer)); - aura::Env::GetInstance() - ->context_factory_private() + aura_env_->context_factory_private() ->GetHostFrameSinkManager() ->AddVideoDetectorObserver(std::move(observer)); @@ -1203,8 +1220,9 @@ pointer_watcher_adapter_ = std::make_unique<PointerWatcherAdapter>(); resize_shadow_controller_.reset(new ResizeShadowController()); - shadow_controller_.reset(new ::wm::ShadowController( - focus_controller_.get(), std::make_unique<WmShadowControllerDelegate>())); + shadow_controller_ = std::make_unique<::wm::ShadowController>( + focus_controller_.get(), std::make_unique<WmShadowControllerDelegate>(), + aura_env_); logout_confirmation_controller_ = std::make_unique<LogoutConfirmationController>(); @@ -1393,7 +1411,7 @@ } ui::EventTarget* Shell::GetParentTarget() { - return aura::Env::GetInstance(); + return aura_env_; } std::unique_ptr<ui::EventTargetIterator> Shell::GetChildIterator() const {
diff --git a/ash/shell.h b/ash/shell.h index 9231682..05cc777 100644 --- a/ash/shell.h +++ b/ash/shell.h
@@ -31,6 +31,7 @@ class PrefService; namespace aura { +class Env; class RootWindow; class Window; } // namespace aura @@ -397,6 +398,7 @@ } DockedMagnifierController* docked_magnifier_controller(); + aura::Env* aura_env() { return aura_env_; } ::wm::CompoundEventFilter* env_filter() { return env_filter_.get(); } EventRewriterController* event_rewriter_controller() { return event_rewriter_controller_.get(); @@ -709,6 +711,13 @@ static Shell* instance_; + // |owned_aura_env_| is non-null if Shell created aura::Env. Shell creates + // aura::Env only in single-process-mash mode. + std::unique_ptr<aura::Env> owned_aura_env_; + + // This is either |owned_aura_env_|, or Env::GetInstance(). + aura::Env* aura_env_; + // The CompoundEventFilter owned by aura::Env object. std::unique_ptr<::wm::CompoundEventFilter> env_filter_;
diff --git a/ash/shell_state.cc b/ash/shell_state.cc index 5bcc2a89..509648b 100644 --- a/ash/shell_state.cc +++ b/ash/shell_state.cc
@@ -19,10 +19,6 @@ ShellState::~ShellState() = default; -void ShellState::BindRequest(mojom::ShellStateRequest request) { - bindings_.AddBinding(this, std::move(request)); -} - aura::Window* ShellState::GetRootWindowForNewWindows() const { if (scoped_root_window_for_new_windows_) return scoped_root_window_for_new_windows_; @@ -36,21 +32,9 @@ NotifyAllClients(); } -void ShellState::AddClient(mojom::ShellStateClientPtr client) { - mojom::ShellStateClient* client_impl = client.get(); - clients_.AddPtr(std::move(client)); - client_impl->SetDisplayIdForNewWindows(GetDisplayIdForNewWindows()); -} - -void ShellState::FlushMojoForTest() { - clients_.FlushForTesting(); -} - void ShellState::NotifyAllClients() { const int64_t display_id = GetDisplayIdForNewWindows(); - clients_.ForAllPtrs([display_id](mojom::ShellStateClient* client) { - client->SetDisplayIdForNewWindows(display_id); - }); + display::Screen::GetScreen()->SetDisplayForNewWindows(display_id); // WindowService broadcasts the display id over mojo to all remote apps. // TODO(jamescook): Move this into Shell when ShellState is removed.
diff --git a/ash/shell_state.h b/ash/shell_state.h index b338fb07..5b4100e 100644 --- a/ash/shell_state.h +++ b/ash/shell_state.h
@@ -7,13 +7,8 @@ #include <stdint.h> -#include <memory> - #include "ash/ash_export.h" -#include "ash/public/interfaces/shell_state.mojom.h" #include "base/macros.h" -#include "mojo/public/cpp/bindings/binding_set.h" -#include "mojo/public/cpp/bindings/interface_ptr_set.h" namespace aura { class Window; @@ -21,17 +16,12 @@ namespace ash { -// Provides access via mojo to ash::Shell state. -// TODO(jamescook): Move |root_window_for_new_windows_| to Shell, convert -// browser code to use display::Screen::GetDisplayForNewWindows() and delete +// TODO(jamescook): Move |root_window_for_new_windows_| to Shell and delete // this class. -class ASH_EXPORT ShellState : public mojom::ShellState { +class ASH_EXPORT ShellState { public: ShellState(); - ~ShellState() override; - - // Binds the mojom::ShellState interface to this object. - void BindRequest(mojom::ShellStateRequest request); + ~ShellState(); // Returns the root window that newly created windows should be added to. // Value can be temporarily overridden using ScopedRootWindowForNewWindows. @@ -43,11 +33,6 @@ // NOTE: Prefer ScopedRootWindowForNewWindows. void SetRootWindowForNewWindows(aura::Window* root); - // mojom::ShellState: - void AddClient(mojom::ShellStateClientPtr client) override; - - void FlushMojoForTest(); - private: friend class ScopedRootWindowForNewWindows; @@ -59,12 +44,6 @@ // Sets the value and updates clients. void SetScopedRootWindowForNewWindows(aura::Window* root); - // Binding for mojom::ShellState interface. - mojo::BindingSet<mojom::ShellState> bindings_; - - // Clients (e.g. chrome browser, other mojo apps). - mojo::InterfacePtrSet<mojom::ShellStateClient> clients_; - aura::Window* root_window_for_new_windows_ = nullptr; // See ScopedRootWindowForNewWindows.
diff --git a/ash/shell_state_unittest.cc b/ash/shell_state_unittest.cc index 7fd10957..b3a65f1a 100644 --- a/ash/shell_state_unittest.cc +++ b/ash/shell_state_unittest.cc
@@ -6,61 +6,29 @@ #include <stdint.h> -#include "ash/public/interfaces/shell_state.mojom.h" #include "ash/scoped_root_window_for_new_windows.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" -#include "base/macros.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "ui/display/display.h" #include "ui/display/manager/display_manager.h" +#include "ui/display/screen.h" namespace ash { namespace { -// Simulates the client interface in chrome. -class TestShellStateClient : public mojom::ShellStateClient { - public: - TestShellStateClient() = default; - ~TestShellStateClient() override = default; - - mojom::ShellStateClientPtr CreateInterfacePtrAndBind() { - mojom::ShellStateClientPtr ptr; - binding_.Bind(mojo::MakeRequest(&ptr)); - return ptr; - } - - // mojom::ShellStateClient: - void SetDisplayIdForNewWindows(int64_t display_id) override { - last_display_id_ = display_id; - } - - int64_t last_display_id_ = 0; - - private: - mojo::Binding<mojom::ShellStateClient> binding_{this}; - - DISALLOW_COPY_AND_ASSIGN(TestShellStateClient); -}; - using ShellStateTest = AshTestBase; -TEST_F(ShellStateTest, Basics) { +TEST_F(ShellStateTest, GetDisplayForNewWindows) { UpdateDisplay("1024x768,800x600"); const int64_t primary_display_id = display_manager()->GetDisplayAt(0).id(); const int64_t secondary_display_id = display_manager()->GetDisplayAt(1).id(); - ShellState* shell_state = Shell::Get()->shell_state(); - TestShellStateClient client; - - // Adding a client notifies it with the initial display id. - shell_state->AddClient(client.CreateInterfacePtrAndBind()); - shell_state->FlushMojoForTest(); - EXPECT_EQ(primary_display_id, client.last_display_id_); + display::Screen* screen = display::Screen::GetScreen(); + EXPECT_EQ(primary_display_id, screen->GetDisplayForNewWindows().id()); // Setting a root window for new windows notifies the client. ScopedRootWindowForNewWindows scoped_root(Shell::GetAllRootWindows()[1]); - shell_state->FlushMojoForTest(); - EXPECT_EQ(secondary_display_id, client.last_display_id_); + EXPECT_EQ(secondary_display_id, screen->GetDisplayForNewWindows().id()); } } // namespace
diff --git a/ash/shell_unittest.cc b/ash/shell_unittest.cc index e309456..a6fd3b96 100644 --- a/ash/shell_unittest.cc +++ b/ash/shell_unittest.cc
@@ -24,6 +24,7 @@ #include "ash/test/ash_test_helper.h" #include "ash/test_shell_delegate.h" #include "ash/wallpaper/wallpaper_widget_controller.h" +#include "ash/window_factory.h" #include "ash/wm/window_util.h" #include "base/command_line.h" #include "base/macros.h" @@ -177,6 +178,7 @@ // TODO(jamescook): Convert to AshTestBase::CreateTestWidget(). views::Widget* CreateTestWindow(views::Widget::InitParams params) { views::Widget* widget = new views::Widget; + params.context = CurrentContext(); widget->Init(params); return widget; } @@ -261,6 +263,7 @@ // Don't specify bounds, parent or context. params.delegate = new WindowWithPreferredSize; views::Widget widget; + params.context = CurrentContext(); widget.Init(params); // Widget is centered on secondary display. @@ -495,7 +498,7 @@ // Various assertions around auto-hide behavior. // TODO(jamescook): Move this to ShelfTest. TEST_F(ShellTest, ToggleAutoHide) { - std::unique_ptr<aura::Window> window(new aura::Window(NULL)); + std::unique_ptr<aura::Window> window = window_factory::NewWindow(); window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); window->SetType(aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_TEXTURED); @@ -540,11 +543,11 @@ // Verifies an EventHandler added to Env gets notified from EventGenerator. TEST_F(ShellTest, EnvPreTargetHandler) { ui::test::TestEventHandler event_handler; - aura::Env::GetInstance()->AddPreTargetHandler(&event_handler); + Shell::Get()->aura_env()->AddPreTargetHandler(&event_handler); ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); generator.MoveMouseBy(1, 1); EXPECT_NE(0, event_handler.num_mouse_events()); - aura::Env::GetInstance()->RemovePreTargetHandler(&event_handler); + Shell::Get()->aura_env()->RemovePreTargetHandler(&event_handler); } // Verifies keyboard is re-enabled on proper timing. @@ -583,7 +586,12 @@ }; TEST_F(ShellTest2, DontCrashWhenWindowDeleted) { - window_.reset(new aura::Window(NULL)); + // This test explicitly uses aura::Env::GetInstance() rather than + // Shell->aura_env() as the Window outlives the Shell. In order for a Window + // to outlive Shell the Window must be created outside of Ash, which uses + // aura::Env::GetInstance() as the Env. + window_ = std::make_unique<aura::Window>( + nullptr, aura::client::WINDOW_TYPE_UNKNOWN, aura::Env::GetInstance()); window_->Init(ui::LAYER_NOT_DRAWN); }
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb index 7db000f9..c5e43b6 100644 --- a/ash/strings/ash_strings_ar.xtb +++ b/ash/strings/ash_strings_ar.xtb
@@ -239,7 +239,7 @@ <translation id="544691375626129091">تمت إضافة كل المستخدمين المتوفرين لهذه الجلسة.</translation> <translation id="5457599981699367932">تصفَّح كزائر</translation> <translation id="54609108002486618">تتم إدارته</translation> -<translation id="5496819745535887422">يعمل المشرف على إغلاق جهازك. وسيتم حذف جميع البيانات عند إعادة تشغيل الجهاز.</translation> +<translation id="5496819745535887422">يعمل المشرف على إعادة النسخة السابقة من نظام التشغيل Chrome إلى جهازك. وسيتم حذف جميع البيانات عند إعادة تشغيل الجهاز.</translation> <translation id="553675580533261935">جارٍ الخروج من الجلسة</translation> <translation id="5537725057119320332">إرسال</translation> <translation id="5548285847212963613">يمكن أن تساعد الإضافة " <ph name="EXTENSION_NAME" /> "على الاتصال بهذه الشبكة.</translation> @@ -449,7 +449,7 @@ <translation id="899350903320462459">إلغاء قفل الجهاز من خلال <ph name="LOGIN_ID" /> لتنفيذ إجراء الإشعارات</translation> <translation id="8995603266996330174">مدار بواسطة <ph name="DOMAIN" /></translation> <translation id="9029474291399787231">هناك تحديث جديد لتطبيق Adobe Flash Player</translation> -<translation id="9056839673611986238">سيتم إغلاق الجهاز.</translation> +<translation id="9056839673611986238">سيتم إعادة النسخة السابقة من نظام التشغيل Chrome إلى جهازك.</translation> <translation id="9074739597929991885">بلوتوث</translation> <translation id="9079731690316798640">Wi-Fi: <ph name="ADDRESS" /></translation> <translation id="9080206825613744995">الميكروفون قيد الاستخدام</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb index 870010c..b2b0734 100644 --- a/ash/strings/ash_strings_bn.xtb +++ b/ash/strings/ash_strings_bn.xtb
@@ -81,7 +81,7 @@ <translation id="2303600792989757991">উইন্ডোর ওভারভিউ টগল করুন</translation> <translation id="2338501278241028356">আশেপাশের ডিভাইস খুঁজে পেতে ব্লুটুথ চালু করুন</translation> <translation id="2339073806695260576">একটি নোট, স্ক্রিনশট নিতে, লেজার পয়েন্টার বা ম্যাগনিফিকেশনের কাচ ব্যবহার করার জন্য শেল্ফের স্টাইলাস বোতামটি ট্যাপ করুন।</translation> -<translation id="2341729377289034582">স্ক্রিনটি পোট্রেট মোডে লক করা আছে</translation> +<translation id="2341729377289034582">স্ক্রিনটি পোর্ট্রেট মোডে লক করা আছে</translation> <translation id="2352467521400612932">স্টাইলাস সেটিংস</translation> <translation id="2354174487190027830"><ph name="NAME" /> সক্রিয় করা হচ্ছে</translation> <translation id="2359808026110333948">অবিরত</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb index bb51452..31e41db3 100644 --- a/ash/strings/ash_strings_es-419.xtb +++ b/ash/strings/ash_strings_es-419.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">Derecha</translation> <translation id="1351937230027495976">Contraer menú</translation> <translation id="1383876407941801731">Buscar</translation> +<translation id="1419738280318246476">Desbloquea el dispositivo para realizar la acción de notificación</translation> <translation id="1467432559032391204">Izquierda</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation> <translation id="1510238584712386396">Selector</translation> @@ -225,6 +226,7 @@ <translation id="4924411785043111640">Reiniciar y restablecer</translation> <translation id="4961318399572185831">Transmitir pantalla</translation> <translation id="5069971504769299223">Es posible que el administrador del dispositivo supervise tu actividad.</translation> +<translation id="5083553833479578423">Desbloquea más funciones del Asistente.</translation> <translation id="5136175204352732067">Se conectó otro teclado</translation> <translation id="5168181903108465623">Dispositivos de transmisión disponibles</translation> <translation id="5207949376430453814">Destacar el cursor de texto</translation> @@ -296,6 +298,7 @@ <translation id="6376931439017688372">Se activó la conexión Bluetooth</translation> <translation id="639644700271529076">El bloqueo de mayúsculas está desactivado.</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">Borra todas las notificaciones</translation> <translation id="643147933154517414">Todo listo</translation> <translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> en <ph name="RECEIVER_NAME" /></translation> <translation id="6452181791372256707">Rechazar</translation> @@ -397,9 +400,11 @@ <translation id="8152119955266188852">Presionaste la combinación de teclas para activar la lupa de pantalla completa. ¿Quieres activarla?</translation> <translation id="8190698733819146287">Personalizar idiomas y la entrada de datos</translation> <translation id="8191230140820435481">Administrar tus aplicaciones, extensiones y temas</translation> +<translation id="8192202700944119416">Las notificaciones están ocultas.</translation> <translation id="8261506727792406068">Borrar</translation> <translation id="8297006494302853456">Débil</translation> <translation id="8308637677604853869">Menú anterior</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">Crear nota</translation> <translation id="8392451568018454956">Menú de opciones para <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="8406981827175133772">Lupa de pantalla completa</translation> @@ -441,6 +446,7 @@ <translation id="8938800817013097409">Dispositivo USB-C (puerto derecho en la parte posterior)</translation> <translation id="8940956008527784070">Batería baja (<ph name="PERCENTAGE" />%)</translation> <translation id="8984179138335769204">Inicio rápido</translation> +<translation id="899350903320462459">Desbloquea el dispositivo como <ph name="LOGIN_ID" /> para realizar la acción de notificación</translation> <translation id="8995603266996330174">Administrado por <ph name="DOMAIN" /></translation> <translation id="9029474291399787231">La actualización de Adobe Flash Player está disponible</translation> <translation id="9056839673611986238">Se restablecerá el dispositivo</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb index 30b3d3e..1f09c99 100644 --- a/ash/strings/ash_strings_fa.xtb +++ b/ash/strings/ash_strings_fa.xtb
@@ -207,7 +207,7 @@ <translation id="453661520163887813"><ph name="TIME" /> مانده تا کامل شود</translation> <translation id="4544944664594876241">کلیدهای میانبر قفل کردن صفحه تغییر کرده است. لطفاً از <ph name="NEW_SHORTCUT" /> به جای <ph name="OLD_SHORTCUT" /> استفاده کنید.</translation> <translation id="4564869809620998694">سرویس قلم</translation> -<translation id="4570957409596482333">دکمه «انتخاب کنید تا بتوانید صحبت کنید»</translation> +<translation id="4570957409596482333">دکمه «انتخاب برای شنیدن»</translation> <translation id="4585337515783392668">توقف ارسال محتوا به گیرنده ناشناس</translation> <translation id="4628757576491864469">دستگاهها</translation> <translation id="4659419629803378708">ChromeVox فعال شد</translation> @@ -422,7 +422,7 @@ <translation id="8517041960877371778">ممکن است وقتی <ph name="DEVICE_TYPE" /> شما خاموش است، شارژ نشود.</translation> <translation id="8627191004499078455">متصل به <ph name="DEVICE_NAME" /></translation> <translation id="8639760480004882931"><ph name="PERCENTAGE" /> باقیمانده</translation> -<translation id="8649101189709089199">انتخاب کنید تا بتوانید صحبت کنید</translation> +<translation id="8649101189709089199">انتخاب برای شنیدن</translation> <translation id="8652175077544655965">بستن تنظیمات</translation> <translation id="8653151467777939995">نمایش تنظیمات اعلان. اعلانها روشن است</translation> <translation id="8664753092453405566">نمایش فهرست شبکه. <ph name="STATE_TEXT" /></translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb index fcfbc9d..587e878 100644 --- a/ash/strings/ash_strings_fi.xtb +++ b/ash/strings/ash_strings_fi.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">Oikealle</translation> <translation id="1351937230027495976">Tiivistä valikko</translation> <translation id="1383876407941801731">Haku</translation> +<translation id="1419738280318246476">Avaa laitteen lukitus, niin voit käyttää ilmoitustoimintoa</translation> <translation id="1467432559032391204">Vasemmalle</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation> <translation id="1510238584712386396">Käynnistysohjelma</translation> @@ -225,6 +226,7 @@ <translation id="4924411785043111640">Käynnistä uudelleen ja palauta</translation> <translation id="4961318399572185831">Suoratoista näyttö</translation> <translation id="5069971504769299223">Laitteen hallinnoija voi ehkä seurata toimintaasi.</translation> +<translation id="5083553833479578423">Käytä lisää Assistantin ominaisuuksia.</translation> <translation id="5136175204352732067">Eri näppäimistö kytketty</translation> <translation id="5168181903108465623">Cast-laitteita käytettävissä</translation> <translation id="5207949376430453814">Korosta tekstikursori</translation> @@ -298,6 +300,7 @@ <translation id="6376931439017688372">Bluetooth on käytössä</translation> <translation id="639644700271529076">CAPS LOCK on pois päältä</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">Tyhjennä kaikki ilmoitukset</translation> <translation id="643147933154517414">Valmis</translation> <translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> – <ph name="RECEIVER_NAME" /></translation> <translation id="6452181791372256707">Hylkää</translation> @@ -399,9 +402,11 @@ <translation id="8152119955266188852">Painoit koko näytön suurennuksen pikanäppäintä. Haluatko ottaa sen käyttöön?</translation> <translation id="8190698733819146287">Muokkaa kieliä ja syötettä...</translation> <translation id="8191230140820435481">Hallita sovelluksia, laajennuksia ja teemoja</translation> +<translation id="8192202700944119416">Ilmoitukset on piilotettu.</translation> <translation id="8261506727792406068">Poista</translation> <translation id="8297006494302853456">Heikko</translation> <translation id="8308637677604853869">Edellinen valikko</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">Luo muistiinpano</translation> <translation id="8392451568018454956">Tilin <ph name="USER_EMAIL_ADDRESS" /> vaihtoehtovalikko</translation> <translation id="8406981827175133772">Koko näytön suurennus</translation> @@ -443,6 +448,7 @@ <translation id="8938800817013097409">C-tyypin USB-laite (oikeanpuoleinen takaportti)</translation> <translation id="8940956008527784070">Akku vähissä (<ph name="PERCENTAGE" /> %)</translation> <translation id="8984179138335769204">Pikakäynnistys</translation> +<translation id="899350903320462459">Avaa laitteen lukitus tunnuksella <ph name="LOGIN_ID" />, niin voit käyttää ilmoitustoimintoa</translation> <translation id="8995603266996330174">Hallinnoija: <ph name="DOMAIN" /></translation> <translation id="9029474291399787231">Adobe Flash Playerin päivitys saatavilla</translation> <translation id="9056839673611986238">Laite palautetaan</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb index 0bb6bd0f..156bf40 100644 --- a/ash/strings/ash_strings_fil.xtb +++ b/ash/strings/ash_strings_fil.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">Kanan</translation> <translation id="1351937230027495976">I-collapse ang menu</translation> <translation id="1383876407941801731">Hanapin</translation> +<translation id="1419738280318246476">I-unlock ang device para maisagawa ang pagkilos sa notification</translation> <translation id="1467432559032391204">Kaliwa</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation> <translation id="1510238584712386396">Launcher</translation> @@ -224,6 +225,7 @@ <translation id="4924411785043111640">I-restart at i-reset</translation> <translation id="4961318399572185831">I-cast ang screen</translation> <translation id="5069971504769299223">Maaaring masubaybayan ng manager ng device ang iyong aktibidad.</translation> +<translation id="5083553833479578423">Mag-unlock ng higit pang feature ng Assistant.</translation> <translation id="5136175204352732067">Ibang keyboard ang nakakonekta</translation> <translation id="5168181903108465623">I-cast ang mga available na device</translation> <translation id="5207949376430453814">I-highlight ang text caret</translation> @@ -295,6 +297,7 @@ <translation id="6376931439017688372">Naka-on ang Bluetooth</translation> <translation id="639644700271529076">Naka-off ang CAPS LOCK</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">I-clear ang lahat ng notification</translation> <translation id="643147933154517414">Tapos na ang lahat</translation> <translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> sa <ph name="RECEIVER_NAME" /></translation> <translation id="6452181791372256707">Tanggihan</translation> @@ -396,9 +399,11 @@ <translation id="8152119955266188852">Napindot mo ang shortcut para sa full-screen magnifier. Gusto mo ba itong i-on?</translation> <translation id="8190698733819146287">I-customize ang mga wika at input...</translation> <translation id="8191230140820435481">Pamahalaan ang iyong apps, mga extension, at tema</translation> +<translation id="8192202700944119416">Nakatago ang mga notification.</translation> <translation id="8261506727792406068">I-delete</translation> <translation id="8297006494302853456">Mahina</translation> <translation id="8308637677604853869">Nakaraang menu</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">Gumawa ng tala</translation> <translation id="8392451568018454956">Menu ng mga pagpipilian para sa <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="8406981827175133772">Fullscreen Magnifier</translation> @@ -440,6 +445,7 @@ <translation id="8938800817013097409">USB-C device (kanang port sa likod)</translation> <translation id="8940956008527784070">Mahina na ang baterya (<ph name="PERCENTAGE" />%)</translation> <translation id="8984179138335769204">Mabilisang paglunsad</translation> +<translation id="899350903320462459">I-unlock ang device bilang <ph name="LOGIN_ID" /> para maisagawa ang pagkilos sa notification</translation> <translation id="8995603266996330174">Pinamamahalaan ni <ph name="DOMAIN" /></translation> <translation id="9029474291399787231">Available ang update sa Adobe Flash Player</translation> <translation id="9056839673611986238">Iro-roll back ang device</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb index 3be4724c..93968b2 100644 --- a/ash/strings/ash_strings_gu.xtb +++ b/ash/strings/ash_strings_gu.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">જમણે</translation> <translation id="1351937230027495976">મેનૂ સંકુચિત કરો</translation> <translation id="1383876407941801731">શોધો</translation> +<translation id="1419738280318246476">નોટિફિકેશન ક્રિયા કરવા માટે ઉપકરણને અનલૉક કરો</translation> <translation id="1467432559032391204">ડાબું</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation> <translation id="1510238584712386396">લૉન્ચર</translation> @@ -224,6 +225,7 @@ <translation id="4924411785043111640">ફરી શરૂ કરો અને રીસેટ કરો</translation> <translation id="4961318399572185831">સ્ક્રીનને કાસ્ટ કરો</translation> <translation id="5069971504769299223">ઉપકરણ મેનેજર તમારી પ્રવૃત્તિનું નિયમન કરી શકે છે.</translation> +<translation id="5083553833479578423">આસિસ્ટંટની વધુ સુવિધાઓને અનલૉક કરો.</translation> <translation id="5136175204352732067">અલગ કીબોર્ડ કનેક્ટ કર્યું</translation> <translation id="5168181903108465623">Cast ઉપકરણો ઉપલબ્ધ</translation> <translation id="5207949376430453814">ટેક્સ્ટ કૅરેટને હાઇલાઇટ કરો</translation> @@ -295,6 +297,7 @@ <translation id="6376931439017688372">બ્લૂટૂથ ચાલુ છે</translation> <translation id="639644700271529076">CAPS LOCK બંધ છે</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">બધા નોટિફિકેશન સાફ કરો</translation> <translation id="643147933154517414">થઈ ગયું</translation> <translation id="6445835306623867477"><ph name="RECEIVER_NAME" /> પર <ph name="ROUTE_TITLE" /></translation> <translation id="6452181791372256707">નકારો</translation> @@ -396,9 +399,11 @@ <translation id="8152119955266188852">તમે પૂર્ણ-સ્ક્રીન મૅગ્નિફાયર માટેનો શૉર્ટકટ દબાવેલ છે. શું તમે તે ચાલુ કરવા માગો છો?</translation> <translation id="8190698733819146287">ભાષાઓ અને ઇનપુટને કસ્ટમાઇઝ કરો...</translation> <translation id="8191230140820435481">તમારી ઍપ્લિકેશનો, એક્સ્ટેન્શન અને થીમ્સ મેનેજ કરો</translation> +<translation id="8192202700944119416">નોટિફિકેશન છુપાવેલા છે.</translation> <translation id="8261506727792406068">કાઢી નાખો</translation> <translation id="8297006494302853456">નબળું</translation> <translation id="8308637677604853869">પહેલાનું મેનૂ</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">નોંધ બનાવો</translation> <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> માટે વિકલ્પો મેનૂ</translation> <translation id="8406981827175133772">પૂર્ણસ્ક્રીન મૅગ્નિફાયર</translation> @@ -440,6 +445,7 @@ <translation id="8938800817013097409">USB-C ઉપકરણ (પાછળની બાજુએ જમણું પોર્ટ)</translation> <translation id="8940956008527784070">બૅટરી ઓછી (<ph name="PERCENTAGE" />%)</translation> <translation id="8984179138335769204">ઝડપી લૉન્ચ</translation> +<translation id="899350903320462459">નોટિફિકેશન ક્રિયા કરવા માટે ઉપકરણને <ph name="LOGIN_ID" /> તરીકે અનલૉક કરો</translation> <translation id="8995603266996330174"><ph name="DOMAIN" /> દ્વારા સંચાલિત</translation> <translation id="9029474291399787231">Adobe Flash Player અપડેટ ઉપલબ્ધ છે</translation> <translation id="9056839673611986238">ઉપકરણ રોલ બૅક કરવામાં આવશે</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb index 2f1d5f5e..061b5bf 100644 --- a/ash/strings/ash_strings_hu.xtb +++ b/ash/strings/ash_strings_hu.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">Jobbra</translation> <translation id="1351937230027495976">Menü összecsukása</translation> <translation id="1383876407941801731">Keresés</translation> +<translation id="1419738280318246476">Az eszköz zárolásának feloldása az értesítési művelet végrehajtásához</translation> <translation id="1467432559032391204">Balra</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation> <translation id="1510238584712386396">Indító</translation> @@ -225,6 +226,7 @@ <translation id="4924411785043111640">Újraindítás és visszaállítás</translation> <translation id="4961318399572185831">Képernyő átküldése</translation> <translation id="5069971504769299223">Lehet, hogy tevékenységeit megfigyelheti az eszköz felügyelője.</translation> +<translation id="5083553833479578423">Hozzáférés a Segéd további funkcióihoz</translation> <translation id="5136175204352732067">Új billentyűzet lett csatlakoztatva</translation> <translation id="5168181903108465623">Cast-eszközök állnak rendelkezésre</translation> <translation id="5207949376430453814">Szövegbeszúrási pont kiemelése</translation> @@ -296,6 +298,7 @@ <translation id="6376931439017688372">A Bluetooth be van kapcsolva</translation> <translation id="639644700271529076">A CAPS LOCK ki van kapcsolva</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">Az összes értesítés törlése</translation> <translation id="643147933154517414">Elkészült</translation> <translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> itt: <ph name="RECEIVER_NAME" /></translation> <translation id="6452181791372256707">Elutasítás</translation> @@ -397,9 +400,11 @@ <translation id="8152119955266188852">Lenyomta a teljes képernyős nagyító billentyűparancsát. Bekapcsolja a funkciót?</translation> <translation id="8190698733819146287">Nyelvek és beviteli módok személyre szabása...</translation> <translation id="8191230140820435481">Alkalmazások, bővítmények és témák kezelése</translation> +<translation id="8192202700944119416">Az értesítések el vannak rejtve.</translation> <translation id="8261506727792406068">Törlés</translation> <translation id="8297006494302853456">Gyenge</translation> <translation id="8308637677604853869">Előző menü</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">Jegyzet létrehozása</translation> <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> beállításainak menüje</translation> <translation id="8406981827175133772">Teljes képernyős nagyító</translation> @@ -441,6 +446,7 @@ <translation id="8938800817013097409">C típusú USB-vel kompatibilis eszköz (jobb hátsó port)</translation> <translation id="8940956008527784070">Alacsony akkumulátortöltöttség (<ph name="PERCENTAGE" />%)</translation> <translation id="8984179138335769204">Gyorsindítás</translation> +<translation id="899350903320462459">Az eszköz zárolásának feloldása az értesítési művelet végrehajtásához a következő felhasználó által: <ph name="LOGIN_ID" />.</translation> <translation id="8995603266996330174">Kezelő: <ph name="DOMAIN" /></translation> <translation id="9029474291399787231">Rendelkezésre áll az Adobe Flash Player frissítése</translation> <translation id="9056839673611986238">Az eszköz korábbi állapotra áll vissza</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb index a1ee2234..97925f0f 100644 --- a/ash/strings/ash_strings_ja.xtb +++ b/ash/strings/ash_strings_ja.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">右</translation> <translation id="1351937230027495976">メニューを折りたたむ</translation> <translation id="1383876407941801731">検索</translation> +<translation id="1419738280318246476">通知に関する操作を行うには、端末のロックを解除してください</translation> <translation id="1467432559032391204">左</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" />(HDMI / DP)</translation> <translation id="1510238584712386396">ランチャー</translation> @@ -224,6 +225,7 @@ <translation id="4924411785043111640">再起動してリセット</translation> <translation id="4961318399572185831">画面をキャスト</translation> <translation id="5069971504769299223">端末の管理者によりアクティビティが監視される可能性があります。</translation> +<translation id="5083553833479578423">さらに多くのアシスタント機能をぜひご活用ください。</translation> <translation id="5136175204352732067">別のキーボードが接続されています</translation> <translation id="5168181903108465623">キャスト デバイスを利用できます</translation> <translation id="5207949376430453814">テキスト カーソルをハイライト表示する</translation> @@ -295,6 +297,7 @@ <translation id="6376931439017688372">Bluetooth がオンです</translation> <translation id="639644700271529076">CapsLock 機能はオフになっています</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">通知をすべて消去</translation> <translation id="643147933154517414">すべて確認済み</translation> <translation id="6445835306623867477"><ph name="RECEIVER_NAME" /> に「<ph name="ROUTE_TITLE" />」をキャスト中</translation> <translation id="6452181791372256707">拒否</translation> @@ -397,9 +400,11 @@ <translation id="8152119955266188852">拡大鏡(全画面)のショートカットを押しました。この機能をオンにしますか?</translation> <translation id="8190698733819146287">言語と入力方法をカスタマイズ...</translation> <translation id="8191230140820435481">アプリ、拡張機能、テーマを管理する</translation> +<translation id="8192202700944119416">通知は非表示になっています。</translation> <translation id="8261506727792406068">削除</translation> <translation id="8297006494302853456">弱い</translation> <translation id="8308637677604853869">前のメニュー</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">メモを作成</translation> <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> のオプション メニュー</translation> <translation id="8406981827175133772">拡大鏡(全画面)</translation> @@ -441,6 +446,7 @@ <translation id="8938800817013097409">USB-C デバイス(背面右のポート)</translation> <translation id="8940956008527784070">バッテリー残量: 少(<ph name="PERCENTAGE" />%)</translation> <translation id="8984179138335769204">クイック起動</translation> +<translation id="899350903320462459">通知に関する操作を行うには、<ph name="LOGIN_ID" /> で端末のロックを解除してください</translation> <translation id="8995603266996330174">管理ドメイン: <ph name="DOMAIN" /></translation> <translation id="9029474291399787231">Adobe Flash Player のアップデートが利用可能</translation> <translation id="9056839673611986238">端末はロールバックされます</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb index 0594957..997b41b 100644 --- a/ash/strings/ash_strings_kn.xtb +++ b/ash/strings/ash_strings_kn.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">ಬಲಕ್ಕೆ</translation> <translation id="1351937230027495976">ಮೆನುವನ್ನು ಕುಗ್ಗಿಸಿ</translation> <translation id="1383876407941801731">ಹುಡುಕಾಟ</translation> +<translation id="1419738280318246476">ಅಧಿಸೂಚನೆ ಕ್ರಿಯೆಯನ್ನು ನಿರ್ವಹಿಸಲು ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಿ</translation> <translation id="1467432559032391204">ಎಡಕ್ಕೆ</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation> <translation id="1510238584712386396">ಲಾಂಚರ್</translation> @@ -224,6 +225,7 @@ <translation id="4924411785043111640">ಮರುಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಮರುಹೊಂದಿಸಿ</translation> <translation id="4961318399572185831">ಪರದೆಯನ್ನು ಬಿತ್ತರಿಸಿ</translation> <translation id="5069971504769299223">ಸಾಧನ ನಿರ್ವಾಹಕಕ್ಕೆ ನಿಮ್ಮ ಚಟುವಟಿಕೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಲು ಸಾಧ್ಯವಾಗಬಹುದು.</translation> +<translation id="5083553833479578423">ಇನ್ನಷ್ಟು ಅಸಿಸ್ಟೆಂಟ್ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಿ.</translation> <translation id="5136175204352732067">ವಿವಿಧ ಕೀಬೋರ್ಡ್ ಸಂಪರ್ಕಗೊಂಡಿದೆ</translation> <translation id="5168181903108465623">ಬಿತ್ತರಿಸುವಿಕೆಯ ಸಾಧನಗಳು ಲಭ್ಯವಿದೆ</translation> <translation id="5207949376430453814">ಪಠ್ಯದಲ್ಲಿ ಕೆರೆಟ್ ಅನ್ನು ಎದ್ದುಗಾಣಿಸಿ</translation> @@ -296,6 +298,7 @@ <translation id="6376931439017688372">ಬ್ಲೂಟೂತ್ ಆನ್ ಆಗಿದೆ</translation> <translation id="639644700271529076">CAPS LOCK ಆಫ್ ಆಗಿದೆ</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">ಎಲ್ಲಾ ಅಧಿಸೂಚನೆಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ.</translation> <translation id="643147933154517414">ಎಲ್ಲಾ ಮುಗಿದಿದೆ</translation> <translation id="6445835306623867477"><ph name="RECEIVER_NAME" /> ನಲ್ಲಿ <ph name="ROUTE_TITLE" /></translation> <translation id="6452181791372256707">ತಿರಸ್ಕರಿಸಿ</translation> @@ -397,9 +400,11 @@ <translation id="8152119955266188852">ನೀವು ಪೂರ್ಣಪರದೆ ವರ್ಧಕದ ಶಾರ್ಟ್ಕಟ್ ಅನ್ನು ಒತ್ತಿದ್ದೀರಿ. ಅದನ್ನು ಆನ್ ಮಾಡಲು ಬಯಸುವಿರಾ?</translation> <translation id="8190698733819146287">ಭಾಷೆಗಳು ಮತ್ತು ಇನ್ಪುಟ್ ಅನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ...</translation> <translation id="8191230140820435481">ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ಗಳು, ವಿಸ್ತರಣೆಗಳು, ಮತ್ತು ಥೀಮ್ಗಳನ್ನು ನಿರ್ವಹಿಸಿ</translation> +<translation id="8192202700944119416">ಅಧಿಸೂಚನೆಗಳು ಮರೆಯಾಗಿವೆ.</translation> <translation id="8261506727792406068">ಅಳಿಸಿ</translation> <translation id="8297006494302853456">ದುರ್ಬಲ</translation> <translation id="8308637677604853869">ಹಿಂದಿನ ಮೆನು</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">ಟಿಪ್ಪಣಿ ರಚಿಸಿ</translation> <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> ಅವರಿಗಾಗಿ ಆಯ್ಕೆಗಳ ಮೆನು</translation> <translation id="8406981827175133772">ಫುಲ್ಸ್ಕ್ರೀನ್ ವರ್ಧಕ</translation> @@ -441,6 +446,7 @@ <translation id="8938800817013097409">USB-C ಸಾಧನ (ಹಿಂಭಾಗದಲ್ಲಿನ ಬಲ ಪೋರ್ಟ್)</translation> <translation id="8940956008527784070">ಬ್ಯಾಟರಿ ಕಡಿಮೆ (<ph name="PERCENTAGE" />%)</translation> <translation id="8984179138335769204">ಶೀಘ್ರ ಬಿಡುಗಡೆ</translation> +<translation id="899350903320462459">ಅಧಿಸೂಚನೆ ಕ್ರಿಯೆಯನ್ನು ನಿರ್ವಹಿಸಲು ಸಾಧನವನ್ನು <ph name="LOGIN_ID" /> ನಂತೆ ಅನ್ಲಾಕ್ ಮಾಡಿ</translation> <translation id="8995603266996330174"><ph name="DOMAIN" /> ನಿಂದ ನಿರ್ವಹಿಸಲಾಗಿದೆ</translation> <translation id="9029474291399787231">Adobe Flash Player ಅಪ್ಡೇಟ್ ಲಭ್ಯವಿದೆ</translation> <translation id="9056839673611986238">ಸಾಧನವನ್ನು ಮುಂಚಿನ ನಿರ್ದಿಷ್ಟ ಸ್ಥಿತಿಗೆ ಹಿಂತಿರುಗಿಸಲಾಗುತ್ತದೆ</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb index 216fe83..776f45e6 100644 --- a/ash/strings/ash_strings_ko.xtb +++ b/ash/strings/ash_strings_ko.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">오른쪽</translation> <translation id="1351937230027495976">메뉴 접기</translation> <translation id="1383876407941801731">검색</translation> +<translation id="1419738280318246476">알림 작업을 실행하려면 기기의 잠금을 해제하세요.</translation> <translation id="1467432559032391204">왼쪽</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" />(HDMI/DP)</translation> <translation id="1510238584712386396">런처</translation> @@ -224,6 +225,7 @@ <translation id="4924411785043111640">다시 시작 및 재설정</translation> <translation id="4961318399572185831">화면 전송</translation> <translation id="5069971504769299223">기기 관리자가 내 활동을 모니터링할 수도 있습니다.</translation> +<translation id="5083553833479578423">더 많은 어시스턴트 기능을 사용해 보세요.</translation> <translation id="5136175204352732067">다른 키보드 연결됨</translation> <translation id="5168181903108465623">전송 기기를 사용할 수 있음</translation> <translation id="5207949376430453814">텍스트 캐럿 강조표시</translation> @@ -295,6 +297,7 @@ <translation id="6376931439017688372">블루투스 사용 중</translation> <translation id="639644700271529076">CAPS LOCK이 꺼져 있음</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">알림 모두 지우기</translation> <translation id="643147933154517414">완료</translation> <translation id="6445835306623867477"><ph name="RECEIVER_NAME" />에 <ph name="ROUTE_TITLE" /> 전송 중</translation> <translation id="6452181791372256707">거부</translation> @@ -396,9 +399,11 @@ <translation id="8152119955266188852">전체 화면 돋보기 단축키를 누르셨습니다. 사용 설정할까요?</translation> <translation id="8190698733819146287">언어 및 입력 설정...</translation> <translation id="8191230140820435481">앱, 확장 프로그램 및 테마 관리</translation> +<translation id="8192202700944119416">알림이 숨겨져 있음</translation> <translation id="8261506727792406068">삭제</translation> <translation id="8297006494302853456">약함</translation> <translation id="8308637677604853869">이전 메뉴</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">메모 만들기</translation> <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" />의 옵션 메뉴</translation> <translation id="8406981827175133772">전체화면 돋보기</translation> @@ -440,6 +445,7 @@ <translation id="8938800817013097409">USB-C 기기(우측 후면 포트)</translation> <translation id="8940956008527784070">배터리 부족(<ph name="PERCENTAGE" />%)</translation> <translation id="8984179138335769204">빠른 실행</translation> +<translation id="899350903320462459">알림 작업을 실행하려면 <ph name="LOGIN_ID" />(으)로 기기의 잠금을 해제하세요.</translation> <translation id="8995603266996330174">관리자: <ph name="DOMAIN" /></translation> <translation id="9029474291399787231">Adobe Flash Player 업데이트 가능</translation> <translation id="9056839673611986238">기기가 롤백됨</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb index 1d699494..b46c1c2 100644 --- a/ash/strings/ash_strings_lt.xtb +++ b/ash/strings/ash_strings_lt.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">Dešinė</translation> <translation id="1351937230027495976">Sutraukti meniu</translation> <translation id="1383876407941801731">Ieškoti</translation> +<translation id="1419738280318246476">Atrakinkite įrenginį, kad galėtumėte įvykdyti pranešimo veiksmą</translation> <translation id="1467432559032391204">Kairė</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI / DP)</translation> <translation id="1510238584712386396">Paleidimo priemonė</translation> @@ -225,6 +226,7 @@ <translation id="4924411785043111640">Paleisti ir nustatyti iš naujo</translation> <translation id="4961318399572185831">Perduoti ekraną</translation> <translation id="5069971504769299223">Įrenginio valdytojas gali stebėti jūsų veiklą.</translation> +<translation id="5083553833479578423">Atrakinkite daugiau Padėjėjo funkcijų.</translation> <translation id="5136175204352732067">Prijungta kita klaviatūra</translation> <translation id="5168181903108465623">Pasiekiami perdavimo įrenginiai</translation> <translation id="5207949376430453814">Paryškinti teksto žymeklį</translation> @@ -296,6 +298,7 @@ <translation id="6376931439017688372">„Bluetooth“ įjungtas</translation> <translation id="639644700271529076">DIDŽIŲJŲ RAIDŽIŲ RAŠYMAS išjungtas</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">Visų pranešimų išvalymas</translation> <translation id="643147933154517414">Viskas atlikta</translation> <translation id="6445835306623867477">„<ph name="ROUTE_TITLE" />“ („<ph name="RECEIVER_NAME" />“)</translation> <translation id="6452181791372256707">Atmesti</translation> @@ -397,9 +400,11 @@ <translation id="8152119955266188852">Paspaudėte viso ekrano didintuvo spartųjį klavišą. Ar norite jį įjungti?</translation> <translation id="8190698733819146287">Tinkinti kalbas ir įvestį...</translation> <translation id="8191230140820435481">Valdyti programas, plėtinius ir temas</translation> +<translation id="8192202700944119416">Pranešimai yra paslėpti.</translation> <translation id="8261506727792406068">Ištrinti</translation> <translation id="8297006494302853456">Silpnas</translation> <translation id="8308637677604853869">Ankstesnis meniu</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">Sukurti užrašą</translation> <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> skirtų parinkčių meniu</translation> <translation id="8406981827175133772">Viso ekrano didintuvas</translation> @@ -441,6 +446,7 @@ <translation id="8938800817013097409">USB-C įrenginys (prievadas dešinėje, užpakalinėje dalyje)</translation> <translation id="8940956008527784070">Akumuliatorius senka (<ph name="PERCENTAGE" /> %)</translation> <translation id="8984179138335769204">Greitasis paleidimas</translation> +<translation id="899350903320462459">Atrakinkite įrenginį su <ph name="LOGIN_ID" />, kad galėtumėte įvykdyti pranešimo veiksmą</translation> <translation id="8995603266996330174">Valdoma „<ph name="DOMAIN" />“</translation> <translation id="9029474291399787231">Pasiekiamas „Adobe Flash Player“ naujinys</translation> <translation id="9056839673611986238">Įrenginys bus atkurtas</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb index 57a3f81..ecc6266 100644 --- a/ash/strings/ash_strings_ml.xtb +++ b/ash/strings/ash_strings_ml.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">ശരി</translation> <translation id="1351937230027495976">മെനു ചുരുക്കുക</translation> <translation id="1383876407941801731">തിരയൂ</translation> +<translation id="1419738280318246476">അറിയിപ്പ് പ്രവർത്തനം നിർവഹിക്കുന്നതിന് ഉപകരണം അൺലോക്ക് ചെയ്യുക</translation> <translation id="1467432559032391204">ഇടത്</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation> <translation id="1510238584712386396">ലോഞ്ചർ</translation> @@ -224,6 +225,7 @@ <translation id="4924411785043111640">പുനഃരാരംഭിച്ച് പുനഃസജ്ജീകരിക്കുക</translation> <translation id="4961318399572185831">സ്ക്രീൻ കാസ്റ്റുചെയ്യുക</translation> <translation id="5069971504769299223">നിങ്ങളുടെ ആക്റ്റിവിറ്റി, ഉപകരണ മാനേജർക്ക് നിരീക്ഷിക്കാനായേക്കും.</translation> +<translation id="5083553833479578423">കൂടുതൽ അസിസ്റ്റന്റ് ഫീച്ചറുകൾ അൺലോക്ക് ചെയ്യുക.</translation> <translation id="5136175204352732067">വ്യത്യസ്ത കീബോർഡ് കണക്റ്റ് ചെയ്തു</translation> <translation id="5168181903108465623">Cast ഉപകരണങ്ങൾ ലഭ്യമാണ്.</translation> <translation id="5207949376430453814">ടെക്സ്റ്റ് കാരറ്റ് ഹൈലൈറ്റുചെയ്യുക</translation> @@ -295,6 +297,7 @@ <translation id="6376931439017688372">Bluetooth ഓണാണ്</translation> <translation id="639644700271529076">CAPS LOCK ഓഫാണ്</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">എല്ലാ അറിയിപ്പുകളും മായ്ക്കുക</translation> <translation id="643147933154517414">എല്ലാം ചെയ്തു</translation> <translation id="6445835306623867477"><ph name="RECEIVER_NAME" />-ൽ <ph name="ROUTE_TITLE" /></translation> <translation id="6452181791372256707">നിരസിക്കുക</translation> @@ -396,9 +399,11 @@ <translation id="8152119955266188852">നിങ്ങൾ പൂർണ്ണ സ്ക്രീൻ മാഗ്നിഫയറിനുള്ള കുറുക്കുവഴി അമർത്തി. അത് ഓണാക്കണോ?</translation> <translation id="8190698733819146287">ഭാഷകൾ ഇച്ഛാനുസൃതമാക്കി നല്കുക...</translation> <translation id="8191230140820435481">നിങ്ങളുടെ അപ്ലിക്കേഷനുകൾ, വിപുലീകരണങ്ങൾ, തീമുകൾ എന്നിവ നിയന്ത്രിക്കുക</translation> +<translation id="8192202700944119416">അറിയിപ്പുകൾ അദൃശ്യമാക്കിയിരിക്കുന്നു.</translation> <translation id="8261506727792406068">ഇല്ലാതാക്കുക</translation> <translation id="8297006494302853456">ദുര്ബലം</translation> <translation id="8308637677604853869">മുൻ മെനു</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">കുറിപ്പ് സൃഷ്ടിക്കുക</translation> <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> എന്നതിനുള്ള ഓപ്ഷനുകൾ മെനു</translation> <translation id="8406981827175133772">പൂർണ്ണസ്ക്രീൻ മാഗ്നിഫയർ</translation> @@ -440,6 +445,7 @@ <translation id="8938800817013097409">USB-C ഉപകരണം (പുറകിൽ വലതുവശത്തെ പോർട്ട്)</translation> <translation id="8940956008527784070">ബാറ്ററി കുറവാണ് (<ph name="PERCENTAGE" />%)</translation> <translation id="8984179138335769204">ക്വിക്ക് ലോഞ്ച്</translation> +<translation id="899350903320462459">അറിയിപ്പ് പ്രവർത്തനം നിർവഹിക്കാൻ, <ph name="LOGIN_ID" /> ആയി ഉപകരണം ലോക്ക് ചെയ്യുക</translation> <translation id="8995603266996330174"><ph name="DOMAIN" /> എന്നത് കൈകാര്യം ചെയ്യുന്നു</translation> <translation id="9029474291399787231">Adobe Flash Player അപ്ഡേറ്റ് ലഭ്യമാണ്</translation> <translation id="9056839673611986238">ഉപകരണം പഴയ അവസ്ഥയിലേക്ക് പുനഃസ്ഥാപിക്കും</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb index abb6b56..6871f0b2 100644 --- a/ash/strings/ash_strings_mr.xtb +++ b/ash/strings/ash_strings_mr.xtb
@@ -25,12 +25,13 @@ <translation id="1346748346194534595">उजवे</translation> <translation id="1351937230027495976">मेनू कोलॅप्स करा</translation> <translation id="1383876407941801731">शोधा</translation> +<translation id="1419738280318246476">सूचनेशी संबंधित क्रिया पार पाडण्यासाठी डिव्हाइस अनलॉक करा</translation> <translation id="1467432559032391204">डावे</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation> <translation id="1510238584712386396">लाँचर</translation> <translation id="1520303207432623762">{NUM_APPS,plural, =1{सूचना सेटिंग्ज दाखवा. अॅपसाठी सूचना बंद आहेत}one{सूचना सेटिंग्ज दाखवा. # अॅपसाठी सूचना बंद आहेत}other{सूचना सेटिंग्ज दाखवा. # अॅप्ससाठी सूचना बंद आहेत}}</translation> <translation id="1525508553941733066">डिसमिस करा</translation> -<translation id="1537254971476575106">पूर्णस्क्रीन भिंग</translation> +<translation id="1537254971476575106">क्षेत्रे भिंग</translation> <translation id="15373452373711364">मोठा माउस कर्सर</translation> <translation id="1550523713251050646">अधिक पर्यायांसाठी क्लिक करा</translation> <translation id="1567387640189251553">तुम्ही शेवटचा पासवर्ड टाकल्या नंतर वेगळा कीबोर्ड कनेक्ट करण्यात आला आहे. तो कदाचित तुमचे कीस्ट्रोक चोरण्याचा प्रयत्न करत असेल.</translation> @@ -224,6 +225,7 @@ <translation id="4924411785043111640">रीस्टार्ट करा आणि रीसेट करा</translation> <translation id="4961318399572185831">स्क्रीन कास्ट करा</translation> <translation id="5069971504769299223">डिव्हाइस व्यवस्थापक कदाचित तुमच्या अॅक्टिव्हिटीचे परीक्षण करू शकेल.</translation> +<translation id="5083553833479578423">असिस्टंटची आणखी वैशिष्ट्ये अनलॉक करा.</translation> <translation id="5136175204352732067">वेगळा कीबोर्ड कनेक्ट केला आहे</translation> <translation id="5168181903108465623">कास्ट डिव्हाइसेस उपलब्ध</translation> <translation id="5207949376430453814">मजकूर कॅरेट हायलाइट करा</translation> @@ -295,6 +297,7 @@ <translation id="6376931439017688372">ब्लूटूथ सुरू आहे</translation> <translation id="639644700271529076">CAPS LOCK बंद आहे</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">सर्व सूचना साफ करा</translation> <translation id="643147933154517414">सर्व पूर्ण झाले</translation> <translation id="6445835306623867477"><ph name="RECEIVER_NAME" /> वर <ph name="ROUTE_TITLE" /></translation> <translation id="6452181791372256707">नाकारा</translation> @@ -396,9 +399,11 @@ <translation id="8152119955266188852">तुम्ही पूर्ण-स्क्रीन मॅग्निफायर शॉर्टकट दाबला. तुम्हाला ते सुरू करायचे आहे का?</translation> <translation id="8190698733819146287">भाषा आणि इनपुट सानुकूलित करा...</translation> <translation id="8191230140820435481">आपले अॅप्लिकेशन, विस्तार आणि थीम व्यवस्थापित करा</translation> +<translation id="8192202700944119416">सूचना लपवलेल्या आहेत.</translation> <translation id="8261506727792406068">हटवा</translation> <translation id="8297006494302853456">कमकुवत</translation> <translation id="8308637677604853869">मागील मेनू</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">टीप तयार करा</translation> <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> साठी पर्याय मेनू</translation> <translation id="8406981827175133772">फुलस्क्रीन मॅग्निफायर</translation> @@ -440,6 +445,7 @@ <translation id="8938800817013097409">USB-C डिव्हाइस (मागील बाजूचे उजवे पोर्ट)</translation> <translation id="8940956008527784070">बॅटरी कमी झाली (<ph name="PERCENTAGE" />%)</translation> <translation id="8984179138335769204">त्वरित लाँच</translation> +<translation id="899350903320462459">सूचनेशी संबंधित क्रिया पार पाडण्यासाठी डिव्हाइस <ph name="LOGIN_ID" /> म्हणून अनलॉक करा</translation> <translation id="8995603266996330174"><ph name="DOMAIN" /> द्वारे व्यवस्थापित</translation> <translation id="9029474291399787231">Adobe Flash Player अपडेट उपलब्ध आहे</translation> <translation id="9056839673611986238">डिव्हाइस रोल बॅक केले जाईल</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb index 75723d1..39bbf0f 100644 --- a/ash/strings/ash_strings_ru.xtb +++ b/ash/strings/ash_strings_ru.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">Справа</translation> <translation id="1351937230027495976">Свернуть меню</translation> <translation id="1383876407941801731">Поиск</translation> +<translation id="1419738280318246476">Чтобы выполнить действие, предложенное в уведомлении, разблокируйте устройство.</translation> <translation id="1467432559032391204">Слева</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation> <translation id="1510238584712386396">Панель запуска</translation> @@ -224,6 +225,7 @@ <translation id="4924411785043111640">Перезапустить и сбросить настройки</translation> <translation id="4961318399572185831">Трансляция экрана</translation> <translation id="5069971504769299223">Администратор может отслеживать ваши действия на этом устройстве.</translation> +<translation id="5083553833479578423">Получите доступ к другим возможностям Ассистента.</translation> <translation id="5136175204352732067">Подключена другая клавиатура</translation> <translation id="5168181903108465623">Доступны устройства для трансляции</translation> <translation id="5207949376430453814">Выделять курсор при вводе текста</translation> @@ -295,6 +297,7 @@ <translation id="6376931439017688372">Bluetooth включен</translation> <translation id="639644700271529076">CAPS LOCK отключен</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">Удалить все уведомления</translation> <translation id="643147933154517414">Уведомлений больше нет</translation> <translation id="6445835306623867477">Трансляция <ph name="ROUTE_TITLE" /> на устройство "<ph name="RECEIVER_NAME" />"</translation> <translation id="6452181791372256707">Отклонить</translation> @@ -396,9 +399,11 @@ <translation id="8152119955266188852">Вы нажали сочетание клавиш для полноэкранной лупы. Включить ее?</translation> <translation id="8190698733819146287">Настройки языков и ввода…</translation> <translation id="8191230140820435481">Управление приложениями, расширениями и темами</translation> +<translation id="8192202700944119416">Уведомления скрыты</translation> <translation id="8261506727792406068">Удалить</translation> <translation id="8297006494302853456">Слабый</translation> <translation id="8308637677604853869">Предыдущее меню</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">Создать заметку</translation> <translation id="8392451568018454956">Меню параметров пользователя "<ph name="USER_EMAIL_ADDRESS" />"</translation> <translation id="8406981827175133772">Полноэкранная лупа</translation> @@ -440,6 +445,7 @@ <translation id="8938800817013097409">Устройство USB-C (порт справа на задней панели)</translation> <translation id="8940956008527784070">Низкий заряд батареи (<ph name="PERCENTAGE" />%)</translation> <translation id="8984179138335769204">Быстрый запуск</translation> +<translation id="899350903320462459">Чтобы выполнить действие, предложенное в уведомлении, разблокируйте устройство с помощью аккаунта <ph name="LOGIN_ID" />.</translation> <translation id="8995603266996330174">В домене <ph name="DOMAIN" /></translation> <translation id="9029474291399787231">Доступно обновление для Adobe Flash Player</translation> <translation id="9056839673611986238">Система на устройстве будет возвращена к предыдущей версии</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb index a272205..0283e0b 100644 --- a/ash/strings/ash_strings_ta.xtb +++ b/ash/strings/ash_strings_ta.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">வலது</translation> <translation id="1351937230027495976">மெனுவைச் சுருக்கு</translation> <translation id="1383876407941801731">தேடல்</translation> +<translation id="1419738280318246476">அறிவிப்புச் செயலைச் செய்வதற்கு, சாதனத்தைத் திறக்கவும்</translation> <translation id="1467432559032391204">இடது</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation> <translation id="1510238584712386396">துவக்கி</translation> @@ -224,6 +225,7 @@ <translation id="4924411785043111640">மீண்டும் தொடங்கி, மீட்டமை</translation> <translation id="4961318399572185831">அனுப்புதல் திரை</translation> <translation id="5069971504769299223">உங்கள் செயல்பாட்டைச் சாதன நிர்வாகியால் கண்காணிக்க முடியும்.</translation> +<translation id="5083553833479578423">அசிஸ்டண்ட்டின் மேலும் பல அம்சங்களைப் பெறுக.</translation> <translation id="5136175204352732067">வேறொரு விசைப்பலகை இணைக்கப்பட்டது</translation> <translation id="5168181903108465623">அனுப்பும் சாதனங்கள் உள்ளன</translation> <translation id="5207949376430453814">உரைச் சுட்டியைத் தனிப்படுத்து</translation> @@ -295,6 +297,7 @@ <translation id="6376931439017688372">புளூடூத் இயக்கப்பட்டுள்ளது</translation> <translation id="639644700271529076">CAPS LOCK முடக்கப்பட்டுள்ளது</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">எல்லா அறிவிப்புகளையும் அழிக்கும்</translation> <translation id="643147933154517414">அனைத்தும் காட்டப்பட்டன</translation> <translation id="6445835306623867477"><ph name="RECEIVER_NAME" />க்கு <ph name="ROUTE_TITLE" />ஐ அனுப்புகிறது</translation> <translation id="6452181791372256707">நிராகரி</translation> @@ -396,9 +399,11 @@ <translation id="8152119955266188852">முழுத்திரைப் பெரிதாக்கியின் ஷார்ட்கட்டை அழுத்தியுள்ளீர்கள். அதை இயக்க விரும்புகிறீர்களா?</translation> <translation id="8190698733819146287">மொழிகள் மற்றும் உள்ளீடைத் தனிப்பயனாக்கு...</translation> <translation id="8191230140820435481">உங்கள் பயன்பாடுகள், நீட்டிப்புகள் மற்றும் தீம்களை நிர்வகிக்கலாம்</translation> +<translation id="8192202700944119416">அறிவிப்புகள் மறைக்கப்பட்டுள்ளன.</translation> <translation id="8261506727792406068">நீக்கு</translation> <translation id="8297006494302853456">வலுவாக இல்லை</translation> <translation id="8308637677604853869">முந்தைய மெனு</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">குறிப்பை உருவாக்கு</translation> <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> க்கான விருப்பத்தேர்வுகள் மெனு</translation> <translation id="8406981827175133772">முழுத்திரைப் பெரிதாக்கி</translation> @@ -440,6 +445,7 @@ <translation id="8938800817013097409">USB-C சாதனம் (பின்பக்கம் உள்ள வலது போர்ட்)</translation> <translation id="8940956008527784070">பேட்டரி குறைவு (<ph name="PERCENTAGE" />%)</translation> <translation id="8984179138335769204">Quick launch</translation> +<translation id="899350903320462459">அறிவிப்புச் செயலைச் செய்வதற்கு, சாதனத்தை <ph name="LOGIN_ID" /> ஆகத் திறக்கவும்</translation> <translation id="8995603266996330174"><ph name="DOMAIN" /> ஆல் நிர்வகிக்கப்படுகிறது</translation> <translation id="9029474291399787231">Adobe Flash Player புதுப்பிப்பு உள்ளது</translation> <translation id="9056839673611986238">சாதனம் மீட்டமைக்கப்படும்</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb index 12fac24..e67dd8f 100644 --- a/ash/strings/ash_strings_th.xtb +++ b/ash/strings/ash_strings_th.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">ขวา</translation> <translation id="1351937230027495976">ยุบเมนู</translation> <translation id="1383876407941801731">ค้นหา</translation> +<translation id="1419738280318246476">ปลดล็อกอุปกรณ์เพื่อดำเนินการแจ้งเตือน</translation> <translation id="1467432559032391204">ซ้าย</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation> <translation id="1510238584712386396">ตัวเรียกใช้งาน</translation> @@ -225,6 +226,7 @@ <translation id="4924411785043111640">รีสตาร์ทและรีเซ็ต</translation> <translation id="4961318399572185831">แคสต์หน้าจอ</translation> <translation id="5069971504769299223">ผู้จัดการของอุปกรณ์อาจมีสิทธิ์ตรวจสอบกิจกรรมของคุณได้</translation> +<translation id="5083553833479578423">ใช้ฟีเจอร์อื่นๆ ของ Assistant</translation> <translation id="5136175204352732067">เชื่อมต่อกับแป้นพิมพ์อื่นแล้ว</translation> <translation id="5168181903108465623">เครื่องส่งพร้อมใช้งาน</translation> <translation id="5207949376430453814">ไฮไลต์เครื่องหมาย Caret ของข้อความ</translation> @@ -296,6 +298,7 @@ <translation id="6376931439017688372">บลูทูธเปิดอยู่</translation> <translation id="639644700271529076">CAPS LOCK ปิดอยู่</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">ล้างการแจ้งเตือนทั้งหมด</translation> <translation id="643147933154517414">เสร็จเรียบร้อย</translation> <translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> ใน<ph name="RECEIVER_NAME" /></translation> <translation id="6452181791372256707">ปฏิเสธ</translation> @@ -397,9 +400,11 @@ <translation id="8152119955266188852">คุณกดแป้นพิมพ์ลัดสำหรับแว่นขยายทั้งหน้าจอ จะเปิดแว่นขยายไหม</translation> <translation id="8190698733819146287">กำหนดค่าภาษาและการป้อนข้อมูล... </translation> <translation id="8191230140820435481">จัดการแอปพลิเคชัน ส่วนขยาย และธีมของคุณ</translation> +<translation id="8192202700944119416">ซ่อนการแจ้งเตือนไว้</translation> <translation id="8261506727792406068">ลบ</translation> <translation id="8297006494302853456">อ่อน</translation> <translation id="8308637677604853869">เมนูก่อนหน้า</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">สร้างโน้ต</translation> <translation id="8392451568018454956">เมนูตัวเลือกสำหรับ <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="8406981827175133772">แว่นขยายทั้งหน้าจอ</translation> @@ -441,6 +446,7 @@ <translation id="8938800817013097409">อุปกรณ์ USB-C (พอร์ตด้านหลังขวา)</translation> <translation id="8940956008527784070">แบตเตอรี่ต่ำ (<ph name="PERCENTAGE" />%)</translation> <translation id="8984179138335769204">การเริ่มใช้งานด่วน</translation> +<translation id="899350903320462459">ปลดล็อกอุปกรณ์โดยใช้ <ph name="LOGIN_ID" /> เพื่อดำเนินการแจ้งเตือน</translation> <translation id="8995603266996330174">จัดการโดย <ph name="DOMAIN" /></translation> <translation id="9029474291399787231">มีอัปเดต Adobe Flash Player พร้อมใช้งาน</translation> <translation id="9056839673611986238">อุปกรณ์จะได้รับการคืนค่าสถานะ</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb index 7332049..75aca34 100644 --- a/ash/strings/ash_strings_tr.xtb +++ b/ash/strings/ash_strings_tr.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">Sağa</translation> <translation id="1351937230027495976">Menüyü daralt</translation> <translation id="1383876407941801731">Ara</translation> +<translation id="1419738280318246476">Bildirim işlemi gerçekleştirmek için cihazın kilidini açın</translation> <translation id="1467432559032391204">Sola</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation> <translation id="1510238584712386396">Başlatıcı</translation> @@ -224,6 +225,7 @@ <translation id="4924411785043111640">Yeniden başlat ve sıfırla</translation> <translation id="4961318399572185831">Ekranı yayınla</translation> <translation id="5069971504769299223">Cihaz yöneticisi, etkinliğinizi izleyebilir.</translation> +<translation id="5083553833479578423">Diğer Asistan özelliklerinin kilidini açın</translation> <translation id="5136175204352732067">Farklı klavye bağlandı</translation> <translation id="5168181903108465623">Yayın cihazları kullanılabilir</translation> <translation id="5207949376430453814">Metin imlecini vurgula</translation> @@ -296,6 +298,7 @@ <translation id="6376931439017688372">Bluetooth açık</translation> <translation id="639644700271529076">CAPS LOCK kapalı</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">Tüm bildirimleri temizleyin</translation> <translation id="643147933154517414">Tümü bitti</translation> <translation id="6445835306623867477"><ph name="RECEIVER_NAME" /> adlı alıcıya <ph name="ROUTE_TITLE" /></translation> <translation id="6452181791372256707">Reddet</translation> @@ -397,9 +400,11 @@ <translation id="8152119955266188852">Tam ekran büyüteç kısayoluna bastınız. Bu özelliği açmak istiyor musunuz?</translation> <translation id="8190698733819146287">Dilleri ve girişi özelleştir...</translation> <translation id="8191230140820435481">Uygulamalarınızı, uzantılarınızı ve temalarınızı yönetme</translation> +<translation id="8192202700944119416">Bildirimler gizlendi.</translation> <translation id="8261506727792406068">Sil</translation> <translation id="8297006494302853456">Zayıf</translation> <translation id="8308637677604853869">Önceki menü</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">Not oluştur</translation> <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> seçenekler menüsü</translation> <translation id="8406981827175133772">Tam Ekran Büyüteci</translation> @@ -441,6 +446,7 @@ <translation id="8938800817013097409">USB-C cihaz (arkadaki sağ bağlantı noktası)</translation> <translation id="8940956008527784070">Pil gücü az (%<ph name="PERCENTAGE" />)</translation> <translation id="8984179138335769204">Hızlı başlat</translation> +<translation id="899350903320462459">Bildirim işlemi gerçekleştirmek için <ph name="LOGIN_ID" /> olarak cihazın kilidini açın</translation> <translation id="8995603266996330174">Yöneten: <ph name="DOMAIN" /></translation> <translation id="9029474291399787231">Adobe Flash Player güncellemesi mevcut</translation> <translation id="9056839673611986238">Cihaz ilk haline döndürülecek</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index 218da58..fef4c80 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">Phải</translation> <translation id="1351937230027495976">Thu gọn menu</translation> <translation id="1383876407941801731">Tìm kiếm</translation> +<translation id="1419738280318246476">Mở khóa thiết bị để thực hiện hành động thông báo</translation> <translation id="1467432559032391204">Trái</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation> <translation id="1510238584712386396">Trình chạy</translation> @@ -225,6 +226,7 @@ <translation id="4924411785043111640">Khởi động lại và đặt lại</translation> <translation id="4961318399572185831">Truyền màn hình</translation> <translation id="5069971504769299223">Trình quản lý thiết bị có thể theo dõi hoạt động của bạn.</translation> +<translation id="5083553833479578423">Mở khóa các tính năng khác của Trợ lý.</translation> <translation id="5136175204352732067">Đã kết nối bàn phím khác</translation> <translation id="5168181903108465623">Có thiết bị truyền</translation> <translation id="5207949376430453814">Đánh dấu điểm chèn văn bản</translation> @@ -296,6 +298,7 @@ <translation id="6376931439017688372">Bluetooth đang bật</translation> <translation id="639644700271529076">CAPS LOCK tắt</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">Xóa tất cả thông báo</translation> <translation id="643147933154517414">Đã xong</translation> <translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> trên <ph name="RECEIVER_NAME" /></translation> <translation id="6452181791372256707">Từ chối</translation> @@ -397,9 +400,11 @@ <translation id="8152119955266188852">Bạn đã nhấn phím tắt để phóng to toàn màn hình. Bạn có muốn bật chế độ này không?</translation> <translation id="8190698733819146287">Tùy chỉnh ngôn ngữ và dữ liệu nhập...</translation> <translation id="8191230140820435481">Quản lý ứng dụng, tiện ích và chủ đề của bạn</translation> +<translation id="8192202700944119416">Đã ẩn thông báo.</translation> <translation id="8261506727792406068">Xóa</translation> <translation id="8297006494302853456">Yếu</translation> <translation id="8308637677604853869">Menu trước</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">Tạo ghi chú</translation> <translation id="8392451568018454956">Menu tùy chọn dành cho <ph name="USER_EMAIL_ADDRESS" /></translation> <translation id="8406981827175133772">Phóng to toàn màn hình</translation> @@ -441,6 +446,7 @@ <translation id="8938800817013097409">Thiết bị USB-C (cổng bên phải ở phía sau)</translation> <translation id="8940956008527784070">Pin yếu (<ph name="PERCENTAGE" />%)</translation> <translation id="8984179138335769204">Khởi động nhanh</translation> +<translation id="899350903320462459">Mở khóa thiết bị bằng <ph name="LOGIN_ID" /> để thực hiện hành động thông báo</translation> <translation id="8995603266996330174">Được quản lý bởi <ph name="DOMAIN" /></translation> <translation id="9029474291399787231">Đã có bản cập nhật Adobe Flash Player</translation> <translation id="9056839673611986238">Thiết bị sẽ được hạ cấp hệ điều hành</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb index efcf0b8..7a234946 100644 --- a/ash/strings/ash_strings_zh-CN.xtb +++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">向右</translation> <translation id="1351937230027495976">收起菜单</translation> <translation id="1383876407941801731">搜索</translation> +<translation id="1419738280318246476">解锁设备即可执行通知操作</translation> <translation id="1467432559032391204">向左</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation> <translation id="1510238584712386396">启动器</translation> @@ -225,6 +226,7 @@ <translation id="4924411785043111640">重启并重置</translation> <translation id="4961318399572185831">投射屏幕</translation> <translation id="5069971504769299223">设备管理员或许能监控您的活动。</translation> +<translation id="5083553833479578423">启用更多 Google 助理功能。</translation> <translation id="5136175204352732067">所连接的键盘已不是原来的那个</translation> <translation id="5168181903108465623">有可用的投射设备</translation> <translation id="5207949376430453814">突出显示文本插入符号</translation> @@ -296,6 +298,7 @@ <translation id="6376931439017688372">蓝牙已开启</translation> <translation id="639644700271529076">CAPS LOCK 已关闭</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">清除所有通知</translation> <translation id="643147933154517414">大功告成</translation> <translation id="6445835306623867477">正在将“<ph name="ROUTE_TITLE" />”投射至“<ph name="RECEIVER_NAME" />”</translation> <translation id="6452181791372256707">拒绝</translation> @@ -397,9 +400,11 @@ <translation id="8152119955266188852">您按下了全屏放大镜的快捷键。要开启这项功能吗?</translation> <translation id="8190698733819146287">自定义语言和输入法...</translation> <translation id="8191230140820435481">管理您的应用、扩展程序和主题背景</translation> +<translation id="8192202700944119416">已隐藏通知。</translation> <translation id="8261506727792406068">删除</translation> <translation id="8297006494302853456">弱</translation> <translation id="8308637677604853869">上一菜单</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">创建记事</translation> <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> 的“选项”菜单</translation> <translation id="8406981827175133772">全屏放大镜</translation> @@ -441,6 +446,7 @@ <translation id="8938800817013097409">USB-C 设备(背面右侧端口)</translation> <translation id="8940956008527784070">电池电量不足 (<ph name="PERCENTAGE" />%)</translation> <translation id="8984179138335769204">快速启动</translation> +<translation id="899350903320462459">以 <ph name="LOGIN_ID" /> 身份解锁设备即可执行通知操作</translation> <translation id="8995603266996330174">由 <ph name="DOMAIN" /> 管理</translation> <translation id="9029474291399787231">有可用的 Adobe Flash Player 更新</translation> <translation id="9056839673611986238">设备将被回滚</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb index e10300ce..a6a848f6 100644 --- a/ash/strings/ash_strings_zh-TW.xtb +++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -25,6 +25,7 @@ <translation id="1346748346194534595">向右</translation> <translation id="1351937230027495976">收合選單</translation> <translation id="1383876407941801731">搜尋</translation> +<translation id="1419738280318246476">解鎖裝置即可執行通知動作</translation> <translation id="1467432559032391204">向左</translation> <translation id="1484102317210609525"><ph name="DEVICE_NAME" /> (HDMI/DP)</translation> <translation id="1510238584712386396">啟動器</translation> @@ -224,6 +225,7 @@ <translation id="4924411785043111640">重新啟動並重設</translation> <translation id="4961318399572185831">投放螢幕</translation> <translation id="5069971504769299223">裝置管理員或許可監控你的活動。</translation> +<translation id="5083553833479578423">啟用更多 Google 助理功能。</translation> <translation id="5136175204352732067">已連接其他鍵盤</translation> <translation id="5168181903108465623">可用的投放裝置</translation> <translation id="5207949376430453814">醒目顯示文字插入點</translation> @@ -295,6 +297,7 @@ <translation id="6376931439017688372">藍牙已開啟</translation> <translation id="639644700271529076">大寫鍵已關閉</translation> <translation id="6406704438230478924">altgr</translation> +<translation id="642644398083277086">清除所有通知</translation> <translation id="643147933154517414">沒有通知</translation> <translation id="6445835306623867477">正在透過<ph name="RECEIVER_NAME" />投放「<ph name="ROUTE_TITLE" />」</translation> <translation id="6452181791372256707">拒絕</translation> @@ -396,9 +399,11 @@ <translation id="8152119955266188852">你按下了全螢幕放大鏡的快速鍵。確定要啟用這項功能嗎?</translation> <translation id="8190698733819146287">自訂語言與輸入法...</translation> <translation id="8191230140820435481">管理你的應用程式、擴充功能和主題</translation> +<translation id="8192202700944119416">已隱藏通知。</translation> <translation id="8261506727792406068">刪除</translation> <translation id="8297006494302853456">弱</translation> <translation id="8308637677604853869">前一個選單</translation> +<translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" /> <ph name="GET_STARTED" /></translation> <translation id="8351131234907093545">寫筆記</translation> <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> 的選項選單</translation> <translation id="8406981827175133772">全螢幕放大鏡</translation> @@ -440,6 +445,7 @@ <translation id="8938800817013097409">USB-C 裝置 (背面右側連接埠)</translation> <translation id="8940956008527784070">電池電量不足 (<ph name="PERCENTAGE" />%)</translation> <translation id="8984179138335769204">快速啓動</translation> +<translation id="899350903320462459">使用 <ph name="LOGIN_ID" /> 帳戶解鎖裝置即可執行通知動作</translation> <translation id="8995603266996330174">由 <ph name="DOMAIN" /> 管理</translation> <translation id="9029474291399787231">有可用的 Adobe Flash Player 更新</translation> <translation id="9056839673611986238">裝置將復原</translation>
diff --git a/ash/system/audio/unified_volume_slider_controller.cc b/ash/system/audio/unified_volume_slider_controller.cc index b819123..a1377db 100644 --- a/ash/system/audio/unified_volume_slider_controller.cc +++ b/ash/system/audio/unified_volume_slider_controller.cc
@@ -8,7 +8,6 @@ #include "ash/metrics/user_metrics_recorder.h" #include "ash/shell.h" #include "ash/system/audio/unified_volume_view.h" -#include "ash/system/unified/unified_system_tray_controller.h" #include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics_action.h" @@ -17,14 +16,16 @@ namespace ash { UnifiedVolumeSliderController::UnifiedVolumeSliderController( - UnifiedSystemTrayController* tray_controller) - : tray_controller_(tray_controller) {} + UnifiedVolumeSliderController::Delegate* delegate) + : delegate_(delegate) { + DCHECK(delegate); +} UnifiedVolumeSliderController::~UnifiedVolumeSliderController() = default; views::View* UnifiedVolumeSliderController::CreateView() { DCHECK(!slider_); - slider_ = new UnifiedVolumeView(this, !!tray_controller_); + slider_ = new UnifiedVolumeView(this); return slider_; } @@ -38,7 +39,7 @@ base::RecordAction(base::UserMetricsAction("StatusArea_Audio_Unmuted")); CrasAudioHandler::Get()->SetOutputMute(mute_on); } else if (sender == slider_->more_button()) { - tray_controller_->ShowAudioDetailedView(); + delegate_->OnAudioSettingsButtonClicked(); } }
diff --git a/ash/system/audio/unified_volume_slider_controller.h b/ash/system/audio/unified_volume_slider_controller.h index b3ac1d89..a1384aa8 100644 --- a/ash/system/audio/unified_volume_slider_controller.h +++ b/ash/system/audio/unified_volume_slider_controller.h
@@ -9,16 +9,18 @@ namespace ash { -class UnifiedSystemTrayController; class UnifiedVolumeView; // Controller of a slider that can change audio volume. class UnifiedVolumeSliderController : public UnifiedSliderListener { public: - // |tray_controller| may be null if the volume slider is in slider bubble, not - // main bubble. - explicit UnifiedVolumeSliderController( - UnifiedSystemTrayController* tray_controller); + class Delegate { + public: + virtual ~Delegate() = default; + virtual void OnAudioSettingsButtonClicked() = 0; + }; + + explicit UnifiedVolumeSliderController(Delegate* delegate); ~UnifiedVolumeSliderController() override; // UnifiedSliderListener: @@ -30,7 +32,7 @@ views::SliderChangeReason reason) override; private: - UnifiedSystemTrayController* const tray_controller_; + Delegate* const delegate_; UnifiedVolumeView* slider_ = nullptr; DISALLOW_COPY_AND_ASSIGN(UnifiedVolumeSliderController);
diff --git a/ash/system/audio/unified_volume_view.cc b/ash/system/audio/unified_volume_view.cc index f6fdce76..4768c6e 100644 --- a/ash/system/audio/unified_volume_view.cc +++ b/ash/system/audio/unified_volume_view.cc
@@ -120,13 +120,11 @@ } // namespace -UnifiedVolumeView::UnifiedVolumeView(UnifiedVolumeSliderController* controller, - bool is_main_view) +UnifiedVolumeView::UnifiedVolumeView(UnifiedVolumeSliderController* controller) : UnifiedSliderView(controller, kSystemMenuVolumeHighIcon, IDS_ASH_STATUS_TRAY_VOLUME), - more_button_(new MoreButton(controller)), - is_main_view_(is_main_view) { + more_button_(new MoreButton(controller)) { DCHECK(CrasAudioHandler::IsInitialized()); CrasAudioHandler::Get()->AddAudioObserver(this); AddChildView(more_button_); @@ -148,9 +146,8 @@ button()->SetToggled(!is_muted); button()->SetVectorIcon(GetVolumeIconForLevel(is_muted ? 0.f : level)); - more_button_->SetVisible(is_main_view_ && - (CrasAudioHandler::Get()->has_alternative_input() || - CrasAudioHandler::Get()->has_alternative_output())); + more_button_->SetVisible(CrasAudioHandler::Get()->has_alternative_input() || + CrasAudioHandler::Get()->has_alternative_output()); // Slider's value is in finer granularity than audio volume level(0.01), // there will be a small discrepancy between slider's value and volume level
diff --git a/ash/system/audio/unified_volume_view.h b/ash/system/audio/unified_volume_view.h index 61fa13fc..8dd54f19 100644 --- a/ash/system/audio/unified_volume_view.h +++ b/ash/system/audio/unified_volume_view.h
@@ -16,8 +16,7 @@ class UnifiedVolumeView : public UnifiedSliderView, public chromeos::CrasAudioHandler::AudioObserver { public: - UnifiedVolumeView(UnifiedVolumeSliderController* controller, - bool is_main_view); + explicit UnifiedVolumeView(UnifiedVolumeSliderController* controller); ~UnifiedVolumeView() override; views::Button* more_button() { return more_button_; } @@ -36,7 +35,6 @@ void ChildVisibilityChanged(views::View* child) override; views::Button* const more_button_; - const bool is_main_view_; DISALLOW_COPY_AND_ASSIGN(UnifiedVolumeView); };
diff --git a/ash/system/message_center/arc/arc_notification_content_view_unittest.cc b/ash/system/message_center/arc/arc_notification_content_view_unittest.cc index 562684a9..d0d171d 100644 --- a/ash/system/message_center/arc/arc_notification_content_view_unittest.cc +++ b/ash/system/message_center/arc/arc_notification_content_view_unittest.cc
@@ -36,6 +36,7 @@ #include "components/exo/test/exo_test_helper.h" #include "components/exo/wm_helper.h" #include "testing/gmock/include/gmock/gmock.h" +#include "ui/aura/env.h" #include "ui/aura/test/test_window_delegate.h" #include "ui/aura/window.h" #include "ui/events/keycodes/dom/dom_code.h" @@ -116,7 +117,7 @@ MessageCenterView::disable_animation_for_testing = true; - wm_helper_ = std::make_unique<exo::WMHelper>(); + wm_helper_ = std::make_unique<exo::WMHelper>(ash::Shell::Get()->aura_env()); exo::WMHelper::SetInstance(wm_helper_.get()); DCHECK(exo::WMHelper::HasInstance());
diff --git a/ash/system/message_center/arc/arc_notification_surface_impl.cc b/ash/system/message_center/arc/arc_notification_surface_impl.cc index 3493dfd9..ab26cf2 100644 --- a/ash/system/message_center/arc/arc_notification_surface_impl.cc +++ b/ash/system/message_center/arc/arc_notification_surface_impl.cc
@@ -81,9 +81,9 @@ exo::NotificationSurface* surface) : surface_(surface) { DCHECK(surface); - native_view_ = - std::make_unique<aura::Window>(new CustomWindowDelegate(surface)); - native_view_->SetType(aura::client::WINDOW_TYPE_CONTROL); + native_view_ = std::make_unique<aura::Window>( + new CustomWindowDelegate(surface), aura::client::WINDOW_TYPE_CONTROL, + surface_->host_window()->env()); native_view_->set_owned_by_parent(false); native_view_->Init(ui::LAYER_NOT_DRAWN); native_view_->AddChild(surface_->host_window());
diff --git a/ash/system/message_center/arc/arc_notification_view_unittest.cc b/ash/system/message_center/arc/arc_notification_view_unittest.cc index ce0866d..dc56133 100644 --- a/ash/system/message_center/arc/arc_notification_view_unittest.cc +++ b/ash/system/message_center/arc/arc_notification_view_unittest.cc
@@ -75,8 +75,8 @@ notification_view_.reset(static_cast<ArcNotificationView*>( message_center::MessageViewFactory::Create(*notification, true))); notification_view_->set_owned_by_client(); - surface_ = - std::make_unique<MockArcNotificationSurface>(kDefaultNotificationKey); + surface_ = std::make_unique<MockArcNotificationSurface>( + kDefaultNotificationKey, Shell::Get()->aura_env()); notification_view_->content_view_->SetSurface(surface_.get()); UpdateNotificationViews(*notification);
diff --git a/ash/system/message_center/arc/mock_arc_notification_surface.cc b/ash/system/message_center/arc/mock_arc_notification_surface.cc index a482667..25af5fbf 100644 --- a/ash/system/message_center/arc/mock_arc_notification_surface.cc +++ b/ash/system/message_center/arc/mock_arc_notification_surface.cc
@@ -9,12 +9,18 @@ namespace ash { MockArcNotificationSurface::MockArcNotificationSurface( - const std::string& notification_key) + const std::string& notification_key, + aura::Env* aura_env) : notification_key_(notification_key), ax_tree_id_(-1), native_view_host_(nullptr), - window_(new aura::Window(nullptr)), - content_window_(new aura::Window(nullptr)) { + window_(std::make_unique<aura::Window>(nullptr, + aura::client::WINDOW_TYPE_UNKNOWN, + aura_env)), + content_window_( + std::make_unique<aura::Window>(nullptr, + aura::client::WINDOW_TYPE_UNKNOWN, + aura_env)) { window_->Init(ui::LAYER_NOT_DRAWN); content_window_->Init(ui::LAYER_NOT_DRAWN); }
diff --git a/ash/system/message_center/arc/mock_arc_notification_surface.h b/ash/system/message_center/arc/mock_arc_notification_surface.h index 52d20b8c..09cc2cd 100644 --- a/ash/system/message_center/arc/mock_arc_notification_surface.h +++ b/ash/system/message_center/arc/mock_arc_notification_surface.h
@@ -7,11 +7,16 @@ #include "ash/system/message_center/arc/arc_notification_surface.h" +namespace aura { +class Env; +} + namespace ash { class MockArcNotificationSurface : public ArcNotificationSurface { public: - explicit MockArcNotificationSurface(const std::string& notification_key); + explicit MockArcNotificationSurface(const std::string& notification_key, + aura::Env* aura_env = nullptr); ~MockArcNotificationSurface() override; gfx::Size GetSize() const override;
diff --git a/ash/system/message_center/notification_tray.cc b/ash/system/message_center/notification_tray.cc index 779dde9..eeac54d 100644 --- a/ash/system/message_center/notification_tray.cc +++ b/ash/system/message_center/notification_tray.cc
@@ -344,8 +344,7 @@ // Public methods. -bool NotificationTray::ShowMessageCenterInternal(bool show_settings, - bool show_by_click) { +bool NotificationTray::ShowMessageCenter(bool show_by_click) { if (!ShouldShowMessageCenter()) return false; @@ -365,9 +364,6 @@ // screen. This padding should be applied in all types of shelf alignment. message_center_bubble->SetMaxHeight(max_height - kPaddingFromScreenTop); - if (show_settings) - message_center_bubble->SetSettingsVisible(); - // For vertical shelf alignments, anchor to the NotificationTray, but for // horizontal (i.e. bottom) shelves, anchor to the system tray. TrayBackgroundView* anchor_tray = this; @@ -382,10 +378,6 @@ return true; } -bool NotificationTray::ShowMessageCenter(bool show_by_click) { - return ShowMessageCenterInternal(false /* show_settings */, show_by_click); -} - void NotificationTray::HideMessageCenter() { if (!message_center_bubble()) return; @@ -502,16 +494,6 @@ HideBubbleWithView(bubble_view); } -bool NotificationTray::ShowNotifierSettings() { - if (IsMessageCenterVisible()) { - static_cast<MessageCenterBubble*>(message_center_bubble()->bubble()) - ->SetSettingsVisible(); - return true; - } - return ShowMessageCenterInternal(true /* show_settings */, - false /* show_by_click */); -} - void NotificationTray::OnMessageCenterContentsChanged() { // Do not update the tray contents directly. Multiple change events can happen // consecutively, and calling Update in the middle of those events will show
diff --git a/ash/system/message_center/notification_tray.h b/ash/system/message_center/notification_tray.h index 5079ba0..3f6e739 100644 --- a/ash/system/message_center/notification_tray.h +++ b/ash/system/message_center/notification_tray.h
@@ -85,7 +85,6 @@ void HideMessageCenter() override; bool ShowPopups() override; void HidePopups() override; - bool ShowNotifierSettings() override; // Activates the notification tray bubble. void ActivateBubble(); @@ -109,12 +108,6 @@ void UpdateTrayContent(); - // The actual process to show the message center. Set |show_settings| to true - // if the message center should be initialized with the settings visible. Set - // |show_by_click| to true if the message center is shown by mouse or gesture - // click. Returns true if the center is successfully created. - bool ShowMessageCenterInternal(bool show_settings, bool show_by_click); - // Queries login status and the status area widget to determine visibility of // the message center. bool ShouldShowMessageCenter() const;
diff --git a/ash/system/night_light/night_light_controller.cc b/ash/system/night_light/night_light_controller.cc index 6508903b..24c4f3c 100644 --- a/ash/system/night_light/night_light_controller.cc +++ b/ash/system/night_light/night_light_controller.cc
@@ -300,7 +300,7 @@ binding_(this) { Shell::Get()->session_controller()->AddObserver(this); Shell::Get()->window_tree_host_manager()->AddObserver(this); - aura::Env::GetInstance()->AddObserver(this); + Shell::Get()->aura_env()->AddObserver(this); chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver( this); } @@ -308,7 +308,7 @@ NightLightController::~NightLightController() { chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver( this); - aura::Env::GetInstance()->RemoveObserver(this); + Shell::Get()->aura_env()->RemoveObserver(this); Shell::Get()->window_tree_host_manager()->RemoveObserver(this); Shell::Get()->session_controller()->RemoveObserver(this); }
diff --git a/ash/system/overview/overview_button_tray_unittest.cc b/ash/system/overview/overview_button_tray_unittest.cc index 686aae0..5093ec0a 100644 --- a/ash/system/overview/overview_button_tray_unittest.cc +++ b/ash/system/overview/overview_button_tray_unittest.cc
@@ -15,6 +15,7 @@ #include "ash/system/status_area_widget_test_helper.h" #include "ash/test/ash_test_base.h" #include "ash/test/ash_test_helper.h" +#include "ash/window_factory.h" #include "ash/wm/overview/window_selector_controller.h" #include "ash/wm/splitview/split_view_controller.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h" @@ -301,7 +302,7 @@ TEST_F(OverviewButtonTrayTest, VisibilityChangesForSystemModalWindow) { // TODO(jonross): When CreateTestWindow*() have been unified, use the // appropriate method to replace this setup. (crbug.com/483503) - std::unique_ptr<aura::Window> window(new aura::Window(nullptr)); + std::unique_ptr<aura::Window> window = window_factory::NewWindow(); window->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_SYSTEM); window->SetType(aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_TEXTURED);
diff --git a/ash/system/session/logout_confirmation_dialog.cc b/ash/system/session/logout_confirmation_dialog.cc index 4193af1..b5c157d7 100644 --- a/ash/system/session/logout_confirmation_dialog.cc +++ b/ash/system/session/logout_confirmation_dialog.cc
@@ -98,8 +98,7 @@ } bool LogoutConfirmationDialog::ShouldShowCloseButton() const { - // Material UI has no [X] in the corner of this dialog. - return !ui::MaterialDesignController::IsSecondaryUiMaterial(); + return false; } void LogoutConfirmationDialog::WindowClosing() {
diff --git a/ash/system/tray/tray_background_view.cc b/ash/system/tray/tray_background_view.cc index 33a93ec1..150e307 100644 --- a/ash/system/tray/tray_background_view.cc +++ b/ash/system/tray/tray_background_view.cc
@@ -23,6 +23,7 @@ #include "ash/system/tray/tray_constants.h" #include "ash/system/tray/tray_container.h" #include "ash/system/tray/tray_event_filter.h" +#include "ash/window_factory.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h" #include "ui/accessibility/ax_node_data.h" #include "ui/compositor/layer.h" @@ -502,7 +503,7 @@ ->IsTabletModeWindowManagerEnabled() && drag_controller()) { if (!clipping_window_.get()) { - clipping_window_ = std::make_unique<aura::Window>(nullptr); + clipping_window_ = window_factory::NewWindow(); clipping_window_->Init(ui::LAYER_NOT_DRAWN); clipping_window_->layer()->SetMasksToBounds(true); container->AddChild(clipping_window_.get());
diff --git a/ash/system/tray/tray_constants.h b/ash/system/tray/tray_constants.h index 3d869cf..129aef0 100644 --- a/ash/system/tray/tray_constants.h +++ b/ash/system/tray/tray_constants.h
@@ -169,6 +169,14 @@ constexpr gfx::Insets kUnifiedTopShortcutPadding(0, 16); constexpr gfx::Insets kUnifiedNotificationHiddenPadding(6, 16); +constexpr int kStackingNotificationCounterMax = 8; +constexpr int kStackingNotificationCounterRadius = 2; +constexpr int kStackingNotificationCounterStartX = 18; +constexpr int kStackingNotificationCounterDistanceX = 10; +constexpr int kStackingNotificationCounterHeight = 20; +constexpr SkColor kStackingNotificationCounterColor = + SkColorSetRGB(0xeb, 0xea, 0xed); + // Size of an icon drawn inside top shortcut buttons. // A dark disc with |kTrayItemSize| diameter is drawn in the background. constexpr int kTrayTopShortcutButtonIconSize = 20;
diff --git a/ash/system/unified/unified_message_center_view.cc b/ash/system/unified/unified_message_center_view.cc index db5b1e71..dd321ca7 100644 --- a/ash/system/unified/unified_message_center_view.cc +++ b/ash/system/unified/unified_message_center_view.cc
@@ -10,6 +10,7 @@ #include "ash/system/unified/unified_system_tray_controller.h" #include "ash/system/unified/unified_system_tray_view.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/gfx/canvas.h" #include "ui/message_center/message_center.h" #include "ui/message_center/message_center_types.h" #include "ui/message_center/views/message_view.h" @@ -32,6 +33,32 @@ } // namespace +StackingNotificationCounterView::StackingNotificationCounterView() = default; + +StackingNotificationCounterView::~StackingNotificationCounterView() = default; + +void StackingNotificationCounterView::SetCount(int stacking_count) { + stacking_count_ = std::min(stacking_count, kStackingNotificationCounterMax); + SetVisible(stacking_count > 0); + SchedulePaint(); +} + +void StackingNotificationCounterView::OnPaint(gfx::Canvas* canvas) { + int x = kStackingNotificationCounterStartX; + const int y = kStackingNotificationCounterHeight / 2; + + cc::PaintFlags flags; + flags.setColor(kStackingNotificationCounterColor); + flags.setStyle(cc::PaintFlags::kFill_Style); + flags.setAntiAlias(true); + + for (int i = 0; i < stacking_count_; ++i) { + canvas->DrawCircle(gfx::Point(x, y), kStackingNotificationCounterRadius, + flags); + x += kStackingNotificationCounterDistanceX; + } +} + // UnifiedMessageCenterView // /////////////////////////////////////////////////////////// @@ -42,6 +69,8 @@ : tray_controller_(tray_controller), parent_(parent), message_center_(message_center), + stacking_counter_(new StackingNotificationCounterView()), + scroll_bar_(new MessageCenterScrollBar(this)), scroller_(new views::ScrollView()), message_list_view_(new MessageListView()) { DCHECK(message_center_); @@ -52,10 +81,12 @@ set_notify_enter_exit_on_child(true); SetFocusBehavior(views::View::FocusBehavior::NEVER); + AddChildView(stacking_counter_); + // Need to set the transparent background explicitly, since ScrollView has // set the default opaque background color. scroller_->SetBackgroundColor(SK_ColorTRANSPARENT); - scroller_->SetVerticalScrollBar(new MessageCenterScrollBar(this)); + scroller_->SetVerticalScrollBar(scroll_bar_); scroller_->set_draw_overflow_indicator(false); AddChildView(scroller_); @@ -101,6 +132,8 @@ focus_manager_ = GetFocusManager(); if (focus_manager_) focus_manager_->AddFocusChangeListener(this); + + LayoutInternal(false /* force */); ScrollToPositionFromBottom(); NotifyHeightBelowScroll(); } @@ -133,11 +166,44 @@ } void UnifiedMessageCenterView::Layout() { - scroller_->SetBounds(0, 0, width(), height()); + LayoutInternal(true /* force */); ScrollToPositionFromBottom(); NotifyHeightBelowScroll(); } +void UnifiedMessageCenterView::LayoutInternal(bool force) { + // GetCountAboveVisibleRect() only works after SetBoundsRect() is called at + // least once. + if (scroller_->bounds().IsEmpty()) + scroller_->SetBoundsRect(GetContentsBounds()); + + bool was_visible = stacking_counter_->visible(); + stacking_counter_->SetCount(message_list_view_->GetCountAboveVisibleRect()); + + // Only do the actual layout if counter visibility is changed or forced. + if (was_visible != stacking_counter_->visible() || force) { + if (stacking_counter_->visible()) { + gfx::Rect counter_bounds(GetContentsBounds()); + counter_bounds.set_height(kStackingNotificationCounterHeight); + stacking_counter_->SetBoundsRect(counter_bounds); + + gfx::Insets scroller_insets(kStackingNotificationCounterHeight, 0, 0, 0); + gfx::Rect scroller_bounds(GetContentsBounds()); + scroller_bounds.Inset(scroller_insets); + scroller_->SetBoundsRect(scroller_bounds); + } else { + scroller_->SetBoundsRect(GetContentsBounds()); + } + } + + // Adjust scroll position when counter visibility is changed so that on-screen + // position of notification list does not change. + if (was_visible != stacking_counter_->visible()) { + scroll_bar_->ScrollByContentsOffset(kStackingNotificationCounterHeight * + (was_visible ? 1 : -1)); + } +} + gfx::Size UnifiedMessageCenterView::CalculatePreferredSize() const { gfx::Size preferred_size = scroller_->GetPreferredSize(); // Hide Clear All button at the buttom from initial viewport. @@ -219,10 +285,10 @@ void UnifiedMessageCenterView::OnMessageCenterScrolled() { // Notification list is scrolled manually e.g. by mouse or gesture. - auto* scroll_bar = scroller_->vertical_scroll_bar(); // Save the distance from the bottom when manually scrolled. position_from_bottom_ = - scroll_bar->GetMaxPosition() - scroller_->GetVisibleRect().y(); + scroll_bar_->GetMaxPosition() - scroller_->GetVisibleRect().y(); + LayoutInternal(false /* force */); NotifyHeightBelowScroll(); } @@ -253,6 +319,8 @@ scroller_->Layout(); PreferredSizeChanged(); + LayoutInternal(false /* force */); + ScrollToPositionFromBottom(); NotifyHeightBelowScroll(); } @@ -287,9 +355,8 @@ void UnifiedMessageCenterView::ScrollToPositionFromBottom() { scroller_->ScrollToPosition( - const_cast<views::ScrollBar*>(scroller_->vertical_scroll_bar()), - std::max(0, scroller_->vertical_scroll_bar()->GetMaxPosition() - - position_from_bottom_)); + scroll_bar_, + std::max(0, scroll_bar_->GetMaxPosition() - position_from_bottom_)); } } // namespace ash
diff --git a/ash/system/unified/unified_message_center_view.h b/ash/system/unified/unified_message_center_view.h index 1f34279..3adb8a7 100644 --- a/ash/system/unified/unified_message_center_view.h +++ b/ash/system/unified/unified_message_center_view.h
@@ -35,6 +35,22 @@ class UnifiedSystemTrayController; class UnifiedSystemTrayView; +class StackingNotificationCounterView : public views::View { + public: + StackingNotificationCounterView(); + ~StackingNotificationCounterView() override; + + void SetCount(int stacking_count); + + // views::View: + void OnPaint(gfx::Canvas* canvas) override; + + private: + int stacking_count_ = 0; + + DISALLOW_COPY_AND_ASSIGN(StackingNotificationCounterView); +}; + // Container for message list view. Acts as a controller/delegate of message // list view, passing data back and forth to message center. class ASH_EXPORT UnifiedMessageCenterView @@ -104,10 +120,16 @@ // Scroll the notification list to |position_from_bottom_|. void ScrollToPositionFromBottom(); + // If |force| is false, it might not do the actual layout i.e. it assumes + // the reason of layout change is limited to |stacking_counter_| visibility. + void LayoutInternal(bool force); + UnifiedSystemTrayController* const tray_controller_; UnifiedSystemTrayView* const parent_; message_center::MessageCenter* const message_center_; + StackingNotificationCounterView* const stacking_counter_; + MessageCenterScrollBar* const scroll_bar_; views::ScrollView* const scroller_; MessageListView* const message_list_view_;
diff --git a/ash/system/unified/unified_slider_bubble_controller.cc b/ash/system/unified/unified_slider_bubble_controller.cc index a2a78b2..ef37a657 100644 --- a/ash/system/unified/unified_slider_bubble_controller.cc +++ b/ash/system/unified/unified_slider_bubble_controller.cc
@@ -7,7 +7,6 @@ #include "ash/public/cpp/app_list/app_list_features.h" #include "ash/root_window_controller.h" #include "ash/shell.h" -#include "ash/system/audio/unified_volume_slider_controller.h" #include "ash/system/brightness/unified_brightness_slider_controller.h" #include "ash/system/keyboard_brightness/unified_keyboard_brightness_slider_controller.h" #include "ash/system/status_area_widget.h" @@ -109,6 +108,10 @@ ShowBubble(SLIDER_TYPE_KEYBOARD_BRIGHTNESS); } +void UnifiedSliderBubbleController::OnAudioSettingsButtonClicked() { + tray_->ShowAudioDetailedViewBubble(); +} + void UnifiedSliderBubbleController::ShowBubble(SliderType slider_type) { if (IsAnyMainBubbleShown()) { tray_->EnsureBubbleExpanded(); @@ -195,7 +198,7 @@ switch (slider_type_) { case SLIDER_TYPE_VOLUME: slider_controller_ = - std::make_unique<UnifiedVolumeSliderController>(nullptr); + std::make_unique<UnifiedVolumeSliderController>(this); return; case SLIDER_TYPE_DISPLAY_BRIGHTNESS: slider_controller_ =
diff --git a/ash/system/unified/unified_slider_bubble_controller.h b/ash/system/unified/unified_slider_bubble_controller.h index 06026141..9db8e26 100644 --- a/ash/system/unified/unified_slider_bubble_controller.h +++ b/ash/system/unified/unified_slider_bubble_controller.h
@@ -6,6 +6,7 @@ #define ASH_SYSTEM_UNIFIED_UNIFIED_SLIDER_BUBBLE_CONTROLLER_H_ #include "ash/ash_export.h" +#include "ash/system/audio/unified_volume_slider_controller.h" #include "ash/system/unified/unified_system_tray_model.h" #include "chromeos/audio/cras_audio_handler.h" #include "ui/views/bubble/tray_bubble_view.h" @@ -20,7 +21,8 @@ class ASH_EXPORT UnifiedSliderBubbleController : public views::TrayBubbleView::Delegate, public chromeos::CrasAudioHandler::AudioObserver, - public UnifiedSystemTrayModel::Observer { + public UnifiedSystemTrayModel::Observer, + public UnifiedVolumeSliderController::Delegate { public: enum SliderType { SLIDER_TYPE_VOLUME = 0, @@ -53,6 +55,9 @@ void OnDisplayBrightnessChanged(bool by_user) override; void OnKeyboardBrightnessChanged(bool by_user) override; + // UnifiedVolumeSliderController::Delegate: + void OnAudioSettingsButtonClicked() override; + private: friend class UnifiedSystemTrayTest;
diff --git a/ash/system/unified/unified_system_tray.cc b/ash/system/unified/unified_system_tray.cc index 46ebcbd4..d259d7f 100644 --- a/ash/system/unified/unified_system_tray.cc +++ b/ash/system/unified/unified_system_tray.cc
@@ -45,7 +45,6 @@ void HidePopups() override; bool ShowMessageCenter(bool show_by_click) override; void HideMessageCenter() override; - bool ShowNotifierSettings() override; MessageCenterUiController* ui_controller() { return ui_controller_.get(); } @@ -109,10 +108,6 @@ owner_->HideBubbleInternal(); } -bool UnifiedSystemTray::UiDelegate::ShowNotifierSettings() { - return false; -} - class UnifiedSystemTray::NetworkStateDelegate : public TrayNetworkStateObserver::Delegate { public: @@ -206,6 +201,11 @@ UnifiedSliderBubbleController::SLIDER_TYPE_VOLUME); } +void UnifiedSystemTray::ShowAudioDetailedViewBubble() { + ShowBubble(false /* show_by_click */); + bubble_->ShowAudioDetailedView(); +} + void UnifiedSystemTray::SetTrayBubbleHeight(int height) { ui_delegate_->SetTrayBubbleHeight(height); }
diff --git a/ash/system/unified/unified_system_tray.h b/ash/system/unified/unified_system_tray.h index e08c0c1..04e3745 100644 --- a/ash/system/unified/unified_system_tray.h +++ b/ash/system/unified/unified_system_tray.h
@@ -60,6 +60,9 @@ // is same as one shown when volume buttons on keyboard are pressed. void ShowVolumeSliderBubble(); + // Shows main bubble with audio settings detailed view. + void ShowAudioDetailedViewBubble(); + // Return the bounds of the bubble in the screen. gfx::Rect GetBubbleBoundsInScreen() const;
diff --git a/ash/system/unified/unified_system_tray_bubble.cc b/ash/system/unified/unified_system_tray_bubble.cc index cdb4b3d..4673aa4 100644 --- a/ash/system/unified/unified_system_tray_bubble.cc +++ b/ash/system/unified/unified_system_tray_bubble.cc
@@ -162,6 +162,15 @@ controller_->EnsureExpanded(); } +void UnifiedSystemTrayBubble::ShowAudioDetailedView() { + if (!bubble_widget_) + return; + + DCHECK(unified_view_); + DCHECK(controller_); + controller_->ShowAudioDetailedView(); +} + void UnifiedSystemTrayBubble::UpdateBubble() { if (!bubble_widget_) return;
diff --git a/ash/system/unified/unified_system_tray_bubble.h b/ash/system/unified/unified_system_tray_bubble.h index a62382d24..48259e4 100644 --- a/ash/system/unified/unified_system_tray_bubble.h +++ b/ash/system/unified/unified_system_tray_bubble.h
@@ -60,6 +60,9 @@ // Ensure the bubble is expanded. void EnsureExpanded(); + // Show audio settings detailed view. + void ShowAudioDetailedView(); + // Update bubble bounds and focus if necessary. void UpdateBubble();
diff --git a/ash/system/unified/unified_system_tray_controller.cc b/ash/system/unified/unified_system_tray_controller.cc index 725292be..a583830 100644 --- a/ash/system/unified/unified_system_tray_controller.cc +++ b/ash/system/unified/unified_system_tray_controller.cc
@@ -331,6 +331,10 @@ UpdateExpandedAmount(); } +void UnifiedSystemTrayController::OnAudioSettingsButtonClicked() { + ShowAudioDetailedView(); +} + void UnifiedSystemTrayController::InitFeaturePods() { AddFeaturePodItem(std::make_unique<NetworkFeaturePodController>(this)); AddFeaturePodItem(std::make_unique<BluetoothFeaturePodController>(this));
diff --git a/ash/system/unified/unified_system_tray_controller.h b/ash/system/unified/unified_system_tray_controller.h index 7f24e96..eea94e0 100644 --- a/ash/system/unified/unified_system_tray_controller.h +++ b/ash/system/unified/unified_system_tray_controller.h
@@ -9,6 +9,7 @@ #include <vector> #include "ash/ash_export.h" +#include "ash/system/audio/unified_volume_slider_controller.h" #include "ash/system/unified/unified_system_tray_model.h" #include "base/macros.h" #include "ui/gfx/animation/animation_delegate.h" @@ -29,7 +30,9 @@ class UnifiedSystemTrayView; // Controller class of UnifiedSystemTrayView. Handles events of the view. -class ASH_EXPORT UnifiedSystemTrayController : public gfx::AnimationDelegate { +class ASH_EXPORT UnifiedSystemTrayController + : public gfx::AnimationDelegate, + public UnifiedVolumeSliderController::Delegate { public: UnifiedSystemTrayController(UnifiedSystemTrayModel* model, UnifiedSystemTrayBubble* bubble = nullptr); @@ -114,6 +117,9 @@ void AnimationProgressed(const gfx::Animation* animation) override; void AnimationCanceled(const gfx::Animation* animation) override; + // UnifiedVolumeSliderController::Delegate: + void OnAudioSettingsButtonClicked() override; + UnifiedSystemTrayModel* model() { return model_; } private:
diff --git a/ash/test/ash_test_base.cc b/ash/test/ash_test_base.cc index 264286323..1addc3a 100644 --- a/ash/test/ash_test_base.cc +++ b/ash/test/ash_test_base.cc
@@ -29,6 +29,7 @@ #include "ash/test_screenshot_delegate.h" #include "ash/test_shell_delegate.h" #include "ash/utility/screenshot_controller.h" +#include "ash/window_factory.h" #include "ash/wm/top_level_window_factory.h" #include "ash/wm/window_positioner.h" #include "ash/ws/window_service_owner.h" @@ -240,6 +241,10 @@ .UpdateNaturalOrientation(); } +void AshTestBase::SetRunningOutsideAsh() { + ash_test_helper_->SetRunningOutsideAsh(); +} + aura::Window* AshTestBase::CurrentContext() { return ash_test_helper_->CurrentContext(); } @@ -325,7 +330,7 @@ const gfx::Rect& bounds, int shell_window_id) { std::unique_ptr<aura::Window> window = - std::make_unique<aura::Window>(nullptr, aura::client::WINDOW_TYPE_NORMAL); + window_factory::NewWindow(nullptr, aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_NOT_DRAWN); window->SetBounds(bounds); window->set_id(shell_window_id); @@ -347,7 +352,7 @@ aura::client::WindowType type, int id, const gfx::Rect& bounds) { - aura::Window* window = new aura::Window(delegate); + aura::Window* window = window_factory::NewWindow(delegate).release(); window->set_id(id); window->SetType(type); window->Init(ui::LAYER_TEXTURED); @@ -500,7 +505,7 @@ return original_display.id() != screen ->GetDisplayNearestPoint( - aura::Env::GetInstance()->last_mouse_location()) + Shell::Get()->aura_env()->last_mouse_location()) .id(); }
diff --git a/ash/test/ash_test_base.h b/ash/test/ash_test_base.h index 016d4ac..499c5a6 100644 --- a/ash/test/ash_test_base.h +++ b/ash/test/ash_test_base.h
@@ -82,6 +82,12 @@ // Returns the unified system tray on the primary display. static UnifiedSystemTray* GetPrimaryUnifiedSystemTray(); + // Call this only if this code is being run outside of ash, for example, in + // browser tests that use AshTestBase. This disables CHECKs that are + // applicable only when used inside ash. + // TODO: remove this and ban usage of AshTestHelper outside of ash. + void SetRunningOutsideAsh(); + // Update the display configuration as given in |display_specs|. // See ash::DisplayManagerTestApi::UpdateDisplay for more details. void UpdateDisplay(const std::string& display_specs);
diff --git a/ash/test/ash_test_helper.cc b/ash/test/ash_test_helper.cc index f18ea5e..00d5818 100644 --- a/ash/test/ash_test_helper.cc +++ b/ash/test/ash_test_helper.cc
@@ -44,6 +44,8 @@ #include "ui/aura/input_state_lookup.h" #include "ui/aura/test/env_test_helper.h" #include "ui/aura/test/event_generator_delegate_aura.h" +#include "ui/aura/test/test_windows.h" +#include "ui/aura/window.h" #include "ui/base/ime/input_method_initializer.h" #include "ui/base/material_design/material_design_controller.h" #include "ui/base/platform_window_defaults.h" @@ -165,6 +167,13 @@ } void AshTestHelper::SetUp(bool start_session, bool provide_local_state) { +#if !defined(NDEBUG) + aura::Window::SetEnvArgRequired( + "Within ash you must supply a non-null aura::Env when creating a Window, " + "use window_factory, or supply the Env obtained from " + "Shell::Get()->aura_env()"); +#endif + // TODO(jamescook): Can we do this without changing command line? // Use the origin (1,1) so that it doesn't over // lap with the native mouse cursor. @@ -235,8 +244,10 @@ CreateShell(); - aura::test::EnvTestHelper().SetInputStateLookup( - std::unique_ptr<aura::InputStateLookup>()); + aura::test::SetEnvForTestWindows(Shell::Get()->aura_env()); + + aura::test::EnvTestHelper(Shell::Get()->aura_env()) + .SetInputStateLookup(std::unique_ptr<aura::InputStateLookup>()); Shell* shell = Shell::Get(); @@ -278,6 +289,8 @@ void AshTestHelper::TearDown() { app_list_test_helper_.reset(); + aura::test::SetEnvForTestWindows(nullptr); + Shell::DeleteInstance(); // Suspend the tear down until all resources are returned via @@ -318,6 +331,16 @@ env_window_tree_client_setter_.reset(); CHECK(!::wm::CaptureController::Get()); +#if !defined(NDEBUG) + aura::Window::SetEnvArgRequired(nullptr); +#endif +} + +void AshTestHelper::SetRunningOutsideAsh() { + test_views_delegate_->set_running_outside_ash(); +#if DCHECK_IS_ON() + aura::Window::SetEnvArgRequired(nullptr); +#endif } PrefService* AshTestHelper::GetLocalStatePrefService() {
diff --git a/ash/test/ash_test_helper.h b/ash/test/ash_test_helper.h index 19499b3..a9bc8e5f 100644 --- a/ash/test/ash_test_helper.h +++ b/ash/test/ash_test_helper.h
@@ -63,6 +63,12 @@ // Destroys the ash::Shell and performs associated cleanup. void TearDown(); + // Call this only if this code is being run outside of ash, for example, in + // browser tests that use AshTestBase. This disables CHECKs that are + // applicable only when used inside ash. + // TODO: remove this and ban usage of AshTestHelper outside of ash. + void SetRunningOutsideAsh(); + // Returns a root Window. Usually this is the active root Window, but that // method can return NULL sometimes, and in those cases, we fall back on the // primary root Window.
diff --git a/ash/test/ash_test_helper_unittest.cc b/ash/test/ash_test_helper_unittest.cc index cbc4826..056a4766 100644 --- a/ash/test/ash_test_helper_unittest.cc +++ b/ash/test/ash_test_helper_unittest.cc
@@ -52,6 +52,7 @@ std::unique_ptr<Widget> w1(new Widget); Widget::InitParams params; params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; + params.context = ash_test_helper()->CurrentContext(); w1->Init(params); w1->Show(); EXPECT_TRUE(w1->IsActive());
diff --git a/ash/test/ash_test_suite.cc b/ash/test/ash_test_suite.cc index a80f65fb..ee7477c 100644 --- a/ash/test/ash_test_suite.cc +++ b/ash/test/ash_test_suite.cc
@@ -12,6 +12,7 @@ #include "build/build_config.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/resource/resource_bundle.h" +#include "ui/base/ui_base_features.h" #include "ui/base/ui_base_paths.h" #include "ui/base/ui_base_switches.h" #include "ui/compositor/test/context_factories_for_test.h" @@ -63,7 +64,10 @@ } base::DiscardableMemoryAllocator::SetInstance(&discardable_memory_allocator_); - env_ = aura::Env::CreateInstance(); + // Simulate what happens with single-process-mash. + env_ = aura::Env::CreateInstance(::features::IsSingleProcessMash() + ? aura::Env::Mode::MUS + : aura::Env::Mode::LOCAL); } void AshTestSuite::Shutdown() {
diff --git a/ash/test/ash_test_views_delegate.cc b/ash/test/ash_test_views_delegate.cc index 3cc2fe9..6c41a13 100644 --- a/ash/test/ash_test_views_delegate.cc +++ b/ash/test/ash_test_views_delegate.cc
@@ -16,10 +16,19 @@ void AshTestViewsDelegate::OnBeforeWidgetInit( views::Widget::InitParams* params, views::internal::NativeWidgetDelegate* delegate) { - TestViewsDelegate::OnBeforeWidgetInit(params, delegate); + if (running_outside_ash_) { + DCHECK(ash::Shell::HasInstance()); + if (!params->parent && !params->context) + params->context = Shell::GetRootWindowForNewWindows(); + } else { + CHECK(params->native_widget || params->context || params->parent) + << "Widgets must be created with a context or parent. In tests use " + << "CurrentContext(). In non-test code you likely want to use the " + << "parent the Widget will be added to, or possibly " + << "Shell::GetRootWindowForNewWindows()."; + } - if (!params->parent && !params->context && ash::Shell::HasInstance()) - params->context = Shell::GetRootWindowForNewWindows(); + TestViewsDelegate::OnBeforeWidgetInit(params, delegate); } void AshTestViewsDelegate::NotifyAccessibilityEvent(
diff --git a/ash/test/ash_test_views_delegate.h b/ash/test/ash_test_views_delegate.h index 33a65bd6..d93b35d 100644 --- a/ash/test/ash_test_views_delegate.h +++ b/ash/test/ash_test_views_delegate.h
@@ -26,6 +26,12 @@ AshTestViewsDelegate(); ~AshTestViewsDelegate() override; + // Call this only if this code is being run outside of ash, for example, in + // browser tests that use AshTestBase. This disables CHECKs that are + // applicable only when used inside ash. + // TODO: remove this and ban usage of AshTestHelper outside of ash. + void set_running_outside_ash() { running_outside_ash_ = true; } + // Not owned. void set_test_accessibility_event_delegate( TestAccessibilityEventDelegate* test_accessibility_event_delegate) { @@ -54,6 +60,8 @@ // Not owned. TestAccessibilityEventDelegate* test_accessibility_event_delegate_ = nullptr; + bool running_outside_ash_ = false; + DISALLOW_COPY_AND_ASSIGN(AshTestViewsDelegate); };
diff --git a/ash/test/ui_controls_factory_ash.cc b/ash/test/ui_controls_factory_ash.cc index bd1a127..c6c061f 100644 --- a/ash/test/ui_controls_factory_ash.cc +++ b/ash/test/ui_controls_factory_ash.cc
@@ -107,7 +107,7 @@ int button_state, base::OnceClosure closure, int accelerator_state) override { - gfx::Point p(aura::Env::GetInstance()->last_mouse_location()); + gfx::Point p(Shell::Get()->aura_env()->last_mouse_location()); UIControlsAura* ui_controls = GetUIControlsAt(p); return ui_controls && ui_controls->SendMouseEventsNotifyWhenDone(
diff --git a/ash/utility/screenshot_controller_unittest.cc b/ash/utility/screenshot_controller_unittest.cc index 070b98f0..2dce4a3 100644 --- a/ash/utility/screenshot_controller_unittest.cc +++ b/ash/utility/screenshot_controller_unittest.cc
@@ -260,12 +260,12 @@ StartPartialScreenshotSession(); EXPECT_FALSE(TestIfMouseWarpsAt(gfx::Point(499, 11))); EXPECT_EQ(gfx::Point(499, 11), - aura::Env::GetInstance()->last_mouse_location()); + Shell::Get()->aura_env()->last_mouse_location()); Cancel(); EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(499, 11))); EXPECT_EQ(gfx::Point(501, 11), - aura::Env::GetInstance()->last_mouse_location()); + Shell::Get()->aura_env()->last_mouse_location()); } TEST_F(PartialScreenshotControllerTest, CursorVisibilityTest) {
diff --git a/ash/wayland/wayland_server_controller.cc b/ash/wayland/wayland_server_controller.cc index 91e7f09..92437053 100644 --- a/ash/wayland/wayland_server_controller.cc +++ b/ash/wayland/wayland_server_controller.cc
@@ -17,6 +17,7 @@ #include "components/exo/file_helper.h" #include "components/exo/wayland/server.h" #include "components/exo/wm_helper.h" +#include "ui/aura/env.h" namespace ash { @@ -48,13 +49,15 @@ // static std::unique_ptr<WaylandServerController> WaylandServerController::CreateIfNecessary( - std::unique_ptr<exo::FileHelper> file_helper) { + std::unique_ptr<exo::FileHelper> file_helper, + aura::Env* env) { if (!base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kAshEnableWaylandServer)) { return nullptr; } - return base::WrapUnique(new WaylandServerController(std::move(file_helper))); + return base::WrapUnique( + new WaylandServerController(std::move(file_helper), env)); } WaylandServerController::~WaylandServerController() { @@ -66,12 +69,13 @@ } WaylandServerController::WaylandServerController( - std::unique_ptr<exo::FileHelper> file_helper) { + std::unique_ptr<exo::FileHelper> file_helper, + aura::Env* env) { arc_notification_surface_manager_ = std::make_unique<ArcNotificationSurfaceManagerImpl>(); arc_input_method_surface_manager_ = std::make_unique<ArcInputMethodSurfaceManager>(); - wm_helper_ = std::make_unique<exo::WMHelper>(); + wm_helper_ = std::make_unique<exo::WMHelper>(env); exo::WMHelper::SetInstance(wm_helper_.get()); display_ = std::make_unique<exo::Display>( arc_notification_surface_manager_.get(),
diff --git a/ash/wayland/wayland_server_controller.h b/ash/wayland/wayland_server_controller.h index 951ba2e..75509fd 100644 --- a/ash/wayland/wayland_server_controller.h +++ b/ash/wayland/wayland_server_controller.h
@@ -9,6 +9,10 @@ #include "base/macros.h" +namespace aura { +class Env; +} + namespace exo { class Display; class FileHelper; @@ -28,13 +32,14 @@ // Creates WaylandServerController. Returns null if controller should not be // created. static std::unique_ptr<WaylandServerController> CreateIfNecessary( - std::unique_ptr<exo::FileHelper> file_helper); + std::unique_ptr<exo::FileHelper> file_helper, + aura::Env* env); ~WaylandServerController(); private: - explicit WaylandServerController( - std::unique_ptr<exo::FileHelper> file_helper); + WaylandServerController(std::unique_ptr<exo::FileHelper> file_helper, + aura::Env* env); std::unique_ptr<exo::WMHelper> wm_helper_; std::unique_ptr<exo::Display> display_;
diff --git a/ash/window_factory.cc b/ash/window_factory.cc new file mode 100644 index 0000000..a2764643 --- /dev/null +++ b/ash/window_factory.cc
@@ -0,0 +1,20 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/window_factory.h" + +#include "ash/shell.h" +#include "ui/aura/window.h" + +namespace ash { +namespace window_factory { + +std::unique_ptr<aura::Window> NewWindow(aura::WindowDelegate* delegate, + aura::client::WindowType type) { + return std::make_unique<aura::Window>(delegate, type, + Shell::Get()->aura_env()); +} + +} // namespace window_factory +} // namespace ash
diff --git a/ash/window_factory.h b/ash/window_factory.h new file mode 100644 index 0000000..f0fc75b --- /dev/null +++ b/ash/window_factory.h
@@ -0,0 +1,31 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_WINDOW_FACTORY_H_ +#define ASH_WINDOW_FACTORY_H_ + +#include <memory> + +#include "ash/ash_export.h" +#include "ui/aura/client/window_types.h" + +namespace aura { +class Window; +class WindowDelegate; +} // namespace aura + +namespace ash { +namespace window_factory { + +// All aura::Window creation in Ash goes through this function. It ensures the +// aura::Window is created as appropriate for Ash. +// Exporting solely for tests. +ASH_EXPORT std::unique_ptr<aura::Window> NewWindow( + aura::WindowDelegate* delegate = nullptr, + aura::client::WindowType type = aura::client::WINDOW_TYPE_UNKNOWN); + +} // namespace window_factory +} // namespace ash + +#endif // ASH_WINDOW_FACTORY_H_
diff --git a/ash/window_user_data_unittest.cc b/ash/window_user_data_unittest.cc index 352d584..1ee1dc3 100644 --- a/ash/window_user_data_unittest.cc +++ b/ash/window_user_data_unittest.cc
@@ -7,6 +7,7 @@ #include <memory> #include "ash/test/ash_test_base.h" +#include "ash/window_factory.h" #include "ash/window_user_data.h" #include "ui/aura/window.h" #include "ui/compositor/layer_type.h" @@ -34,10 +35,10 @@ // Verifies clear() deletes the data associated with a window. TEST_F(WindowUserDataTest, ClearDestroys) { WindowUserData<Data> user_data; - aura::Window window(nullptr, aura::client::WINDOW_TYPE_UNKNOWN); - window.Init(ui::LAYER_NOT_DRAWN); + std::unique_ptr<aura::Window> window = window_factory::NewWindow(); + window->Init(ui::LAYER_NOT_DRAWN); bool data_deleted = false; - user_data.Set(&window, std::make_unique<Data>(&data_deleted)); + user_data.Set(window.get(), std::make_unique<Data>(&data_deleted)); EXPECT_FALSE(data_deleted); user_data.clear(); EXPECT_TRUE(data_deleted); @@ -46,8 +47,7 @@ // Verifies Set() called with an existing window replaces the existing data. TEST_F(WindowUserDataTest, ReplaceDestroys) { WindowUserData<Data> user_data; - std::unique_ptr<aura::Window> window(std::make_unique<aura::Window>( - nullptr, aura::client::WINDOW_TYPE_UNKNOWN)); + std::unique_ptr<aura::Window> window = window_factory::NewWindow(); window->Init(ui::LAYER_NOT_DRAWN); bool data1_deleted = false; user_data.Set(window.get(), std::make_unique<Data>(&data1_deleted)); @@ -66,12 +66,12 @@ // Verifies Set() with null deletes existing data. TEST_F(WindowUserDataTest, NullClears) { WindowUserData<Data> user_data; - aura::Window window(nullptr, aura::client::WINDOW_TYPE_UNKNOWN); - window.Init(ui::LAYER_NOT_DRAWN); + std::unique_ptr<aura::Window> window = window_factory::NewWindow(); + window->Init(ui::LAYER_NOT_DRAWN); bool data1_deleted = false; - user_data.Set(&window, std::make_unique<Data>(&data1_deleted)); + user_data.Set(window.get(), std::make_unique<Data>(&data1_deleted)); EXPECT_FALSE(data1_deleted); - user_data.Set(&window, nullptr); + user_data.Set(window.get(), nullptr); EXPECT_TRUE(data1_deleted); EXPECT_TRUE(user_data.GetWindows().empty()); }
diff --git a/ash/wm/ash_focus_rules_unittest.cc b/ash/wm/ash_focus_rules_unittest.cc index 764597d..53dc1b9 100644 --- a/ash/wm/ash_focus_rules_unittest.cc +++ b/ash/wm/ash_focus_rules_unittest.cc
@@ -10,6 +10,7 @@ #include "ash/shell.h" #include "ash/test/ash_test_base.h" #include "ash/test/ash_test_helper.h" +#include "ash/window_factory.h" #include "ash/wm/lock_state_controller.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" @@ -131,7 +132,7 @@ aura::Window* CreateWindowInContainer(int container_id) { aura::Window* root_window = Shell::GetPrimaryRootWindow(); aura::Window* container = Shell::GetContainer(root_window, container_id); - aura::Window* window = new aura::Window(nullptr); + aura::Window* window = window_factory::NewWindow().release(); window->set_id(0); window->SetType(aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_TEXTURED);
diff --git a/ash/wm/cursor_manager_chromeos.cc b/ash/wm/cursor_manager_chromeos.cc index 2fa44ddb..f3070f1 100644 --- a/ash/wm/cursor_manager_chromeos.cc +++ b/ash/wm/cursor_manager_chromeos.cc
@@ -6,6 +6,7 @@ #include <utility> +#include "ash/shell.h" #include "base/logging.h" #include "ui/aura/env.h" #include "ui/events/event.h" @@ -27,7 +28,7 @@ return false; // Do not hide cursor when clicking the key with mouse button pressed. - if (aura::Env::GetInstance()->IsMouseButtonDown()) + if (Shell::Get()->aura_env()->IsMouseButtonDown()) return false; // Clicking on a key when the accessibility virtual keyboard is enabled should
diff --git a/ash/wm/default_window_resizer_unittest.cc b/ash/wm/default_window_resizer_unittest.cc index 94a0795..3e7aeb6b 100644 --- a/ash/wm/default_window_resizer_unittest.cc +++ b/ash/wm/default_window_resizer_unittest.cc
@@ -7,6 +7,7 @@ #include "ash/root_window_controller.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" +#include "ash/window_factory.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/test/test_window_delegate.h" #include "ui/base/hit_test.h" @@ -26,8 +27,8 @@ delegate_.set_minimum_size(gfx::Size(10, 10)); delegate_.set_maximum_size(gfx::Size(500, 500)); - aspect_ratio_window_ = std::make_unique<aura::Window>(&delegate_); - aspect_ratio_window_->SetType(aura::client::WINDOW_TYPE_NORMAL); + aspect_ratio_window_ = + window_factory::NewWindow(&delegate_, aura::client::WINDOW_TYPE_NORMAL); aspect_ratio_window_->Init(ui::LAYER_NOT_DRAWN); ParentWindowInPrimaryRootWindow(aspect_ratio_window_.get()); }
diff --git a/ash/wm/drag_window_controller.cc b/ash/wm/drag_window_controller.cc index 1ae4478c..7e43fec 100644 --- a/ash/wm/drag_window_controller.cc +++ b/ash/wm/drag_window_controller.cc
@@ -9,6 +9,7 @@ #include "ash/public/cpp/shell_window_ids.h" #include "ash/shell.h" +#include "ash/window_factory.h" #include "ash/wm/window_util.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/client/screen_position_client.h" @@ -80,7 +81,7 @@ const gfx::Rect& bounds_in_screen) { DCHECK(!drag_window_); original_window_ = original_window; - drag_window_ = new aura::Window(this); + drag_window_ = window_factory::NewWindow(this).release(); int parent_id = original_window->parent()->id(); aura::Window* container = root_window_->GetChildById(parent_id);
diff --git a/ash/wm/drag_window_resizer_unittest.cc b/ash/wm/drag_window_resizer_unittest.cc index ee30cc6..a20726c 100644 --- a/ash/wm/drag_window_resizer_unittest.cc +++ b/ash/wm/drag_window_resizer_unittest.cc
@@ -10,6 +10,7 @@ #include "ash/shelf/shelf_layout_manager.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" +#include "ash/window_factory.h" #include "ash/wm/cursor_manager_test_api.h" #include "ash/wm/drag_window_controller.h" #include "ash/wm/window_positioning_utils.h" @@ -72,20 +73,20 @@ gfx::Rect root_bounds(root->bounds()); EXPECT_EQ(kRootHeight, root_bounds.height()); EXPECT_EQ(800, root_bounds.width()); - window_.reset(new aura::Window(&delegate_)); + window_ = window_factory::NewWindow(&delegate_); window_->SetType(aura::client::WINDOW_TYPE_NORMAL); window_->Init(ui::LAYER_NOT_DRAWN); ParentWindowInPrimaryRootWindow(window_.get()); window_->set_id(1); - always_on_top_window_.reset(new aura::Window(&delegate2_)); + always_on_top_window_ = window_factory::NewWindow(&delegate2_); always_on_top_window_->SetType(aura::client::WINDOW_TYPE_NORMAL); always_on_top_window_->SetProperty(aura::client::kAlwaysOnTopKey, true); always_on_top_window_->Init(ui::LAYER_NOT_DRAWN); ParentWindowInPrimaryRootWindow(always_on_top_window_.get()); always_on_top_window_->set_id(2); - system_modal_window_.reset(new aura::Window(&delegate3_)); + system_modal_window_ = window_factory::NewWindow(&delegate3_); system_modal_window_->SetType(aura::client::WINDOW_TYPE_NORMAL); system_modal_window_->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_SYSTEM); @@ -93,20 +94,20 @@ ParentWindowInPrimaryRootWindow(system_modal_window_.get()); system_modal_window_->set_id(3); - transient_child_ = new aura::Window(&delegate4_); + transient_child_ = window_factory::NewWindow(&delegate4_).release(); transient_child_->SetType(aura::client::WINDOW_TYPE_NORMAL); transient_child_->Init(ui::LAYER_NOT_DRAWN); ParentWindowInPrimaryRootWindow(transient_child_); transient_child_->set_id(4); - transient_parent_.reset(new aura::Window(&delegate5_)); + transient_parent_ = window_factory::NewWindow(&delegate5_); transient_parent_->SetType(aura::client::WINDOW_TYPE_NORMAL); transient_parent_->Init(ui::LAYER_NOT_DRAWN); ParentWindowInPrimaryRootWindow(transient_parent_.get()); ::wm::AddTransientChild(transient_parent_.get(), transient_child_); transient_parent_->set_id(5); - panel_window_.reset(new aura::Window(&delegate6_)); + panel_window_ = window_factory::NewWindow(&delegate6_); panel_window_->SetType(aura::client::WINDOW_TYPE_PANEL); panel_window_->Init(ui::LAYER_NOT_DRAWN); ParentWindowInPrimaryRootWindow(panel_window_.get()); @@ -297,7 +298,7 @@ ASSERT_EQ(2U, root_windows.size()); aura::test::TestWindowDelegate delegate; - std::unique_ptr<aura::Window> window(new aura::Window(&delegate)); + std::unique_ptr<aura::Window> window = window_factory::NewWindow(&delegate); window->SetType(aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_TEXTURED); ParentWindowInPrimaryRootWindow(window.get()); @@ -656,7 +657,7 @@ resizer->Drag(CalculateDragPoint(*resizer, 399, 200), 0); EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(399, 200))); EXPECT_EQ("401,200", - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); resizer->CompleteDrag(); } @@ -673,7 +674,7 @@ resizer->Drag(CalculateDragPoint(*resizer, 399, 200), 0); EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(399, 200))); EXPECT_EQ("401,200", - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); resizer->CompleteDrag(); } @@ -683,7 +684,7 @@ window->SetBoundsInScreen( gfx::Rect(0, 0, 50, 60), display::Screen::GetScreen()->GetPrimaryDisplay()); - aura::Env::GetInstance()->SetLastMouseLocation(gfx::Point(0, 0)); + Shell::Get()->aura_env()->SetLastMouseLocation(gfx::Point(0, 0)); // Grab (0, 0) of the window. std::unique_ptr<WindowResizer> resizer( CreateDragWindowResizer(window, gfx::Point(), HTCAPTION)); @@ -691,7 +692,7 @@ resizer->Drag(CalculateDragPoint(*resizer, 399, 200), 0); EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(399, 200))); EXPECT_EQ("401,200", - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); resizer->CompleteDrag(); } @@ -708,7 +709,7 @@ resizer->Drag(CalculateDragPoint(*resizer, 399, 200), 0); EXPECT_FALSE(TestIfMouseWarpsAt(gfx::Point(399, 200))); EXPECT_EQ("399,200", - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); resizer->CompleteDrag(); } @@ -725,7 +726,7 @@ resizer->Drag(CalculateDragPoint(*resizer, 399, 200), 0); EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(399, 200))); EXPECT_EQ("401,200", - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); resizer->CompleteDrag(); } @@ -742,7 +743,7 @@ resizer->Drag(CalculateDragPoint(*resizer, 399, 200), 0); EXPECT_TRUE(TestIfMouseWarpsAt(gfx::Point(399, 200))); EXPECT_EQ("401,200", - aura::Env::GetInstance()->last_mouse_location().ToString()); + Shell::Get()->aura_env()->last_mouse_location().ToString()); resizer->CompleteDrag(); } }
diff --git a/ash/wm/immersive_fullscreen_controller_unittest.cc b/ash/wm/immersive_fullscreen_controller_unittest.cc index c843ca0..8e5819c 100644 --- a/ash/wm/immersive_fullscreen_controller_unittest.cc +++ b/ash/wm/immersive_fullscreen_controller_unittest.cc
@@ -163,6 +163,7 @@ widget_ = new views::Widget(); views::Widget::InitParams params; params.delegate = new TestWidgetDelegate(); + params.context = CurrentContext(); widget_->Init(params); widget_->Show(); @@ -555,7 +556,7 @@ event_generator->MoveMouseTo(x, y_top_edge + 1); EXPECT_TRUE(top_edge_hover_timer_running()); EXPECT_EQ(y_top_edge + 1, - aura::Env::GetInstance()->last_mouse_location().y()); + Shell::Get()->aura_env()->last_mouse_location().y()); // The timer should continue running if the user moves the mouse to the top // edge even though the mouse is warped to the secondary display. @@ -937,6 +938,7 @@ views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; non_transient_params.bounds = gfx::Rect(0, 100, 100, 100); std::unique_ptr<views::Widget> non_transient_widget(new views::Widget()); + non_transient_params.context = CurrentContext(); non_transient_widget->Init(non_transient_params); EXPECT_FALSE(controller()->IsRevealed());
diff --git a/ash/wm/lock_layout_manager_unittest.cc b/ash/wm/lock_layout_manager_unittest.cc index 2160db9..e01c535 100644 --- a/ash/wm/lock_layout_manager_unittest.cc +++ b/ash/wm/lock_layout_manager_unittest.cc
@@ -76,6 +76,7 @@ views::Widget* widget = new views::Widget; if (use_delegate) params.delegate = new LoginTestWidgetDelegate(widget); + params.context = CurrentContext(); widget->Init(params); widget->Show(); aura::Window* window = widget->GetNativeView();
diff --git a/ash/wm/native_cursor_manager_ash_classic.cc b/ash/wm/native_cursor_manager_ash_classic.cc index 399b823..e11dadf 100644 --- a/ash/wm/native_cursor_manager_ash_classic.cc +++ b/ash/wm/native_cursor_manager_ash_classic.cc
@@ -150,11 +150,10 @@ ::wm::NativeCursorManagerDelegate* delegate) { delegate->CommitMouseEventsEnabled(enabled); - if (enabled) { - aura::Env::GetInstance()->SetLastMouseLocation(disabled_cursor_location_); - } else { - disabled_cursor_location_ = aura::Env::GetInstance()->last_mouse_location(); - } + if (enabled) + Shell::Get()->aura_env()->SetLastMouseLocation(disabled_cursor_location_); + else + disabled_cursor_location_ = Shell::Get()->aura_env()->last_mouse_location(); SetVisibility(delegate->IsCursorVisible(), delegate); NotifyMouseEventsEnableStateChange(enabled);
diff --git a/ash/wm/non_client_frame_controller.cc b/ash/wm/non_client_frame_controller.cc index 6cd25628..4462f7d 100644 --- a/ash/wm/non_client_frame_controller.cc +++ b/ash/wm/non_client_frame_controller.cc
@@ -10,8 +10,8 @@ #include <string> #include <vector> -#include "ash/frame/custom_frame_view_ash.h" #include "ash/frame/detached_title_area_renderer.h" +#include "ash/frame/non_client_frame_view_ash.h" #include "ash/public/cpp/ash_constants.h" #include "ash/public/cpp/ash_layout_constants.h" #include "ash/public/cpp/immersive/immersive_fullscreen_controller_delegate.h" @@ -177,9 +177,9 @@ mojom::WindowStyle window_style) // The NativeWidget is mirroring the real Widget created in client code. // |is_parallel_widget_in_window_manager| is used to indicate this - : views::NativeWidgetAura( - delegate, - true /* is_parallel_widget_in_window_manager */), + : views::NativeWidgetAura(delegate, + true /* is_parallel_widget_in_window_manager */, + Shell::Get()->aura_env()), remove_standard_frame_(remove_standard_frame), enable_immersive_(enable_immersive), window_style_(window_style) {} @@ -204,8 +204,8 @@ window); // See description for details on ownership. custom_frame_view_ = - new CustomFrameViewAsh(GetWidget(), immersive_delegate_.get(), - enable_immersive_, window_style_); + new NonClientFrameViewAsh(GetWidget(), immersive_delegate_.get(), + enable_immersive_, window_style_); // Only the header actually paints any content. So the rest of the region is // marked as transparent content (see below in NonClientFrameController() @@ -231,7 +231,7 @@ // Not used for panels or if |remove_standard_frame_| is true. This is owned // by the Widget's view hierarchy (e.g. it's a child of Widget's root View). - CustomFrameViewAsh* custom_frame_view_ = nullptr; + NonClientFrameViewAsh* custom_frame_view_ = nullptr; // The cursor for this widget. CompoundEventFilter will retrieve this cursor // via GetCursor and update the CursorManager's active cursor as appropriate
diff --git a/ash/wm/overview/cleanup_animation_observer_unittest.cc b/ash/wm/overview/cleanup_animation_observer_unittest.cc index a4f2d05..a0f84de4 100644 --- a/ash/wm/overview/cleanup_animation_observer_unittest.cc +++ b/ash/wm/overview/cleanup_animation_observer_unittest.cc
@@ -83,6 +83,7 @@ params.bounds = bounds; params.type = views::Widget::InitParams::TYPE_WINDOW; params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; + params.context = CurrentContext(); widget->Init(params); widget->Show(); widget->AddObserver(this);
diff --git a/ash/wm/overview/window_selector_unittest.cc b/ash/wm/overview/window_selector_unittest.cc index 690709c0..58de64c 100644 --- a/ash/wm/overview/window_selector_unittest.cc +++ b/ash/wm/overview/window_selector_unittest.cc
@@ -194,6 +194,7 @@ params.bounds = bounds; params.type = views::Widget::InitParams::TYPE_WINDOW; params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; + params.context = CurrentContext(); widget->Init(params); widget->Show(); aura::Window* window = widget->GetNativeWindow(); @@ -3236,7 +3237,7 @@ } TEST_F(SplitViewWindowSelectorTest, Dragging) { - aura::Env::GetInstance()->set_throttle_input_on_resize_for_testing(false); + Shell::Get()->aura_env()->set_throttle_input_on_resize_for_testing(false); ui::test::EventGenerator* generator = GetEventGenerator(); @@ -3323,7 +3324,7 @@ // Verify the correct behavior when dragging windows in overview mode. TEST_F(SplitViewWindowSelectorTest, OverviewDragControllerBehavior) { - aura::Env::GetInstance()->set_throttle_input_on_resize_for_testing(false); + Shell::Get()->aura_env()->set_throttle_input_on_resize_for_testing(false); base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitAndEnableFeature(features::kOverviewSwipeToClose);
diff --git a/ash/wm/resize_shadow_and_cursor_unittest.cc b/ash/wm/resize_shadow_and_cursor_unittest.cc index 9153c4e..e1b7bbe 100644 --- a/ash/wm/resize_shadow_and_cursor_unittest.cc +++ b/ash/wm/resize_shadow_and_cursor_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/frame/custom_frame_view_ash.h" +#include "ash/frame/non_client_frame_view_ash.h" #include "ash/public/cpp/ash_constants.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" @@ -22,7 +22,7 @@ namespace { -// views::WidgetDelegate which uses ash::CustomFrameViewAsh. +// views::WidgetDelegate which uses ash::NonClientFrameViewAsh. class TestWidgetDelegate : public views::WidgetDelegateView { public: TestWidgetDelegate() = default; @@ -34,7 +34,7 @@ bool CanMinimize() const override { return true; } views::NonClientFrameView* CreateNonClientFrameView( views::Widget* widget) override { - return new CustomFrameViewAsh(widget); + return new NonClientFrameViewAsh(widget); } private:
diff --git a/ash/wm/splitview/split_view_controller_unittest.cc b/ash/wm/splitview/split_view_controller_unittest.cc index 9f58e459..543ab095 100644 --- a/ash/wm/splitview/split_view_controller_unittest.cc +++ b/ash/wm/splitview/split_view_controller_unittest.cc
@@ -2350,6 +2350,7 @@ std::make_unique<TestWindowDelegateWithWidget>(can_activate); widget_delegate->set_widget(widget); params.delegate = widget_delegate.release(); + params.context = CurrentContext(); widget->Init(params); widget->Show(); return base::WrapUnique<aura::Window>(widget->GetNativeView());
diff --git a/ash/wm/stacking_controller_unittest.cc b/ash/wm/stacking_controller_unittest.cc index e8217ff..192ae93 100644 --- a/ash/wm/stacking_controller_unittest.cc +++ b/ash/wm/stacking_controller_unittest.cc
@@ -5,6 +5,7 @@ #include "ash/public/cpp/shell_window_ids.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" +#include "ash/window_factory.h" #include "ash/wm/window_properties.h" #include "ash/wm/window_util.h" #include "ui/aura/client/aura_constants.h" @@ -22,9 +23,10 @@ ~StackingControllerTest() override = default; aura::Window* CreateTestWindow() { - aura::Window* window = new aura::Window(NULL); + aura::Window* window = + window_factory::NewWindow(nullptr, aura::client::WINDOW_TYPE_NORMAL) + .release(); window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); - window->SetType(aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_TEXTURED); return window; }
diff --git a/ash/wm/system_gesture_event_filter_unittest.cc b/ash/wm/system_gesture_event_filter_unittest.cc index 70b09aba..6805d5a 100644 --- a/ash/wm/system_gesture_event_filter_unittest.cc +++ b/ash/wm/system_gesture_event_filter_unittest.cc
@@ -10,6 +10,7 @@ #include "ash/shell.h" #include "ash/shell_test_api.h" #include "ash/test/ash_test_base.h" +#include "ash/window_factory.h" #include "ash/wm/window_positioning_utils.h" #include "ash/wm/window_state.h" #include "base/time/time.h" @@ -456,15 +457,15 @@ aura::test::EventCountDelegate delegate; delegate.set_window_component(HTCLIENT); - std::unique_ptr<aura::Window> child(new aura::Window(&delegate)); - child->SetType(aura::client::WINDOW_TYPE_CONTROL); + std::unique_ptr<aura::Window> child = + window_factory::NewWindow(&delegate, aura::client::WINDOW_TYPE_CONTROL); child->Init(ui::LAYER_TEXTURED); parent->AddChild(child.get()); child->SetBounds(gfx::Rect(100, 100)); child->Show(); ui::test::TestEventHandler event_handler; - aura::Env::GetInstance()->AddPreTargetHandler( + Shell::Get()->aura_env()->AddPreTargetHandler( &event_handler, ui::EventTarget::Priority::kSystem); GetEventGenerator()->MoveMouseTo(0, 0); @@ -475,7 +476,7 @@ EXPECT_EQ(event_handler.num_gesture_events(), delegate.GetGestureCountAndReset()); - aura::Env::GetInstance()->RemovePreTargetHandler(&event_handler); + Shell::Get()->aura_env()->RemovePreTargetHandler(&event_handler); } } // namespace ash
diff --git a/ash/wm/system_modal_container_layout_manager_unittest.cc b/ash/wm/system_modal_container_layout_manager_unittest.cc index 0d2bbb0c..8db37d0 100644 --- a/ash/wm/system_modal_container_layout_manager_unittest.cc +++ b/ash/wm/system_modal_container_layout_manager_unittest.cc
@@ -10,6 +10,7 @@ #include "ash/root_window_controller.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" +#include "ash/window_factory.h" #include "ash/wm/container_finder.h" #include "ash/wm/window_util.h" #include "base/command_line.h" @@ -417,7 +418,8 @@ // Create a child control for modal1_transient and it receives mouse events. aura::test::EventCountDelegate control_delegate; control_delegate.set_window_component(HTCLIENT); - std::unique_ptr<aura::Window> child(new aura::Window(&control_delegate)); + std::unique_ptr<aura::Window> child = + window_factory::NewWindow(&control_delegate); child->SetType(aura::client::WINDOW_TYPE_CONTROL); child->Init(ui::LAYER_TEXTURED); modal1_transient->AddChild(child.get()); @@ -800,7 +802,7 @@ // Make sure that a child visibility change should not cause // inconsistent state. - std::unique_ptr<aura::Window> child = std::make_unique<aura::Window>(nullptr); + std::unique_ptr<aura::Window> child = window_factory::NewWindow(); child->SetType(aura::client::WINDOW_TYPE_CONTROL); child->Init(ui::LAYER_TEXTURED); modal_window->AddChild(child.get());
diff --git a/ash/wm/tablet_mode/tablet_mode_event_handler.cc b/ash/wm/tablet_mode/tablet_mode_event_handler.cc index 9f733a0f..179e289b 100644 --- a/ash/wm/tablet_mode/tablet_mode_event_handler.cc +++ b/ash/wm/tablet_mode/tablet_mode_event_handler.cc
@@ -22,9 +22,18 @@ } // namespace -TabletModeEventHandler::TabletModeEventHandler() = default; +TabletModeEventHandler::TabletModeEventHandler() { + Shell::Get()->AddPreTargetHandler(this); +} -TabletModeEventHandler::~TabletModeEventHandler() = default; +TabletModeEventHandler::~TabletModeEventHandler() { + Shell::Get()->RemovePreTargetHandler(this); +} + +void TabletModeEventHandler::OnTouchEvent(ui::TouchEvent* event) { + if (ToggleFullscreen(*event)) + event->StopPropagation(); +} bool TabletModeEventHandler::ToggleFullscreen(const ui::TouchEvent& event) { if (event.type() != ui::ET_TOUCH_PRESSED)
diff --git a/ash/wm/tablet_mode/tablet_mode_event_handler.h b/ash/wm/tablet_mode/tablet_mode_event_handler.h index 8c30275..b4a8cdd8 100644 --- a/ash/wm/tablet_mode/tablet_mode_event_handler.h +++ b/ash/wm/tablet_mode/tablet_mode_event_handler.h
@@ -6,6 +6,7 @@ #define ASH_WM_TABLET_MODE_TABLET_MODE_EVENT_HANDLER_H_ #include "base/macros.h" +#include "ui/events/event_handler.h" namespace ui { class TouchEvent; @@ -17,17 +18,18 @@ // TabletModeEventHandler handles toggling fullscreen when appropriate. // TabletModeEventHandler installs event handlers in an environment specific // way, e.g. EventHandler for aura. -class TabletModeEventHandler { +class TabletModeEventHandler : public ui::EventHandler { public: TabletModeEventHandler(); - virtual ~TabletModeEventHandler(); - - protected: - // Subclasses call this to toggle fullscreen. If a toggle happened returns - // true. - bool ToggleFullscreen(const ui::TouchEvent& event); + ~TabletModeEventHandler() override; private: + // ui::EventHandler: + void OnTouchEvent(ui::TouchEvent* event) override; + + // Returns true if a toggle happened. + bool ToggleFullscreen(const ui::TouchEvent& event); + DISALLOW_COPY_AND_ASSIGN(TabletModeEventHandler); };
diff --git a/ash/wm/tablet_mode/tablet_mode_event_handler_classic.cc b/ash/wm/tablet_mode/tablet_mode_event_handler_classic.cc deleted file mode 100644 index dc547c9..0000000 --- a/ash/wm/tablet_mode/tablet_mode_event_handler_classic.cc +++ /dev/null
@@ -1,27 +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 "ash/wm/tablet_mode/tablet_mode_event_handler_classic.h" - -#include "ash/shell.h" -#include "ui/events/event.h" - -namespace ash { -namespace wm { - -TabletModeEventHandlerClassic::TabletModeEventHandlerClassic() { - Shell::Get()->AddPreTargetHandler(this); -} - -TabletModeEventHandlerClassic::~TabletModeEventHandlerClassic() { - Shell::Get()->RemovePreTargetHandler(this); -} - -void TabletModeEventHandlerClassic::OnTouchEvent(ui::TouchEvent* event) { - if (ToggleFullscreen(*event)) - event->StopPropagation(); -} - -} // namespace wm -} // namespace ash
diff --git a/ash/wm/tablet_mode/tablet_mode_event_handler_classic.h b/ash/wm/tablet_mode/tablet_mode_event_handler_classic.h deleted file mode 100644 index 929e523..0000000 --- a/ash/wm/tablet_mode/tablet_mode_event_handler_classic.h +++ /dev/null
@@ -1,34 +0,0 @@ -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef ASH_WM_TABLET_MODE_TABLET_MODE_EVENT_HANDLER_CLASSIC_H_ -#define ASH_WM_TABLET_MODE_TABLET_MODE_EVENT_HANDLER_CLASSIC_H_ - -#include "ash/ash_export.h" -#include "ash/wm/tablet_mode/tablet_mode_event_handler.h" -#include "ui/events/event_handler.h" - -namespace ash { -namespace wm { - -// Implementation of TabletModeEventHandler for aura. Uses ui::EventHandler. -// TODO(jamescook): Collapse with TabletModeEventHandler. -// https://crbug.com/866523 -class ASH_EXPORT TabletModeEventHandlerClassic : public TabletModeEventHandler, - public ui::EventHandler { - public: - TabletModeEventHandlerClassic(); - ~TabletModeEventHandlerClassic() override; - - private: - // ui::EventHandler override: - void OnTouchEvent(ui::TouchEvent* event) override; - - DISALLOW_COPY_AND_ASSIGN(TabletModeEventHandlerClassic); -}; - -} // namespace wm -} // namespace ash - -#endif // ASH_WM_TABLET_MODE_TABLET_MODE_EVENT_HANDLER_CLASSIC_H_
diff --git a/ash/wm/tablet_mode/tablet_mode_window_manager.cc b/ash/wm/tablet_mode/tablet_mode_window_manager.cc index 06863a8..d6cca35 100644 --- a/ash/wm/tablet_mode/tablet_mode_window_manager.cc +++ b/ash/wm/tablet_mode/tablet_mode_window_manager.cc
@@ -14,7 +14,7 @@ #include "ash/wm/overview/window_selector_controller.h" #include "ash/wm/tablet_mode/scoped_skip_user_session_blocked_check.h" #include "ash/wm/tablet_mode/tablet_mode_backdrop_delegate_impl.h" -#include "ash/wm/tablet_mode/tablet_mode_event_handler_classic.h" +#include "ash/wm/tablet_mode/tablet_mode_event_handler.h" #include "ash/wm/tablet_mode/tablet_mode_window_state.h" #include "ash/wm/window_state.h" #include "ash/wm/wm_event.h" @@ -248,7 +248,7 @@ display::Screen::GetScreen()->AddObserver(this); Shell::Get()->AddShellObserver(this); Shell::Get()->split_view_controller()->AddObserver(this); - event_handler_ = std::make_unique<wm::TabletModeEventHandlerClassic>(); + event_handler_ = std::make_unique<wm::TabletModeEventHandler>(); } void TabletModeWindowManager::MaximizeAllWindows() {
diff --git a/ash/wm/tablet_mode/tablet_mode_window_manager_unittest.cc b/ash/wm/tablet_mode/tablet_mode_window_manager_unittest.cc index 962586c38..93fbf8b 100644 --- a/ash/wm/tablet_mode/tablet_mode_window_manager_unittest.cc +++ b/ash/wm/tablet_mode/tablet_mode_window_manager_unittest.cc
@@ -107,9 +107,10 @@ // Creates a window which also has a widget. aura::Window* CreateWindowWithWidget(const gfx::Rect& bounds) { + // Note: The widget will get deleted with the window. views::Widget* widget = new views::Widget(); views::Widget::InitParams params; - // Note: The widget will get deleted with the window. + params.context = CurrentContext(); widget->Init(params); widget->Show(); aura::Window* window = widget->GetNativeWindow();
diff --git a/ash/wm/test_child_modal_parent.cc b/ash/wm/test_child_modal_parent.cc index e4ee47dd..98952e7 100644 --- a/ash/wm/test_child_modal_parent.cc +++ b/ash/wm/test_child_modal_parent.cc
@@ -76,10 +76,14 @@ // static TestChildModalParent* TestChildModalParent::Show(aura::Window* context) { auto* test_child_modal_parent = new TestChildModalParent(context); - Widget::CreateWindowWithContextAndBounds( - test_child_modal_parent, context, - gfx::Rect(kWindowLeft, kWindowTop, kWindowWidth, kWindowHeight)) - ->Show(); + views::Widget* widget = new views::Widget; + views::Widget::InitParams params; + params.delegate = test_child_modal_parent; + params.context = context; + params.bounds = + gfx::Rect(kWindowLeft, kWindowTop, kWindowWidth, kWindowHeight); + widget->Init(params); + widget->Show(); return test_child_modal_parent; }
diff --git a/ash/wm/test_child_modal_parent.h b/ash/wm/test_child_modal_parent.h index 630d96ce..0370ddb 100644 --- a/ash/wm/test_child_modal_parent.h +++ b/ash/wm/test_child_modal_parent.h
@@ -28,7 +28,7 @@ public: // Create and show a top-level window that hosts a modal parent. Returns the // widget delegate, which is owned by the widget and deleted on window close. - static TestChildModalParent* Show(aura::Window* context = nullptr); + static TestChildModalParent* Show(aura::Window* context); explicit TestChildModalParent(aura::Window* context); ~TestChildModalParent() override;
diff --git a/ash/wm/top_level_window_factory.cc b/ash/wm/top_level_window_factory.cc index d5ef8f3..3361431 100644 --- a/ash/wm/top_level_window_factory.cc +++ b/ash/wm/top_level_window_factory.cc
@@ -10,6 +10,7 @@ #include "ash/root_window_controller.h" #include "ash/root_window_settings.h" #include "ash/shell.h" +#include "ash/window_factory.h" #include "ash/wm/container_finder.h" #include "ash/wm/non_client_frame_controller.h" #include "ash/wm/property_util.h" @@ -173,7 +174,7 @@ // destroyed. ui::ws2::WindowDelegateImpl* window_delegate = new ui::ws2::WindowDelegateImpl(); - aura::Window* window = new aura::Window(window_delegate); + aura::Window* window = window_factory::NewWindow(window_delegate).release(); window_delegate->set_window(window); aura::SetWindowType(window, window_type); ApplyProperties(window, property_converter, *properties);
diff --git a/ash/wm/toplevel_window_event_handler.cc b/ash/wm/toplevel_window_event_handler.cc index f59765a..011b654 100644 --- a/ash/wm/toplevel_window_event_handler.cc +++ b/ash/wm/toplevel_window_event_handler.cc
@@ -69,7 +69,7 @@ DCHECK(root_window); gfx::Point drag_location; if (move_source == ::wm::WINDOW_MOVE_SOURCE_TOUCH && - aura::Env::GetInstance()->is_touch_down()) { + Shell::Get()->aura_env()->is_touch_down()) { gfx::PointF drag_location_f; bool has_point = ui::GestureRecognizer::Get()->GetLastTouchPointForTarget( source, &drag_location_f);
diff --git a/ash/wm/toplevel_window_event_handler_unittest.cc b/ash/wm/toplevel_window_event_handler_unittest.cc index 2cf0a25..9483c9f 100644 --- a/ash/wm/toplevel_window_event_handler_unittest.cc +++ b/ash/wm/toplevel_window_event_handler_unittest.cc
@@ -8,6 +8,7 @@ #include "ash/root_window_controller.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" +#include "ash/window_factory.h" #include "ash/wm/resize_shadow.h" #include "ash/wm/resize_shadow_controller.h" #include "ash/wm/window_state.h" @@ -60,8 +61,9 @@ protected: aura::Window* CreateWindow(int hittest_code) { TestWindowDelegate* d1 = new TestWindowDelegate(hittest_code); - aura::Window* w1 = new aura::Window(d1); - w1->SetType(aura::client::WINDOW_TYPE_NORMAL); + aura::Window* w1 = + window_factory::NewWindow(d1, aura::client::WINDOW_TYPE_NORMAL) + .release(); w1->set_id(1); w1->Init(ui::LAYER_TEXTURED); aura::Window* parent = Shell::GetContainer(Shell::GetPrimaryRootWindow(),
diff --git a/ash/wm/video_detector.cc b/ash/wm/video_detector.cc index 4c4626d..5f7cc384 100644 --- a/ash/wm/video_detector.cc +++ b/ash/wm/video_detector.cc
@@ -22,13 +22,13 @@ scoped_session_observer_(this), is_shutting_down_(false), binding_(this, std::move(request)) { - aura::Env::GetInstance()->AddObserver(this); + Shell::Get()->aura_env()->AddObserver(this); Shell::Get()->AddShellObserver(this); } VideoDetector::~VideoDetector() { Shell::Get()->RemoveShellObserver(this); - aura::Env::GetInstance()->RemoveObserver(this); + Shell::Get()->aura_env()->RemoveObserver(this); } void VideoDetector::AddObserver(Observer* observer) {
diff --git a/ash/wm/window_cycle_controller.cc b/ash/wm/window_cycle_controller.cc index f16a9a2..827d5930 100644 --- a/ash/wm/window_cycle_controller.cc +++ b/ash/wm/window_cycle_controller.cc
@@ -12,7 +12,7 @@ #include "ash/shell.h" #include "ash/wm/mru_window_tracker.h" #include "ash/wm/screen_pinning_controller.h" -#include "ash/wm/window_cycle_event_filter_classic.h" +#include "ash/wm/window_cycle_event_filter.h" #include "ash/wm/window_cycle_list.h" #include "base/metrics/histogram_macros.h" #include "base/metrics/user_metrics.h" @@ -61,7 +61,7 @@ active_window_before_window_cycle_ = GetActiveWindow(window_list); window_cycle_list_.reset(new WindowCycleList(window_list)); - event_filter_ = std::make_unique<WindowCycleEventFilterClassic>(); + event_filter_ = std::make_unique<WindowCycleEventFilter>(); cycle_start_time_ = base::Time::Now(); base::RecordAction(base::UserMetricsAction("WindowCycleController_Cycle")); UMA_HISTOGRAM_COUNTS_100("Ash.WindowCycleController.Items",
diff --git a/ash/wm/window_cycle_event_filter_classic.cc b/ash/wm/window_cycle_event_filter.cc similarity index 83% rename from ash/wm/window_cycle_event_filter_classic.cc rename to ash/wm/window_cycle_event_filter.cc index 0a9c93a..ea553b7 100644 --- a/ash/wm/window_cycle_event_filter_classic.cc +++ b/ash/wm/window_cycle_event_filter.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/wm/window_cycle_event_filter_classic.h" +#include "ash/wm/window_cycle_event_filter.h" #include "ash/accelerators/debug_commands.h" #include "ash/shell.h" @@ -12,7 +12,7 @@ namespace ash { -WindowCycleEventFilterClassic::WindowCycleEventFilterClassic() { +WindowCycleEventFilter::WindowCycleEventFilter() { Shell::Get()->AddPreTargetHandler(this); // Handling release of "Alt" must come before other pretarget handlers // (specifically, the partial screenshot handler). See crbug.com/651939 @@ -22,12 +22,12 @@ ui::EventTarget::Priority::kSystem); } -WindowCycleEventFilterClassic::~WindowCycleEventFilterClassic() { +WindowCycleEventFilter::~WindowCycleEventFilter() { Shell::Get()->RemovePreTargetHandler(this); Shell::Get()->RemovePreTargetHandler(&alt_release_handler_); } -void WindowCycleEventFilterClassic::OnKeyEvent(ui::KeyEvent* event) { +void WindowCycleEventFilter::OnKeyEvent(ui::KeyEvent* event) { // Until the alt key is released, all key events except the trigger key press // (which is handled by the accelerator controller to call Step) are handled // by this window cycle controller: https://crbug.com/340339. @@ -53,7 +53,7 @@ } } -void WindowCycleEventFilterClassic::OnMouseEvent(ui::MouseEvent* event) { +void WindowCycleEventFilter::OnMouseEvent(ui::MouseEvent* event) { // Prevent mouse clicks from doing anything while the Alt+Tab UI is active // <crbug.com/641171> but don't interfere with drag and drop operations // <crbug.com/660945>. @@ -63,12 +63,11 @@ } } -WindowCycleEventFilterClassic::AltReleaseHandler::AltReleaseHandler() = default; +WindowCycleEventFilter::AltReleaseHandler::AltReleaseHandler() = default; -WindowCycleEventFilterClassic::AltReleaseHandler::~AltReleaseHandler() = - default; +WindowCycleEventFilter::AltReleaseHandler::~AltReleaseHandler() = default; -void WindowCycleEventFilterClassic::AltReleaseHandler::OnKeyEvent( +void WindowCycleEventFilter::AltReleaseHandler::OnKeyEvent( ui::KeyEvent* event) { // Views uses VKEY_MENU for both left and right Alt keys. if (event->key_code() == ui::VKEY_MENU &&
diff --git a/ash/wm/window_cycle_event_filter.h b/ash/wm/window_cycle_event_filter.h index 711aca2..ea19d0e 100644 --- a/ash/wm/window_cycle_event_filter.h +++ b/ash/wm/window_cycle_event_filter.h
@@ -6,16 +6,46 @@ #define ASH_WM_WINDOW_CYCLE_EVENT_FILTER_H_ #include "ash/ash_export.h" +#include "base/macros.h" +#include "base/timer/timer.h" +#include "ui/events/event_handler.h" namespace ash { // Created by WindowCycleController when cycling through windows. Eats all key // events and stops cycling when the necessary key sequence is encountered. -class ASH_EXPORT WindowCycleEventFilter { +class ASH_EXPORT WindowCycleEventFilter : public ui::EventHandler { public: - virtual ~WindowCycleEventFilter() {} + WindowCycleEventFilter(); + ~WindowCycleEventFilter() override; + + // Overridden from ui::EventHandler: + void OnKeyEvent(ui::KeyEvent* event) override; + void OnMouseEvent(ui::MouseEvent* event) override; + + private: + class AltReleaseHandler : public ui::EventHandler { + public: + AltReleaseHandler(); + ~AltReleaseHandler() override; + + void OnKeyEvent(ui::KeyEvent* event) override; + + private: + DISALLOW_COPY_AND_ASSIGN(AltReleaseHandler); + }; + + // When the user holds Alt+Tab, this timer is used to send repeated + // cycle commands to WindowCycleController. Note this is not accomplished + // by marking the Alt+Tab accelerator as "repeatable" in the accelerator + // table because we wish to control the repeat interval. + base::RepeatingTimer repeat_timer_; + + AltReleaseHandler alt_release_handler_; + + DISALLOW_COPY_AND_ASSIGN(WindowCycleEventFilter); }; -} // namepsace ash +} // namespace ash #endif // ASH_WM_WINDOW_CYCLE_EVENT_FILTER_H_
diff --git a/ash/wm/window_cycle_event_filter_classic.h b/ash/wm/window_cycle_event_filter_classic.h deleted file mode 100644 index 6dc03bb..0000000 --- a/ash/wm/window_cycle_event_filter_classic.h +++ /dev/null
@@ -1,53 +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 ASH_WM_WINDOW_CYCLE_EVENT_FILTER_CLASSIC_H_ -#define ASH_WM_WINDOW_CYCLE_EVENT_FILTER_CLASSIC_H_ - -#include "ash/ash_export.h" -#include "ash/wm/window_cycle_event_filter.h" -#include "base/macros.h" -#include "base/timer/timer.h" -#include "ui/events/event_handler.h" - -namespace ash { - -// TODO(jamescook): Collapse with WindowCycleEventFilter. -// https://crbug.com/866523 -class ASH_EXPORT WindowCycleEventFilterClassic : public ui::EventHandler, - public WindowCycleEventFilter { - public: - WindowCycleEventFilterClassic(); - ~WindowCycleEventFilterClassic() override; - - // Overridden from ui::EventHandler: - void OnKeyEvent(ui::KeyEvent* event) override; - void OnMouseEvent(ui::MouseEvent* event) override; - - private: - class AltReleaseHandler : public ui::EventHandler { - public: - AltReleaseHandler(); - ~AltReleaseHandler() override; - - void OnKeyEvent(ui::KeyEvent* event) override; - - private: - DISALLOW_COPY_AND_ASSIGN(AltReleaseHandler); - }; - - // When the user holds Alt+Tab, this timer is used to send repeated - // cycle commands to WindowCycleController. Note this is not accomplished - // by marking the Alt+Tab accelerator as "repeatable" in the accelerator - // table because we wish to control the repeat interval. - base::RepeatingTimer repeat_timer_; - - AltReleaseHandler alt_release_handler_; - - DISALLOW_COPY_AND_ASSIGN(WindowCycleEventFilterClassic); -}; - -} // namespace ash - -#endif // ASH_WM_WINDOW_CYCLE_EVENT_FILTER_CLASSIC_H_
diff --git a/ash/wm/window_dimmer.cc b/ash/wm/window_dimmer.cc index 64dcf1d..4460e743 100644 --- a/ash/wm/window_dimmer.cc +++ b/ash/wm/window_dimmer.cc
@@ -6,6 +6,7 @@ #include <memory> +#include "ash/window_factory.h" #include "base/time/time.h" #include "ui/aura/window.h" #include "ui/compositor/layer.h" @@ -23,7 +24,9 @@ WindowDimmer::WindowDimmer(aura::Window* parent) : parent_(parent), - window_(new aura::Window(nullptr, aura::client::WINDOW_TYPE_NORMAL)) { + window_( + window_factory::NewWindow(nullptr, aura::client::WINDOW_TYPE_NORMAL) + .release()) { window_->Init(ui::LAYER_SOLID_COLOR); ::wm::SetWindowVisibilityChangesAnimated(window_); ::wm::SetWindowVisibilityAnimationType(
diff --git a/ash/wm/window_dimmer_unittest.cc b/ash/wm/window_dimmer_unittest.cc index dbddc04..b220a43 100644 --- a/ash/wm/window_dimmer_unittest.cc +++ b/ash/wm/window_dimmer_unittest.cc
@@ -3,6 +3,9 @@ // found in the LICENSE file. #include "ash/wm/window_dimmer.h" + +#include "ash/test/ash_test_base.h" +#include "ash/test/ash_test_helper.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/aura/test/aura_test_base.h" #include "ui/aura/test/test_windows.h" @@ -10,19 +13,20 @@ namespace ash { -using WindowDimmerTest = aura::test::AuraTestBase; +using WindowDimmerTest = ash::AshTestBase; // Verify that a window underneath the window dimmer is not occluded. TEST_F(WindowDimmerTest, Occlusion) { + aura::Window* root_window = CurrentContext(); aura::Window* bottom_window = aura::test::CreateTestWindow( - SK_ColorWHITE, 1, root_window()->bounds(), root_window()); + SK_ColorWHITE, 1, root_window->bounds(), root_window); aura::WindowOcclusionTracker::Track(bottom_window); - WindowDimmer dimmer(root_window()); + WindowDimmer dimmer(root_window); EXPECT_EQ(aura::Window::OcclusionState::VISIBLE, bottom_window->occlusion_state()); // Sanity check: An opaque window on top of |bottom_window| occludes it. - aura::test::CreateTestWindow(SK_ColorWHITE, 2, root_window()->bounds(), - root_window()); + aura::test::CreateTestWindow(SK_ColorWHITE, 2, root_window->bounds(), + root_window); EXPECT_EQ(aura::Window::OcclusionState::OCCLUDED, bottom_window->occlusion_state()); }
diff --git a/ash/wm/window_finder.cc b/ash/wm/window_finder.cc new file mode 100644 index 0000000..6b470d58 --- /dev/null +++ b/ash/wm/window_finder.cc
@@ -0,0 +1,76 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/wm/window_finder.h" + +#include "ash/public/cpp/shell_window_ids.h" +#include "ash/wm/root_window_finder.h" +#include "services/ui/ws2/window_service.h" +#include "ui/aura/client/screen_position_client.h" +#include "ui/aura/window.h" + +namespace { + +// Returns true if |window| is considered to be a toplevel window. +bool IsTopLevelWindow(aura::Window* window) { + // ui::LAYER_TEXTURED is for non-mash environment. For Mash, browser windows + // are not with LAYER_TEXTURED but have a remote client. + return window->layer()->type() == ui::LAYER_TEXTURED || + ui::ws2::WindowService::HasRemoteClient(window); +} + +// Get the toplevel window at |screen_point| among the descendants of |window|. +aura::Window* GetTopmostWindowAtPointWithinWindow( + const gfx::Point& screen_point, + aura::Window* window, + const std::set<aura::Window*> ignore, + aura::Window** real_topmost) { + if (!window->IsVisible()) + return nullptr; + + if (window->id() == ash::kShellWindowId_PhantomWindow || + window->id() == ash::kShellWindowId_OverlayContainer || + window->id() == ash::kShellWindowId_MouseCursorContainer) + return nullptr; + + if (IsTopLevelWindow(window)) { + aura::client::ScreenPositionClient* client = + aura::client::GetScreenPositionClient(window->GetRootWindow()); + gfx::Point local_point = screen_point; + client->ConvertPointFromScreen(window, &local_point); + if (window->GetEventHandlerForPoint(local_point)) { + if (real_topmost && !(*real_topmost)) + *real_topmost = window; + return (ignore.find(window) == ignore.end()) ? window : nullptr; + } + return nullptr; + } + + for (aura::Window::Windows::const_reverse_iterator i = + window->children().rbegin(); + i != window->children().rend(); ++i) { + aura::Window* result = GetTopmostWindowAtPointWithinWindow( + screen_point, *i, ignore, real_topmost); + if (result) + return result; + } + return nullptr; +} + +} // namespace + +namespace ash { +namespace wm { + +aura::Window* GetTopmostWindowAtPoint(const gfx::Point& screen_point, + const std::set<aura::Window*>& ignore, + aura::Window** real_topmost) { + if (real_topmost) + *real_topmost = nullptr; + return GetTopmostWindowAtPointWithinWindow( + screen_point, GetRootWindowAt(screen_point), ignore, real_topmost); +} + +} // namespace wm +} // namespace ash
diff --git a/ash/wm/window_finder.h b/ash/wm/window_finder.h new file mode 100644 index 0000000..45eb336 --- /dev/null +++ b/ash/wm/window_finder.h
@@ -0,0 +1,34 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_WM_WINDOW_FINDER_H_ +#define ASH_WM_WINDOW_FINDER_H_ + +#include <set> + +#include "ash/ash_export.h" + +namespace aura { +class Window; +} + +namespace gfx { +class Point; +} + +namespace ash { +namespace wm { + +// Finds the topmost visible window at |screen_point| with ignoring |ignore|. If +// |real_topmost| is not nullptr, it will be updated to the topmost visible +// window regardless of |ignore|. +ASH_EXPORT aura::Window* GetTopmostWindowAtPoint( + const gfx::Point& screen_point, + const std::set<aura::Window*>& ignore, + aura::Window** real_topmost); + +} // namespace wm +} // namespace ash + +#endif // ASH_WM_WINDOW_FINDER_H_
diff --git a/ash/wm/window_finder_unittest.cc b/ash/wm/window_finder_unittest.cc new file mode 100644 index 0000000..300940c --- /dev/null +++ b/ash/wm/window_finder_unittest.cc
@@ -0,0 +1,95 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ash/wm/window_finder.h" + +#include "ash/public/cpp/shell_window_ids.h" +#include "ash/shell.h" +#include "ash/test/ash_test_base.h" +#include "ui/compositor/layer_type.h" + +namespace ash { +namespace wm { + +using WindowFinderTest = AshTestBase; + +TEST_F(WindowFinderTest, FindTopmostWindows) { + std::unique_ptr<aura::Window> window1 = + CreateTestWindow(gfx::Rect(0, 0, 100, 100)); + std::unique_ptr<aura::Window> window2 = + CreateTestWindow(gfx::Rect(50, 0, 100, 100)); + std::unique_ptr<aura::Window> window3 = + CreateTestWindow(gfx::Rect(0, 50, 100, 100)); + + // Those windows shouldn't be LAYER_TEXTURED -- to check the behavior of + // IsTopLevelWindow(). + ASSERT_NE(ui::LAYER_TEXTURED, window1->layer()->type()); + ASSERT_NE(ui::LAYER_TEXTURED, window2->layer()->type()); + ASSERT_NE(ui::LAYER_TEXTURED, window3->layer()->type()); + + std::set<aura::Window*> ignore; + ignore.insert(window3.get()); + + aura::Window* real_topmost = nullptr; + EXPECT_EQ(window1.get(), + GetTopmostWindowAtPoint(gfx::Point(10, 10), ignore, &real_topmost)); + EXPECT_EQ(window1.get(), real_topmost); + + EXPECT_EQ(window2.get(), + GetTopmostWindowAtPoint(gfx::Point(60, 10), ignore, &real_topmost)); + EXPECT_EQ(window2.get(), real_topmost); + + EXPECT_EQ(window2.get(), + GetTopmostWindowAtPoint(gfx::Point(60, 60), ignore, &real_topmost)); + EXPECT_EQ(window3.get(), real_topmost); + + EXPECT_EQ(window1.get(), + GetTopmostWindowAtPoint(gfx::Point(10, 60), ignore, &real_topmost)); + EXPECT_EQ(window3.get(), real_topmost); + + window1->parent()->StackChildAtTop(window1.get()); + EXPECT_EQ(window1.get(), + GetTopmostWindowAtPoint(gfx::Point(60, 10), ignore, &real_topmost)); + EXPECT_EQ(window1.get(), real_topmost); + + ignore.clear(); + ignore.insert(window1.get()); + aura::Window* wallpaper_container = Shell::GetContainer( + Shell::GetPrimaryRootWindow(), kShellWindowId_WallpaperContainer); + aura::Window* topmost = + GetTopmostWindowAtPoint(gfx::Point(10, 10), ignore, &real_topmost); + EXPECT_TRUE(wallpaper_container->Contains(topmost)); + EXPECT_EQ(ui::LAYER_TEXTURED, topmost->layer()->type()); + EXPECT_EQ(window1.get(), real_topmost); +} + +TEST_F(WindowFinderTest, RealTopmostCanBeNullptr) { + std::unique_ptr<aura::Window> window1 = + CreateTestWindow(gfx::Rect(0, 0, 100, 100)); + std::set<aura::Window*> ignore; + + EXPECT_EQ(window1.get(), + GetTopmostWindowAtPoint(gfx::Point(10, 10), ignore, nullptr)); +} + +TEST_F(WindowFinderTest, MultipleDisplays) { + UpdateDisplay("200x200,300x300"); + + std::unique_ptr<aura::Window> window1 = + CreateTestWindow(gfx::Rect(0, 0, 100, 100)); + std::unique_ptr<aura::Window> window2 = + CreateTestWindow(gfx::Rect(200, 0, 100, 100)); + ASSERT_NE(window1->GetRootWindow(), window2->GetRootWindow()); + + std::set<aura::Window*> ignore; + EXPECT_EQ(window1.get(), + GetTopmostWindowAtPoint(gfx::Point(10, 10), ignore, nullptr)); + EXPECT_EQ(window2.get(), + GetTopmostWindowAtPoint(gfx::Point(210, 10), ignore, nullptr)); + EXPECT_EQ(nullptr, + GetTopmostWindowAtPoint(gfx::Point(10, 210), ignore, nullptr)); +} + +} // namespace wm +} // namespace ash
diff --git a/ash/wm/window_modality_controller_unittest.cc b/ash/wm/window_modality_controller_unittest.cc index ea46fd9f..66aa510 100644 --- a/ash/wm/window_modality_controller_unittest.cc +++ b/ash/wm/window_modality_controller_unittest.cc
@@ -463,7 +463,7 @@ // the |modal_child| window. // - Focus should follow the active window. TEST_F(WindowModalityControllerTest, ChildModal) { - TestChildModalParent* delegate = TestChildModalParent::Show(); + TestChildModalParent* delegate = TestChildModalParent::Show(CurrentContext()); aura::Window* top_level = delegate->GetWidget()->GetNativeView(); EXPECT_TRUE(wm::IsActiveWindow(top_level)); @@ -516,7 +516,7 @@ // Same as |ChildModal| test, but using |EventGenerator| rather than bypassing // it by calling |ActivateWindow|. TEST_F(WindowModalityControllerTest, ChildModalEventGenerator) { - TestChildModalParent* delegate = TestChildModalParent::Show(); + TestChildModalParent* delegate = TestChildModalParent::Show(CurrentContext()); aura::Window* top_level = delegate->GetWidget()->GetNativeView(); EXPECT_TRUE(wm::IsActiveWindow(top_level));
diff --git a/ash/wm/workspace/multi_window_resize_controller_unittest.cc b/ash/wm/workspace/multi_window_resize_controller_unittest.cc index 2214d748..180d7a7 100644 --- a/ash/wm/workspace/multi_window_resize_controller_unittest.cc +++ b/ash/wm/workspace/multi_window_resize_controller_unittest.cc
@@ -4,7 +4,7 @@ #include "ash/wm/workspace/multi_window_resize_controller.h" -#include "ash/frame/custom_frame_view_ash.h" +#include "ash/frame/non_client_frame_view_ash.h" #include "ash/public/cpp/ash_constants.h" #include "ash/shell.h" #include "ash/shell_test_api.h" @@ -43,7 +43,7 @@ views::NonClientFrameView* CreateNonClientFrameView( views::Widget* widget) override { - return new CustomFrameViewAsh(widget); + return new NonClientFrameViewAsh(widget); } private:
diff --git a/ash/wm/workspace/workspace_event_handler_unittest.cc b/ash/wm/workspace/workspace_event_handler_unittest.cc index 6025b9b..38a2787 100644 --- a/ash/wm/workspace/workspace_event_handler_unittest.cc +++ b/ash/wm/workspace/workspace_event_handler_unittest.cc
@@ -7,6 +7,7 @@ #include "ash/screen_util.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" +#include "ash/window_factory.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" #include "ash/wm/wm_event.h" @@ -54,8 +55,9 @@ protected: aura::Window* CreateTestWindow(aura::WindowDelegate* delegate, const gfx::Rect& bounds) { - aura::Window* window = new aura::Window(delegate); - window->SetType(aura::client::WINDOW_TYPE_NORMAL); + aura::Window* window = + window_factory::NewWindow(delegate, aura::client::WINDOW_TYPE_NORMAL) + .release(); window->Init(ui::LAYER_TEXTURED); ParentWindowInPrimaryRootWindow(window); window->SetBounds(bounds);
diff --git a/ash/wm/workspace/workspace_layout_manager_unittest.cc b/ash/wm/workspace/workspace_layout_manager_unittest.cc index 8859aba..307f6d8 100644 --- a/ash/wm/workspace/workspace_layout_manager_unittest.cc +++ b/ash/wm/workspace/workspace_layout_manager_unittest.cc
@@ -10,7 +10,7 @@ #include "ash/accessibility/accessibility_controller.h" #include "ash/accessibility/test_accessibility_controller_client.h" #include "ash/app_list/test/app_list_test_helper.h" -#include "ash/frame/custom_frame_view_ash.h" +#include "ash/frame/non_client_frame_view_ash.h" #include "ash/public/cpp/app_list/app_list_features.h" #include "ash/public/cpp/app_types.h" #include "ash/public/cpp/config.h" @@ -28,6 +28,7 @@ #include "ash/shell_test_api.h" #include "ash/test/ash_test_base.h" #include "ash/wallpaper/wallpaper_controller_test_api.h" +#include "ash/window_factory.h" #include "ash/wm/fullscreen_window_finder.h" #include "ash/wm/overview/window_selector_controller.h" #include "ash/wm/splitview/split_view_controller.h" @@ -145,21 +146,21 @@ } // namespace -// NOTE: many of these tests use CustomFrameViewAshSizeLock. This is needed as -// the tests assume a minimum size of 0x0. In mash the minimum size, for +// NOTE: many of these tests use NonClientFrameViewAshSizeLock. This is needed +// as the tests assume a minimum size of 0x0. In mash the minimum size, for // top-level windows, is not 0x0, so without this the tests fails. // TODO(sky): update the tests so that this isn't necessary. -class CustomFrameViewAshSizeLock { +class NonClientFrameViewAshSizeLock { public: - CustomFrameViewAshSizeLock() { - CustomFrameViewAsh::use_empty_minimum_size_for_test_ = true; + NonClientFrameViewAshSizeLock() { + NonClientFrameViewAsh::use_empty_minimum_size_for_test_ = true; } - ~CustomFrameViewAshSizeLock() { - CustomFrameViewAsh::use_empty_minimum_size_for_test_ = false; + ~NonClientFrameViewAshSizeLock() { + NonClientFrameViewAsh::use_empty_minimum_size_for_test_ = false; } private: - DISALLOW_COPY_AND_ASSIGN(CustomFrameViewAshSizeLock); + DISALLOW_COPY_AND_ASSIGN(NonClientFrameViewAshSizeLock); }; using WorkspaceLayoutManagerTest = AshTestBase; @@ -169,7 +170,7 @@ // there is one). TEST_F(WorkspaceLayoutManagerTest, RestoreFromMinimizeKeepsRestore) { // See comment at top of file for why this is needed. - CustomFrameViewAshSizeLock min_size_lock; + NonClientFrameViewAshSizeLock min_size_lock; std::unique_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(1, 2, 3, 4))); gfx::Rect bounds(10, 15, 25, 35); window->SetBounds(bounds); @@ -234,7 +235,7 @@ TEST_F(WorkspaceLayoutManagerTest, KeepRestoredWindowInDisplay) { // See comment at top of file for why this is needed. - CustomFrameViewAshSizeLock min_size_lock; + NonClientFrameViewAshSizeLock min_size_lock; std::unique_ptr<aura::Window> window( CreateTestWindow(gfx::Rect(1, 2, 30, 40))); wm::WindowState* window_state = wm::GetWindowState(window.get()); @@ -275,7 +276,7 @@ TEST_F(WorkspaceLayoutManagerTest, MaximizeInDisplayToBeRestored) { // See comment at top of file for why this is needed. - CustomFrameViewAshSizeLock min_size_lock; + NonClientFrameViewAshSizeLock min_size_lock; UpdateDisplay("300x400,400x500"); aura::Window::Windows root_windows = Shell::Get()->GetAllRootWindows(); @@ -314,6 +315,7 @@ views::Widget::InitParams params; params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; params.delegate = new MaximizeDelegateView(gfx::Rect(400, 0, 30, 40)); + params.context = CurrentContext(); w1->Init(params); EXPECT_EQ(root_windows[0], w1->GetNativeWindow()->GetRootWindow()); w1->Show(); @@ -328,7 +330,7 @@ TEST_F(WorkspaceLayoutManagerTest, FullscreenInDisplayToBeRestored) { // See comment at top of file for why this is needed. - CustomFrameViewAshSizeLock min_size_lock; + NonClientFrameViewAshSizeLock min_size_lock; UpdateDisplay("300x400,400x500"); aura::Window::Windows root_windows = Shell::Get()->GetAllRootWindows(); @@ -401,8 +403,8 @@ // doesn't effect the restore bounds. TEST_F(WorkspaceLayoutManagerTest, DontClobberRestoreBounds) { DontClobberRestoreBoundsWindowObserver window_observer; - std::unique_ptr<aura::Window> window(std::make_unique<aura::Window>( - nullptr, aura::client::WINDOW_TYPE_NORMAL)); + std::unique_ptr<aura::Window> window = + window_factory::NewWindow(nullptr, aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_TEXTURED); window->SetBounds(gfx::Rect(10, 20, 30, 40)); // NOTE: for this test to exercise the failure the observer needs to be added @@ -441,8 +443,8 @@ // Verifies a window created with maximized state has the maximized // bounds. TEST_F(WorkspaceLayoutManagerTest, MaximizeWithEmptySize) { - std::unique_ptr<aura::Window> window(std::make_unique<aura::Window>( - nullptr, aura::client::WINDOW_TYPE_NORMAL)); + std::unique_ptr<aura::Window> window = + window_factory::NewWindow(nullptr, aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_TEXTURED); wm::GetWindowState(window.get())->Maximize(); aura::Window* default_container = @@ -668,8 +670,8 @@ TEST_F(WorkspaceLayoutManagerTest, DoNotAdjustTransientWindowBoundsToEnsureMinimumVisibility) { UpdateDisplay("300x400"); - std::unique_ptr<aura::Window> window(std::make_unique<aura::Window>( - nullptr, aura::client::WINDOW_TYPE_NORMAL)); + std::unique_ptr<aura::Window> window = + window_factory::NewWindow(nullptr, aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_TEXTURED); window->SetBounds(gfx::Rect(10, 0, 100, 200)); ParentWindowInPrimaryRootWindow(window.get()); @@ -1062,7 +1064,7 @@ } aura::Window* CreateTestWindowInParent(aura::Window* root_window) { - aura::Window* window = new aura::Window(nullptr); + aura::Window* window = window_factory::NewWindow().release(); window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); window->SetType(aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_TEXTURED); @@ -1687,7 +1689,7 @@ ScopedStickyKeyboardEnabler sticky_enabler; // See comment at top of file for why this is needed. - CustomFrameViewAshSizeLock min_size_lock; + NonClientFrameViewAshSizeLock min_size_lock; InitKeyboardBounds(); @@ -1719,7 +1721,7 @@ ScopedStickyKeyboardEnabler sticky_enabler; // See comment at top of file for why this is needed. - CustomFrameViewAshSizeLock min_size_lock; + NonClientFrameViewAshSizeLock min_size_lock; InitKeyboardBounds(); gfx::Rect work_area(GetPrimaryDisplay().work_area());
diff --git a/ash/wm/workspace/workspace_window_resizer_unittest.cc b/ash/wm/workspace/workspace_window_resizer_unittest.cc index b2cdb9e..f4bfa76f 100644 --- a/ash/wm/workspace/workspace_window_resizer_unittest.cc +++ b/ash/wm/workspace/workspace_window_resizer_unittest.cc
@@ -10,6 +10,7 @@ #include "ash/shelf/shelf_constants.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" +#include "ash/window_factory.h" #include "ash/wm/window_positioning_utils.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" @@ -111,25 +112,25 @@ gfx::Rect root_bounds(root->bounds()); EXPECT_EQ(800, root_bounds.width()); Shell::Get()->SetDisplayWorkAreaInsets(root, gfx::Insets()); - window_.reset(new aura::Window(&delegate_)); + window_ = window_factory::NewWindow(&delegate_); window_->SetType(aura::client::WINDOW_TYPE_NORMAL); window_->Init(ui::LAYER_NOT_DRAWN); ParentWindowInPrimaryRootWindow(window_.get()); window_->set_id(1); - window2_.reset(new aura::Window(&delegate2_)); + window2_ = window_factory::NewWindow(&delegate2_); window2_->SetType(aura::client::WINDOW_TYPE_NORMAL); window2_->Init(ui::LAYER_NOT_DRAWN); ParentWindowInPrimaryRootWindow(window2_.get()); window2_->set_id(2); - window3_.reset(new aura::Window(&delegate3_)); + window3_ = window_factory::NewWindow(&delegate3_); window3_->SetType(aura::client::WINDOW_TYPE_NORMAL); window3_->Init(ui::LAYER_NOT_DRAWN); ParentWindowInPrimaryRootWindow(window3_.get()); window3_->set_id(3); - window4_.reset(new aura::Window(&delegate4_)); + window4_ = window_factory::NewWindow(&delegate4_); window4_->SetType(aura::client::WINDOW_TYPE_NORMAL); window4_->Init(ui::LAYER_NOT_DRAWN); ParentWindowInPrimaryRootWindow(window4_.get());
diff --git a/ash/wm/workspace_controller_unittest.cc b/ash/wm/workspace_controller_unittest.cc index 88abf701e..f0a1952 100644 --- a/ash/wm/workspace_controller_unittest.cc +++ b/ash/wm/workspace_controller_unittest.cc
@@ -16,6 +16,7 @@ #include "ash/shell_test_api.h" #include "ash/system/status_area_widget.h" #include "ash/test/ash_test_base.h" +#include "ash/window_factory.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" #include "ash/wm/wm_event.h" @@ -80,7 +81,7 @@ ~WorkspaceControllerTest() override = default; aura::Window* CreateTestWindowUnparented() { - aura::Window* window = new aura::Window(NULL); + aura::Window* window = window_factory::NewWindow().release(); window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); window->SetType(aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_TEXTURED); @@ -88,7 +89,7 @@ } aura::Window* CreateTestWindow() { - aura::Window* window = new aura::Window(NULL); + aura::Window* window = window_factory::NewWindow().release(); window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); window->SetType(aura::client::WINDOW_TYPE_NORMAL); window->Init(ui::LAYER_TEXTURED);
diff --git a/ash/ws/window_service_delegate_impl.cc b/ash/ws/window_service_delegate_impl.cc index e8843b6..5adda50 100644 --- a/ash/ws/window_service_delegate_impl.cc +++ b/ash/ws/window_service_delegate_impl.cc
@@ -12,6 +12,7 @@ #include "ash/wm/non_client_frame_controller.h" #include "ash/wm/top_level_window_factory.h" #include "ash/wm/toplevel_window_event_handler.h" +#include "ash/wm/window_finder.h" #include "ash/wm/window_util.h" #include "base/bind.h" #include "mojo/public/cpp/bindings/map.h" @@ -213,4 +214,11 @@ return root_window_controller ? root_window_controller->GetHost() : nullptr; } +aura::Window* WindowServiceDelegateImpl::GetTopmostWindowAtPoint( + const gfx::Point& location_in_screen, + const std::set<aura::Window*>& ignore, + aura::Window** real_topmost) { + return wm::GetTopmostWindowAtPoint(location_in_screen, ignore, real_topmost); +} + } // namespace ash
diff --git a/ash/ws/window_service_delegate_impl.h b/ash/ws/window_service_delegate_impl.h index 80f368b1..84915444 100644 --- a/ash/ws/window_service_delegate_impl.h +++ b/ash/ws/window_service_delegate_impl.h
@@ -44,6 +44,9 @@ ui::SystemInputInjector* GetSystemInputInjector() override; aura::WindowTreeHost* GetWindowTreeHostForDisplayId( int64_t display_id) override; + aura::Window* GetTopmostWindowAtPoint(const gfx::Point& location_in_screen, + const std::set<aura::Window*>& ignores, + aura::Window** real_topmost) override; private: std::unique_ptr<ui::SystemInputInjector> system_input_injector_;
diff --git a/ash/ws/window_service_delegate_impl_unittest.cc b/ash/ws/window_service_delegate_impl_unittest.cc index 8626d53d..d23e1b4 100644 --- a/ash/ws/window_service_delegate_impl_unittest.cc +++ b/ash/ws/window_service_delegate_impl_unittest.cc
@@ -247,4 +247,57 @@ "OnPerformDragDropCompleted id=21 success=false action=0")); } +TEST_F(WindowServiceDelegateImplTest, ObserveTopmostWindow) { + std::unique_ptr<aura::Window> window2 = + CreateTestWindow(gfx::Rect(150, 100, 100, 100)); + std::unique_ptr<aura::Window> window3( + CreateTestWindowInShell(SK_ColorRED, kShellWindowId_DefaultContainer, + gfx::Rect(100, 150, 100, 100))); + + // Left button is pressed on SetUp() -- release it first. + GetEventGenerator()->ReleaseLeftButton(); + GetEventGenerator()->MoveMouseTo(gfx::Point(105, 105)); + GetEventGenerator()->PressLeftButton(); + GetWindowTreeClientChanges()->clear(); + + GetWindowTreeTestHelper()->window_tree()->ObserveTopmostWindow( + ui::mojom::MoveLoopSource::MOUSE, GetTopLevelWindowId()); + EXPECT_TRUE( + ContainsChange(*GetWindowTreeClientChanges(), + "TopmostWindowChanged window_id=0,1 window_id2=null")); + GetWindowTreeClientChanges()->clear(); + + GetEventGenerator()->MoveMouseTo(gfx::Point(155, 105)); + EXPECT_TRUE( + ContainsChange(*GetWindowTreeClientChanges(), + "TopmostWindowChanged window_id=0,1 window_id2=0,2")); + GetWindowTreeClientChanges()->clear(); + + GetEventGenerator()->MoveMouseTo(gfx::Point(155, 115)); + EXPECT_FALSE( + ContainsChange(*GetWindowTreeClientChanges(), + "TopmostWindowChanged window_id=0,1 window_id2=0,2")); + GetWindowTreeClientChanges()->clear(); + + GetEventGenerator()->MoveMouseTo(gfx::Point(155, 155)); + EXPECT_TRUE( + ContainsChange(*GetWindowTreeClientChanges(), + "TopmostWindowChanged window_id=0,1 window_id2=null")); + GetWindowTreeClientChanges()->clear(); + + window3.reset(); + EXPECT_TRUE( + ContainsChange(*GetWindowTreeClientChanges(), + "TopmostWindowChanged window_id=0,1 window_id2=0,2")); + GetWindowTreeClientChanges()->clear(); + + window2->Hide(); + EXPECT_TRUE( + ContainsChange(*GetWindowTreeClientChanges(), + "TopmostWindowChanged window_id=0,1 window_id2=null")); + GetWindowTreeClientChanges()->clear(); + + GetWindowTreeTestHelper()->window_tree()->StopObservingTopmostWindow(); +} + } // namespace ash
diff --git a/ash/ws/window_service_owner.cc b/ash/ws/window_service_owner.cc index 945de14..98a1995 100644 --- a/ash/ws/window_service_owner.cc +++ b/ash/ws/window_service_owner.cc
@@ -36,7 +36,8 @@ std::unique_ptr<ui::ws2::WindowService> window_service = std::make_unique<ui::ws2::WindowService>( window_service_delegate_.get(), std::move(gpu_interface_provider_), - Shell::Get()->focus_controller(), features::IsAshInBrowserProcess()); + Shell::Get()->focus_controller(), features::IsAshInBrowserProcess(), + Shell::Get()->aura_env()); window_service_ = window_service.get(); window_service_->SetFrameDecorationValues( NonClientFrameController::GetPreferredClientAreaInsets(),
diff --git a/base/BUILD.gn b/base/BUILD.gn index 626e2d0..81e8afe 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -1060,6 +1060,7 @@ "vlog.cc", "vlog.h", "win/async_operation.h", + "win/atl.h", "win/com_init_check_hook.cc", "win/com_init_check_hook.h", "win/com_init_util.cc", @@ -1088,6 +1089,7 @@ "win/patch_util.h", "win/process_startup_helper.cc", "win/process_startup_helper.h", + "win/propvarutil.h", "win/reference.h", "win/registry.cc", "win/registry.h", @@ -1116,8 +1118,10 @@ "win/scoped_windows_thread_environment.h", "win/scoped_winrt_initializer.cc", "win/scoped_winrt_initializer.h", + "win/shlwapi.h", "win/shortcut.cc", "win/shortcut.h", + "win/sphelper.h", "win/startup_information.cc", "win/startup_information.h", "win/typed_event_handler.h", @@ -1127,6 +1131,9 @@ "win/wait_chain.h", "win/win_util.cc", "win/win_util.h", + "win/windows_defines.inc", + "win/windows_types.h", + "win/windows_undefines.inc", "win/windows_version.cc", "win/windows_version.h", "win/winrt_storage_util.cc",
diff --git a/base/android/jni_generator/jni_exception_list.gni b/base/android/jni_generator/jni_exception_list.gni index 31d027ca..11c7f6a 100644 --- a/base/android/jni_generator/jni_exception_list.gni +++ b/base/android/jni_generator/jni_exception_list.gni
@@ -9,5 +9,5 @@ # Exclude it from JNI registration if VR is not enabled. if (!enable_vr) { - jni_exception_files += [ "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java" ] + jni_exception_files += [ "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrModuleProvider.java" ] }
diff --git a/base/android/jni_generator/jni_generator_tests.py b/base/android/jni_generator/jni_generator_tests.py index 12812a5..62ee862 100755 --- a/base/android/jni_generator/jni_generator_tests.py +++ b/base/android/jni_generator/jni_generator_tests.py
@@ -294,6 +294,8 @@ content = h2.Generate() for k in jni_registration_generator.MERGEABLE_KEYS: content[k] = content.get(k, '') + content['HEADER_GUARD'] = 'HEADER_GUARD' + content['NAMESPACE'] = 'test' self.assertGoldenTextEquals( jni_registration_generator.CreateFromDict(content), @@ -383,6 +385,8 @@ content = h2.Generate() for k in jni_registration_generator.MERGEABLE_KEYS: content[k] = content.get(k, '') + content['HEADER_GUARD'] = 'HEADER_GUARD' + content['NAMESPACE'] = 'test' self.assertGoldenTextEquals( jni_registration_generator.CreateFromDict(content),
diff --git a/base/android/jni_generator/jni_registration_generator.py b/base/android/jni_generator/jni_registration_generator.py index d4fb39a..44f97df 100755 --- a/base/android/jni_generator/jni_registration_generator.py +++ b/base/android/jni_generator/jni_registration_generator.py
@@ -12,6 +12,7 @@ import argparse import jni_generator import multiprocessing +import os import string import sys from util import build_utils @@ -54,6 +55,10 @@ for key in MERGEABLE_KEYS: combined_dict[key] = ''.join(d.get(key, '') for d in results) + combined_dict['HEADER_GUARD'] = \ + os.path.splitext(output_file)[0].replace('/', '_').upper() + '_' + combined_dict['NAMESPACE'] = args.namespace + header_content = CreateFromDict(combined_dict) if output_file: jni_generator.WriteOutput(output_file, header_content) @@ -91,8 +96,8 @@ // base/android/jni_generator/jni_registration_generator.py // Please do not change its content. -#ifndef HEADER_GUARD -#define HEADER_GUARD +#ifndef ${HEADER_GUARD} +#define ${HEADER_GUARD} #include <jni.h> @@ -113,6 +118,8 @@ ${JNI_NATIVE_METHOD} // Step 4: Main dex and non-main dex registration functions. +namespace ${NAMESPACE} { + bool RegisterMainDexNatives(JNIEnv* env) { ${REGISTER_MAIN_DEX_NATIVES} return true; @@ -123,7 +130,9 @@ return true; } -#endif // HEADER_GUARD +} // namespace ${NAMESPACE} + +#endif // ${HEADER_GUARD} """) if len(registration_dict['FORWARD_DECLARATIONS']) == 0: return '' @@ -315,8 +324,13 @@ arg_parser.add_argument('--output', help='The output file path.') arg_parser.add_argument('--no_register_java', + default=[], help='A list of Java files which should be ignored ' 'by the parser.') + arg_parser.add_argument('--namespace', + default='', + help='Namespace to wrap the registration functions ' + 'into.') args = arg_parser.parse_args(build_utils.ExpandFileArgs(argv[1:])) args.sources_files = build_utils.ParseGnList(args.sources_files)
diff --git a/base/android/jni_generator/testInnerClassNativesBothInnerAndOuterRegistrations.golden b/base/android/jni_generator/testInnerClassNativesBothInnerAndOuterRegistrations.golden index 44842c3..1109d142 100644 --- a/base/android/jni_generator/testInnerClassNativesBothInnerAndOuterRegistrations.golden +++ b/base/android/jni_generator/testInnerClassNativesBothInnerAndOuterRegistrations.golden
@@ -94,6 +94,8 @@ // Step 4: Main dex and non-main dex registration functions. +namespace test { + bool RegisterMainDexNatives(JNIEnv* env) { if (!RegisterNative_org_chromium_TestJni(env)) return false; @@ -106,4 +108,6 @@ return true; } +} // namespace test + #endif // HEADER_GUARD
diff --git a/base/android/jni_generator/testNativesRegistrations.golden b/base/android/jni_generator/testNativesRegistrations.golden index 8856e05f..b3b99745 100644 --- a/base/android/jni_generator/testNativesRegistrations.golden +++ b/base/android/jni_generator/testNativesRegistrations.golden
@@ -160,6 +160,8 @@ // Step 4: Main dex and non-main dex registration functions. +namespace test { + bool RegisterMainDexNatives(JNIEnv* env) { if (!RegisterNative_org_chromium_TestJni(env)) return false; @@ -172,4 +174,6 @@ return true; } +} // namespace test + #endif // HEADER_GUARD
diff --git a/base/files/file_enumerator_win.cc b/base/files/file_enumerator_win.cc index f96074c..6d8e326 100644 --- a/base/files/file_enumerator_win.cc +++ b/base/files/file_enumerator_win.cc
@@ -4,12 +4,12 @@ #include "base/files/file_enumerator.h" -#include <shlwapi.h> #include <stdint.h> #include <string.h> #include "base/logging.h" #include "base/threading/thread_restrictions.h" +#include "base/win/shlwapi.h" namespace base {
diff --git a/base/message_loop/message_loop_current.cc b/base/message_loop/message_loop_current.cc index e69b97e..ece6b92 100644 --- a/base/message_loop/message_loop_current.cc +++ b/base/message_loop/message_loop_current.cc
@@ -178,6 +178,18 @@ } #endif // defined(OS_ANDROID) +#if defined(OS_WIN) +void MessageLoopCurrentForUI::AddMessagePumpObserver( + MessagePumpForUI::Observer* observer) { + pump_->AddObserver(observer); +} + +void MessageLoopCurrentForUI::RemoveMessagePumpObserver( + MessagePumpForUI::Observer* observer) { + pump_->RemoveObserver(observer); +} +#endif // defined(OS_WIN) + #endif // !defined(OS_NACL) //------------------------------------------------------------------------------
diff --git a/base/message_loop/message_loop_current.h b/base/message_loop/message_loop_current.h index 2a2e761..d623cbc 100644 --- a/base/message_loop/message_loop_current.h +++ b/base/message_loop/message_loop_current.h
@@ -236,6 +236,11 @@ void Abort(); #endif +#if defined(OS_WIN) + void AddMessagePumpObserver(MessagePumpForUI::Observer* observer); + void RemoveMessagePumpObserver(MessagePumpForUI::Observer* observer); +#endif + private: MessageLoopCurrentForUI(MessageLoop* current, MessagePumpForUI* pump) : MessageLoopCurrent(current), pump_(pump) {
diff --git a/base/message_loop/message_pump_android.cc b/base/message_loop/message_pump_android.cc index 3fd5567e..1db7b3bf 100644 --- a/base/message_loop/message_pump_android.cc +++ b/base/message_loop/message_pump_android.cc
@@ -118,7 +118,18 @@ // Clear the fd. uint64_t value; int ret = read(delayed_fd_, &value, sizeof(value)); - DCHECK_GE(ret, 0); + + // TODO(mthiesse): Figure out how it's possible to hit EAGAIN here. + // According to http://man7.org/linux/man-pages/man2/timerfd_create.2.html + // EAGAIN only happens if no timer has expired. Also according to the man page + // poll only returns readable when a timer has expired. So this function will + // only be called when a timer has expired, but reading reveals no timer has + // expired... + // Quit() and ScheduleDelayedWork() are the only other functions that touch + // the timerfd, and they both run on the same thread as this callback, so + // there are no obvious timing or multi-threading related issues. + DPCHECK(ret >= 0 || errno == EAGAIN); + delayed_scheduled_time_ = base::TimeTicks(); base::TimeTicks next_delayed_work_time; @@ -168,7 +179,7 @@ // See http://man7.org/linux/man-pages/man2/eventfd.2.html uint64_t value = 0; int ret = read(non_delayed_fd_, &value, sizeof(value)); - DCHECK_GE(ret, 0); + DPCHECK(ret >= 0); // If we read a value > 1, it means we lost the race to clear the fd before a // new task was posted. This is okay, we can just re-schedule work. @@ -272,7 +283,7 @@ // EFD_SEMAPHORE. uint64_t value = 1; int ret = write(non_delayed_fd_, &value, sizeof(value)); - DCHECK_GE(ret, 0); + DPCHECK(ret >= 0); } void MessagePumpForUI::ScheduleDelayedWork(const TimeTicks& delayed_work_time) { @@ -294,7 +305,7 @@ ts.it_value.tv_nsec = nanos % TimeTicks::kNanosecondsPerSecond; int ret = timerfd_settime(delayed_fd_, TFD_TIMER_ABSTIME, &ts, nullptr); - DCHECK_GE(ret, 0); + DPCHECK(ret >= 0); } void MessagePumpForUI::QuitWhenIdle(base::OnceClosure callback) {
diff --git a/base/message_loop/message_pump_win.cc b/base/message_loop/message_pump_win.cc index c95f85a..bba71fa7 100644 --- a/base/message_loop/message_pump_win.cc +++ b/base/message_loop/message_pump_win.cc
@@ -125,6 +125,14 @@ enable_wm_quit_ = true; } +void MessagePumpForUI::AddObserver(Observer* observer) { + observers_.AddObserver(observer); +} + +void MessagePumpForUI::RemoveObserver(Observer* observer) { + observers_.RemoveObserver(observer); +} + //----------------------------------------------------------------------------- // MessagePumpForUI private: @@ -368,8 +376,12 @@ if (msg.message == kMsgHaveWork && msg.hwnd == message_window_.hwnd()) return ProcessPumpReplacementMessage(); + for (Observer& observer : observers_) + observer.WillDispatchMSG(msg); TranslateMessage(&msg); DispatchMessage(&msg); + for (Observer& observer : observers_) + observer.DidDispatchMSG(msg); return true; }
diff --git a/base/message_loop/message_pump_win.h b/base/message_loop/message_pump_win.h index 900fcc0..0eaeb52 100644 --- a/base/message_loop/message_pump_win.h +++ b/base/message_loop/message_pump_win.h
@@ -12,6 +12,7 @@ #include "base/base_export.h" #include "base/message_loop/message_pump.h" +#include "base/observer_list.h" #include "base/time/time.h" #include "base/win/message_window.h" #include "base/win/scoped_handle.h" @@ -122,6 +123,17 @@ // Make the MessagePumpForUI respond to WM_QUIT messages. void EnableWmQuit(); + // An observer interface to give the scheduler an opportunity to log + // information about MSGs before and after they are dispatched. + class BASE_EXPORT Observer { + public: + virtual void WillDispatchMSG(const MSG& msg) = 0; + virtual void DidDispatchMSG(const MSG& msg) = 0; + }; + + void AddObserver(Observer* observer); + void RemoveObserver(Observer* obseerver); + private: bool MessageCallback( UINT message, WPARAM wparam, LPARAM lparam, LRESULT* result); @@ -139,6 +151,8 @@ // Whether MessagePumpForUI responds to WM_QUIT messages or not. // TODO(thestig): Remove when the Cloud Print Service goes away. bool enable_wm_quit_ = false; + + ObserverList<Observer> observers_; }; //-----------------------------------------------------------------------------
diff --git a/base/process/memory_linux.cc b/base/process/memory_linux.cc index 2e505f7c..9617455 100644 --- a/base/process/memory_linux.cc +++ b/base/process/memory_linux.cc
@@ -15,6 +15,7 @@ #include "base/logging.h" #include "base/process/internal_linux.h" #include "base/strings/string_number_conversions.h" +#include "base/threading/thread_restrictions.h" #include "build/build_config.h" #if defined(USE_TCMALLOC) @@ -65,15 +66,30 @@ #endif } -// NOTE: This is not the only version of this function in the source: -// the setuid sandbox (in process_util_linux.c, in the sandbox source) -// also has its own C version. -bool AdjustOOMScore(ProcessId process, int score) { +// ScopedAllowBlocking() has private constructor and it can only be used in +// friend classes/functions. Declaring a class is easier in this situation to +// avoid adding more dependency to thread_restrictions.h because of the +// parameter used in AdjustOOMScore(). Specifically, ProcessId is a typedef +// and we'll need to include another header file in thread_restrictions.h +// without the class. +class AdjustOOMScoreHelper { + public: + static bool AdjustOOMScore(ProcessId process, int score); + + private: + DISALLOW_IMPLICIT_CONSTRUCTORS(AdjustOOMScoreHelper); +}; + +// static. +bool AdjustOOMScoreHelper::AdjustOOMScore(ProcessId process, int score) { if (score < 0 || score > kMaxOomScore) return false; FilePath oom_path(internal::GetProcPidDir(process)); + // Temporarily allowing blocking since oom paths are pseudo-filesystem paths. + base::ScopedAllowBlocking allow_blocking; + // Attempt to write the newer oom_score_adj file first. FilePath oom_file = oom_path.AppendASCII("oom_score_adj"); if (PathExists(oom_file)) { @@ -102,6 +118,13 @@ return false; } +// NOTE: This is not the only version of this function in the source: +// the setuid sandbox (in process_util_linux.c, in the sandbox source) +// also has its own C version. +bool AdjustOOMScore(ProcessId process, int score) { + return AdjustOOMScoreHelper::AdjustOOMScore(process, score); +} + bool UncheckedMalloc(size_t size, void** result) { #if BUILDFLAG(USE_ALLOCATOR_SHIM) *result = allocator::UncheckedAlloc(size);
diff --git a/base/strings/strcat.h b/base/strings/strcat.h index 44c6211..d3fdf4f5 100644 --- a/base/strings/strcat.h +++ b/base/strings/strcat.h
@@ -14,8 +14,9 @@ #include "build/build_config.h" #if defined(OS_WIN) -// To resolve a conflict with Win32 API StrCat macro. -#include "base/win/windows_types.h" +// Guard against conflict with Win32 API StrCat macro: +// check StrCat wasn't and will not be redefined. +#define StrCat StrCat #endif namespace base {
diff --git a/base/task/task_scheduler/task_scheduler.h b/base/task/task_scheduler/task_scheduler.h index 895e36b..d739ee5f 100644 --- a/base/task/task_scheduler/task_scheduler.h +++ b/base/task/task_scheduler/task_scheduler.h
@@ -222,7 +222,7 @@ // } // instead make sure to SetInstance() early in one determinstic place in the // process' initialization phase. - // In doubt, consult with //base/task_scheduler/OWNERS. + // In doubt, consult with //base/task/task_scheduler/OWNERS. static TaskScheduler* GetInstance(); private:
diff --git a/base/test/scoped_mock_clock_override.h b/base/test/scoped_mock_clock_override.h index c980502..2c3a577 100644 --- a/base/test/scoped_mock_clock_override.h +++ b/base/test/scoped_mock_clock_override.h
@@ -5,6 +5,8 @@ #ifndef BASE_TEST_SCOPED_MOCK_CLOCK_OVERRIDE_H_ #define BASE_TEST_SCOPED_MOCK_CLOCK_OVERRIDE_H_ +#include <memory> + #include "base/macros.h" #include "base/time/time.h" #include "base/time/time_override.h"
diff --git a/base/test/test_file_util_win.cc b/base/test/test_file_util_win.cc index da596bb..67727b6 100644 --- a/base/test/test_file_util_win.cc +++ b/base/test/test_file_util_win.cc
@@ -5,7 +5,6 @@ #include "base/test/test_file_util.h" #include <aclapi.h> -#include <shlwapi.h> #include <stddef.h> #include <wchar.h> #include <windows.h> @@ -20,6 +19,7 @@ #include "base/strings/string_split.h" #include "base/threading/platform_thread.h" #include "base/win/scoped_handle.h" +#include "base/win/shlwapi.h" namespace base {
diff --git a/base/threading/thread_restrictions.h b/base/threading/thread_restrictions.h index c1159d47..d1632b4e 100644 --- a/base/threading/thread_restrictions.h +++ b/base/threading/thread_restrictions.h
@@ -149,6 +149,7 @@ class TaskTracker; } +class AdjustOOMScoreHelper; class GetAppOutputScopedAllowBaseSyncPrimitives; class SimpleThread; class StackSamplingProfiler; @@ -250,6 +251,7 @@ // This can only be instantiated by friends. Use ScopedAllowBlockingForTesting // in unit tests to avoid the friend requirement. FRIEND_TEST_ALL_PREFIXES(ThreadRestrictionsTest, ScopedAllowBlocking); + friend class AdjustOOMScoreHelper; friend class android_webview::ScopedAllowInitGLBindings; friend class audio::OutputDevice; friend class content::BrowserProcessSubThread;
diff --git a/base/win/atl.h b/base/win/atl.h new file mode 100644 index 0000000..6f6668f2 --- /dev/null +++ b/base/win/atl.h
@@ -0,0 +1,28 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#ifndef BASE_WIN_ATL_H_ +#define BASE_WIN_ATL_H_ + +// Check no prior poisonous defines were made. +#include "base/win/windows_defines.inc" +// Undefine before windows header will make the poisonous defines +#include "base/win/windows_undefines.inc" + +#ifndef _ATL_NO_EXCEPTIONS +#define _ATL_NO_EXCEPTIONS +#endif + +#include <atlbase.h> +#include <atlcom.h> +#include <atlctl.h> +#include <atlhost.h> +#include <atlsecurity.h> +#include <atlwin.h> + +// Undefine the poisonous defines +#include "base/win/windows_undefines.inc" +// Check no poisonous defines follow this include +#include "base/win/windows_defines.inc" + +#endif // BASE_WIN_ATL_H_
diff --git a/base/win/propvarutil.h b/base/win/propvarutil.h new file mode 100644 index 0000000..d95c5ad1 --- /dev/null +++ b/base/win/propvarutil.h
@@ -0,0 +1,19 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#ifndef BASE_WIN_PROPVARUTIL_H_ +#define BASE_WIN_PROPVARUTIL_H_ + +// Check no prior poisonous defines were made. +#include "base/win/windows_defines.inc" +// Undefine before windows header will make the poisonous defines +#include "base/win/windows_undefines.inc" + +#include <propvarutil.h> + +// Undefine the poisonous defines +#include "base/win/windows_undefines.inc" +// Check no poisonous defines follow this include +#include "base/win/windows_defines.inc" + +#endif // BASE_WIN_PROPVARUTIL_H_
diff --git a/base/win/registry.cc b/base/win/registry.cc index 2fe53cf..259df12 100644 --- a/base/win/registry.cc +++ b/base/win/registry.cc
@@ -4,7 +4,6 @@ #include "base/win/registry.h" -#include <shlwapi.h> #include <stddef.h> #include <algorithm> @@ -12,6 +11,7 @@ #include "base/macros.h" #include "base/strings/string_util.h" #include "base/threading/thread_restrictions.h" +#include "base/win/shlwapi.h" #include "base/win/windows_version.h" namespace base {
diff --git a/base/win/shlwapi.h b/base/win/shlwapi.h new file mode 100644 index 0000000..b60353c --- /dev/null +++ b/base/win/shlwapi.h
@@ -0,0 +1,19 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#ifndef BASE_WIN_SHLWAPI_H_ +#define BASE_WIN_SHLWAPI_H_ + +// Check no prior poisonous defines were made. +#include "base/win/windows_defines.inc" +// Undefine before windows header will make the poisonous defines +#include "base/win/windows_undefines.inc" + +#include <shlwapi.h> + +// Undefine the poisonous defines +#include "base/win/windows_undefines.inc" +// Check no poisonous defines follow this include +#include "base/win/windows_defines.inc" + +#endif // BASE_WIN_SHLWAPI_H_
diff --git a/base/win/sphelper.h b/base/win/sphelper.h new file mode 100644 index 0000000..38a547f --- /dev/null +++ b/base/win/sphelper.h
@@ -0,0 +1,19 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#ifndef BASE_WIN_SPHELPER_H_ +#define BASE_WIN_SPHELPER_H_ + +// Check no prior poisonous defines were made. +#include "base/win/windows_defines.inc" +// Undefine before windows header will make the poisonous defines +#include "base/win/windows_undefines.inc" + +#include <sphelper.h> + +// Undefine the poisonous defines +#include "base/win/windows_undefines.inc" +// Check no poisonous defines follow this include +#include "base/win/windows_defines.inc" + +#endif // BASE_WIN_SPHELPER_H_
diff --git a/base/win/win_util.cc b/base/win/win_util.cc index 01b7544..d33f244 100644 --- a/base/win/win_util.cc +++ b/base/win/win_util.cc
@@ -14,13 +14,11 @@ #include <mdmregistration.h> #include <objbase.h> #include <propkey.h> -#include <propvarutil.h> #include <psapi.h> #include <roapi.h> #include <sddl.h> #include <setupapi.h> #include <shellscalingapi.h> -#include <shlwapi.h> #include <signal.h> #include <stddef.h> #include <stdlib.h> @@ -45,11 +43,13 @@ #include "base/strings/utf_string_conversions.h" #include "base/threading/thread_restrictions.h" #include "base/win/core_winrt_util.h" +#include "base/win/propvarutil.h" #include "base/win/registry.h" #include "base/win/scoped_co_mem.h" #include "base/win/scoped_handle.h" #include "base/win/scoped_hstring.h" #include "base/win/scoped_propvariant.h" +#include "base/win/shlwapi.h" #include "base/win/win_client_metrics.h" #include "base/win/windows_version.h"
diff --git a/base/win/windows_defines.inc b/base/win/windows_defines.inc new file mode 100644 index 0000000..0f54242 --- /dev/null +++ b/base/win/windows_defines.inc
@@ -0,0 +1,12 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file verifies no poisonous defines from windows headers are present. +// If you add more macros here, add them to windows_undefines.inc too + +// This will generate an error if it was defined to something different, or +// if it is defined to something different after. +// Preprocessor will also nicely point to header that defined it differently. +#define StrCat StrCat +
diff --git a/base/win/windows_types.h b/base/win/windows_types.h index 2a86195f..8060f03 100644 --- a/base/win/windows_types.h +++ b/base/win/windows_types.h
@@ -248,6 +248,5 @@ #define SendMessageCallback SendMessageCallbackW #define SetCurrentDirectory SetCurrentDirectoryW #define StartService StartServiceW -#define StrCat StrCatW #endif // BASE_WIN_WINDOWS_TYPES_H
diff --git a/base/win/windows_undefines.inc b/base/win/windows_undefines.inc new file mode 100644 index 0000000..f1cb9c0 --- /dev/null +++ b/base/win/windows_undefines.inc
@@ -0,0 +1,9 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file undefines poisonous defines from windows headers. +// If you add more macros here, add them to windows_defines.inc too + +#undef StrCat +
diff --git a/build/android/gradle/root.jinja b/build/android/gradle/root.jinja index bf76bde..ff26840 100644 --- a/build/android/gradle/root.jinja +++ b/build/android/gradle/root.jinja
@@ -10,7 +10,7 @@ } dependencies { {% if channel == 'canary' %} - classpath "com.android.tools.build:gradle:3.3.0-alpha03" + classpath "com.android.tools.build:gradle:3.3.0-alpha05" {% elif channel == 'beta' %} classpath "com.android.tools.build:gradle:3.1.0-beta4" {% else %}
diff --git a/build/android/gyp/proguard.py b/build/android/gyp/proguard.py index 5a61968..fdc7f092 100755 --- a/build/android/gyp/proguard.py +++ b/build/android/gyp/proguard.py
@@ -92,7 +92,10 @@ proguard.config_exclusions(options.proguard_config_exclusions) proguard.outjar(options.output_path) - classpath = list(set(options.classpath)) + # If a jar is part of input no need to include it as library jar. + classpath = [ + p for p in set(options.classpath) if p not in options.input_paths + ] proguard.libraryjars(classpath) proguard.verbose(options.verbose) if not options.enable_dangerous_optimizations:
diff --git a/build/android/gyp/write_build_config.py b/build/android/gyp/write_build_config.py index d4339b0..761dc18 100755 --- a/build/android/gyp/write_build_config.py +++ b/build/android/gyp/write_build_config.py
@@ -1012,7 +1012,10 @@ else: gradle['dependent_java_projects'].append(c['path']) - if is_apk_or_module_target: + # TODO(tiborg): Remove creation of JNI info for type group and java_library + # once we can generate the JNI registration based on APK / module targets as + # opposed to groups and libraries. + if is_apk_or_module_target or options.type in ('group', 'java_library'): config['jni'] = {} all_java_sources = [c['java_sources_file'] for c in all_library_deps if 'java_sources_file' in c] @@ -1168,23 +1171,28 @@ # Deps to add to the compile-time classpath (but not the runtime classpath). # TODO(agrieve): Might be less confusing to fold these into bootclasspath. - extra_jars = [c['unprocessed_jar_path'] + javac_extra_jars = [c['unprocessed_jar_path'] + for c in classpath_deps.Direct('java_library')] + extra_jars = [c['jar_path'] for c in classpath_deps.Direct('java_library')] if options.extra_classpath_jars: # These are .jars to add to javac classpath but not to runtime classpath. + javac_extra_jars.extend( + build_utils.ParseGnList(options.extra_classpath_jars)) extra_jars.extend(build_utils.ParseGnList(options.extra_classpath_jars)) - extra_jars = [p for p in extra_jars if p not in javac_classpath] - javac_classpath.extend(extra_jars) - javac_interface_classpath.extend(extra_jars) - javac_full_interface_classpath.extend( - p for p in extra_jars if p not in javac_full_classpath) - javac_full_classpath.extend( - p for p in extra_jars if p not in javac_full_classpath) if extra_jars: deps_info['extra_classpath_jars'] = extra_jars + javac_extra_jars = [p for p in javac_extra_jars if p not in javac_classpath] + javac_classpath.extend(javac_extra_jars) + javac_interface_classpath.extend(javac_extra_jars) + javac_full_interface_classpath.extend( + p for p in javac_extra_jars if p not in javac_full_classpath) + javac_full_classpath.extend( + p for p in javac_extra_jars if p not in javac_full_classpath) + if is_java_target or options.type == 'android_app_bundle': # The classpath to use to run this target (or as an input to ProGuard). java_full_classpath = []
diff --git a/build/check_gn_headers_whitelist.txt b/build/check_gn_headers_whitelist.txt index b655bfd..282f7e9 100644 --- a/build/check_gn_headers_whitelist.txt +++ b/build/check_gn_headers_whitelist.txt
@@ -344,7 +344,6 @@ third_party/yasm/source/config/linux/config.h third_party/yasm/source/config/linux/libyasm-stdint.h third_party/zlib/contrib/minizip/crypt.h -tools/battor_agent/battor_protocol_types.h tools/gn/ordered_set.h tools/ipc_fuzzer/message_lib/all_message_null_macros.h ui/app_list/app_list_export.h
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni index 63f5e24..74be70e 100644 --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni
@@ -396,7 +396,8 @@ # target: The Apk target to generate registrations for. # output: Path to the generated .h file. # exception_files: List of .java files that should be ignored when searching - # for native methods. (optional) + # for native methods. (optional) + # namespace: Registration functions will be wrapped into this. (optional) # # Example # generate_jni_registration("chrome_jni_registration") { @@ -413,9 +414,6 @@ get_label_info(invoker.target, "name") + ".build_config" _rebased_build_config = rebase_path(_build_config, root_build_dir) - _rebase_exception_java_files = - rebase_path(invoker.exception_files, root_build_dir) - script = "//base/android/jni_generator/jni_registration_generator.py" deps = [ "${invoker.target}__build_config", @@ -433,10 +431,17 @@ "--sources_files=@FileArg($_rebased_build_config:jni:all_source)", "--output", rebase_path(invoker.output, root_build_dir), - "--no_register_java=$_rebase_exception_java_files", "--depfile", rebase_path(depfile, root_build_dir), ] + if (defined(invoker.exception_files)) { + _rebase_exception_java_files = + rebase_path(invoker.exception_files, root_build_dir) + args += [ "--no_register_java=$_rebase_exception_java_files" ] + } + if (defined(invoker.namespace)) { + args += [ "--namespace=${invoker.namespace}" ] + } } } @@ -2595,7 +2600,7 @@ ":$_merge_manifest_target", ":$_build_config_target", ":$_compile_resources_target", - ] + _all_native_libs_deps + ] + _all_native_libs_deps + _secondary_abi_native_libs_deps } _write_installer_json_rule_name = "${_template_name}__incremental_json"
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index 7cb2171..b408ab7 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn
@@ -168,7 +168,7 @@ } if (use_debug_fission == "default") { - use_debug_fission = is_debug && !is_android && !is_win && + use_debug_fission = is_debug && !is_android && !is_fuchsia && !is_win && (use_gold || use_lld) && cc_wrapper == "" }
diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler.gni index c3845eb..4a6fd98 100644 --- a/build/config/compiler/compiler.gni +++ b/build/config/compiler/compiler.gni
@@ -83,7 +83,7 @@ # Linux & Mac favor speed over size. # TODO(brettw) it's weird that Mac and desktop Linux are different. We should # explore favoring size over speed in this case as well. -optimize_for_size = is_android || is_ios +optimize_for_size = is_android || is_ios || is_fuchsia declare_args() { # Whether we should consider the profile we're using to be accurate. Accurate
diff --git a/build/fuchsia/sdk.sha1 b/build/fuchsia/sdk.sha1 index 604a44c..7c0879fc 100644 --- a/build/fuchsia/sdk.sha1 +++ b/build/fuchsia/sdk.sha1
@@ -1 +1 @@ -f209e0ff12286a37573f5ba2695f083470613d0e \ No newline at end of file +fcba89bea65da4805154879bf1a01e02e89d1f5f \ No newline at end of file
diff --git a/cc/layers/texture_layer_impl.h b/cc/layers/texture_layer_impl.h index 8a75ebcca..51da8cd 100644 --- a/cc/layers/texture_layer_impl.h +++ b/cc/layers/texture_layer_impl.h
@@ -64,7 +64,7 @@ std::unique_ptr<viz::SingleReleaseCallback> release_callback); // These methods notify the display compositor, through the - // CompositorFrameSink, of the existance of a SharedBitmapId and its + // CompositorFrameSink, of the existence of a SharedBitmapId and its // mapping to a SharedMemory in |bitmap|. Then this SharedBitmapId can be used // in TransferableResources inserted on the layer while it is registered. If // the layer is destroyed, the SharedBitmapId will be unregistered
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc index 99aa573..2d19d7a 100644 --- a/cc/test/layer_tree_test.cc +++ b/cc/test/layer_tree_test.cc
@@ -4,6 +4,7 @@ #include "cc/test/layer_tree_test.h" +#include "base/cfi_buildflags.h" #include "base/command_line.h" #include "base/location.h" #include "base/memory/ptr_util.h" @@ -626,12 +627,16 @@ #elif defined(MEMORY_SANITIZER) // MSAN is slower than uninstrumented code timeout_seconds_ = 20; +#elif BUILDFLAG(CFI_CAST_CHECK) || BUILDFLAG(CFI_ICALL_CHECK) || \ + BUILDFLAG(CFI_ENFORCEMENT_DIAGNOSTIC) || BUILDFLAG(CFI_ENFORCEMENT_TRAP) + // CFI is slow as well. + timeout_seconds_ = 20; #elif defined(ADDRESS_SANITIZER) || defined(_DEBUG) || defined(USE_OZONE) // ASAN and Debug builds are slower than release builds, as expected // Ozone builds also go through a slower path than regular Linux builds - timeout_seconds_ = 12; + timeout_seconds_ = 15; #else - timeout_seconds_ = 6; + timeout_seconds_ = 10; #endif if (command_line->HasSwitch(switches::kCCLayerTreeTestLongTimeout)) timeout_seconds_ = 5 * 60;
diff --git a/cc/tiles/gpu_image_decode_cache.cc b/cc/tiles/gpu_image_decode_cache.cc index 1bddac03..bac7cab 100644 --- a/cc/tiles/gpu_image_decode_cache.cc +++ b/cc/tiles/gpu_image_decode_cache.cc
@@ -234,21 +234,6 @@ return scaled_pixmap.readPixels(pixmap); } -// Returns the GL texture ID backing the given SkImage. -GrGLuint GlIdFromSkImage(SkImage* image) { - DCHECK(image->isTextureBacked()); - GrBackendTexture backend_texture = - image->getBackendTexture(true /* flushPendingGrContextIO */); - if (!backend_texture.isValid()) - return 0; - - GrGLTextureInfo info; - if (!backend_texture.getGLTextureInfo(&info)) - return 0; - - return info.fID; -} - // Takes ownership of the backing texture of an SkImage. This allows us to // delete this texture under Skia (via discardable). sk_sp<SkImage> TakeOwnershipOfSkImageBacking(GrContext* context, @@ -287,7 +272,8 @@ if (image_owned) { // Delete |original_image_owned| as Skia will not clean it up. We are // holding the context lock here, so we can delete immediately. - uint32_t texture_id = GlIdFromSkImage(image_owned.get()); + uint32_t texture_id = + GpuImageDecodeCache::GlIdFromSkImage(image_owned.get()); context->ContextGL()->DeleteTextures(1, &texture_id); } } @@ -669,6 +655,21 @@ DCHECK_GT(upload.ref_count, 0u); } +// static +GrGLuint GpuImageDecodeCache::GlIdFromSkImage(const SkImage* image) { + DCHECK(image->isTextureBacked()); + GrBackendTexture backend_texture = + image->getBackendTexture(true /* flushPendingGrContextIO */); + if (!backend_texture.isValid()) + return 0; + + GrGLTextureInfo info; + if (!backend_texture.getGLTextureInfo(&info)) + return 0; + + return info.fID; +} + GpuImageDecodeCache::GpuImageDecodeCache(viz::RasterContextProvider* context, bool use_transfer_cache, SkColorType color_type, @@ -1732,6 +1733,12 @@ ids_pending_unlock_.push_back(*image_data->upload.transfer_cache_id()); } image_data->upload.OnUnlock(); + + // If we were holding onto an unmipped image for defering deletion, do it now + // it is guarenteed to have no-refs. + auto unmipped_image = image_data->upload.take_unmipped_image(); + if (unmipped_image) + images_pending_deletion_.push_back(std::move(unmipped_image)); } // We always run pending operations in the following order: @@ -2020,8 +2027,10 @@ if (!image_with_mips) return; - // We *must* get a new SkImage, or we will have lifetime issues. - DCHECK_NE(image_with_mips.get(), previous_image.get()); + // No need to do anything if mipping this image results in the same texture. + // Deleting it below will result in lifetime issues. + if (GlIdFromSkImage(image_with_mips.get()) == image_data->upload.gl_id()) + return; // Skia owns our new image, take ownership. sk_sp<SkImage> image_with_mips_owned = TakeOwnershipOfSkImageBacking( @@ -2031,8 +2040,11 @@ if (!image_with_mips_owned) return; - // Delete the previous image and set the new one to the cache. - images_pending_deletion_.push_back(image_data->upload.image()); + // The previous image might be in the in-use cache, potentially held + // externally. We must defer deleting it until the entry is unlocked. + image_data->upload.set_unmipped_image(image_data->upload.image()); + + // Set the new image on the cache. image_data->upload.Reset(); image_data->upload.SetImage(std::move(image_with_mips_owned)); context_->ContextGL()->InitializeDiscardableTextureCHROMIUM(
diff --git a/cc/tiles/gpu_image_decode_cache.h b/cc/tiles/gpu_image_decode_cache.h index eacec6e..54cffb8 100644 --- a/cc/tiles/gpu_image_decode_cache.h +++ b/cc/tiles/gpu_image_decode_cache.h
@@ -110,6 +110,9 @@ int max_texture_size); ~GpuImageDecodeCache() override; + // Returns the GL texture ID backing the given SkImage. + static GrGLuint GlIdFromSkImage(const SkImage* image); + // ImageDecodeCache overrides. // Finds the existing uploaded image for the provided DrawImage. Creates an @@ -272,6 +275,14 @@ return transfer_cache_id_; } + void set_unmipped_image(sk_sp<SkImage> image) { + unmipped_image_ = std::move(image); + } + sk_sp<SkImage> take_unmipped_image() { + DCHECK(!is_locked_); + return std::move(unmipped_image_); + } + private: // Used for internal DCHECKs only. enum class Mode { @@ -291,6 +302,9 @@ // Used if |mode_| == kTransferCache. base::Optional<uint32_t> transfer_cache_id_; + + // The original un-mipped image, retained until it can be safely deleted. + sk_sp<SkImage> unmipped_image_; }; struct ImageData : public base::RefCountedThreadSafe<ImageData> {
diff --git a/cc/tiles/gpu_image_decode_cache_unittest.cc b/cc/tiles/gpu_image_decode_cache_unittest.cc index da89ce2d..e61fa35 100644 --- a/cc/tiles/gpu_image_decode_cache_unittest.cc +++ b/cc/tiles/gpu_image_decode_cache_unittest.cc
@@ -19,6 +19,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "third_party/skia/include/core/SkImageGenerator.h" #include "third_party/skia/include/core/SkRefCnt.h" +#include "third_party/skia/include/gpu/GrBackendSurface.h" #include "third_party/skia/include/gpu/GrContext.h" namespace cc { @@ -61,6 +62,16 @@ cached_textures_limit_ = limit; } + void ExpectLocked(GLuint texture_id) { + EXPECT_TRUE(textures_.end() != textures_.find(texture_id)); + + // Any value > kHandleLockedStart represents a locked texture. As we + // increment this value with each lock, we need the entire range and can't + // add additional values > kHandleLockedStart in the future. + EXPECT_GE(textures_[texture_id], kHandleLockedStart); + EXPECT_LE(textures_[texture_id], kHandleLockedEnd); + } + private: void EnforceLimit() { for (auto it = textures_.begin(); it != textures_.end(); ++it) { @@ -75,16 +86,6 @@ } } - void ExpectLocked(GLuint texture_id) { - EXPECT_TRUE(textures_.end() != textures_.find(texture_id)); - - // Any value > kHandleLockedStart represents a locked texture. As we - // increment this value with each lock, we need the entire range and can't - // add additional values > kHandleLockedStart in the future. - EXPECT_GE(textures_[texture_id], kHandleLockedStart); - EXPECT_LE(textures_[texture_id], kHandleLockedEnd); - } - const int32_t kHandleDeleted = 0; const int32_t kHandleUnlocked = 1; const int32_t kHandleLockedStart = 2; @@ -2617,6 +2618,103 @@ } } +TEST_P(GpuImageDecodeCacheTest, MipsAddedWhileOriginalInUse) { +#if defined(OS_WIN) + // TODO(ericrk): Mips are temporarily disabled to investigate a memory + // regression on Windows. https://crbug.com/867468 + return; +#endif // defined(OS_WIN) + + auto cache = CreateCache(); + bool is_decomposable = true; + auto filter_quality = kMedium_SkFilterQuality; + + PaintImage image = CreateDiscardablePaintImage(gfx::Size(100, 100)); + + struct Decode { + DrawImage image; + DecodedDrawImage decoded_image; + }; + std::vector<Decode> images_to_unlock; + + // Create an image with no scaling. It will not have mips. + { + DrawImage draw_image( + image, SkIRect::MakeWH(image.width(), image.height()), filter_quality, + CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), + PaintImage::kDefaultFrameIndex, DefaultColorSpace()); + ImageDecodeCache::TaskResult result = cache->GetTaskForImageAndRef( + draw_image, ImageDecodeCache::TracingInfo()); + EXPECT_TRUE(result.need_unref); + EXPECT_TRUE(result.task); + + TestTileTaskRunner::ProcessTask(result.task->dependencies()[0].get()); + TestTileTaskRunner::ProcessTask(result.task.get()); + + // Must hold context lock before calling GetDecodedImageForDraw / + // DrawWithImageFinished. + viz::ContextProvider::ScopedContextLock context_lock(context_provider()); + DecodedDrawImage decoded_draw_image = + EnsureImageBacked(cache->GetDecodedImageForDraw(draw_image)); + EXPECT_TRUE(decoded_draw_image.image()); + EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); + + // No mips should be generated + sk_sp<SkImage> image_with_mips = + decoded_draw_image.image()->makeTextureImage( + context_provider()->GrContext(), nullptr, GrMipMapped::kYes); + EXPECT_NE(image_with_mips, decoded_draw_image.image()); + + images_to_unlock.push_back({draw_image, decoded_draw_image}); + } + + // Second decode with mips. + { + DrawImage draw_image( + image, SkIRect::MakeWH(image.width(), image.height()), filter_quality, + CreateMatrix(SkSize::Make(0.6f, 0.6f), is_decomposable), + PaintImage::kDefaultFrameIndex, DefaultColorSpace()); + ImageDecodeCache::TaskResult result = cache->GetTaskForImageAndRef( + draw_image, ImageDecodeCache::TracingInfo()); + EXPECT_TRUE(result.need_unref); + EXPECT_FALSE(result.task); + + // Must hold context lock before calling GetDecodedImageForDraw / + // DrawWithImageFinished. + viz::ContextProvider::ScopedContextLock context_lock(context_provider()); + DecodedDrawImage decoded_draw_image = + EnsureImageBacked(cache->GetDecodedImageForDraw(draw_image)); + + EXPECT_TRUE(decoded_draw_image.image()); + EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); + + // Mips should be generated + sk_sp<SkImage> image_with_mips = + decoded_draw_image.image()->makeTextureImage( + context_provider()->GrContext(), nullptr, GrMipMapped::kYes); + EXPECT_EQ(image_with_mips, decoded_draw_image.image()); + + images_to_unlock.push_back({draw_image, decoded_draw_image}); + } + + // Reduce cache usage to make sure anything marked for deletion is actually + // deleted. + cache->ReduceCacheUsage(); + + { + // All images which are currently ref-ed must have locked textures. + viz::ContextProvider::ScopedContextLock context_lock(context_provider()); + for (const auto& decode : images_to_unlock) { + if (!use_transfer_cache_) { + discardable_manager_.ExpectLocked(GpuImageDecodeCache::GlIdFromSkImage( + decode.decoded_image.image().get())); + } + cache->DrawWithImageFinished(decode.image, decode.decoded_image); + cache->UnrefImage(decode.image); + } + } +} + INSTANTIATE_TEST_CASE_P( GpuImageDecodeCacheTests, GpuImageDecodeCacheTest,
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc index 538ae87..10f3e67 100644 --- a/cc/trees/layer_tree_host_impl.cc +++ b/cc/trees/layer_tree_host_impl.cc
@@ -5204,8 +5204,11 @@ void LayerTreeHostImpl::EvictAllUIResources() { if (ui_resource_map_.empty()) return; - ClearUIResources(); - + while (!ui_resource_map_.empty()) { + UIResourceId uid = ui_resource_map_.begin()->first; + DeleteUIResource(uid); + evicted_ui_resources_.insert(uid); + } client_->SetNeedsCommitOnImplThread(); client_->OnCanDrawStateChanged(CanDraw()); client_->RenewTreePriority();
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h index df5170d..8518f7b 100644 --- a/cc/trees/layer_tree_host_impl.h +++ b/cc/trees/layer_tree_host_impl.h
@@ -598,6 +598,8 @@ const UIResourceBitmap& bitmap); // Deletes a UI resource. May safely be called more than once. virtual void DeleteUIResource(UIResourceId uid); + // Evict all UI resources. This differs from ClearUIResources in that this + // will not immediately delete the resources' backing textures. void EvictAllUIResources(); bool EvictedUIResourcesExist() const;
diff --git a/cc/trees/layer_tree_settings.h b/cc/trees/layer_tree_settings.h index 736df815..e1240350 100644 --- a/cc/trees/layer_tree_settings.h +++ b/cc/trees/layer_tree_settings.h
@@ -145,7 +145,7 @@ // Whether to use edge anti-aliasing for all layer types that supports it. bool enable_edge_anti_aliasing = true; - // Whether to request presentation time regardless if existance of + // Whether to request presentation time regardless if existence of // presentation time callbacks. bool always_request_presentation_time = false;
diff --git a/chrome/VERSION b/chrome/VERSION index 50df86e5..801ca01 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=70 MINOR=0 -BUILD=3519 +BUILD=3522 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 87ea2a89..be02df0f 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -348,7 +348,6 @@ srcjar_deps += feed_srcjar_deps if (enable_vr) { - java_files += chrome_vr_java_sources deps += [ "//device/vr:java", "//third_party/gvr-android-keyboard:kb_java", @@ -681,6 +680,7 @@ "//base:base_java_test_support", "//chrome/android:app_hooks_java", "//chrome/android:chrome_java", + "//chrome/browser/android/vr:java", "//chrome/test/android:chrome_java_test_support", "//components/policy/android:policy_java", "//content/public/android:content_java", @@ -930,6 +930,11 @@ deps = [ ":chrome_jni_registration($default_toolchain)", ] + if (enable_vr) { + sources += [ "../browser/android/vr/register_jni.cc" ] + deps += + [ "//chrome/browser/android/vr:jni_registration($default_toolchain)" ] + } } chrome_shared_library("libchromefortest") { @@ -946,6 +951,11 @@ "//components/minidump_uploader", "//content/public/test/android:content_native_test_support", ] + if (enable_vr) { + sources += [ "../browser/android/vr/register_jni.cc" ] + deps += + [ "//chrome/browser/android/vr:jni_registration($default_toolchain)" ] + } } # Ensure that .pak files are built only once (build them in the default @@ -953,21 +963,21 @@ # is generated from Java code so it just needs to be generated once. if (current_toolchain == default_toolchain) { generate_jni_registration("chrome_jni_registration") { - target = ":chrome_public_apk" + target = ":chrome_public_base_module_java" output = "$root_gen_dir/chrome/browser/android/${target_name}.h" exception_files = jni_exception_files } generate_jni_registration("chrome_jni_for_test_registration") { testonly = true - target = ":chrome_public_apk_for_test" + target = ":chrome_public_base_module_java_for_test" output = "$root_gen_dir/chrome/browser/android/${target_name}.h" exception_files = jni_exception_files } generate_jni_registration("chrome_sync_shell_jni_registration") { testonly = true - target = ":chrome_sync_shell_apk" + target = ":chrome_sync_shell_java" output = "$root_gen_dir/chrome/browser/android/${target_name}.h" exception_files = jni_exception_files } @@ -1110,6 +1120,9 @@ sources = [ "../browser/android/monochrome_entry_point.cc", ] + if (enable_vr) { + sources += [ "../browser/android/vr/register_jni_monochrome.cc" ] + } deps = [ "//android_webview:common", "//chrome:chrome_android_core", @@ -1155,17 +1168,63 @@ if (chromium_linker_supported && use_lld) { configs += [ "//build/config/android:lld_pack_relocations" ] } + if (enable_vr) { + sources += [ "../browser/android/vr/register_jni.cc" ] + deps += + [ "//chrome/browser/android/vr:jni_registration($default_toolchain)" ] + } +} + +# Java libraries that go into each public chrome APK and base module. The chrome +# JNI registration is generated based on this target. +# TODO(tiborg): Remove the following three groups once we have a APK / module +# target that contain exactly the grouped java libraries. +java_group("chrome_public_base_module_java") { + deps = [ + ":app_hooks_java", + ":chrome_java", + ] +} + +# Similar to chrome_public_base_module_java but for Java libraries that go into +# the public chrome test APK. +java_group("chrome_public_base_module_java_for_test") { + testonly = true + deps = [ + ":browser_java_test_support", + ":chrome_public_base_module_java", + "//chrome/browser/android/metrics:ukm_utils_java", + "//components/heap_profiling:heap_profiling_java_test_support", + "//components/minidump_uploader:minidump_uploader_java", + "//content/public/test/android:content_java_test_support", + "//third_party/android_tools:android_test_mock_java", + ] +} + +# Similar to chrome_public_base_module_java but for Java libraries that go into +# the chrome sync shell APK. +android_library("chrome_sync_shell_java") { + # This exists here rather than in chrome_sync_shell_test_apk for JNI + # registration to be able to find the native side functions. + java_files = [ "sync_shell/javatests/src/org/chromium/chrome/browser/sync/FakeServerHelper.java" ] + deps = [ + ":chrome_public_base_module_java", + + # This exists here because com.google.protobuf.nano is needed in tests, + # but that code is stripped out via proguard. Adding this deps adds + # usages and prevents removal of the proto code. + "//components/sync:test_support_proto_java", + "//third_party/android_protobuf:protobuf_nano_javalib", + ] } # Dependencies that are common to any chrome_public derivative targets, as well # as to chrome_sync_shell_apk. _chrome_public_and_sync_shell_shared_deps = [ - ":app_hooks_java", - ":chrome_java", ":chrome_public_apk_resources", + ":chrome_public_base_module_java", ":chrome_public_non_pak_assets", ":chrome_public_pak_assets", - "//base:base_java", ] generate_jni("test_support_jni_headers") { @@ -1304,14 +1363,8 @@ if (_add_unwind_tables_in_chrome_public_apk) { shared_library_for_unwind_asset = "chromefortest" } - deps = _chrome_public_and_sync_shell_shared_deps + [ - ":browser_java_test_support", - "//chrome/browser/android/metrics:ukm_utils_java", - "//components/heap_profiling:heap_profiling_java_test_support", - "//components/minidump_uploader:minidump_uploader_java", - "//content/public/test/android:content_java_test_support", - "//third_party/android_tools:android_test_mock_java", - ] + deps = _chrome_public_and_sync_shell_shared_deps + + [ ":chrome_public_base_module_java_for_test" ] if (!is_java_debug) { proguard_configs = [ "//chrome/android/java/apk_for_test.flags" ] } @@ -1403,19 +1456,10 @@ apk_name = "ChromeSyncShell" shared_libraries = [ ":chrome_sync_shell" ] - # This exists here rather than in chrome_sync_shell_test_apk for JNI - # registration to be able to find the native side functions. - java_files = [ "sync_shell/javatests/src/org/chromium/chrome/browser/sync/FakeServerHelper.java" ] - deps = - _chrome_public_and_sync_shell_shared_deps + [ - ":chrome_sync_shell_apk_template_resources", - - # This exists here because com.google.protobuf.nano is needed in tests, - # but that code is stripped out via proguard. Adding this deps adds - # usages and prevents removal of the proto code. - "//components/sync:test_support_proto_java", - "//third_party/android_protobuf:protobuf_nano_javalib", - ] + deps = _chrome_public_and_sync_shell_shared_deps + [ + ":chrome_sync_shell_apk_template_resources", + ":chrome_sync_shell_java", + ] } chrome_public_test_apk_manifest =
diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni index 44ae5f0..353441c 100644 --- a/chrome/android/chrome_public_apk_tmpl.gni +++ b/chrome/android/chrome_public_apk_tmpl.gni
@@ -170,6 +170,10 @@ invoker.add_unwind_tables_in_apk) { deps += [ ":$_unwind_asset" ] } + + if (enable_vr) { + deps += [ "//chrome/browser/android/vr:java" ] + } } }
diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml index 824e61d..888a3eea 100644 --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml
@@ -999,9 +999,6 @@ android:exported="false"/> <service android:name="org.chromium.chrome.browser.incognito.IncognitoNotificationService" android:exported="false"/> - <service android:name="org.chromium.chrome.browser.webapps.WebApkDisclosureNotificationService" - android:exported="false"/> - <!-- The following service entries exist in order to allow us to start more than one sandboxed process. -->
diff --git a/chrome/android/java/OWNERS b/chrome/android/java/OWNERS index db5cd05..02c8cf22 100644 --- a/chrome/android/java/OWNERS +++ b/chrome/android/java/OWNERS
@@ -1,2 +1,3 @@ per-file *.flags=agrieve@chromium.org +per-file *.flags=smaier@chromium.org per-file *.grd*=twellington@chromium.org
diff --git a/chrome/android/java/res/layout/consent_bump_more_options_view.xml b/chrome/android/java/res/layout/consent_bump_more_options_view.xml index 11a2ae19..a2868be4 100644 --- a/chrome/android/java/res/layout/consent_bump_more_options_view.xml +++ b/chrome/android/java/res/layout/consent_bump_more_options_view.xml
@@ -39,7 +39,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="@dimen/signin_margin_start" - android:layout_marginTop="26dp" + android:layout_marginTop="15dp" android:layout_marginEnd="@dimen/signin_margin_end" android:text="@string/consent_bump_title" android:textAppearance="@style/BlackHeadline1"/>
diff --git a/chrome/android/java/res/layout/signin_view.xml b/chrome/android/java/res/layout/signin_view.xml index 4d523da..7f4aed0 100644 --- a/chrome/android/java/res/layout/signin_view.xml +++ b/chrome/android/java/res/layout/signin_view.xml
@@ -9,6 +9,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> + <org.chromium.chrome.browser.signin.SigninScrollView android:id="@+id/signin_scroll_view" android:layout_width="match_parent" @@ -17,10 +18,11 @@ android:fadingEdgeLength="48dp" android:requiresFadingEdge="vertical" android:scrollbars="none"> + <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> - <!-- TODO(https://crbug.com/814728): Add asset for this image when UI is confirmed. --> + <ImageView android:id="@+id/signin_header_image" android:layout_width="match_parent" @@ -37,7 +39,7 @@ android:layout_height="wrap_content" android:layout_below="@id/signin_header_image" android:layout_marginStart="@dimen/signin_margin_start" - android:layout_marginTop="26dp" + android:layout_marginTop="15dp" android:layout_marginEnd="@dimen/signin_margin_end" android:textAppearance="@style/BlackHeadline1" tools:text="@string/signin_title"/> @@ -47,7 +49,7 @@ android:layout_height="wrap_content" android:layout_below="@id/signin_title" android:layout_marginStart="@dimen/signin_margin_start" - android:layout_marginTop="26dp" + android:layout_marginTop="16dp" android:layout_marginEnd="@dimen/signin_margin_end" android:background="@drawable/account_picker_background" android:orientation="horizontal" @@ -114,7 +116,7 @@ android:layout_below="@id/signin_account_picker" android:layout_alignParentEnd="true" android:layout_marginStart="@dimen/signin_drawable_padding" - android:layout_marginTop="@dimen/signin_description_blocks_margin" + android:layout_marginTop="20dp" android:layout_marginEnd="@dimen/signin_margin_end" android:layout_toEndOf="@id/signin_sync_icon" android:textAppearance="@style/BlackBody" @@ -137,7 +139,7 @@ android:layout_below="@id/signin_sync_description" android:layout_alignParentEnd="true" android:layout_marginStart="@dimen/signin_drawable_padding" - android:layout_marginTop="@dimen/signin_description_blocks_margin" + android:layout_marginTop="24dp" android:layout_marginEnd="@dimen/signin_margin_end" android:layout_toEndOf="@id/signin_sync_icon" android:textAppearance="@style/BlackBody" @@ -159,7 +161,7 @@ android:layout_height="wrap_content" android:layout_below="@id/signin_personalization_description" android:layout_marginStart="@dimen/signin_drawable_padding" - android:layout_marginTop="@dimen/signin_description_blocks_margin" + android:layout_marginTop="24dp" android:layout_marginEnd="@dimen/signin_margin_end" android:layout_toEndOf="@id/signin_google_services_icon" android:textAppearance="@style/BlackBody" @@ -169,9 +171,8 @@ style="@style/Divider" android:layout_below="@id/signin_google_services_description" android:layout_marginStart="@dimen/signin_divider_margin_start" - android:layout_marginTop="32dp" - android:layout_marginEnd="@dimen/signin_margin_end" - android:layout_marginBottom="22dp"/> + android:layout_marginTop="20dp" + android:layout_marginEnd="@dimen/signin_margin_end"/> <ImageView android:id="@+id/signin_details_icon" android:layout_width="16dp" @@ -188,7 +189,7 @@ android:layout_height="wrap_content" android:layout_below="@id/signin_divider" android:layout_marginStart="@dimen/signin_drawable_padding" - android:layout_marginTop="@dimen/signin_description_blocks_margin" + android:layout_marginTop="20dp" android:layout_marginEnd="@dimen/signin_margin_end" android:layout_toEndOf="@id/signin_details_icon" android:textAppearance="@style/BlackBody"
diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml index 49625ea..68e3352 100644 --- a/chrome/android/java/res/values/dimens.xml +++ b/chrome/android/java/res/values/dimens.xml
@@ -194,7 +194,6 @@ <dimen name="signin_margin_end">16dp</dimen> <dimen name="signin_divider_margin_start">48dp</dimen> <dimen name="signin_drawable_padding">16dp</dimen> - <dimen name="signin_description_blocks_margin">16dp</dimen> <!-- Signin promo dimensions --> <dimen name="signin_promo_account_image_size">48dp</dimen> @@ -344,6 +343,7 @@ <dimen name="tile_view_title_margin_top_condensed">62dp</dimen> <dimen name="tile_view_title_margin_top_modern">61dp</dimen> <dimen name="ntp_logo_height">100dp</dimen> + <dimen name="duet_ntp_logo_top_padding">16dp</dimen> <dimen name="ntp_search_box_height">62dp</dimen> <dimen name="ntp_search_box_height_modern">48dp</dimen> <dimen name="ntp_search_box_shadow_width">4dp</dimen>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/OriginVerifier.java b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/OriginVerifier.java index ad89eeb..f9288ef 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/OriginVerifier.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/OriginVerifier.java
@@ -395,7 +395,6 @@ ThreadUtils.assertOnUiThread(); if (sPackageToCachedOrigins != null) sPackageToCachedOrigins.clear(); ChromePreferenceManager.getInstance().setVerifiedDigitalAssetLinks(Collections.emptySet()); - ChromePreferenceManager.getInstance().clearAllTrustedWebActivityLastDisclosureTimes(); } private native long nativeInit(Profile profile);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityDisclosure.java b/chrome/android/java/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityDisclosure.java deleted file mode 100644 index 734b40d..0000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityDisclosure.java +++ /dev/null
@@ -1,49 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.browserservices; - -import android.content.Context; - -import org.chromium.base.CommandLine; -import org.chromium.chrome.R; -import org.chromium.chrome.browser.ChromeSwitches; -import org.chromium.chrome.browser.preferences.ChromePreferenceManager; -import org.chromium.ui.widget.Toast; - -import java.util.Date; -import java.util.concurrent.TimeUnit; - -/** - * Since Trusted Web Activities are part of Chrome they have access to the cookie jar and have the - * same reporting and metrics as other parts of Chrome. However, they have no UI making the fact - * they are part of Chrome obvious to the user. Therefore we show a disclosure Toast whenever an - * app opens a Trusted Web Activity, at most once per week per app. - */ -public class TrustedWebActivityDisclosure { - private static final int DISCLOSURE_PERIOD_DAYS = 7; - - /** - * Show the "Running in Chrome" disclosure (Toast) if one hasn't been shown recently. - */ - public static void showIfNeeded(Context context, String packageName) { - ChromePreferenceManager prefs = ChromePreferenceManager.getInstance(); - - Date now = new Date(); - Date lastShown = prefs.getTrustedWebActivityLastDisclosureTime(packageName); - long millisSince = now.getTime() - lastShown.getTime(); - long daysSince = TimeUnit.DAYS.convert(millisSince, TimeUnit.MILLISECONDS); - - boolean force = CommandLine.getInstance().hasSwitch( - ChromeSwitches.FORCE_TRUSTED_WEB_ACTIVITY_DISCLOSURE); - if (!force && daysSince <= DISCLOSURE_PERIOD_DAYS) return; - - prefs.setTrustedWebActivityLastDisclosureTime(packageName, now); - - String disclosure = context.getResources().getString(R.string.twa_running_in_chrome); - Toast.makeText(context, disclosure, Toast.LENGTH_LONG).show(); - } - - private TrustedWebActivityDisclosure() {} -}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/StackLayoutBase.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/StackLayoutBase.java index 268fbe9..58ac01e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/StackLayoutBase.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/StackLayoutBase.java
@@ -16,6 +16,7 @@ import org.chromium.base.VisibleForTesting; import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordUserAction; +import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.compositor.LayerTitleCache; import org.chromium.chrome.browser.compositor.layouts.ChromeAnimation.Animatable; @@ -41,7 +42,9 @@ import org.chromium.chrome.browser.tabmodel.TabList; import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tabmodel.TabModelUtils; +import org.chromium.chrome.browser.util.FeatureUtilities; import org.chromium.chrome.browser.util.MathUtils; +import org.chromium.ui.UiUtils; import org.chromium.ui.base.LocalizationUtils; import org.chromium.ui.resources.ResourceManager; @@ -543,11 +546,21 @@ @Override public void attachViews(ViewGroup container) { - // TODO(dtrainor): This is a hack. We're attaching to the parent of the view container - // which is the content container of the Activity. - ((ViewGroup) container.getParent()) - .addView(mViewContainer, - new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); + if (FeatureUtilities.isBottomToolbarEnabled()) { + // In practice, the "container view" is used for animation. When Duet is enabled, the + // container is placed behind the bottom toolbar since it is persistent. + ViewGroup compositorViewHolder = container.findViewById(R.id.compositor_view_holder); + UiUtils.insertAfter((ViewGroup) compositorViewHolder.getParent(), mViewContainer, + compositorViewHolder); + mViewContainer.getLayoutParams().width = LayoutParams.MATCH_PARENT; + mViewContainer.getLayoutParams().height = LayoutParams.MATCH_PARENT; + } else { + // TODO(dtrainor): This is a hack. We're attaching to the parent of the view container + // which is the content container of the Activity. + ((ViewGroup) container.getParent()) + .addView(mViewContainer, + new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); + } } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/DefaultMediaRouteController.java b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/DefaultMediaRouteController.java index 05ac5bd..3e70ed0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/DefaultMediaRouteController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/DefaultMediaRouteController.java
@@ -24,6 +24,7 @@ import org.chromium.base.ApplicationState; import org.chromium.base.ApplicationStatus; +import org.chromium.base.AsyncTask; import org.chromium.base.Log; import org.chromium.base.annotations.RemovableInRelease; import org.chromium.base.annotations.UsedByReflection; @@ -810,7 +811,7 @@ public void deliverResult(Uri uri, boolean playable) { callback.onResult(playable, uri.toString(), frameUrl); } - }, userAgent).execute(); + }, userAgent).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java index 1e03115..0b6d2c8a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
@@ -46,6 +46,7 @@ import org.chromium.chrome.browser.suggestions.TileRenderer; import org.chromium.chrome.browser.suggestions.TileView; import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.util.FeatureUtilities; import org.chromium.chrome.browser.util.MathUtils; import org.chromium.chrome.browser.util.ViewUtils; import org.chromium.chrome.browser.vr.VrModeObserver; @@ -187,6 +188,14 @@ ViewStub exploreStub = findViewById(R.id.explore_sites_stub); mExploreSectionView = exploreStub.inflate(); } + + // Strip the padding from the top of the view (which would otherwise be the height of the + // top toolbar) when Duet is enabled to remove some of the empty space. + if (FeatureUtilities.isBottomToolbarEnabled()) { + setPadding(getPaddingLeft(), + getResources().getDimensionPixelSize(R.dimen.duet_ntp_logo_top_padding), + getPaddingRight(), getPaddingBottom()); + } } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java index abf0da41..f33d9de3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java
@@ -30,6 +30,7 @@ import org.chromium.chrome.browser.suggestions.TileGroup; import org.chromium.chrome.browser.tab.EmptyTabObserver; import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.util.FeatureUtilities; import org.chromium.chrome.browser.util.ViewUtils; import org.chromium.chrome.browser.widget.displaystyle.UiConfig; @@ -280,6 +281,11 @@ // immediately attached to the window if the RecyclerView is scrolled when the NTP // is refocused. if (mManager.isLocationBarShownInNTP()) mNewTabPageLayout.updateSearchBoxOnScroll(); + + if (FeatureUtilities.isBottomToolbarEnabled()) { + ((MarginLayoutParams) getLayoutParams()).bottomMargin = + getResources().getDimensionPixelSize(R.dimen.bottom_toolbar_height); + } } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/GetPagesByNamespaceForLivePageSharingCallback.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/GetPagesByNamespaceForLivePageSharingCallback.java new file mode 100644 index 0000000..2292677 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/GetPagesByNamespaceForLivePageSharingCallback.java
@@ -0,0 +1,52 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.offlinepages; + +import android.app.Activity; + +import org.chromium.base.Callback; +import org.chromium.chrome.browser.share.ShareParams; +import org.chromium.chrome.browser.tab.Tab; + +import java.util.List; + +/** + * This callback will take the items in the Live Page Sharing namespace and check if there is a page + * matching the url of the given tab. If there is such page, share the page; otherwise save the page + * and share. + */ +public class GetPagesByNamespaceForLivePageSharingCallback + implements Callback<List<OfflinePageItem>> { + private Activity mActivity; + private Tab mTab; + private Callback<ShareParams> mShareCallback; + private OfflinePageBridge mBridge; + + public GetPagesByNamespaceForLivePageSharingCallback(Activity activity, Tab tab, + final Callback<ShareParams> shareCallback, OfflinePageBridge bridge) { + mActivity = activity; + mTab = tab; + mShareCallback = shareCallback; + mBridge = bridge; + } + + @Override + public void onResult(List<OfflinePageItem> items) { + // If there is already a page in the Live Page Sharing namespace and matches the url, share + // it directly. + for (OfflinePageItem item : items) { + if (item.getUrl().equals(mTab.getUrl())) { + OfflinePageUtils.sharePublishedPage(item, mActivity, mShareCallback); + return; + } + } + // Otherwise, save the page within Live Page Sharing namespace and share it using content + // URI. + mBridge.savePage(mTab.getWebContents(), + new ClientId(OfflinePageBridge.LIVE_PAGE_SHARING_NAMESPACE, + Integer.toString(mTab.getId())), + new SavePageAndShareCallback(mActivity, mShareCallback, mBridge)); + } +} \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java index 2fe72052..c76b68b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java
@@ -44,6 +44,7 @@ public static final String NTP_SUGGESTIONS_NAMESPACE = "ntp_suggestions"; public static final String SUGGESTED_ARTICLES_NAMESPACE = "suggested_articles"; public static final String BROWSER_ACTIONS_NAMESPACE = "browser_actions"; + public static final String LIVE_PAGE_SHARING_NAMESPACE = "live_page_sharing"; /** * Retrieves the OfflinePageBridge for the given profile, creating it the first time
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java index fc9fd08f..9894ca2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java
@@ -21,6 +21,7 @@ import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeActivity; +import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.FileProviderHelper; import org.chromium.chrome.browser.UrlConstants; import org.chromium.chrome.browser.profiles.Profile; @@ -374,6 +375,37 @@ } /** + * Save the page loaded in current tab and share the saved page. + * + * @param activity The activity used for sharing and file provider interaction. + * @param currentTab The current tab from which the page is being shared. + * @param shareCallback The callback to be used to send the ShareParams. This will only be + * called if this function call returns true. + * @return true if the sharing of the page is possible. The callback will be invoked if + * saving the page succeeds. + */ + public static boolean saveAndSharePage( + final Activity activity, Tab tab, final Callback<ShareParams> shareCallback) { + OfflinePageBridge offlinePageBridge = getInstance().getOfflinePageBridge(tab.getProfile()); + + if (offlinePageBridge == null) { + Log.e(TAG, "Unable to share current tab as an offline page."); + return false; + } + + WebContents webContents = tab.getWebContents(); + if (webContents == null) return false; + + GetPagesByNamespaceForLivePageSharingCallback callback = + new GetPagesByNamespaceForLivePageSharingCallback( + activity, tab, shareCallback, offlinePageBridge); + offlinePageBridge.getPagesByNamespace( + OfflinePageBridge.LIVE_PAGE_SHARING_NAMESPACE, callback); + + return true; + } + + /** * If possible, creates the ShareParams needed to share the current offline page loaded in the * provided tab as a MHTML file. * @@ -386,8 +418,23 @@ */ public static boolean maybeShareOfflinePage( final Activity activity, Tab tab, final Callback<ShareParams> shareCallback) { + if (!OfflinePageBridge.isPageSharingEnabled()) return false; + if (tab == null) return false; + boolean isOfflinePage = OfflinePageUtils.isOfflinePage(tab); + RecordHistogram.recordBooleanHistogram("OfflinePages.SharedPageWasOffline", isOfflinePage); + + // If the current tab is not showing an offline page, try to see if we should do live page + // sharing. + if (!isOfflinePage) { + if (ChromeFeatureList.isEnabled(ChromeFeatureList.OFFLINE_PAGES_LIVE_PAGE_SHARING)) { + return saveAndSharePage(activity, tab, shareCallback); + } else { + return false; + } + } + OfflinePageBridge offlinePageBridge = getInstance().getOfflinePageBridge(tab.getProfile()); if (offlinePageBridge == null) { @@ -399,6 +446,8 @@ if (webContents == null) return false; OfflinePageItem offlinePage = offlinePageBridge.getOfflinePage(webContents); + if (offlinePage == null) return false; + String offlinePath = offlinePage.getFilePath(); final String pageUrl = tab.getUrl(); @@ -407,9 +456,16 @@ Uri uri; boolean isPageUserRequested = offlinePageBridge.isUserRequestedDownloadNamespace( offlinePage.getClientId().getNamespace()); - if (!isPageUserRequested) { - File file = new File(offlinePage.getFilePath()); - uri = (new FileProviderHelper()).getContentUriFromFile(file); + // Ensure that we have a file path that is longer than just "/". + if (!isPageUserRequested && offlinePath.length() > 1) { + File file = new File(offlinePath); + // We might get an exception if chrome does not have sharing roots configured. If so, + // just share by URL of the original page instead of sharing the offline page. + try { + uri = (new FileProviderHelper()).getContentUriFromFile(file); + } catch (Exception e) { + uri = Uri.parse(pageUrl); + } } else { uri = Uri.parse(pageUrl); } @@ -450,8 +506,8 @@ */ public static boolean isOfflinePageShareable( OfflinePageBridge offlinePageBridge, OfflinePageItem offlinePage, Uri uri) { - // Return false if there is no offline page or sharing is not enabled. - if (offlinePage == null || !OfflinePageBridge.isPageSharingEnabled()) return false; + // Return false if there is no offline page. + if (offlinePage == null) return false; String offlinePath = offlinePage.getFilePath();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/SavePageAndShareCallback.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/SavePageAndShareCallback.java new file mode 100644 index 0000000..1606ef5 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/SavePageAndShareCallback.java
@@ -0,0 +1,42 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.offlinepages; + +import android.app.Activity; + +import org.chromium.base.Callback; +import org.chromium.chrome.browser.share.ShareParams; +import org.chromium.components.offlinepages.SavePageResult; + +/** + * This callback will save get the saved page during live page sharing and share the page if saving + * process succeeds. + */ +public class SavePageAndShareCallback implements OfflinePageBridge.SavePageCallback { + private Activity mActivity; + private Callback<ShareParams> mShareCallback; + private OfflinePageBridge mBridge; + + public SavePageAndShareCallback(Activity activity, final Callback<ShareParams> shareCallback, + OfflinePageBridge bridge) { + mActivity = activity; + mShareCallback = shareCallback; + mBridge = bridge; + } + + @Override + public void onSavePageDone(int savePageResult, String url, long offlineId) { + if (savePageResult != SavePageResult.SUCCESS) { + // If the page is not saved, skip the sharing part. + return; + } + mBridge.getPageByOfflineId(offlineId, new Callback<OfflinePageItem>() { + @Override + public void onResult(OfflinePageItem page) { + OfflinePageUtils.sharePublishedPage(page, mActivity, mShareCallback); + } + }); + } +} \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerCategoryView.java b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerCategoryView.java index 5c9b363..1016061 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerCategoryView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerCategoryView.java
@@ -18,6 +18,7 @@ import android.widget.Button; import android.widget.RelativeLayout; +import org.chromium.base.AsyncTask; import org.chromium.base.DiscardableReferencePool.DiscardableReference; import org.chromium.base.VisibleForTesting; import org.chromium.base.metrics.RecordHistogram; @@ -362,7 +363,7 @@ mEnumStartTime = SystemClock.elapsedRealtime(); mWorkerTask = new FileEnumWorkerTask( mActivity.getWindowAndroid(), this, new MimeTypeFileFilter(mMimeTypes)); - mWorkerTask.execute(); + mWorkerTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceManager.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceManager.java index b2c25380..c63c478 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceManager.java
@@ -10,7 +10,6 @@ import org.chromium.chrome.browser.crash.MinidumpUploadService.ProcessType; import java.util.Collections; -import java.util.Date; import java.util.HashSet; import java.util.Locale; import java.util.Set; @@ -183,8 +182,6 @@ private static final String VERIFIED_DIGITAL_ASSET_LINKS = "verified_digital_asset_links"; - private static final String TRUSTED_WEB_ACTIVITY_LAST_DISCLOSURE_TIME = - "trusted_web_activity_last_disclosure_time:"; /** * Whether VR assets component should be registered on startup. @@ -464,43 +461,6 @@ } /** - * Private convenience method to create a Preferences Key to hold the last time the given - * package displayed a "Running in Chrome" disclosure while opening a Trusted Web Activity. - */ - private static String getTrustedWebActivityDisclosureTimeKey(String packageName) { - return TRUSTED_WEB_ACTIVITY_LAST_DISCLOSURE_TIME + packageName; - } - - /** - * Gets the last time a disclosure was shown while opening a Trusted Web Activity for the given - * package. Returns a Date object representing the Unix epoch if no data was found. - */ - public Date getTrustedWebActivityLastDisclosureTime(String packageName) { - return new Date(readLong(getTrustedWebActivityDisclosureTimeKey(packageName), 0)); - } - - /** - * Sets the last time a disclosure was shown while opening a Trusted Web Activity for the given - * package. - */ - public void setTrustedWebActivityLastDisclosureTime(String packageName, Date time) { - writeLong(getTrustedWebActivityDisclosureTimeKey(packageName), time.getTime()); - } - - /** - * Wipes all recordings of the last disclosure times for packages opening TWAs. - */ - public void clearAllTrustedWebActivityLastDisclosureTimes() { - SharedPreferences.Editor ed = mSharedPreferences.edit(); - for (String key : mSharedPreferences.getAll().keySet()) { - if (!key.startsWith(TRUSTED_WEB_ACTIVITY_LAST_DISCLOSURE_TIME)) continue; - - ed.remove(key); - } - ed.apply(); - } - - /** * Writes the given int value to the named shared preference. * @param key The name of the preference to modify. * @param value The new value for the preference.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareMenuActionHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareMenuActionHandler.java index 4c0d76e..fbe8fd6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareMenuActionHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareMenuActionHandler.java
@@ -143,12 +143,8 @@ private void triggerShare(final Activity activity, final Tab currentTab, final boolean shareDirectly, boolean isIncognito) { - boolean isOfflinePage = OfflinePageUtils.isOfflinePage(currentTab); - RecordHistogram.recordBooleanHistogram("OfflinePages.SharedPageWasOffline", isOfflinePage); - - if (isOfflinePage - && OfflinePageUtils.maybeShareOfflinePage( - activity, currentTab, (ShareParams p) -> mDelegate.share(p))) { + if (OfflinePageUtils.maybeShareOfflinePage( + activity, currentTab, (ShareParams p) -> mDelegate.share(p))) { return; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountSigninActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountSigninActivity.java index a44effc..5f405ae 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountSigninActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountSigninActivity.java
@@ -216,7 +216,7 @@ final String histogram; switch (mSigninFlowType) { case AccountSigninView.SigninFlowType.ADD_NEW_ACCOUNT: - histogram = "Signin.SigninCompletedAccessPoint.NewAccount"; + histogram = "Signin.SigninCompletedAccessPoint.NewAccountNoExistingAccount"; break; case AccountSigninView.SigninFlowType.CONFIRMATION_ONLY: histogram = "Signin.SigninCompletedAccessPoint.WithDefault"; @@ -240,7 +240,7 @@ final String histogram; switch (mSigninFlowType) { case AccountSigninView.SigninFlowType.ADD_NEW_ACCOUNT: - histogram = "Signin.SigninStartedAccessPoint.NewAccount"; + histogram = "Signin.SigninStartedAccessPoint.NewAccountNoExistingAccount"; break; case AccountSigninView.SigninFlowType.CONFIRMATION_ONLY: histogram = "Signin.SigninStartedAccessPoint.WithDefault";
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragment.java index 1475c90..2c85b3e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragment.java
@@ -170,7 +170,10 @@ histogram = "Signin.SigninCompletedAccessPoint.NotDefault"; break; case PromoAction.NEW_ACCOUNT: - histogram = "Signin.SigninCompletedAccessPoint.NewAccount"; + // On Android, the promo does not have a button to add an account when there is + // already an account on the device. That flow goes through the NotDefault promo + // instead. Always use the NoExistingAccount variant. + histogram = "Signin.SigninCompletedAccessPoint.NewAccountNoExistingAccount"; break; default: assert false : "Unexpected sign-in flow type!"; @@ -193,7 +196,10 @@ histogram = "Signin.SigninStartedAccessPoint.NotDefault"; break; case PromoAction.NEW_ACCOUNT: - histogram = "Signin.SigninStartedAccessPoint.NewAccount"; + // On Android, the promo does not have a button to add an account when there is + // already an account on the device. That flow goes through the NotDefault promo + // instead. Always use the NoExistingAccount variant. + histogram = "Signin.SigninStartedAccessPoint.NewAccountNoExistingAccount"; break; default: assert false : "Unexpected sign-in flow type!";
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java index 7b2c7a7..5e881178 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
@@ -113,7 +113,10 @@ "Signin_ImpressionWithNoAccount_FromBookmarkManager"; mSigninWithDefaultUserActionName = "Signin_SigninWithDefault_FromBookmarkManager"; mSigninNotDefaultUserActionName = "Signin_SigninNotDefault_FromBookmarkManager"; - mSigninNewAccountUserActionName = "Signin_SigninNewAccount_FromBookmarkManager"; + // On Android, the promo does not have a button to add and account when there is + // already an account on the device. Always use the NoExistingAccount variant. + mSigninNewAccountUserActionName = + "Signin_SigninNewAccountNoExistingAccount_FromBookmarkManager"; mImpressionsTilDismissHistogramName = "MobileSignInPromo.BookmarkManager.ImpressionsTilDismiss"; mImpressionsTilSigninButtonsHistogramName = @@ -137,8 +140,10 @@ "Signin_SigninWithDefault_FromNTPContentSuggestions"; mSigninNotDefaultUserActionName = "Signin_SigninNotDefault_FromNTPContentSuggestions"; + // On Android, the promo does not have a button to add and account when there is + // already an account on the device. Always use the NoExistingAccount variant. mSigninNewAccountUserActionName = - "Signin_SigninNewAccount_FromNTPContentSuggestions"; + "Signin_SigninNewAccountNoExistingAccount_FromNTPContentSuggestions"; mImpressionsTilDismissHistogramName = null; mImpressionsTilSigninButtonsHistogramName = null; mImpressionsTilXButtonHistogramName = null; @@ -158,7 +163,10 @@ "Signin_ImpressionWithNoAccount_FromRecentTabs"; mSigninWithDefaultUserActionName = "Signin_SigninWithDefault_FromRecentTabs"; mSigninNotDefaultUserActionName = "Signin_SigninNotDefault_FromRecentTabs"; - mSigninNewAccountUserActionName = "Signin_SigninNewAccount_FromRecentTabs"; + // On Android, the promo does not have a button to add and account when there is + // already an account on the device. Always use the NoExistingAccount variant. + mSigninNewAccountUserActionName = + "Signin_SigninNewAccountNoExistingAccount_FromRecentTabs"; mImpressionsTilDismissHistogramName = null; mImpressionsTilSigninButtonsHistogramName = null; mImpressionsTilXButtonHistogramName = null; @@ -173,7 +181,10 @@ mImpressionWithAccountUserActionName = "Signin_ImpressionWithAccount_FromSettings"; mSigninWithDefaultUserActionName = "Signin_SigninWithDefault_FromSettings"; mSigninNotDefaultUserActionName = "Signin_SigninNotDefault_FromSettings"; - mSigninNewAccountUserActionName = "Signin_SigninNewAccount_FromSettings"; + // On Android, the promo does not have a button to add and account when there is + // already an account on the device. Always use the NoExistingAccount variant. + mSigninNewAccountUserActionName = + "Signin_SigninNewAccountNoExistingAccount_FromSettings"; mImpressionWithNoAccountUserActionName = "Signin_ImpressionWithNoAccount_FromSettings"; mImpressionsTilDismissHistogramName =
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/Snackbar.java b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/Snackbar.java index 40d38e4..78fb3fa 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/Snackbar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/Snackbar.java
@@ -74,6 +74,7 @@ public static final int UMA_MISSING_FILES_NO_SD_CARD = 24; public static final int UMA_OFFLINE_INDICATOR = 25; public static final int UMA_FEED_NTP_STREAM = 26; + public static final int UMA_WEBAPK_TWA_PRIVACY_DISCLOSURE = 27; private SnackbarController mController; private CharSequence mText;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/SilenceLintErrors.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/SilenceLintErrors.java new file mode 100644 index 0000000..4cfcaf3 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/SilenceLintErrors.java
@@ -0,0 +1,23 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.vr; + +import org.chromium.chrome.R; + +// TODO(crbug/870056): This class purely exists to silence lint errors. Remove this class once we +// have moved resources into VR DFM. +/* package */ class SilenceLintErrors { + private int[] mRes = new int[] { + R.string.vr_shell_feedback_infobar_feedback_button, + R.string.vr_shell_feedback_infobar_description, + R.string.vr_services_check_infobar_install_text, + R.string.vr_services_check_infobar_update_text, + R.string.vr_services_check_infobar_install_button, + R.string.vr_services_check_infobar_update_button, R.anim.stay_hidden, + R.drawable.vr_services, + }; + + private SilenceLintErrors() {} +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrModuleProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrModuleProvider.java index 7b18b956..6ba6418 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrModuleProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrModuleProvider.java
@@ -4,6 +4,8 @@ package org.chromium.chrome.browser.vr; +import org.chromium.base.annotations.JNINamespace; + import java.util.ArrayList; import java.util.List; @@ -11,6 +13,7 @@ * Instantiates the VR delegates. If the VR module is not available this provider will * instantiate a fallback implementation. */ +@JNINamespace("vr") public class VrModuleProvider { private static VrDelegateProvider sDelegateProvider; private static final List<VrModeObserver> sVrModeObservers = new ArrayList<>(); @@ -49,6 +52,12 @@ for (VrModeObserver observer : sVrModeObservers) observer.onExitVr(); } + // TODO(crbug.com/870055): JNI should be registered in the shared VR library's JNI_OnLoad + // function. Do this once we have a shared VR library. + /* package */ static void registerJni() { + nativeRegisterJni(); + } + private static VrDelegateProvider getDelegateProvider() { if (sDelegateProvider == null) { try { @@ -65,4 +74,6 @@ } private VrModuleProvider() {} + + private static native void nativeRegisterJni(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java index d76232b..8444c627 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java
@@ -367,6 +367,7 @@ * Called when the native library is first available. */ public static void onNativeLibraryAvailable() { + VrModuleProvider.registerJni(); nativeOnLibraryAvailable(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkDisclosureNotificationManager.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkDisclosureNotificationManager.java deleted file mode 100644 index 56aa894..0000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkDisclosureNotificationManager.java +++ /dev/null
@@ -1,102 +0,0 @@ -// Copyright 2017 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.webapps; - -import android.app.Notification; -import android.app.NotificationManager; -import android.content.Context; -import android.support.v4.app.NotificationCompat; - -import org.chromium.base.ActivityState; -import org.chromium.base.ApplicationStatus; -import org.chromium.base.ContextUtils; -import org.chromium.chrome.R; -import org.chromium.chrome.browser.notifications.ChromeNotificationBuilder; -import org.chromium.chrome.browser.notifications.NotificationBuilderFactory; -import org.chromium.chrome.browser.notifications.NotificationUmaTracker; -import org.chromium.chrome.browser.notifications.channels.ChannelDefinitions; - -import java.util.HashSet; -import java.util.Set; - -/** - * Manages the notification indicating that a WebApk is backed by chrome code and may share data. - * It's shown while an Unbound WebApk is displayed in the foreground until the user dismisses it. - */ -public class WebApkDisclosureNotificationManager { - // We always use the same integer id when showing and closing notifications. The notification - // tag is always set, which is a safe and sufficient way of identifying a notification, so the - // integer id is not needed anymore except it must not vary in an uncontrolled way. - private static final int PLATFORM_ID = 100; - - // Prefix used for generating a unique notification tag. - private static final String DISMISSAL_NOTIFICATION_TAG_PREFIX = - "dismissal_notification_tag_prefix."; - - /** Records whether we're currently showing a disclosure notification. */ - private static Set<String> sVisibleNotifications = new HashSet<>(); - - /** - * For Trusted Web Activity show a notification that it's running in Chrome. - */ - static void maybeShowDisclosure(WebappActivity activity, WebappDataStorage storage) { - String packageName = activity.getNativeClientPackageName(); - boolean isTWA = (activity.getActivityType() == WebappActivity.ActivityType.TWA); - boolean isNotificationAllowed = !storage.hasDismissedDisclosure() - && !sVisibleNotifications.contains(packageName) - && !WebappActionsNotificationManager.isEnabled(); - if (!isTWA || !isNotificationAllowed) return; - - int activityState = ApplicationStatus.getStateForActivity(activity); - if (activityState == ActivityState.STARTED || activityState == ActivityState.RESUMED - || activityState == ActivityState.PAUSED) { - sVisibleNotifications.add(packageName); - WebApkDisclosureNotificationManager.showDisclosure(activity.getWebappInfo()); - } - } - - /** - * Shows the privacy disclosure informing the user that Chrome is being used. - * @param webappInfo Web App this is currently displayed fullscreen. - */ - private static void showDisclosure(WebappInfo webappInfo) { - Context context = ContextUtils.getApplicationContext(); - - ChromeNotificationBuilder builder = - NotificationBuilderFactory.createChromeNotificationBuilder( - false /* preferCompat */, ChannelDefinitions.ChannelId.BROWSER); - builder.setContentTitle(webappInfo.name()) - .setPriorityBeforeO(NotificationCompat.PRIORITY_MIN) - .setSmallIcon(R.drawable.ic_chrome) - .setLargeIcon(webappInfo.icon()) - .setDeleteIntent(WebApkDisclosureNotificationService.getDeleteIntent( - context, webappInfo.id())) - .setContentText(context.getResources().getString( - R.string.webapk_running_in_chrome_disclosure)); - - NotificationManager nm = - (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - Notification notification = builder.build(); - nm.notify(DISMISSAL_NOTIFICATION_TAG_PREFIX + webappInfo.apkPackageName(), PLATFORM_ID, - notification); - NotificationUmaTracker.getInstance().onNotificationShown( - NotificationUmaTracker.SystemNotificationType.WEBAPK, notification); - } - - /** - * Dismisses the notification. - * @param activity Web App this is currently displayed fullscreen. - */ - public static void dismissNotification(WebappActivity activity) { - String packageName = activity.getNativeClientPackageName(); - if (!sVisibleNotifications.contains(packageName)) return; - - Context context = ContextUtils.getApplicationContext(); - NotificationManager nm = - (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - nm.cancel(DISMISSAL_NOTIFICATION_TAG_PREFIX + packageName, PLATFORM_ID); - sVisibleNotifications.remove(packageName); - } -}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkDisclosureNotificationService.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkDisclosureNotificationService.java deleted file mode 100644 index e943301e..0000000 --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkDisclosureNotificationService.java +++ /dev/null
@@ -1,41 +0,0 @@ -// Copyright 2017 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.webapps; - -import android.app.IntentService; -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; - -/** - * Service that handles the action of clicking on the WebApk disclosure notification. - */ -public class WebApkDisclosureNotificationService extends IntentService { - private static final String TAG = "WebApkDisclosureNotificationService"; - - private static final String ACTION_HIDE_DISCLOSURE = - "org.chromium.chrome.browser.webapps.HIDE_DISCLOSURE"; - - private static final String EXTRA_WEBAPP_ID = "webapp_id"; - - static PendingIntent getDeleteIntent(Context context, String webApkPackageName) { - Intent intent = new Intent(context, WebApkDisclosureNotificationService.class); - intent.setAction(ACTION_HIDE_DISCLOSURE); - intent.putExtra(EXTRA_WEBAPP_ID, webApkPackageName); - return PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); - } - - /** Empty public constructor needed by Android. */ - public WebApkDisclosureNotificationService() { - super(TAG); - } - - @Override - protected void onHandleIntent(Intent intent) { - String webappId = intent.getStringExtra(EXTRA_WEBAPP_ID); - WebappDataStorage storage = WebappRegistry.getInstance().getWebappDataStorage(webappId); - if (storage != null) storage.setDismissedDisclosure(); - } -}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java index ed5c3fd..5e932d5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java
@@ -46,7 +46,6 @@ import org.chromium.chrome.browser.browserservices.BrowserSessionContentUtils; import org.chromium.chrome.browser.browserservices.BrowserSessionDataProvider; import org.chromium.chrome.browser.browserservices.Origin; -import org.chromium.chrome.browser.browserservices.TrustedWebActivityDisclosure; import org.chromium.chrome.browser.browserservices.UkmRecorder; import org.chromium.chrome.browser.browserservices.VerificationState; import org.chromium.chrome.browser.compositor.layouts.LayoutManager; @@ -117,6 +116,8 @@ private WebappSplashScreenController mSplashController; + private WebappDisclosureSnackbarController mDisclosureSnackbarController; + private boolean mIsInitialized; private long mOnResumeTimestampMs; private Integer mBrandColor; @@ -189,6 +190,7 @@ mWebappInfo = createWebappInfo(null); mDirectoryManager = new WebappDirectoryManager(); mSplashController = new WebappSplashScreenController(); + mDisclosureSnackbarController = new WebappDisclosureSnackbarController(); mNotificationManager = new WebappActionsNotificationManager(this); } @@ -392,12 +394,6 @@ super.onStartWithNative(); BrowserSessionContentUtils.setActiveContentHandler(mTrustedWebContentProvider); mDirectoryManager.cleanUpDirectories(this, getActivityId()); - // If WebappStorage is available, check whether to show a disclosure notification. If it's - // not available, this check will happen once deferred startup returns with the storage - // instance. - WebappDataStorage storage = - WebappRegistry.getInstance().getWebappDataStorage(mWebappInfo.id()); - if (storage != null) WebApkDisclosureNotificationManager.maybeShowDisclosure(this, storage); } @Override @@ -409,7 +405,6 @@ if (getFullscreenManager() != null) { getFullscreenManager().exitPersistentFullscreenMode(); } - WebApkDisclosureNotificationManager.dismissNotification(this); } /** @@ -507,6 +502,11 @@ public void onResumeWithNative() { super.onResumeWithNative(); mNotificationManager.maybeShowNotification(); + WebappDataStorage storage = + WebappRegistry.getInstance().getWebappDataStorage(mWebappInfo.id()); + if (storage != null) { + mDisclosureSnackbarController.maybeShowDisclosure(this, storage, false /* force */); + } } @Override @@ -543,7 +543,6 @@ protected void onDeferredStartupWithStorage(WebappDataStorage storage) { updateStorage(storage); - WebApkDisclosureNotificationManager.maybeShowDisclosure(this, storage); } protected void onDeferredStartupWithNullStorage() { @@ -556,6 +555,13 @@ @Override public void onWebappDataStorageRetrieved(WebappDataStorage storage) { onDeferredStartupWithStorage(storage); + // Set force == true to indicate that we need to show a privacy + // disclosure for the newly installed TWAs and unbound WebAPKs which + // have no storage yet. We can't simply default to a showing if the + // storage has a default value as we don't want to show this disclosure + // for pre-existing unbound WebAPKs. + mDisclosureSnackbarController.maybeShowDisclosure( + WebappActivity.this, storage, true /* force */); } }); } @@ -598,7 +604,6 @@ } BrowserServicesMetrics.recordTwaOpened(); - TrustedWebActivityDisclosure.showIfNeeded(this, packageName); // When verification occurs instantly (eg the result is cached) then it returns // before there is an active tab.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java index ab49b7c..b396966 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java
@@ -69,8 +69,8 @@ // The shell Apk version requested in the last update. static final String KEY_LAST_REQUESTED_SHELL_APK_VERSION = "last_requested_shell_apk_version"; - // Whether the user has dismissed the disclosure UI. - static final String KEY_DISMISSED_DISCLOSURE = "dismissed_dislosure"; + // Whether to show the user the Snackbar disclosure UI. + static final String KEY_SHOW_DISCLOSURE = "show_disclosure"; // The path where serialized update data is written before uploading to the WebAPK server. static final String KEY_PENDING_UPDATE_FILE_PATH = "pending_update_file_path"; @@ -335,7 +335,7 @@ editor.remove(KEY_LAST_UPDATE_REQUEST_COMPLETE_TIME); editor.remove(KEY_DID_LAST_UPDATE_REQUEST_SUCCEED); editor.remove(KEY_RELAX_UPDATES); - editor.remove(KEY_DISMISSED_DISCLOSURE); + editor.remove(KEY_SHOW_DISCLOSURE); editor.apply(); } @@ -458,12 +458,30 @@ return mPreferences.getBoolean(KEY_DID_LAST_UPDATE_REQUEST_SUCCEED, false); } - void setDismissedDisclosure() { - mPreferences.edit().putBoolean(KEY_DISMISSED_DISCLOSURE, true).apply(); + /** + * Returns whether to show the user a privacy disclosure (used for TWAs and unbound WebAPKs). + * This is not cleared until the user explicitly acknowledges it. + */ + boolean shouldShowDisclosure() { + return mPreferences.getBoolean(KEY_SHOW_DISCLOSURE, false); } - boolean hasDismissedDisclosure() { - return mPreferences.getBoolean(KEY_DISMISSED_DISCLOSURE, false); + /** + * Clears the show disclosure bit, this stops TWAs and unbound WebAPKs from showing a privacy + * disclosure on every resume of the Webapp. This should be called when the user has + * acknowledged the disclosure. + */ + void clearShowDisclosure() { + mPreferences.edit().putBoolean(KEY_SHOW_DISCLOSURE, false).apply(); + } + + /** + * Sets the disclosure bit which causes TWAs and unbound WebAPKs to show a privacy disclosure. + * This is set the first time an app is opened without storage (either right after install or + * after Chrome's storage is cleared). + */ + void setShowDisclosure() { + mPreferences.edit().putBoolean(KEY_SHOW_DISCLOSURE, true).apply(); } /** Updates the shell Apk version requested in the last update. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDisclosureSnackbarController.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDisclosureSnackbarController.java new file mode 100644 index 0000000..1e444365 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDisclosureSnackbarController.java
@@ -0,0 +1,89 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.webapps; + +import org.chromium.chrome.R; +import org.chromium.chrome.browser.snackbar.Snackbar; +import org.chromium.chrome.browser.snackbar.SnackbarManager; +import org.chromium.webapk.lib.common.WebApkConstants; + +/** + * Trusted Web Activities and unbound WebAPKs are part of Chrome. They have access to cookies and + * report metrics the same way as the rest of Chrome. However, there is no UI indicating they are + * running in Chrome. For privacy purposes we show a Snackbar based privacy disclosure that the + * activity is running as part of Chrome. This occurs once per app installation, but will appear + * again if Chrome's storage is cleared. The Snackbar must be acknowledged in order to be dismissed + * and should remain onscreen as long as the app is open. It should remain active even across + * pause/resume and should show the next time the app is opened if it hasn't been acknowledged. + */ +public class WebappDisclosureSnackbarController implements SnackbarManager.SnackbarController { + /** + * @param actionData an instance of WebappInfo + */ + @Override + public void onAction(Object actionData) { + if (actionData instanceof WebappDataStorage) { + ((WebappDataStorage) actionData).clearShowDisclosure(); + } + } + + /** + * Stub expected by SnackbarController. + */ + @Override + public void onDismissNoAction(Object actionData) {} + + /** + * Shows the disclosure informing the user the Webapp is running in Chrome. + * @param activity Webapp activity to show disclosure for. + * @param storage Storage for the Webapp. + * @param force Whether to force showing the Snackbar (if no storage is available on start). + */ + public void maybeShowDisclosure( + WebappActivity activity, WebappDataStorage storage, boolean force) { + if (storage == null) return; + + // If forced we set the bit to show the disclosure. This persists to future instances. + if (force) storage.setShowDisclosure(); + + if (shouldShowDisclosure(activity, storage)) { + activity.getSnackbarManager().showSnackbar( + Snackbar.make(activity.getResources().getString( + R.string.app_running_in_chrome_disclosure), + this, Snackbar.TYPE_PERSISTENT, + Snackbar.UMA_WEBAPK_TWA_PRIVACY_DISCLOSURE) + .setAction( + activity.getResources().getString(R.string.ok_got_it), storage) + .setSingleLine(false)); + } + } + + /** + * Restricts showing to TWAs and unbound WebAPKs that haven't dismissed the disclosure. + * @param activity Webapp activity. + * @param storage Storage for the Webapp. + * @return boolean indicating whether to show the privacy disclosure. + */ + private boolean shouldShowDisclosure(WebappActivity activity, WebappDataStorage storage) { + // Show only if the correct flag is set. + if (!storage.shouldShowDisclosure()) { + return false; + } + int activityType = activity.getActivityType(); + // Show for TWAs. + if (activityType == WebappActivity.ActivityType.TWA) { + return true; + } + String packageName = activity.getNativeClientPackageName(); + // Show for unbound WebAPKs. + if (activityType == WebappActivity.ActivityType.WEBAPK + && (packageName != null + && !packageName.startsWith(WebApkConstants.WEBAPK_PACKAGE_PREFIX))) { + return true; + } + // Webapps or bound WebAPKs. + return false; + } +} \ No newline at end of file
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd index b5a67c5c..3e27bee 100644 --- a/chrome/android/java/strings/android_chrome_strings.grd +++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -3427,7 +3427,7 @@ </message> <!-- WebAPK/TWA related strings --> - <message name="IDS_WEBAPK_RUNNING_IN_CHROME_DISCLOSURE" desc="Message on the notification that indicates a WebApk may use Chrome data."> + <message name="IDS_APP_RUNNING_IN_CHROME_DISCLOSURE" desc="Message on the snackbar that indicates an app may use Chrome data."> This app is running in Chrome. </message> <message name="IDS_WEBAPP_TAP_TO_COPY_URL" desc="Message on the notification that indicates that taping it will copy a Web App's URL into the clipboard."> @@ -3448,9 +3448,6 @@ <message name="IDS_WEBAPP_NETWORK_ERROR_MESSAGE_TUNNEL_CONNECTION_FAILED" desc="The error message for ERROR_TUNNEL_CONNECTION_FAILED."> Establishing a tunnel via proxy server failed </message> - <message name="IDS_TWA_RUNNING_IN_CHROME" desc="Disclosure on opening a TWA that it may use Chrome data. Shown on a Toast." translateable="false"> - Running in Chrome - </message> <!-- Keyboard shortcuts in Android N--> <message name="IDS_KEYBOARD_SHORTCUT_OPEN_NEW_TAB" desc="A text label that appears next to the keyboard shortcut to open a new tab in Chrome. The shortcut description is shown in a system dialog along with all other supported shortcuts. [CHAR-LIMIT=55]">
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb index 235d9f2..773f2cd 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
@@ -61,6 +61,7 @@ <translation id="1404122904123200417">Incorporado en <ph name="WEBSITE_URL" /></translation> <translation id="1406000523432664303">"No realizar seguimiento"</translation> <translation id="1407135791313364759">Abrir todas</translation> +<translation id="1409426117486808224">Vista simplificada para las pestañas abiertas</translation> <translation id="1409879593029778104">Se impidió la descarga de <ph name="FILE_NAME" /> porque el archivo ya existe.</translation> <translation id="1414981605391750300">Se está estableciendo la comunicación con Google. Esta acción puede demorar unos minutos…</translation> <translation id="1416550906796893042">Versión de la aplicación</translation> @@ -80,6 +81,7 @@ <translation id="1566400915470565838">Para usar <ph name="APP_NAME" />, conéctate a Internet.</translation> <translation id="1569387923882100876">Dispositivo conectado</translation> <translation id="1571304935088121812">Copiar el nombre de usuario</translation> +<translation id="1576370611341449972">La descarga solo se realiza a través de una red Wi-Fi</translation> <translation id="1612196535745283361">Chrome debe acceder a la ubicación para buscar dispositivos. El acceso a la ubicación está <ph name="BEGIN_LINK" />desactivado en este dispositivo<ph name="END_LINK" />.</translation> <translation id="162035744160882748">Activar la sincronización, la personalización y otros servicios de Google</translation> <translation id="1620510694547887537">Cámara</translation> @@ -344,6 +346,7 @@ <translation id="3810838688059735925">Video</translation> <translation id="3810973564298564668">Administrar</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> descargas borradas</translation> +<translation id="3819562311292413223">Descargar artículos para ti</translation> <translation id="3822502789641063741">¿Borrar el almacenamiento de sitios?</translation> <translation id="385051799172605136">Atrás</translation> <translation id="3859306556332390985">Buscar más adelante</translation> @@ -383,6 +386,7 @@ <translation id="4113030288477039509">Administrado por tu administrador</translation> <translation id="4116038641877404294">Descarga las páginas para usarlas sin conexión</translation> <translation id="4127069705158143605">{BOOKMARKS_COUNT,plural, =1{%1$d favorito}other{%1$d favoritos}}</translation> +<translation id="4149994727733219643">Vista simplificada para páginas web</translation> <translation id="4159800535322890630">Impedir que los sitios accedan a los sensores</translation> <translation id="4165986682804962316">Configuración del sitio</translation> <translation id="4170011742729630528">El servicio no se encuentra disponible; vuelve a intentarlo más tarde.</translation> @@ -553,6 +557,7 @@ <translation id="5512137114520586844"><ph name="PARENT_NAME" /> administra esta cuenta.</translation> <translation id="5514904542973294328">El administrador de este dispositivo inhabilitó esta opción</translation> <translation id="5515439363601853141">Desbloquea la pantalla para ver tu contraseña</translation> +<translation id="5515716148775388141">Tus íconos están en la parte inferior de la pantalla</translation> <translation id="5517095782334947753">Tienes favoritos, historial, contraseñas y otras opciones de configuración de <ph name="FROM_ACCOUNT" />.</translation> <translation id="5524843473235508879">Se bloqueó el redireccionamiento</translation> <translation id="5527082711130173040">Chrome debe acceder a la ubicación para buscar dispositivos. <ph name="BEGIN_LINK1" />Actualiza los permisos<ph name="END_LINK1" />. El acceso a la ubicación también está <ph name="BEGIN_LINK2" />desactivado en este dispositivo<ph name="END_LINK2" />.</translation> @@ -756,6 +761,7 @@ <translation id="7016516562562142042">Se habilitó para el motor de búsqueda actual</translation> <translation id="7021515813996758557">Se descargó <ph name="FILE_NAME" /></translation> <translation id="7022756207310403729">Abrir en el navegador</translation> +<translation id="702463548815491781">Se recomienda cuando TalkBack o "Accesibilidad mejorada" están activadas</translation> <translation id="7029809446516969842">Contraseñas</translation> <translation id="7031882061095297553">Sincronizar con</translation> <translation id="7032663816368481562">Cuando presionas Más contenido similar <ph name="ICON" /> en la barra de direcciones, se mostrarán vínculos rápidos a páginas relacionadas. Se envían a Google las URL de las páginas que visitas.</translation> @@ -784,6 +790,7 @@ <translation id="7251326866581677552">Bloqueados de algunos sitios</translation> <translation id="7253272406652746122">Agrega una cuenta de Google desde la página Cuentas en la app de Configuración del dispositivo.</translation> <translation id="7274013316676448362">Sitio bloqueado</translation> +<translation id="72867290065237936">Presiona este botón para cambiar entre las sugerencias de contraseña y el teclado</translation> <translation id="729975465115245577">Tu dispositivo no tiene una app que pueda almacenar el archivo de contraseñas.</translation> <translation id="7302081693174882195">Detalles: Ordenados por cantidad de datos ahorrados</translation> <translation id="7333031090786104871">Aún se está agregando el sitio anterior</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb index d1cb900..e2e0863 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
@@ -61,6 +61,7 @@ <translation id="1404122904123200417">Upotettu osoitteeseen <ph name="WEBSITE_URL" /></translation> <translation id="1406000523432664303">Do Not Track</translation> <translation id="1407135791313364759">Avaa kaikki</translation> +<translation id="1409426117486808224">Yksinkertaisempi avoimien välilehtien näkymä</translation> <translation id="1409879593029778104">Tiedoston <ph name="FILE_NAME" /> lataus estettiin, koska tiedosto on jo olemassa.</translation> <translation id="1414981605391750300">Otetaan yhteyttä Googleen. Tämä voi kestää hetken…</translation> <translation id="1416550906796893042">Sovellusversio</translation> @@ -80,6 +81,7 @@ <translation id="1566400915470565838"><ph name="APP_NAME" /> edellyttää internetyhteyttä.</translation> <translation id="1569387923882100876">Yhdistetty laite</translation> <translation id="1571304935088121812">Kopioi käyttäjänimi</translation> +<translation id="1576370611341449972">Ladataan vain Wi-Fi-yhteydellä</translation> <translation id="1612196535745283361">Chrome tarvitsee sijaintitietoja hakeakseen laitteita. Sijaintitiedot on <ph name="BEGIN_LINK" />poistettu käytöstä tällä laitteella<ph name="END_LINK" />.</translation> <translation id="162035744160882748">Ota synkronointi, personointi ja muut Google-palvelut käyttöön</translation> <translation id="1620510694547887537">Kamera</translation> @@ -344,6 +346,7 @@ <translation id="3810838688059735925">Video</translation> <translation id="3810973564298564668">Hallinnoi</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> latausta poistettiin.</translation> +<translation id="3819562311292413223">Lataa sinulle valittuja artikkeleita</translation> <translation id="3822502789641063741">Poistetaanko tiedot?</translation> <translation id="385051799172605136">Edellinen</translation> <translation id="3859306556332390985">Kelaa eteenpäin</translation> @@ -383,6 +386,7 @@ <translation id="4113030288477039509">Järjestelmänvalvojasi hallinnoima</translation> <translation id="4116038641877404294">Lataa sivuja offline-käyttöä varten.</translation> <translation id="4127069705158143605">{BOOKMARKS_COUNT,plural, =1{%1$d kirjanmerkki}other{%1$d kirjanmerkkiä}}</translation> +<translation id="4149994727733219643">Yksinkertaisempi sivunäkymä</translation> <translation id="4159800535322890630">Estä sivustoja käyttämästä tunnistimiasi</translation> <translation id="4165986682804962316">Sivustoasetukset</translation> <translation id="4170011742729630528">Palvelu ei ole käytettävissä. Yritä myöhemmin uudelleen.</translation> @@ -553,6 +557,7 @@ <translation id="5512137114520586844">Tätä tiliä hallinnoi <ph name="PARENT_NAME" />.</translation> <translation id="5514904542973294328">Laitteen järjestelmänvalvojan estämä</translation> <translation id="5515439363601853141">Avaa lukitus nähdäksesi salasanan</translation> +<translation id="5515716148775388141">Kuvakkeet siirrettiin näytön alareunaan</translation> <translation id="5517095782334947753">Tililläsi <ph name="FROM_ACCOUNT" /> on kirjanmerkkejä, salasanoja ja muita asetuksia.</translation> <translation id="5524843473235508879">Uudelleenohjaus estetty</translation> <translation id="5527082711130173040">Chrome tarvitsee sijaintitietoja hakeakseen laitteita. <ph name="BEGIN_LINK1" />Päivitä käyttöoikeudet<ph name="END_LINK1" />. Sijaintitiedot on lisäksi <ph name="BEGIN_LINK2" />poistettu käytöstä tällä laitteella<ph name="END_LINK2" />.</translation> @@ -756,6 +761,7 @@ <translation id="7016516562562142042">Sallittu nykyisellä hakukoneella</translation> <translation id="7021515813996758557"><ph name="FILE_NAME" /> ladattiin.</translation> <translation id="7022756207310403729">Avaa selaimessa</translation> +<translation id="702463548815491781">Suositellaan käytettäväksi, kun TalkBack tai Kytkimen käyttö on päällä</translation> <translation id="7029809446516969842">Salasanat</translation> <translation id="7031882061095297553">Synkronoi tilille</translation> <translation id="7032663816368481562">Kun valitset osoitepalkista Lisää samanlaisia <ph name="ICON" />, näet pikalinkkejä aiheeseen liittyville sivuille. Avaamiesi sivujen URL-osoitteet lähetetään Googlelle.</translation> @@ -784,6 +790,7 @@ <translation id="7251326866581677552">Joidenkin sivustojen mainokset estetty</translation> <translation id="7253272406652746122">Lisää Google-tili laitteen Asetukset-sovelluksen Tilit-sivulla.</translation> <translation id="7274013316676448362">Estetty sivusto</translation> +<translation id="72867290065237936">Vaihtele salasanaehdotusten ja näppäimistön välillä napauttamalla</translation> <translation id="729975465115245577">Laitteella ei ole sovellusta, johon salasanatiedoston voisi tallentaa.</translation> <translation id="7302081693174882195">Lisätiedot: Lajiteltu säästetyn datan mukaan</translation> <translation id="7333031090786104871">Edellisen sivuston lisääminen kesken</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb index 65a79c0..51da793 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
@@ -61,6 +61,7 @@ <translation id="1404122904123200417">Naka-embed sa <ph name="WEBSITE_URL" /></translation> <translation id="1406000523432664303">“Huwag Subaybayan”</translation> <translation id="1407135791313364759">Buksan lahat</translation> +<translation id="1409426117486808224">Pinasimpleng view para sa mga bukas na tab</translation> <translation id="1409879593029778104">Pinigilan ang pag-download sa <ph name="FILE_NAME" /> dahil may ganitong file na sa kasalukuyan.</translation> <translation id="1414981605391750300">Nakikipag-ugnayan sa Google. Maaari itong umabot nang isang minuto…</translation> <translation id="1416550906796893042">Bersyon ng application</translation> @@ -80,6 +81,7 @@ <translation id="1566400915470565838">Upang magamit ang <ph name="APP_NAME" />, kumonekta sa internet.</translation> <translation id="1569387923882100876">Nakakonektang Device</translation> <translation id="1571304935088121812">Kopyahin ang username</translation> +<translation id="1576370611341449972">Makakapag-download lang gamit ang Wi-Fi</translation> <translation id="1612196535745283361">Kailangan ng Chrome ng access sa lokasyon upang magkapag-scan ng mga device. Ang access sa lokasyon ay <ph name="BEGIN_LINK" />naka-off para sa device na ito<ph name="END_LINK" />.</translation> <translation id="162035744160882748">I-on ang pag-sync, pag-personalize, at iba pang serbisyo ng Google</translation> <translation id="1620510694547887537">Camera</translation> @@ -344,6 +346,7 @@ <translation id="3810838688059735925">Video</translation> <translation id="3810973564298564668">Mamahala</translation> <translation id="3819178904835489326">Na-delete ang <ph name="NUMBER_OF_DOWNLOADS" /> (na) pag-download</translation> +<translation id="3819562311292413223">Mag-download ng mga artikulo para sa iyo</translation> <translation id="3822502789641063741">I-clear ang storage ng site?</translation> <translation id="385051799172605136">Bumalik</translation> <translation id="3859306556332390985">Maghanap nang pasulong</translation> @@ -383,6 +386,7 @@ <translation id="4113030288477039509">Pinamamahalaan ng iyong administrator</translation> <translation id="4116038641877404294">I-download ang mga page upang magamit ang mga ito offline</translation> <translation id="4127069705158143605">{BOOKMARKS_COUNT,plural, =1{%1$d bookmark}one{%1$d bookmark}other{%1$d na bookmark}}</translation> +<translation id="4149994727733219643">Pinasimpleng view para sa mga web page</translation> <translation id="4159800535322890630">Mag-block ng mga site sa pag-access sa iyong mga sensor</translation> <translation id="4165986682804962316">Mga setting ng site</translation> <translation id="4170011742729630528">Hindi available ang serbisyo; subukang muli sa ibang pagkakataon.</translation> @@ -553,6 +557,7 @@ <translation id="5512137114520586844">Pinapamahalaan ang account na ito ng <ph name="PARENT_NAME" />.</translation> <translation id="5514904542973294328">Na-disable ng administrator ng device na ito</translation> <translation id="5515439363601853141">I-unlock upang tingnan ang iyong password</translation> +<translation id="5515716148775388141">Nailipat ang iyong mga icon sa ibaba ng screen</translation> <translation id="5517095782334947753">Mayroon kang mga bookmark, history, password at iba pang mga setting mula sa <ph name="FROM_ACCOUNT" />.</translation> <translation id="5524843473235508879">Na-block ang pag-redirect.</translation> <translation id="5527082711130173040">Kailangan ng Chrome ng access sa lokasyon upang makapag-scan ng mga device. <ph name="BEGIN_LINK1" />I-update ang mga pahintulot<ph name="END_LINK1" />. Ang access sa lokasyon ay <ph name="BEGIN_LINK2" />naka-off din para sa device na ito<ph name="END_LINK2" />.</translation> @@ -756,6 +761,7 @@ <translation id="7016516562562142042">Pinapayagan para sa kasalukuyang search engine</translation> <translation id="7021515813996758557">Na-download na ang <ph name="FILE_NAME" /></translation> <translation id="7022756207310403729">Buksan sa browser</translation> +<translation id="702463548815491781">Inirerekomenda kapag naka-on ang TalkBack o Switch Access</translation> <translation id="7029809446516969842">Mga Password</translation> <translation id="7031882061095297553">I-sync sa</translation> <translation id="7032663816368481562">Kapag na-tap mo ang Higit pa tulad nito <ph name="ICON" /> sa address bar, ipakita ang mga mabilisang link ng mga kaugnay na page. Ipinapadala sa Google ang mga URL na binibisita mo.</translation> @@ -784,6 +790,7 @@ <translation id="7251326866581677552">Naka-block sa ilang site</translation> <translation id="7253272406652746122">Magdagdag ng Google Account mula sa page na Mga Account sa app na Mga Setting ng iyong device.</translation> <translation id="7274013316676448362">Naka-block na site</translation> +<translation id="72867290065237936">I-tap para mag-toggle sa pagitan ng mga suhestyon ng password at keyboard</translation> <translation id="729975465115245577">Walang app sa iyong device upang ma-store ang file ng mga password.</translation> <translation id="7302081693174882195">Mga detalye: Pinagbukud-bukod ayon sa laki ng natipid na data</translation> <translation id="7333031090786104871">Nagdaragdag pa rin ng nakaraang site</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb index 33c8aa65..e08e1a5 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
@@ -61,6 +61,7 @@ <translation id="1404122904123200417">Beágyazva itt: <ph name="WEBSITE_URL" /></translation> <translation id="1406000523432664303">„Nincs nyomon követés”</translation> <translation id="1407135791313364759">Összes megnyitása</translation> +<translation id="1409426117486808224">A megnyitott lapok egyszerűsített nézete</translation> <translation id="1409879593029778104">A következő fájl letöltését a böngésző megakadályozta, mert a fájl már létezik: <ph name="FILE_NAME" />.</translation> <translation id="1414981605391750300">Kapcsolatfelvétel a Google-lal… ez eltarthat pár percig…</translation> <translation id="1416550906796893042">Alkalmazás verziószáma</translation> @@ -80,6 +81,7 @@ <translation id="1566400915470565838">A(z) <ph name="APP_NAME" /> használatához internetkapcsolatra van szükség.</translation> <translation id="1569387923882100876">Csatlakoztatott eszköz</translation> <translation id="1571304935088121812">Felhasználónév másolása</translation> +<translation id="1576370611341449972">Letöltés csak Wi-Fi-n keresztül</translation> <translation id="1612196535745283361">A Chrome-nak hozzá kell férnie a tartózkodási helyhez, hogy eszközöket kereshessen. A tartózkodási helyhez való hozzáférés <ph name="BEGIN_LINK" />ki van kapcsolva ezen az eszközön<ph name="END_LINK" />.</translation> <translation id="162035744160882748">A szinkronizálás, személyre szabás és más Google-szolgáltatások bekapcsolása</translation> <translation id="1620510694547887537">Kamera</translation> @@ -344,6 +346,7 @@ <translation id="3810838688059735925">Videó</translation> <translation id="3810973564298564668">Szerkesztés</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> letöltés törölve</translation> +<translation id="3819562311292413223">Cikkek Önnek – letöltés</translation> <translation id="3822502789641063741">Törli a webhely tárhelyét?</translation> <translation id="385051799172605136">Vissza</translation> <translation id="3859306556332390985">Ugrás előre</translation> @@ -383,6 +386,7 @@ <translation id="4113030288477039509">A rendszergazdája kezeli</translation> <translation id="4116038641877404294">Töltse le az oldalakat, hogy offline is használhassa őket</translation> <translation id="4127069705158143605">{BOOKMARKS_COUNT,plural, =1{%1$d könyvjelző}other{%1$d könyvjelző}}</translation> +<translation id="4149994727733219643">Weboldalak egyszerűsített nézete</translation> <translation id="4159800535322890630">Érzékelőkhöz való hozzáférés megtiltása webhelyeknek</translation> <translation id="4165986682804962316">Webhelybeállítások</translation> <translation id="4170011742729630528">A szolgáltatás nem érhető el, próbálja újra később.</translation> @@ -553,6 +557,7 @@ <translation id="5512137114520586844">A fiók kezelője: <ph name="PARENT_NAME" />.</translation> <translation id="5514904542973294328">Letiltotta az eszköz rendszergazdája</translation> <translation id="5515439363601853141">Oldja fel a képernyőzárat a jelszó megtekintéséhez</translation> +<translation id="5515716148775388141">Az ikonok a képernyő aljára kerültek</translation> <translation id="5517095782334947753">Vannak könyvjelzői, előzményei, jelszavai és más beállításai a(z) <ph name="FROM_ACCOUNT" /> fiókból.</translation> <translation id="5524843473235508879">Átirányítás letiltva.</translation> <translation id="5527082711130173040">A Chrome-nak hozzá kell férnie a tartózkodási helyhez, hogy eszközöket kereshessen. <ph name="BEGIN_LINK1" />Frissítse az engedélyeket<ph name="END_LINK1" />. A helyadatokhoz való hozzáférés is <ph name="BEGIN_LINK2" />ki van kapcsolva ezen az eszközön<ph name="END_LINK2" />.</translation> @@ -756,6 +761,7 @@ <translation id="7016516562562142042">Engedélyezett a jelenlegi keresőmotor számára</translation> <translation id="7021515813996758557">A(z) <ph name="FILE_NAME" /> letöltve</translation> <translation id="7022756207310403729">Megnyitás böngészőben</translation> +<translation id="702463548815491781">Ajánlott, amikor a TalkBack vagy a Kapcsolóalapú hozzáférés be van kapcsolva</translation> <translation id="7029809446516969842">Jelszavak</translation> <translation id="7031882061095297553">Szinkronizálás a következőknél</translation> <translation id="7032663816368481562">Ha a címsávban a További hasonlók <ph name="ICON" /> lehetőségre koppint, gyorslinkek jelennek meg kapcsolódó oldalakhoz. A felkeresett oldalak URL-jeit a rendszer elküldi a Google-nak.</translation> @@ -784,6 +790,7 @@ <translation id="7251326866581677552">Letiltva egyes webhelyeknél</translation> <translation id="7253272406652746122">Adjon hozzá Google-fiókot az eszköz Beállítások alkalmazásának Fiókok oldalán.</translation> <translation id="7274013316676448362">Letiltott oldal</translation> +<translation id="72867290065237936">Koppintson a jelszójavaslatok és a billentyűzet közti váltáshoz</translation> <translation id="729975465115245577">Az eszközön nincs olyan alkalmazás, amely tárolni tudja a jelszavakat tartalmazó fájlt.</translation> <translation id="7302081693174882195">Részletek: Megtakarított adatmennyiség szerinti rendezés</translation> <translation id="7333031090786104871">Az előző webhely hozzáadása még folyamatban van</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb index 359b809..2575210 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
@@ -61,6 +61,7 @@ <translation id="1404122904123200417">埋め込み先: <ph name="WEBSITE_URL" /></translation> <translation id="1406000523432664303">「トラッキング拒否」</translation> <translation id="1407135791313364759">すべて開く</translation> +<translation id="1409426117486808224">開いているタブの簡易表示</translation> <translation id="1409879593029778104"><ph name="FILE_NAME" /> は既に存在しているためダウンロードできませんでした。</translation> <translation id="1414981605391750300">Google に問い合わせています。これには 1 分ほどかかる場合があります…</translation> <translation id="1416550906796893042">アプリケーションのバージョン</translation> @@ -80,6 +81,7 @@ <translation id="1566400915470565838"><ph name="APP_NAME" /> を使用するには、インターネットに接続してください。</translation> <translation id="1569387923882100876">接続しているデバイス</translation> <translation id="1571304935088121812">ユーザー名をコピー</translation> +<translation id="1576370611341449972">ダウンロードは Wi-Fi 接続時にのみ行われます</translation> <translation id="1612196535745283361">Chrome ではデバイスをスキャンするために現在地情報にアクセスする必要があります。現在地情報へのアクセスは<ph name="BEGIN_LINK" />この端末でオフになっています<ph name="END_LINK" />。</translation> <translation id="162035744160882748">同期、カスタマイズ、その他の Google サービスを有効にする</translation> <translation id="1620510694547887537">カメラ</translation> @@ -344,6 +346,7 @@ <translation id="3810838688059735925">動画</translation> <translation id="3810973564298564668">管理</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> 件のダウンロードを削除しました</translation> +<translation id="3819562311292413223">おすすめの記事をダウンロード</translation> <translation id="3822502789641063741">サイトのストレージを消去しますか?</translation> <translation id="385051799172605136">戻る</translation> <translation id="3859306556332390985">前方にシーク再生</translation> @@ -383,6 +386,7 @@ <translation id="4113030288477039509">管理者により管理されています</translation> <translation id="4116038641877404294">ページをダウンロードするとオフラインで使用できるようになります</translation> <translation id="4127069705158143605">{BOOKMARKS_COUNT,plural, =1{%1$d 個のブックマーク}other{%1$d 個のブックマーク}}</translation> +<translation id="4149994727733219643">ウェブページの簡易表示</translation> <translation id="4159800535322890630">サイトによるセンサーへのアクセスをブロックする</translation> <translation id="4165986682804962316">サイトの設定</translation> <translation id="4170011742729630528">このサービスはご利用になれません。しばらくしてからもう一度お試しください。</translation> @@ -553,6 +557,7 @@ <translation id="5512137114520586844">このアカウントは <ph name="PARENT_NAME" /> によって管理されています。</translation> <translation id="5514904542973294328">この端末の管理者によって無効にされています</translation> <translation id="5515439363601853141">パスワードを表示するにはロックを解除してください</translation> +<translation id="5515716148775388141">アイコンは画面下部に移動しました</translation> <translation id="5517095782334947753"><ph name="FROM_ACCOUNT" /> のブックマーク、履歴、パスワードとその他の設定を使用できます。</translation> <translation id="5524843473235508879">リダイレクトがブロックされました。</translation> <translation id="5527082711130173040">Chrome ではデバイスをスキャンするために現在地情報にアクセスする必要があります。<ph name="BEGIN_LINK1" />権限を更新<ph name="END_LINK1" />してください。また、現在地情報へのアクセスが<ph name="BEGIN_LINK2" />この端末でオフになっています<ph name="END_LINK2" />。</translation> @@ -756,6 +761,7 @@ <translation id="7016516562562142042">現在の検索エンジンに対しては許可</translation> <translation id="7021515813996758557"><ph name="FILE_NAME" /> をダウンロードしました</translation> <translation id="7022756207310403729">ブラウザで開く</translation> +<translation id="702463548815491781">TalkBack またはスイッチ アクセスを有効にしている場合におすすめです</translation> <translation id="7029809446516969842">パスワード</translation> <translation id="7031882061095297553">同期先</translation> <translation id="7032663816368481562">アドレスバーの「もっと見る」<ph name="ICON" /> をタップしたときに関連ページへのクイックリンクを表示します。このとき、アクセスしたページの URL が Google に送信されます。</translation> @@ -784,6 +790,7 @@ <translation id="7251326866581677552">一部のサイトでブロックされています</translation> <translation id="7253272406652746122">端末の設定アプリのアカウント ページで Google アカウントを追加してください。</translation> <translation id="7274013316676448362">ブロック中のサイト</translation> +<translation id="72867290065237936">タップするとパスワード候補表示とキーボードが切り替わります</translation> <translation id="729975465115245577">お使いの端末にはパスワード ファイルを保存するためのアプリがインストールされていません。</translation> <translation id="7302081693174882195">詳細: データ節約量の順</translation> <translation id="7333031090786104871">前のサイトを追加中です</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb index 0292e7ef..abe24cb 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
@@ -61,6 +61,7 @@ <translation id="1404122904123200417"><ph name="WEBSITE_URL" />에 포함됨</translation> <translation id="1406000523432664303">'추적 안함'</translation> <translation id="1407135791313364759">모두 열기</translation> +<translation id="1409426117486808224">열린 탭 간단히 보기</translation> <translation id="1409879593029778104">파일이 이미 존재하여 <ph name="FILE_NAME" /> 다운로드가 중지되었습니다.</translation> <translation id="1414981605391750300">Google에 연결하는 중입니다. 잠시만 기다려 주세요...</translation> <translation id="1416550906796893042">애플리케이션 버전</translation> @@ -80,6 +81,7 @@ <translation id="1566400915470565838"><ph name="APP_NAME" />을(를) 사용하려면 인터넷에 연결하세요.</translation> <translation id="1569387923882100876">연결된 기기</translation> <translation id="1571304935088121812">사용자 이름 복사</translation> +<translation id="1576370611341449972">Wi-Fi에서만 다운로드 실행</translation> <translation id="1612196535745283361">기기를 스캔하려면 Chrome에서 위치 정보에 액세스해야 합니다. 위치 정보 액세스 권한이 <ph name="BEGIN_LINK" />이 기기에서 사용 중지<ph name="END_LINK" />되어 있습니다.</translation> <translation id="162035744160882748">동기화, 맞춤설정 및 기타 Google 서비스 사용 설정</translation> <translation id="1620510694547887537">카메라</translation> @@ -344,6 +346,7 @@ <translation id="3810838688059735925">동영상</translation> <translation id="3810973564298564668">관리</translation> <translation id="3819178904835489326">다운로드 <ph name="NUMBER_OF_DOWNLOADS" />개 삭제됨</translation> +<translation id="3819562311292413223">추천 기사 다운로드</translation> <translation id="3822502789641063741">사이트 저장공간을 삭제하시겠습니까?</translation> <translation id="385051799172605136">뒤로</translation> <translation id="3859306556332390985">앞으로 탐색</translation> @@ -383,6 +386,7 @@ <translation id="4113030288477039509">관리자가 관리합니다.</translation> <translation id="4116038641877404294">페이지를 다운로드하여 오프라인에서 사용하세요.</translation> <translation id="4127069705158143605">{BOOKMARKS_COUNT,plural, =1{북마크 %1$d개}other{북마크 %1$d개}}</translation> +<translation id="4149994727733219643">웹페이지 간단히 보기</translation> <translation id="4159800535322890630">사이트의 센서 액세스 차단</translation> <translation id="4165986682804962316">사이트 설정</translation> <translation id="4170011742729630528">서비스를 사용할 수 없습니다. 나중에 다시 시도해 주세요.</translation> @@ -553,6 +557,7 @@ <translation id="5512137114520586844"><ph name="PARENT_NAME" />님이 관리하는 계정입니다.</translation> <translation id="5514904542973294328">기기 관리자가 사용 중지함</translation> <translation id="5515439363601853141">비밀번호를 보려면 잠금 해제하세요</translation> +<translation id="5515716148775388141">아이콘이 화면 하단으로 이동했습니다.</translation> <translation id="5517095782334947753"><ph name="FROM_ACCOUNT" />에서 가져온 북마크, 방문 기록, 비밀번호 및 기타 설정이 있습니다.</translation> <translation id="5524843473235508879">리디렉션이 차단되었습니다.</translation> <translation id="5527082711130173040">기기를 스캔하려면 Chrome에서 위치 정보에 액세스해야 합니다. <ph name="BEGIN_LINK1" />권한을 업데이트<ph name="END_LINK1" />하세요. 또한 <ph name="BEGIN_LINK2" />이 기기에서도 위치 정보 액세스 권한이 사용 중지<ph name="END_LINK2" />되어 있습니다.</translation> @@ -756,6 +761,7 @@ <translation id="7016516562562142042">현재 검색 엔진에 허용됨</translation> <translation id="7021515813996758557"><ph name="FILE_NAME" />(이)가 다운로드됨</translation> <translation id="7022756207310403729">브라우저에서 열기</translation> +<translation id="702463548815491781">음성 안내 지원 또는 스위치 제어를 사용 중일 때 권장됩니다.</translation> <translation id="7029809446516969842">비밀번호</translation> <translation id="7031882061095297553">동기화 가능 계정</translation> <translation id="7032663816368481562">검색주소창에서 비슷한 항목 더보기 <ph name="ICON" />를 탭하면 관련 페이지의 빠른 링크가 표시됩니다. 방문한 페이지의 URL이 Google로 전송됩니다.</translation> @@ -784,6 +790,7 @@ <translation id="7251326866581677552">일부 사이트에서 차단됨</translation> <translation id="7253272406652746122">기기 설정 앱의 계정 페이지에서 Google 계정을 추가하세요.</translation> <translation id="7274013316676448362">차단된 사이트</translation> +<translation id="72867290065237936">탭하여 비밀번호 추천과 키보드 간에 전환하세요.</translation> <translation id="729975465115245577">기기에 비밀번호 파일을 저장할 수 있는 앱이 없습니다.</translation> <translation id="7302081693174882195">세부정보: 저장된 데이터 양에 따라 정렬</translation> <translation id="7333031090786104871">아직 이전 사이트 추가 중</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb index 81af827..358ea27 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
@@ -61,6 +61,7 @@ <translation id="1404122904123200417">Įterpta į <ph name="WEBSITE_URL" /></translation> <translation id="1406000523432664303">Funkcija „Nestebėti“</translation> <translation id="1407135791313364759">Atidaryti viską</translation> +<translation id="1409426117486808224">Supaprastinta atidarytų skirtukų peržiūra</translation> <translation id="1409879593029778104">Neleidžiama atsisiųsti „<ph name="FILE_NAME" />“, nes failas jau yra.</translation> <translation id="1414981605391750300">Susisiekiama su „Google“. Tai gali šiek tiek užtrukti…</translation> <translation id="1416550906796893042">Programos versija</translation> @@ -80,6 +81,7 @@ <translation id="1566400915470565838">Jei norite naudoti „<ph name="APP_NAME" />“, prisijunkite prie interneto.</translation> <translation id="1569387923882100876">Prijungtas įrenginys</translation> <translation id="1571304935088121812">Kopijuoti naudotojo vardą</translation> +<translation id="1576370611341449972">Atsisiunčiama tik prisijungus prie „Wi-Fi“</translation> <translation id="1612196535745283361">„Chrome“ reikalinga prieiga prie informacijos apie vietovę, kad galėtų nuskaityti įrenginius. Galimybė pasiekti informaciją apie vietovę <ph name="BEGIN_LINK" />išjungta šiame įrenginyje<ph name="END_LINK" />.</translation> <translation id="162035744160882748">Įjunkite sinchronizavimą, suasmeninimą ir kitas „Google“ paslaugas</translation> <translation id="1620510694547887537">Kamera</translation> @@ -344,6 +346,7 @@ <translation id="3810838688059735925">Vaizdo</translation> <translation id="3810973564298564668">Valdyti</translation> <translation id="3819178904835489326">Ištrinta atsisiuntimų: <ph name="NUMBER_OF_DOWNLOADS" /></translation> +<translation id="3819562311292413223">Atsisiunčiami jums skirti straipsniai</translation> <translation id="3822502789641063741">Išvalyti svet. saugyklą?</translation> <translation id="385051799172605136">Grįžti</translation> <translation id="3859306556332390985">Eiti pirmyn</translation> @@ -383,6 +386,7 @@ <translation id="4113030288477039509">Tvarko jūsų administratorius</translation> <translation id="4116038641877404294">Atsisiųskite puslapius, kad galėtumėte naudoti juos neprisijungę</translation> <translation id="4127069705158143605">{BOOKMARKS_COUNT,plural, =1{%1$d žymė}one{%1$d žymė}few{%1$d žymės}many{%1$d žymės}other{%1$d žymių}}</translation> +<translation id="4149994727733219643">Supaprastinta tinklalapių peržiūra</translation> <translation id="4159800535322890630">Blokuoti svetaines, kad nepasiektų jutiklių</translation> <translation id="4165986682804962316">Svetainės nustatymai</translation> <translation id="4170011742729630528">Paslauga nepasiekiama; vėliau bandykite dar kartą.</translation> @@ -553,6 +557,7 @@ <translation id="5512137114520586844">Šią paskyrą tvarko <ph name="PARENT_NAME" />.</translation> <translation id="5514904542973294328">Išjungė šio įrenginio administratorius</translation> <translation id="5515439363601853141">Atrakinkite, kad galėtumėte peržiūrėti slaptažodį</translation> +<translation id="5515716148775388141">Jūsų piktogramos perkeltos į ekrano apačią</translation> <translation id="5517095782334947753">Turite žymių, istorijos duomenų, slaptažodžių ir kitų nustatymų iš <ph name="FROM_ACCOUNT" />.</translation> <translation id="5524843473235508879">Peradresavimas užblokuotas.</translation> <translation id="5527082711130173040">„Chrome“ reikalinga prieiga prie informacijos apie vietovę, kad galėtų nuskaityti įrenginius. <ph name="BEGIN_LINK1" />Atnaujinkite leidimus<ph name="END_LINK1" />. Be to, galimybė pasiekti informaciją apie vietovę <ph name="BEGIN_LINK2" />išjungta šiame įrenginyje<ph name="END_LINK2" />.</translation> @@ -756,6 +761,7 @@ <translation id="7016516562562142042">Leidžiama dabartiniam paieškos varikliui</translation> <translation id="7021515813996758557">Failas „<ph name="FILE_NAME" />“ atsisiųstas</translation> <translation id="7022756207310403729">Atidaryti naršyklėje</translation> +<translation id="702463548815491781">Rekomenduojama, kai įjungta „TalkBack“ arba prieiga jungikliu</translation> <translation id="7029809446516969842">Slaptažodžiai</translation> <translation id="7031882061095297553">Sinchronizavimas su</translation> <translation id="7032663816368481562">Adreso juostoje palietus „Daugiau panašių į šį“ <ph name="ICON" /> rodomos sparčiosios nuorodos į susijusius puslapius. Puslapių, kuriuose lankotės, URL siunčiami į sistemą „Google“.</translation> @@ -784,6 +790,7 @@ <translation id="7251326866581677552">Užblokuota iš kelių svetainių</translation> <translation id="7253272406652746122">Pridėkite „Google“ paskyrą iš įrenginio Nustatymų programos puslapio „Paskyros“.</translation> <translation id="7274013316676448362">Užblokuota svetainė</translation> +<translation id="72867290065237936">Norėdami perjungti tarp slaptažodžio pasiūlymų ir klaviatūros, palieskite</translation> <translation id="729975465115245577">Įrenginyje nėra slaptažodžių failo saugojimo programos.</translation> <translation id="7302081693174882195">Išsami informacija: surūšiuota pagal išsaugotų duomenų kiekį</translation> <translation id="7333031090786104871">Vis dar pridedama ankstesnė svetainė</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb index ec71f15..757bc5d297 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
@@ -61,6 +61,7 @@ <translation id="1404122904123200417">Встроено в <ph name="WEBSITE_URL" /></translation> <translation id="1406000523432664303">Запрет отслеживания</translation> <translation id="1407135791313364759">Открыть все</translation> +<translation id="1409426117486808224">Упрощенный просмотр открытых вкладок</translation> <translation id="1409879593029778104">Скачивание файла <ph name="FILE_NAME" /> остановлено, так как он уже существует.</translation> <translation id="1414981605391750300">Подключение к Google. Подождите…</translation> <translation id="1416550906796893042">Версия приложения</translation> @@ -80,6 +81,7 @@ <translation id="1566400915470565838">Чтобы использовать приложение "<ph name="APP_NAME" />", подключитесь к Интернету.</translation> <translation id="1569387923882100876">Подключенное устройство</translation> <translation id="1571304935088121812">Копировать имя пользователя</translation> +<translation id="1576370611341449972">Скачивание только при подключении к сети Wi-Fi</translation> <translation id="1612196535745283361">Чтобы выполнить поиск устройств, браузеру Chrome нужен доступ к геоданным. <ph name="BEGIN_LINK" />Включить<ph name="END_LINK" /></translation> <translation id="162035744160882748">Включить синхронизацию, персонализацию и другие сервисы Google</translation> <translation id="1620510694547887537">Камера</translation> @@ -344,6 +346,7 @@ <translation id="3810838688059735925">Видео</translation> <translation id="3810973564298564668">Настроить</translation> <translation id="3819178904835489326">Удаленные скачивания: <ph name="NUMBER_OF_DOWNLOADS" /></translation> +<translation id="3819562311292413223">Скачивать статьи для вас</translation> <translation id="3822502789641063741">Удалить данные сайтов?</translation> <translation id="385051799172605136">Назад</translation> <translation id="3859306556332390985">Перемотать вперед</translation> @@ -383,6 +386,7 @@ <translation id="4113030288477039509">Управляется администратором</translation> <translation id="4116038641877404294">Скачивайте страницы и открывайте их без подключения к Интернету</translation> <translation id="4127069705158143605">{BOOKMARKS_COUNT,plural, =1{%1$d закладка}one{%1$d закладка}few{%1$d закладки}many{%1$d закладок}other{%1$d закладки}}</translation> +<translation id="4149994727733219643">Упрощенный просмотр веб-страниц</translation> <translation id="4159800535322890630">Запретить сайтам использовать датчики</translation> <translation id="4165986682804962316">Настройки сайтов</translation> <translation id="4170011742729630528">Сервис недоступен. Повторите попытку позже.</translation> @@ -553,6 +557,7 @@ <translation id="5512137114520586844">Этим аккаунтом управляет <ph name="PARENT_NAME" />.</translation> <translation id="5514904542973294328">Отключено администратором устройства</translation> <translation id="5515439363601853141">Чтобы увидеть пароль, разблокируйте экран</translation> +<translation id="5515716148775388141">Ваши значки теперь находятся внизу экрана</translation> <translation id="5517095782334947753">Вам доступны закладки, история, пароли и другие настройки пользователя <ph name="FROM_ACCOUNT" />.</translation> <translation id="5524843473235508879">Попытка переадресации заблокирована.</translation> <translation id="5527082711130173040">Чтобы выполнить поиск устройств, браузеру Chrome нужен доступ к геоданным. <ph name="BEGIN_LINK2" />Включите доступ<ph name="END_LINK2" /> и <ph name="BEGIN_LINK1" />обновите разрешения<ph name="END_LINK1" />.</translation> @@ -756,6 +761,7 @@ <translation id="7016516562562142042">Открыт доступ для текущей поисковой системы</translation> <translation id="7021515813996758557">Файл <ph name="FILE_NAME" /> скачан</translation> <translation id="7022756207310403729">Открыть в браузере</translation> +<translation id="702463548815491781">Рекомендовано при включенных функциях TalkBack и Switch Access</translation> <translation id="7029809446516969842">Пароли</translation> <translation id="7031882061095297553">Выберите аккаунт</translation> <translation id="7032663816368481562">URL посещенных вами страниц отправляются в Google, поэтому после нажатия кнопки "Показать похожие страницы" <ph name="ICON" /> в адресной строке вы можете увидеть соответствующие ссылки.</translation> @@ -784,6 +790,7 @@ <translation id="7251326866581677552">Заблокировано на определенных сайтах</translation> <translation id="7253272406652746122">Добавьте аккаунт Google в настройках устройства (раздел "Аккаунты").</translation> <translation id="7274013316676448362">Заблокированный сайт</translation> +<translation id="72867290065237936">Нажмите для переключения между подсказками пароля и клавиатурой</translation> <translation id="729975465115245577">На устройстве не установлено приложение для хранения файлов паролей.</translation> <translation id="7302081693174882195">Сортировка по объему сэкономленного трафика</translation> <translation id="7333031090786104871">Предыдущий сайт ещё не добавлен</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb index a6f1276..a4c8a407 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
@@ -61,6 +61,7 @@ <translation id="1404122904123200417">ฝังอยู่ใน <ph name="WEBSITE_URL" /></translation> <translation id="1406000523432664303">“ไม่ติดตาม”</translation> <translation id="1407135791313364759">เปิดทั้งหมด</translation> +<translation id="1409426117486808224">มุมมองอย่างง่ายสำหรับแท็บที่เปิดไว้</translation> <translation id="1409879593029778104">ระบบป้องกันการดาวน์โหลด <ph name="FILE_NAME" /> เพราะมีไฟล์นี้อยู่แล้ว</translation> <translation id="1414981605391750300">กำลังติดต่อ Google อาจใช้เวลาประมาณ 1 นาที…</translation> <translation id="1416550906796893042">เวอร์ชันของแอปพลิเคชัน</translation> @@ -80,6 +81,7 @@ <translation id="1566400915470565838">โปรดเชื่อมต่ออินเทอร์เน็ตเพื่อใช้ <ph name="APP_NAME" /></translation> <translation id="1569387923882100876">อุปกรณ์ที่เชื่อมต่อ</translation> <translation id="1571304935088121812">คัดลอกชื่อผู้ใช้</translation> +<translation id="1576370611341449972">การดาวน์โหลดจะเกิดขึ้นเมื่อเชื่อมต่อ Wi-Fi เท่านั้น</translation> <translation id="1612196535745283361">Chrome ต้องมีสิทธิ์เข้าถึงตำแหน่งเพื่อสแกนหาอุปกรณ์ ตัวเลือกสิทธิ์เข้าถึงตำแหน่ง<ph name="BEGIN_LINK" />สำหรับอุปกรณ์เครื่องนี้ปิดอยู่<ph name="END_LINK" /></translation> <translation id="162035744160882748">เปิดการซิงค์ การปรับเปลี่ยนในแบบของคุณ และบริการอื่นๆ ของ Google</translation> <translation id="1620510694547887537">กล้องถ่ายรูป</translation> @@ -344,6 +346,7 @@ <translation id="3810838688059735925">วิดีโอ</translation> <translation id="3810973564298564668">จัดการ</translation> <translation id="3819178904835489326">ลบการดาวน์โหลด <ph name="NUMBER_OF_DOWNLOADS" /> รายการแล้ว</translation> +<translation id="3819562311292413223">ดาวน์โหลดบทความสำหรับคุณ</translation> <translation id="3822502789641063741">ล้างพื้นที่เก็บข้อมูลเว็บไซต์ไหม</translation> <translation id="385051799172605136">กลับ</translation> <translation id="3859306556332390985">ไปข้างหน้า</translation> @@ -383,6 +386,7 @@ <translation id="4113030288477039509">มีการจัดการโดยผู้ดูแลระบบ</translation> <translation id="4116038641877404294">ดาวน์โหลดหน้าเพื่อใช้งานแบบออฟไลน์</translation> <translation id="4127069705158143605">{BOOKMARKS_COUNT,plural, =1{%1$d บุ๊กมาร์ก}other{%1$d บุ๊กมาร์ก}}</translation> +<translation id="4149994727733219643">มุมมองอย่างง่ายสำหรับหน้าเว็บ</translation> <translation id="4159800535322890630">บล็อกเว็บไซต์ไม่ให้เข้าถึงเซ็นเซอร์</translation> <translation id="4165986682804962316">การตั้งค่าไซต์</translation> <translation id="4170011742729630528">บริการนี้ยังไม่สามารถใช้ได้ โปรดลองอีกครั้งในภายหลัง</translation> @@ -553,6 +557,7 @@ <translation id="5512137114520586844">บัญชีนี้ได้รับการจัดการโดย <ph name="PARENT_NAME" /></translation> <translation id="5514904542973294328">ปิดใช้โดยผู้ดูแลระบบของอุปกรณ์นี้</translation> <translation id="5515439363601853141">ปลดล็อกเพื่อดูรหัสผ่าน</translation> +<translation id="5515716148775388141">ไอคอนต่างๆ ย้ายไปที่ด้านล่างของหน้าจอแล้ว</translation> <translation id="5517095782334947753">คุณมีบุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ จาก <ph name="FROM_ACCOUNT" /></translation> <translation id="5524843473235508879">การเปลี่ยนเส้นทางถูกบล็อก</translation> <translation id="5527082711130173040">Chrome ต้องมีสิทธิ์เข้าถึงตำแหน่งเพื่อสแกนหาอุปกรณ์ โปรด<ph name="BEGIN_LINK1" />อัปเดตสิทธิ์<ph name="END_LINK1" /> การเข้าถึงตำแหน่ง<ph name="BEGIN_LINK2" />สำหรับอุปกรณ์เครื่องนี้ยังปิดอยู่<ph name="END_LINK2" /></translation> @@ -756,6 +761,7 @@ <translation id="7016516562562142042">อนุญาตสำหรับเครื่องมือค้นหาปัจจุบัน</translation> <translation id="7021515813996758557">ดาวน์โหลด <ph name="FILE_NAME" /> แล้ว</translation> <translation id="7022756207310403729">เปิดในเบราว์เซอร์</translation> +<translation id="702463548815491781">แนะนำให้ใช้เมื่อ TalkBack หรือการเข้าถึงด้วยสวิตช์เปิดอยู่</translation> <translation id="7029809446516969842">รหัสผ่าน</translation> <translation id="7031882061095297553">ซิงค์กับ</translation> <translation id="7032663816368481562">เมื่อคุณแตะ "ดูคำแนะนำแบบนี้อีก" <ph name="ICON" /> ในแถบที่อยู่ คำแนะนำจะแสดงลิงก์ด่วนไปยังหน้าที่เกี่ยวข้อง ระบบจะส่ง URL ของหน้าที่คุณเข้าถึงไปยัง Google</translation> @@ -784,6 +790,7 @@ <translation id="7251326866581677552">บล็อกจากบางไซต์</translation> <translation id="7253272406652746122">เพิ่มบัญชี Google จากหน้า "บัญชี" ในแอปการตั้งค่าของอุปกรณ์</translation> <translation id="7274013316676448362">เว็บไซต์ที่ถูกบล็อก</translation> +<translation id="72867290065237936">แตะเพื่อสลับระหว่างการแนะนำรหัสผ่านและแป้นพิมพ์</translation> <translation id="729975465115245577">อุปกรณ์ของคุณไม่มีแอปไว้จัดเก็บไฟล์รหัสผ่าน</translation> <translation id="7302081693174882195">รายละเอียด: จัดเรียงตามปริมาณเน็ตมือถือที่ประหยัดได้</translation> <translation id="7333031090786104871">ยังเพิ่มไซต์ก่อนหน้าอยู่</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb index 5cdeae2..916dad5 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
@@ -61,6 +61,7 @@ <translation id="1404122904123200417"><ph name="WEBSITE_URL" /> sitesinde yerleşik</translation> <translation id="1406000523432664303">“Do Not Track”</translation> <translation id="1407135791313364759">Tümünü aç</translation> +<translation id="1409426117486808224">Açık sekmeler için basitleştirilmiş görünüm</translation> <translation id="1409879593029778104"><ph name="FILE_NAME" /> dosyası zaten var olduğu için indirme işlemi engellendi.</translation> <translation id="1414981605391750300">Google ile bağlantı kuruluyor. Bu işlem bir dakika sürebilir…</translation> <translation id="1416550906796893042">Uygulama sürümü</translation> @@ -80,6 +81,7 @@ <translation id="1566400915470565838"><ph name="APP_NAME" /> uygulamasını kullanmak için lütfen internete bağlanın.</translation> <translation id="1569387923882100876">Bağlı Cihaz</translation> <translation id="1571304935088121812">Kullanıcı adını kopyala</translation> +<translation id="1576370611341449972">İndirme işlemleri sadece kablosuz bağlantı olduğunda yapılır</translation> <translation id="1612196535745283361">Chrome'un cihazları taraması için konum bilgilerine erişmesi gerekiyor. Konum bilgilerine erişim <ph name="BEGIN_LINK" />bu cihaz için kapalı<ph name="END_LINK" />.</translation> <translation id="162035744160882748">Senkronizasyon, kişiselleştirme ve diğer Google hizmetlerini aç</translation> <translation id="1620510694547887537">Kamera</translation> @@ -344,6 +346,7 @@ <translation id="3810838688059735925">Video</translation> <translation id="3810973564298564668">Yönet</translation> <translation id="3819178904835489326">İndirilen <ph name="NUMBER_OF_DOWNLOADS" /> dosya silindi</translation> +<translation id="3819562311292413223">Sizin için seçilmiş makaleleri indirin</translation> <translation id="3822502789641063741">Site depo. silinsin mi?</translation> <translation id="385051799172605136">Geri</translation> <translation id="3859306556332390985">İleriye doğru git</translation> @@ -383,6 +386,7 @@ <translation id="4113030288477039509">Yöneticiniz tarafından yönetiliyor</translation> <translation id="4116038641877404294">Sayfaları çevrimdışı olarak kullanmak için indirin</translation> <translation id="4127069705158143605">{BOOKMARKS_COUNT,plural, =1{%1$d yer işareti}other{%1$d yer işareti}}</translation> +<translation id="4149994727733219643">Web sayfalarının basitleştirilmiş görünümü</translation> <translation id="4159800535322890630">Sitelerin sensörlerinize erişmesini engelleyin</translation> <translation id="4165986682804962316">Site ayarları</translation> <translation id="4170011742729630528">Hizmet kullanılamıyor, daha sonra tekrar deneyin.</translation> @@ -553,6 +557,7 @@ <translation id="5512137114520586844">Bu hesap <ph name="PARENT_NAME" /> tarafından yönetiliyor.</translation> <translation id="5514904542973294328">Bu cihazın yöneticisi tarafından devre dışı bırakıldı</translation> <translation id="5515439363601853141">Şifrenizi görüntülemek için kilidi açın</translation> +<translation id="5515716148775388141">Simgeleriniz ekranın altına taşındı</translation> <translation id="5517095782334947753"><ph name="FROM_ACCOUNT" /> hesabından yer işaretleri, geçmiş, şifreler ve diğer ayarlarınız var.</translation> <translation id="5524843473235508879">Yönlendirme engellendi.</translation> <translation id="5527082711130173040">Chrome'un cihazları taraması için konum bilgilerine erişmesi gerekiyor. <ph name="BEGIN_LINK1" />İzinleri güncelleyin<ph name="END_LINK1" />. Ayrıca, konum bilgilerine erişim <ph name="BEGIN_LINK2" />bu cihaz için kapalı<ph name="END_LINK2" />.</translation> @@ -756,6 +761,7 @@ <translation id="7016516562562142042">Geçerli arama motoru için izin verildi</translation> <translation id="7021515813996758557"><ph name="FILE_NAME" /> dosyası indirildi</translation> <translation id="7022756207310403729">Tarayıcıda aç</translation> +<translation id="702463548815491781">TalkBack veya Anahtar Erişimi açık olduğunda önerilir</translation> <translation id="7029809446516969842">Şifreler</translation> <translation id="7031882061095297553">Şununla senkronize et</translation> <translation id="7032663816368481562">Adres çubuğunda Buna benzer daha fazla <ph name="ICON" /> simgesine dokunduğunuzda, ilgili sayfaların hızlı bağlantılarını gösterir. Ziyaret ettiğiniz sayfaların URL'leri Google'a gönderilir.</translation> @@ -784,6 +790,7 @@ <translation id="7251326866581677552">Bazı sitelerde engellendi</translation> <translation id="7253272406652746122">Cihazınızın Ayarlar uygulamasındaki Hesaplar sayfasından bir Google Hesabı ekleyin.</translation> <translation id="7274013316676448362">Engellenmiş site</translation> +<translation id="72867290065237936">Şifre önerileri ve klavye arasında geçiş yapmak için dokunun</translation> <translation id="729975465115245577">Cihazınızda şifreler dosyasını depolayacak bir uygulama yok.</translation> <translation id="7302081693174882195">Ayrıntılar: Tasarruf edilen veri miktarına göre sıralı</translation> <translation id="7333031090786104871">Önceki siteyi ekleme işlemi devam ediyor.</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb index 436451b..d565c497 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
@@ -61,6 +61,7 @@ <translation id="1404122904123200417">Được nhúng trong <ph name="WEBSITE_URL" /></translation> <translation id="1406000523432664303">“Không theo dõi”</translation> <translation id="1407135791313364759">Mở tất cả</translation> +<translation id="1409426117486808224">Chế độ xem đơn giản cho tab đang mở</translation> <translation id="1409879593029778104">Đã ngăn tải xuống <ph name="FILE_NAME" /> do tệp này đã tồn tại.</translation> <translation id="1414981605391750300">Đang liên hệ với Google. Quá trình này có thể mất ít phút…</translation> <translation id="1416550906796893042">Phiên bản ứng dụng</translation> @@ -80,6 +81,7 @@ <translation id="1566400915470565838">Để sử dụng <ph name="APP_NAME" />, vui lòng kết nối Internet.</translation> <translation id="1569387923882100876">Thiết bị đã kết nối</translation> <translation id="1571304935088121812">Sao chép tên người dùng</translation> +<translation id="1576370611341449972">Chỉ tải xuống khi có Wi-Fi</translation> <translation id="1612196535745283361">Chrome cần có quyền truy cập vị trí để quét tìm thiết bị. Tính năng truy cập vị trí bị <ph name="BEGIN_LINK" />tắt cho thiết bị này<ph name="END_LINK" />.</translation> <translation id="162035744160882748">Bật tính năng đồng bộ hóa, cá nhân hóa và các dịch vụ khác của Google</translation> <translation id="1620510694547887537">Máy ảnh</translation> @@ -344,6 +346,7 @@ <translation id="3810838688059735925">Video</translation> <translation id="3810973564298564668">Quản lý</translation> <translation id="3819178904835489326">Đã xóa <ph name="NUMBER_OF_DOWNLOADS" /> bản tải xuống</translation> +<translation id="3819562311292413223">Tải bài viết dành cho bạn xuống</translation> <translation id="3822502789641063741">Xóa bộ nhớ trang web?</translation> <translation id="385051799172605136">Quay lại</translation> <translation id="3859306556332390985">Tìm kiếm tiến</translation> @@ -383,6 +386,7 @@ <translation id="4113030288477039509">Do quản trị viên của bạn quản lý</translation> <translation id="4116038641877404294">Tải trang xuống để sử dụng ngoại tuyến</translation> <translation id="4127069705158143605">{BOOKMARKS_COUNT,plural, =1{%1$d dấu trang}other{%1$d dấu trang}}</translation> +<translation id="4149994727733219643">Chế độ xem đơn giản cho trang web</translation> <translation id="4159800535322890630">Chặn các trang web sử dụng cảm biến của thiết bị</translation> <translation id="4165986682804962316">Cài đặt trang web</translation> <translation id="4170011742729630528">Dịch vụ không khả dụng; thử lại sau.</translation> @@ -553,6 +557,7 @@ <translation id="5512137114520586844">Tài khoản này do <ph name="PARENT_NAME" /> quản lý.</translation> <translation id="5514904542973294328">Bị quản trị viên của thiết bị này vô hiệu hóa</translation> <translation id="5515439363601853141">Mở khóa để xem mật khẩu của bạn</translation> +<translation id="5515716148775388141">Các biểu tượng đã di chuyển xuống cuối màn hình</translation> <translation id="5517095782334947753">Bạn có dấu trang, lịch sử, mật khẩu và các cài đặt khác từ <ph name="FROM_ACCOUNT" />.</translation> <translation id="5524843473235508879">Đã chặn chuyển hướng.</translation> <translation id="5527082711130173040">Chrome cần có quyền truy cập vị trí để quét tìm thiết bị. <ph name="BEGIN_LINK1" />Cập nhật quyền<ph name="END_LINK1" />. Tính năng truy cập vị trí cũng bị <ph name="BEGIN_LINK2" />tắt cho thiết bị này<ph name="END_LINK2" />.</translation> @@ -756,6 +761,7 @@ <translation id="7016516562562142042">Được cho phép đối với công cụ tìm kiếm hiện tại</translation> <translation id="7021515813996758557">Đã tải xuống <ph name="FILE_NAME" /></translation> <translation id="7022756207310403729">Mở trong trình duyệt</translation> +<translation id="702463548815491781">Khuyên dùng khi dịch vụ TalkBack hoặc Tiếp cận bằng công tắc đang bật</translation> <translation id="7029809446516969842">Mật khẩu</translation> <translation id="7031882061095297553">Đồng bộ hóa với</translation> <translation id="7032663816368481562">Khi nhấn vào biểu tượng Đề xuất khác tương tự <ph name="ICON" /> trên thanh địa chỉ, bạn sẽ thấy các liên kết nhanh đến trang liên quan. URL của các trang bạn truy cập sẽ được gửi tới Google.</translation> @@ -784,6 +790,7 @@ <translation id="7251326866581677552">Đã chặn khỏi một số trang web</translation> <translation id="7253272406652746122">Thêm Tài khoản Google từ trang Tài khoản trong ứng dụng Cài đặt trên thiết bị của bạn.</translation> <translation id="7274013316676448362">Trang web bị chặn</translation> +<translation id="72867290065237936">Nhấn để chuyển đổi giữa các mục đề xuất mật khẩu và bàn phím</translation> <translation id="729975465115245577">Thiết bị của bạn không có ứng dụng để lưu trữ tệp mật khẩu.</translation> <translation id="7302081693174882195">Thông tin chi tiết: Sắp xếp theo lượng dữ liệu đã tiết kiệm được</translation> <translation id="7333031090786104871">Vẫn đang thêm trang web trước</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb index d07b161..97aff93 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -61,6 +61,7 @@ <translation id="1404122904123200417">嵌入位置:<ph name="WEBSITE_URL" /></translation> <translation id="1406000523432664303">“不跟踪”</translation> <translation id="1407135791313364759">全部打开</translation> +<translation id="1409426117486808224">使用简化版视图查看打开的标签页</translation> <translation id="1409879593029778104">系统已阻止下载 <ph name="FILE_NAME" />,因为文件已存在。</translation> <translation id="1414981605391750300">正在连接到 Google,请稍等片刻…</translation> <translation id="1416550906796893042">应用版本</translation> @@ -80,6 +81,7 @@ <translation id="1566400915470565838">若想使用“<ph name="APP_NAME" />”,请连接到互联网。</translation> <translation id="1569387923882100876">连接的设备</translation> <translation id="1571304935088121812">复制用户名</translation> +<translation id="1576370611341449972">仅在连接到 Wi-Fi 网络时下载</translation> <translation id="1612196535745283361">Chrome 需要拥有位置信息使用权才能扫描设备。<ph name="BEGIN_LINK" />此设备的位置信息使用权已被停用<ph name="END_LINK" />。</translation> <translation id="162035744160882748">开启同步、个性化和其他 Google 服务</translation> <translation id="1620510694547887537">摄像头</translation> @@ -344,6 +346,7 @@ <translation id="3810838688059735925">视频</translation> <translation id="3810973564298564668">管理</translation> <translation id="3819178904835489326">已删除 <ph name="NUMBER_OF_DOWNLOADS" /> 项下载内容</translation> +<translation id="3819562311292413223">下载为您推荐的文章</translation> <translation id="3822502789641063741">要清除网站存储数据吗?</translation> <translation id="385051799172605136">后退</translation> <translation id="3859306556332390985">前进</translation> @@ -383,6 +386,7 @@ <translation id="4113030288477039509">由您的管理员管理</translation> <translation id="4116038641877404294">下载网页以便离线查看</translation> <translation id="4127069705158143605">{BOOKMARKS_COUNT,plural, =1{%1$d 个书签}other{%1$d 个书签}}</translation> +<translation id="4149994727733219643">使用简化版视图查看网页</translation> <translation id="4159800535322890630">禁止网站使用您的传感器</translation> <translation id="4165986682804962316">网站设置</translation> <translation id="4170011742729630528">此服务目前无法使用,请稍后再试。</translation> @@ -553,6 +557,7 @@ <translation id="5512137114520586844">该帐号由 <ph name="PARENT_NAME" /> 管理。</translation> <translation id="5514904542973294328">已被此设备的管理员停用</translation> <translation id="5515439363601853141">需解锁才能查看您的密码</translation> +<translation id="5515716148775388141">您的图标已移至屏幕底部</translation> <translation id="5517095782334947753">您有来自 <ph name="FROM_ACCOUNT" /> 的书签、历史记录、密码及其他设置。</translation> <translation id="5524843473235508879">已阻止重定向。</translation> <translation id="5527082711130173040">Chrome 需要拥有位置信息使用权才能扫描设备。请<ph name="BEGIN_LINK1" />更新权限<ph name="END_LINK1" />。<ph name="BEGIN_LINK2" />此设备的位置信息使用权也已被停用<ph name="END_LINK2" />。</translation> @@ -756,6 +761,7 @@ <translation id="7016516562562142042">已设为可供当前的搜索引擎使用</translation> <translation id="7021515813996758557"><ph name="FILE_NAME" /> 已下载完毕</translation> <translation id="7022756207310403729">在浏览器中打开</translation> +<translation id="702463548815491781">建议在开启 TalkBack 或“开关控制”时使用</translation> <translation id="7029809446516969842">密码</translation> <translation id="7031882061095297553">同步到</translation> <translation id="7032663816368481562">当您在地址栏中点按“更多类似内容”图标 <ph name="ICON" /> 时,系统会显示指向相关页面的快速链接。您所访问的网页的网址会被发送给 Google。</translation> @@ -784,6 +790,7 @@ <translation id="7251326866581677552">已阻止在部分网站中显示广告</translation> <translation id="7253272406652746122">请在设备的“设置”应用中,通过“帐号”页面添加 Google 帐号。</translation> <translation id="7274013316676448362">禁止访问的网站</translation> +<translation id="72867290065237936">点按即可在密码建议和键盘之间切换</translation> <translation id="729975465115245577">您的设备上没有可以存储密码文件的应用。</translation> <translation id="7302081693174882195">详细信息:按已节省的数据流量排序</translation> <translation id="7333031090786104871">仍在添加先前的网站</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb index a6d0043f..9751c8b 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -61,6 +61,7 @@ <translation id="1404122904123200417">內嵌位置:<ph name="WEBSITE_URL" /></translation> <translation id="1406000523432664303">「不追蹤」</translation> <translation id="1407135791313364759">全部開啟</translation> +<translation id="1409426117486808224">使用簡易檢視模式查看開啟的分頁</translation> <translation id="1409879593029778104"><ph name="FILE_NAME" /> 檔案已存在,因此無法下載。</translation> <translation id="1414981605391750300">正在連線至 Google。可能需要一分鐘…</translation> <translation id="1416550906796893042">應用程式版本</translation> @@ -80,6 +81,7 @@ <translation id="1566400915470565838">如要使用「<ph name="APP_NAME" />」,請連上網際網路。</translation> <translation id="1569387923882100876">連結的裝置</translation> <translation id="1571304935088121812">複製使用者名稱</translation> +<translation id="1576370611341449972">只透過 Wi-Fi 下載</translation> <translation id="1612196535745283361">Chrome 需要位置資訊存取權才能掃描裝置。<ph name="BEGIN_LINK" />這個裝置的位置資訊存取權已關閉<ph name="END_LINK" />。</translation> <translation id="162035744160882748">啟用同步處理、個人化功能和其他 Google 服務</translation> <translation id="1620510694547887537">攝影機</translation> @@ -344,6 +346,7 @@ <translation id="3810838688059735925">影片</translation> <translation id="3810973564298564668">管理</translation> <translation id="3819178904835489326">已刪除 <ph name="NUMBER_OF_DOWNLOADS" /> 個下載項目</translation> +<translation id="3819562311292413223">下載為你推薦的文章</translation> <translation id="3822502789641063741">要清除網站儲存的資料嗎?</translation> <translation id="385051799172605136">返回</translation> <translation id="3859306556332390985">快轉到特定的播放時間點</translation> @@ -383,6 +386,7 @@ <translation id="4113030288477039509">您的管理員已停用這項功能</translation> <translation id="4116038641877404294">下載網頁以便離線存取</translation> <translation id="4127069705158143605">{BOOKMARKS_COUNT,plural, =1{%1$d 個書籤}other{%1$d 個書籤}}</translation> +<translation id="4149994727733219643">使用簡易檢視模式查看網頁</translation> <translation id="4159800535322890630">禁止網站存取你的感應器</translation> <translation id="4165986682804962316">網站設定</translation> <translation id="4170011742729630528">服務無法使用,請稍後再試。</translation> @@ -553,6 +557,7 @@ <translation id="5512137114520586844">這個帳戶受 <ph name="PARENT_NAME" /> 管理。</translation> <translation id="5514904542973294328">裝置管理員已停用</translation> <translation id="5515439363601853141">解鎖即可查看你的密碼</translation> +<translation id="5515716148775388141">你的圖示已移至畫面底部</translation> <translation id="5517095782334947753">你有來自 <ph name="FROM_ACCOUNT" /> 的書籤、歷史記錄、密碼和其他設定。</translation> <translation id="5524843473235508879">已禁止重新導向。</translation> <translation id="5527082711130173040">Chrome 需要位置資訊存取權才能掃描裝置。<ph name="BEGIN_LINK1" />更新權限<ph name="END_LINK1" />。此外,<ph name="BEGIN_LINK2" />這個裝置的位置資訊存取權已關閉<ph name="END_LINK2" />。</translation> @@ -756,6 +761,7 @@ <translation id="7016516562562142042">允許目前的搜尋引擎存取位置資訊</translation> <translation id="7021515813996758557"><ph name="FILE_NAME" /> 下載完成</translation> <translation id="7022756207310403729">在瀏覽器中開啟</translation> +<translation id="702463548815491781">建議在 TalkBack 或開關功能開啟時使用</translation> <translation id="7029809446516969842">密碼</translation> <translation id="7031882061095297553">同步處理</translation> <translation id="7032663816368481562">當你輕觸網址列中的「更多類似內容」圖示 <ph name="ICON" /> 時顯示相關網頁的快速連結。系統會將你所造訪網頁的網址傳送給 Google。</translation> @@ -784,6 +790,7 @@ <translation id="7251326866581677552">封鎖部分網站的廣告</translation> <translation id="7253272406652746122">在裝置的「設定」應用程式中,透過「帳戶」頁面新增 Google 帳戶。</translation> <translation id="7274013316676448362">已封鎖網站</translation> +<translation id="72867290065237936">輕觸即可在密碼建議和鍵盤之間切換</translation> <translation id="729975465115245577">你的裝置沒有可儲存密碼檔案的應用程式。</translation> <translation id="7302081693174882195">詳細資料:依儲存資料量排序</translation> <translation id="7333031090786104871">仍在新增先前的網站</translation>
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni index 75e273e2..ed7d308 100644 --- a/chrome/android/java_sources.gni +++ b/chrome/android/java_sources.gni
@@ -167,7 +167,6 @@ "java/src/org/chromium/chrome/browser/browserservices/OriginVerifier.java", "java/src/org/chromium/chrome/browser/browserservices/PostMessageHandler.java", "java/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityClient.java", - "java/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityDisclosure.java", "java/src/org/chromium/chrome/browser/browserservices/TrustedWebActivityUi.java", "java/src/org/chromium/chrome/browser/browserservices/UkmRecorder.java", "java/src/org/chromium/chrome/browser/browserservices/VerificationState.java", @@ -927,6 +926,7 @@ "java/src/org/chromium/chrome/browser/offlinepages/CctOfflinePageModelObserver.java", "java/src/org/chromium/chrome/browser/offlinepages/ClientId.java", "java/src/org/chromium/chrome/browser/offlinepages/DeletedPageInfo.java", + "java/src/org/chromium/chrome/browser/offlinepages/GetPagesByNamespaceForLivePageSharingCallback.java", "java/src/org/chromium/chrome/browser/offlinepages/OfflineBackgroundTask.java", "java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java", "java/src/org/chromium/chrome/browser/offlinepages/OfflinePageItem.java", @@ -935,6 +935,7 @@ "java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java", "java/src/org/chromium/chrome/browser/offlinepages/OfflinePagesDownloadManagerBridge.java", "java/src/org/chromium/chrome/browser/offlinepages/PublishPageCallback.java", + "java/src/org/chromium/chrome/browser/offlinepages/SavePageAndShareCallback.java", "java/src/org/chromium/chrome/browser/offlinepages/SavePageRequest.java", "java/src/org/chromium/chrome/browser/offlinepages/TaskExtrasPacker.java", "java/src/org/chromium/chrome/browser/offlinepages/TriggerConditions.java", @@ -1494,8 +1495,6 @@ "java/src/org/chromium/chrome/browser/webapps/WebApkActivity7.java", "java/src/org/chromium/chrome/browser/webapps/WebApkActivity8.java", "java/src/org/chromium/chrome/browser/webapps/WebApkActivity9.java", - "java/src/org/chromium/chrome/browser/webapps/WebApkDisclosureNotificationManager.java", - "java/src/org/chromium/chrome/browser/webapps/WebApkDisclosureNotificationService.java", "java/src/org/chromium/chrome/browser/webapps/WebApkInfo.java", "java/src/org/chromium/chrome/browser/webapps/WebApkInstaller.java", "java/src/org/chromium/chrome/browser/webapps/WebApkInstallService.java", @@ -1524,6 +1523,7 @@ "java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java", "java/src/org/chromium/chrome/browser/webapps/WebappDelegateFactory.java", "java/src/org/chromium/chrome/browser/webapps/WebappDirectoryManager.java", + "java/src/org/chromium/chrome/browser/webapps/WebappDisclosureSnackbarController.java", "java/src/org/chromium/chrome/browser/webapps/WebappInfo.java", "java/src/org/chromium/chrome/browser/webapps/WebappLauncherActivity.java", "java/src/org/chromium/chrome/browser/webapps/WebappManagedActivity.java", @@ -1625,41 +1625,10 @@ "java/src/org/chromium/chrome/browser/widget/textbubble/TextBubble.java", ] -chrome_vr_java_sources = [ - "java/src/org/chromium/chrome/browser/component_updater/VrAssetsComponentInstaller.java", - "java/src/org/chromium/chrome/browser/vr/AndroidUiGestureTarget.java", - "java/src/org/chromium/chrome/browser/vr/AndroidVSyncHelper.java", - "java/src/org/chromium/chrome/browser/vr/keyboard/BuildConstants.java", - "java/src/org/chromium/chrome/browser/vr/keyboard/GvrKeyboardLoaderClient.java", - "java/src/org/chromium/chrome/browser/vr/keyboard/TextEditAction.java", - "java/src/org/chromium/chrome/browser/vr/keyboard/VrInputMethodManagerWrapper.java", - "java/src/org/chromium/chrome/browser/vr/EmptySniffingVrViewContainer.java", - "java/src/org/chromium/chrome/browser/vr/NoopCanvas.java", - "java/src/org/chromium/chrome/browser/vr/OnDispatchTouchEventCallback.java", - "java/src/org/chromium/chrome/browser/vr/VrAlertDialog.java", - "java/src/org/chromium/chrome/browser/vr/VrCancelAnimationActivity.java", - "java/src/org/chromium/chrome/browser/vr/VrCompositorSurfaceManager.java", - "java/src/org/chromium/chrome/browser/vr/VrCoreInfo.java", - "java/src/org/chromium/chrome/browser/vr/VrCoreVersionChecker.java", - "java/src/org/chromium/chrome/browser/vr/VrDaydreamApi.java", - "java/src/org/chromium/chrome/browser/vr/VrDelegateImpl.java", - "java/src/org/chromium/chrome/browser/vr/VrDelegateProviderImpl.java", - "java/src/org/chromium/chrome/browser/vr/VrDialog.java", - "java/src/org/chromium/chrome/browser/vr/VrDialogManager.java", - "java/src/org/chromium/chrome/browser/vr/VrFeedbackStatus.java", - "java/src/org/chromium/chrome/browser/vr/VrFirstRunActivity.java", - "java/src/org/chromium/chrome/browser/vr/VrInputConnection.java", - "java/src/org/chromium/chrome/browser/vr/VrIntentUtils.java", - "java/src/org/chromium/chrome/browser/vr/VrModalPresenter.java", - "java/src/org/chromium/chrome/browser/vr/VrPopupWindow.java", - "java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java", - "java/src/org/chromium/chrome/browser/vr/VrShell.java", - "java/src/org/chromium/chrome/browser/vr/VrToast.java", - "java/src/org/chromium/chrome/browser/vr/VrToastManager.java", - "java/src/org/chromium/chrome/browser/vr/VrUiWidgetFactory.java", - "java/src/org/chromium/chrome/browser/vr/VrViewContainer.java", - "java/src/org/chromium/chrome/browser/vr/VrWindowAndroid.java", -] +if (enable_vr) { + chrome_java_sources += + [ "java/src/org/chromium/chrome/browser/vr/SilenceLintErrors.java" ] +} chrome_test_java_sources = [ "javatests/src/org/chromium/chrome/browser/compositor/CompositorVisibilityTest.java", @@ -2282,6 +2251,7 @@ "junit/src/org/chromium/chrome/browser/webapps/MockWebappDataStorageClockRule.java", "junit/src/org/chromium/chrome/browser/webapps/WebappDataStorageTest.java", "junit/src/org/chromium/chrome/browser/webapps/WebappDirectoryManagerTest.java", + "junit/src/org/chromium/chrome/browser/webapps/WebappDisclosureSnackbarControllerTest.java", "junit/src/org/chromium/chrome/browser/webapps/WebappRegistryTest.java", "junit/src/org/chromium/chrome/browser/webapps/WebappInfoTest.java", "junit/src/org/chromium/chrome/browser/webapps/WebApkInfoTest.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/printing/PrintingControllerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/printing/PrintingControllerTest.java index 86a03e6..23d1763 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/printing/PrintingControllerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/printing/PrintingControllerTest.java
@@ -45,6 +45,8 @@ import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -105,6 +107,53 @@ } } + private static class TemporaryFileHandler implements AutoCloseable { + private File mTempFile; + private ParcelFileDescriptor mFileDescriptor; + + public TemporaryFileHandler() throws IOException { + mTempFile = File.createTempFile(TEMP_FILE_NAME, TEMP_FILE_EXTENSION); + try { + mFileDescriptor = + ParcelFileDescriptor.open(mTempFile, ParcelFileDescriptor.MODE_READ_WRITE); + } catch (FileNotFoundException e) { + // Exception happened, can't continue, cleanup the file. + TestFileUtil.deleteFile(mTempFile.getAbsolutePath()); + throw new FileNotFoundException(); + } + } + + ParcelFileDescriptor getFileDescriptor() { + return mFileDescriptor; + } + + @Override + public void close() throws IOException { + try { + mFileDescriptor.close(); + } finally { + TestFileUtil.deleteFile(mTempFile.getAbsolutePath()); + } + } + } + + private static class PrintingControllerImplPdfWritingDone extends PrintingControllerImpl { + private WaitForOnWriteHelper mWaitForOnWrite; + + public PrintingControllerImplPdfWritingDone( + PrintDocumentAdapterWrapper printDocumentAdapterWrapper, String errorText, + WaitForOnWriteHelper waitForOnWrite) { + super(printDocumentAdapterWrapper, errorText); + mWaitForOnWrite = waitForOnWrite; + sInstance = this; + } + + @Override + public void pdfWritingDone(int pageCount) { + mWaitForOnWrite.notifyCalled(); + } + } + /** * Test a basic printing flow by emulating the corresponding system calls to the printing * controller: onStart, onLayout, onWrite, onFinish. Each one is called once, and in this @@ -268,6 +317,67 @@ } } + /** + * Test for http://crbug.com/863297 + * This bug shows Android printing framework could call |PrintDocumentAdapter.onFinish()| + * before one of |WriteResultCallback.onWrite{Cancelled, Failed, Finished}()| get called. + * Crash test, pass if there is no crash. + */ + @Test + @TargetApi(Build.VERSION_CODES.KITKAT) + @MediumTest + @Feature({"Printing"}) + public void testCancelPrintBeforeWriteResultCallbacks() throws Throwable { + if (!ApiCompatibilityUtils.isPrintingSupported()) return; + + mActivityTestRule.startMainActivityWithURL(URL); + + final WaitForOnWriteHelper onWriteHelper = new WaitForOnWriteHelper(); + final Tab currentTab = mActivityTestRule.getActivity().getActivityTab(); + final PrintingControllerImpl printingController = + ThreadUtils.runOnUiThreadBlockingNoException(() -> { + return new PrintingControllerImplPdfWritingDone( + new PrintDocumentAdapterWrapper(), PRINT_JOB_NAME, onWriteHelper); + }); + + startControllerOnUiThread(printingController, currentTab); + callStartOnUiThread(printingController); + + final WriteResultCallbackWrapper writeResultCallback = + new WriteResultCallbackWrapperMock() { + @Override + public void onWriteFinished(PageRange[] pages) { + Assert.fail("onWriteFinished shouldn't be called"); + } + + @Override + public void onWriteFailed(CharSequence error) { + Assert.fail("onWriteFailed shouldn't be called"); + } + + @Override + public void onWriteCancelled() { + Assert.fail("onWriteCancelled shouldn't be called"); + } + }; + + try (TemporaryFileHandler handler = new TemporaryFileHandler()) { + final LayoutResultCallbackWrapper layoutResultCallback = + new LayoutResultCallbackWrapperMock() { + @Override + public void onLayoutFinished(PrintDocumentInfo info, boolean changed) { + printingController.onWrite(new PageRange[] {PageRange.ALL_PAGES}, + handler.getFileDescriptor(), new CancellationSignal(), + writeResultCallback); + } + }; + callLayoutOnUiThread( + printingController, null, createDummyPrintAttributes(), layoutResultCallback); + onWriteHelper.waitForCallback("pdfWritingDone never called"); + callFinishOnUiThread(printingController); + } + } + private PrintingControllerImpl createControllerOnUiThread() { return ThreadUtils.runOnUiThreadBlockingNoException(() -> { return (PrintingControllerImpl) PrintingControllerImpl.create(
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/media/remote/MediaUrlResolverTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/media/remote/MediaUrlResolverTest.java index bb7e240d..0c79c366 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/media/remote/MediaUrlResolverTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/media/remote/MediaUrlResolverTest.java
@@ -18,9 +18,10 @@ import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; +import org.chromium.base.AsyncTask; import org.chromium.base.CommandLine; import org.chromium.base.test.BaseRobolectricTestRunner; -import org.chromium.base.test.asynctask.ShadowAsyncTask; +import org.chromium.base.test.asynctask.CustomShadowAsyncTask; import java.io.IOException; import java.net.HttpURLConnection; @@ -36,7 +37,7 @@ * Unit tests (run on host) for {@link org.chromium.chrome.browser.media.remote.MediaUrlResolver}. */ @RunWith(BaseRobolectricTestRunner.class) -@Config(manifest = Config.NONE, shadows = {ShadowAsyncTask.class}) +@Config(manifest = Config.NONE, shadows = {CustomShadowAsyncTask.class}) public class MediaUrlResolverTest { // Constants copied from MediaUrlResolver. Don't use the copies in MediaUrlResolver // since we want the tests to detect if these are changed or corrupted. @@ -383,7 +384,7 @@ void recordResultHistogram(int result) { } }; - resolver.execute(); + resolver.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); ShadowApplication.runBackgroundTasks(); return delegate;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDisclosureSnackbarControllerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDisclosureSnackbarControllerTest.java new file mode 100644 index 0000000..e24eaa8 --- /dev/null +++ b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDisclosureSnackbarControllerTest.java
@@ -0,0 +1,157 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.webapps; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import android.content.res.Resources; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.annotation.Config; + +import org.chromium.base.test.BaseRobolectricTestRunner; +import org.chromium.base.test.util.Feature; +import org.chromium.chrome.browser.snackbar.Snackbar; +import org.chromium.chrome.browser.snackbar.SnackbarManager; +import org.chromium.webapk.lib.common.WebApkConstants; + +/** + * Tests for WebappDisclosureSnackbarController + */ +@RunWith(BaseRobolectricTestRunner.class) +@Config(manifest = Config.NONE) +public class WebappDisclosureSnackbarControllerTest { + @Mock + public WebappActivity mActivity; + @Mock + public SnackbarManager mManager; + @Mock + public Resources mResources; + + @Before + public void setUp() throws InterruptedException { + MockitoAnnotations.initMocks(this); + + doReturn("test text").when(mResources).getString(anyInt()); + doReturn(mManager).when(mActivity).getSnackbarManager(); + doReturn(mResources).when(mActivity).getResources(); + } + + public void verifyShownThenDismissedOnNewCreateStorage(String packageName) { + WebappDisclosureSnackbarController controller = new WebappDisclosureSnackbarController(); + WebappDataStorage storage = WebappDataStorage.open(packageName); + + // Simulates the case that shows the disclosure when creating a new storage. + controller.maybeShowDisclosure(mActivity, storage, true); + verify(mManager, times(1)).showSnackbar(any(Snackbar.class)); + assertTrue(storage.shouldShowDisclosure()); + + // Simulate a restart or a resume (has storage so `force = false`). + controller.maybeShowDisclosure(mActivity, storage, false); + verify(mManager, times(2)).showSnackbar(any(Snackbar.class)); + assertTrue(storage.shouldShowDisclosure()); + + // Dismiss the disclosure. + controller.onAction(storage); + + // Simulate resuming or starting again this time no disclosure should show. + assertFalse(storage.shouldShowDisclosure()); + controller.maybeShowDisclosure(mActivity, storage, false); + verify(mManager, times(2)).showSnackbar(any(Snackbar.class)); + + storage.delete(); + } + + public void verifyNotShownOnExistingStorageWithoutShouldShowDisclosure(String packageName) { + WebappDisclosureSnackbarController controller = new WebappDisclosureSnackbarController(); + WebappDataStorage storage = WebappDataStorage.open(packageName); + + // Simulate that starting with existing storage will not cause the disclosure to show. + assertFalse(storage.shouldShowDisclosure()); + controller.maybeShowDisclosure(mActivity, storage, false); + verify(mManager, times(0)).showSnackbar(any(Snackbar.class)); + + storage.delete(); + } + + public void verifyNeverShown(String packageName) { + WebappDisclosureSnackbarController controller = new WebappDisclosureSnackbarController(); + WebappDataStorage storage = WebappDataStorage.open(packageName); + + // Try to show the disclosure the first time (fake having no storage on startup by setting + // `force = true`) this shouldn't work as the app was installed via Chrome. + controller.maybeShowDisclosure(mActivity, storage, true); + verify(mManager, times(0)).showSnackbar(any(Snackbar.class)); + + // Try to the disclosure again this time emulating a restart or a resume (fake having + // storage `force = false`) again this shouldn't work. + controller.maybeShowDisclosure(mActivity, storage, false); + verify(mManager, times(0)).showSnackbar(any(Snackbar.class)); + + storage.delete(); + } + + @Test + @Feature({"Webapps"}) + public void testUnboundWebApkShowDisclosure() { + String packageName = "unbound"; + doReturn(packageName).when(mActivity).getNativeClientPackageName(); + doReturn(WebappActivity.ActivityType.WEBAPK).when(mActivity).getActivityType(); + + verifyShownThenDismissedOnNewCreateStorage(packageName); + } + + @Test + @Feature({"Webapps"}) + public void testUnboundWebApkNoDisclosureOnExistingStorage() { + verifyNotShownOnExistingStorageWithoutShouldShowDisclosure("unbound"); + } + + @Test + @Feature({"Webapps"}) + public void testTrustedWebActivityShowDisclosure() { + String packageName = "twa"; + doReturn(packageName).when(mActivity).getNativeClientPackageName(); + doReturn(WebappActivity.ActivityType.TWA).when(mActivity).getActivityType(); + + verifyShownThenDismissedOnNewCreateStorage(packageName); + } + + @Test + @Feature({"Webapps"}) + public void testTrustedWebActivityNoDisclosureOnExistingStorage() { + verifyNotShownOnExistingStorageWithoutShouldShowDisclosure("twa"); + } + + @Test + @Feature({"Webapps"}) + public void testBoundWebApkNoDisclosure() { + String packageName = WebApkConstants.WEBAPK_PACKAGE_PREFIX + ".bound"; + doReturn(packageName).when(mActivity).getNativeClientPackageName(); + doReturn(WebappActivity.ActivityType.WEBAPK).when(mActivity).getActivityType(); + + verifyNeverShown(packageName); + } + + @Test + @Feature({"Webapps"}) + public void testWebappNoDisclosure() { + String packageName = "webapp"; + doReturn(packageName).when(mActivity).getNativeClientPackageName(); + doReturn(WebappActivity.ActivityType.WEBAPP).when(mActivity).getActivityType(); + + verifyNeverShown(packageName); + } +} \ No newline at end of file
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt index 1e755d9e..495b6110 100644 --- a/chrome/android/profiles/newest.txt +++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-70.0.3517.0_rc-r1.afdo.bz2 \ No newline at end of file +chromeos-chrome-amd64-70.0.3520.0_rc-r1.afdo.bz2 \ No newline at end of file
diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegate.cc index 8fb66e8..e2f656d8 100644 --- a/chrome/app/chrome_main_delegate.cc +++ b/chrome/app/chrome_main_delegate.cc
@@ -65,12 +65,12 @@ #include "ui/base/ui_base_switches.h" #if defined(OS_WIN) -#include <atlbase.h> #include <malloc.h> #include <algorithm> #include "base/debug/close_handle_hook_win.h" +#include "base/win/atl.h" #include "chrome/browser/downgrade/user_data_downgrade.h" #include "chrome/child/v8_breakpad_support_win.h" #include "chrome/common/child_process_logging.h"
diff --git a/chrome/app/main_dll_loader_win.cc b/chrome/app/main_dll_loader_win.cc index f9afa34..07acab9 100644 --- a/chrome/app/main_dll_loader_win.cc +++ b/chrome/app/main_dll_loader_win.cc
@@ -5,7 +5,6 @@ #include "chrome/app/main_dll_loader_win.h" #include <windows.h> // NOLINT -#include <shlwapi.h> // NOLINT #include <stddef.h> #include <stdint.h> #include <userenv.h> // NOLINT @@ -28,6 +27,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/trace_event/trace_event.h" #include "base/win/scoped_handle.h" +#include "base/win/shlwapi.h" #include "base/win/windows_version.h" #include "chrome/app/chrome_watcher_client_win.h" #include "chrome/app/chrome_watcher_command_line_win.h"
diff --git a/chrome/app/resources/chromium_strings_ar.xtb b/chrome/app/resources/chromium_strings_ar.xtb index d5e4f45..30b21bdd 100644 --- a/chrome/app/resources/chromium_strings_ar.xtb +++ b/chrome/app/resources/chromium_strings_ar.xtb
@@ -25,7 +25,7 @@ <translation id="1808667845054772817">إعادة تثبيت Chromium</translation> <translation id="1869480248812203386">يمكنك المساعدة في جعل Chromium أكثر أمانًا وأسهل استخدامًا بإبلاغ Google تلقائيًا بتفاصيل أي مخاطر أمنية محتملة.</translation> <translation id="1881322772814446296">أنت تسجل الدخول باستخدام حساب يخضع للإدارة وتتيح للمشرف إمكانية التحكم في ملفك الشخصي على Chromium. وستكون بياناتك في Chromium مثل تطبيقاتك وإشاراتك المرجعية وسجلك وكلمات المرور التابعة لك والإعدادات الأخرى مرتبطة دائمًا بالمستخدم <ph name="USER_NAME" />. ستتمكن من حذف هذه البيانات عبر لوحة تحكم حسابات Google، ولكنك لن تتمكن من إقران هذه البيانات بحساب آخر. ويُمكنك اختيار إنشاء ملف شخصي جديد للإبقاء على بياناتك الحالية في Chromium بشكل مستقل. <ph name="LEARN_MORE" /></translation> -<translation id="1895626441344023878">{0,plural, =0{هناك تحديث متاح لـ Chromium}=1{هناك تحديث واحد متاح لـ Chromium}two{هناك تحديث متاح لـ Chromium منذ يومين (#)}few{هناك تحديث متاح لـ Chromium منذ # أيام}many{هناك تحديث متاح لـ Chromium منذ # يومًا}other{هناك تحديث متاح لـ Chromium منذ # يوم}}</translation> +<translation id="1895626441344023878">{0,plural, =0{يتوفر تحديث لـ Chromium}=1{يتوفر تحديث واحد لـ Chromium}two{يتوفر تحديث لـ Chromium منذ يومين (#)}few{يتوفر تحديث لـ Chromium منذ # أيام}many{يتوفر تحديث لـ Chromium منذ # يومًا}other{يتوفر تحديث لـ Chromium منذ # يوم}}</translation> <translation id="1929939181775079593">لا يستجيب Chromium. هل تريد إعادة التشغيل الآن؟</translation> <translation id="1966382378801805537">يتعذَّر على Chromium تحديد المتصفح التلقائي أو تعيينه</translation> <translation id="2008474315282236005">سيعمل هذا على حذف عنصر واحد من هذا الجهاز. لاسترداد بياناتك لاحقًا، سجّل الدخول إلى Chromium كـ <ph name="USER_EMAIL" />.</translation> @@ -111,7 +111,7 @@ <translation id="4943838377383847465">Chromium في وضع الخلفية.</translation> <translation id="4987820182225656817">يمكن للضيف استخدام Chromium بدون أن يترك أي أثر وراءه.</translation> <translation id="4994636714258228724">إضافة نفسك إلى Chromium</translation> -<translation id="5021854341188256296">{0,plural, =0{هناك تحديث متاح لنظام التشغيل Chromium}=1{هناك تحديث متاح لنظام التشغيل Chromium}two{هناك تحديث متاح لنظام التشغيل Chromium منذ يومين (#)}few{هناك تحديث متاح لنظام التشغيل Chromium منذ # أيام}many{هناك تحديث متاح لنظام التشغيل Chromium منذ # يومًا}other{هناك تحديث متاح لنظام التشغيل Chromium منذ # يوم}}</translation> +<translation id="5021854341188256296">{0,plural, =0{يتوفر تحديث لنظام التشغيل Chromium}=1{يتوفر تحديث لنظام التشغيل Chromium}two{يتوفر تحديث لنظام التشغيل Chromium منذ يومين (#)}few{يتوفر تحديث لنظام التشغيل Chromium منذ # أيام}many{يتوفر تحديث لنظام التشغيل Chromium منذ # يومًا}other{يتوفر تحديث لنظام التشغيل Chromium منذ # يوم}}</translation> <translation id="5032989939245619637">حفظ التفاصيل في Chromium</translation> <translation id="5045248521775609809">إمكانية استخدام Chromium في كل مكان</translation> <translation id="5116586539350239523">سيخزّن Chromium معلوماتك الشخصية بشكلٍ آمن حتى لا تُضطر إلى كتابتها مرةً أخرى.</translation> @@ -147,9 +147,9 @@ <translation id="6072279588547424923">تمت إضافة <ph name="EXTENSION_NAME" /> إلى Chromium</translation> <translation id="608189560609172163">تعذر على Chromium مزامنة البيانات نظرًا لحدوث خطأ أثناء تسجيل الدخول.</translation> <translation id="6096348254544841612">تخصيص Chromium والتحكُّم فيه. هناك تحديث متوفر.</translation> -<translation id="6120345080069858279">سيحفظ Chromium كلمة المرور هذه في حسابك على Google. ولن تحتاج تذكّرها.</translation> +<translation id="6120345080069858279">سيحفظ Chromium كلمة المرور هذه في حسابك على Google ولن تحتاج تذكّرها.</translation> <translation id="6129621093834146363">ملف <ph name="FILE_NAME" /> ضار، لذلك فقد حظره Chromium.</translation> -<translation id="620022061217911843">يتطلَّب المُشرف إعادة تشغيل نظام التشغيل Chromium لتطبيق تحديث.</translation> +<translation id="620022061217911843">يطالب المُشرف بإعادة تشغيل نظام التشغيل Chromium لتطبيق تحديث.</translation> <translation id="6212496753309875659">يحتوي هذا الكمبيوتر فعلاً على إصدار أحدث من Chromium. إذا كان البرنامج لا يعمل، فالرجاء إزالة Chromium وإعادة المحاولة.</translation> <translation id="6248213926982192922">جعل Chromium المتصفح التلقائي</translation> <translation id="6268381023930128611">هل تريد الخروج من Chromium؟</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 7d06f02..4205465 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -271,7 +271,7 @@ <translation id="1397854323885047133">ስምረት እና ግላዊነት ማላበስ</translation> <translation id="1398853756734560583">አስፋ</translation> <translation id="1399511500114202393">ምንም የተጠቃሚ እውቅና ማረጋገጫ የለም</translation> -<translation id="1401165786814632797">የእርስዎ መሣሪያ ንቁ በሚህንበት እና ክፍት ሲሆን እርስዎ «Ok Google» በሚሉበት ማናቸውም ጊዜ ረዳትዎን ይድረሱበት።</translation> +<translation id="1401165786814632797">የእርስዎ መሣሪያ ንቁ በሚህንበት እና ክፍት ሲሆን እርስዎ «Ok Google» በሚሉበት ማናቸውም ጊዜ ረዳትዎን ይድረሱ።</translation> <translation id="140250605646987970">የእርስዎ ስልክ ተገኝቷል። ነገር ግን Smart Lock Android 5.0 እና ከዚያ በላይ ካላቸው መሣሪያዎች ጋር ብቻ ይሰራል። <a>የበለጠ ለመረዳት</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (ክትትል የሚደረግበት)</translation> <translation id="1405476660552109915"><ph name="PASSWORD_MANAGER_BRAND" /> ለዚህ ጣቢያ ይለፍ ቃልዎን እንዲያስቀምጥልዎ ይፈልጋሉ?</translation> @@ -686,7 +686,6 @@ <translation id="200544492091181894">ይሄንን በኋላ ቅንብሮች ውስጥ ሊለውጡት ይችላሉ</translation> <translation id="2006638907958895361">አገናኝን በ<ph name="APP" /> ውስጥ ይክፈቱ</translation> <translation id="2007404777272201486">ችግር ሪፖርት አድርግ...</translation> -<translation id="2016237810978710652">የLinux ፋይሎችን በመክፈት ላይ...</translation> <translation id="2016430552235416146">ተለምዷዊ</translation> <translation id="2017334798163366053">የአፈጻጸም የውሂብ መሰብሰብን አሰናክል</translation> <translation id="2017836877785168846">በአድራሻ አሞሌው ውስጥ ታሪክን እና ራስ-ሰር ማጠናቀቆችን ያጸዳል።</translation> @@ -3781,7 +3780,6 @@ <translation id="6748775883310276718">የነጠላ መተግበሪያ ኪዮስክ</translation> <translation id="6751256176799620176">1 አቃፊ ተመርጧል</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (ማንነትን የማያሳውቅ)</translation> -<translation id="6751815812172740613">ሁሉም የLinux መተግበሪያዎች እና ውሂብ ከእርስዎ Linux ፋይሎች አቃፊ ውስጥ ከዚህ <ph name="DEVICE_TYPE" /> ይሰረዙ?</translation> <translation id="6757101664402245801">ዩአርኤል ተቀድቷል</translation> <translation id="6758056191028427665">እንዴት እኛ እያደርግን እንደሆነ እንድናውቅ ያድርጉን።</translation> <translation id="6759193508432371551">የፋብሪካ ዳግም ማስጀመር</translation> @@ -4058,7 +4056,6 @@ <ph name="BEGIN_PARAGRAPH3" />ይህን ባህሪ ከቅንብሮች > Google ሆነው መቆጣጠር ይችላሉ። ከምናሌው አጠቃቀም እና ምርመራን ይምረጡ።<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">እ&ገዛ አግኝ</translation> <translation id="7200083590239651963">ውቅረትን ይምረጡ</translation> -<translation id="7201014958346994077">የLinux ፋይሎችን መመልከት አልተቻለም</translation> <translation id="720110658997053098">ይህን መሣሪያ እስከመጨረሻው በኪዮስክ ሁነታ አቆየው</translation> <translation id="7201118060536064622">«<ph name="DELETED_ITEM_NAME" />» ተሰርዟል</translation> <translation id="7206693748120342859"><ph name="PLUGIN_NAME" />ን በማውረድ ላይ...</translation> @@ -4679,7 +4676,6 @@ <translation id="8107015733319732394">የGoogle Play መደብርን በእርስዎ <ph name="DEVICE_TYPE" /> ላይ በመጫን ላይ። ይሄ ጥቂት ደቂቃዎችን ሊወስድ ይችላል።</translation> <translation id="8111155949205007504">ይህን የይለፍ ቃል ለእርስዎ iPhone ያጋሩ</translation> <translation id="8113043281354018522">የፈቃድ አይነት ይምረጡ</translation> -<translation id="8116925261070264013">ድምፀ ከል ተደርጓል</translation> <translation id="8116972784401310538">&ዕልባት አቀናባሪ</translation> <translation id="8117620576188476503">ግንኙነቶችን፣ ዝማኔዎችን እና ቅንብሮችን በሁኔታ ትሪ ያቀናብሩ። በቁልፍ ሰሌዳ ወደዚህ ለመምጣት Alt + Shift + S ይጫኑ።</translation> <translation id="8118362518458010043">በChrome ተሰናክሏል። ይህ ቅጥያ ደህንነቱ ያልተጠበቀ ሊሆን ይችላል።</translation> @@ -5138,7 +5134,6 @@ <translation id="8845001906332463065">እገዛ ያግኙ</translation> <translation id="8846141544112579928">የቁልፍ ሰሌዳን በመፈለግ ላይ...</translation> <translation id="8847988622838149491">ዩ ኤስ ቢ</translation> -<translation id="885217322790849332">ፋይሎችን በ$1 ለመክፈት መጀመሪያ ወደ የLinux ፋይሎች አቃፊው ይቅዱ።</translation> <translation id="8859057652521303089">ቋንቋዎትን ይምረጡ፦</translation> <translation id="8859174528519900719">ንዑስ ክፈፍ፦ <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">የExcel ተመን ሉህ</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 00e5164..d5b28d3 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -427,7 +427,7 @@ <translation id="1627408615528139100">تم التنزيل من قبل</translation> <translation id="1632803087685957583">تسمح لك بضبط معدل تكرار لوحة المفاتيح، وتوقّع الكلمات، والمزيد</translation> <translation id="1635033183663317347">تم التثبيت من قبل الوصيّ.</translation> -<translation id="1635885551358739414">قد تستخدم Google محتوى المواقع الإلكترونية التي تزورها، بالإضافة إلى نشاط المتصفِّح وتفاعلاته لتخصيص Chrome وخدمات Google الأخرى، مثل "الترجمة" و"البحث" والإعلانات. ويمكنك تخصيص هذه الميزة في "الإعدادات".</translation> +<translation id="1635885551358739414">قد تستخدم Google محتوى المواقع الإلكترونية التي تزورها، بالإضافة إلى نشاط المتصفِّح وتفاعلاته لتخصيص Chrome وخدمات Google الأخرى، مثل "ترجمة" و"بحث" والإعلانات. ويمكنك تخصيص هذه الميزة في "الإعدادات".</translation> <translation id="1637224376458524414">الحصول على هذه الإشارة المرجعية على جهاز iPhone</translation> <translation id="1637765355341780467">حدث خطأ ما أثناء فتح ملفك الشخصي. وقد تكون بعض الميزات غير متاحة.</translation> <translation id="1639239467298939599">جارٍ التحميل.</translation> @@ -686,7 +686,6 @@ <translation id="200544492091181894">يمكنك تغيير هذا الخيار من الإعدادات متى شئت.</translation> <translation id="2006638907958895361">فتح الرابط في <ph name="APP" /></translation> <translation id="2007404777272201486">الإبلاغ عن مشكلة...</translation> -<translation id="2016237810978710652">جارٍ فتح ملفات نظام التشغيل Linux...</translation> <translation id="2016430552235416146">التقليدي</translation> <translation id="2017334798163366053">إيقاف جمع بيانات مستوى الأداء</translation> <translation id="2017836877785168846">مسح السجل وعمليات الإكمال التلقائي في شريط العناوين.</translation> @@ -1792,7 +1791,7 @@ <translation id="3693415264595406141">كلمة المرور:</translation> <translation id="3694027410380121301">تحديد علامة التبويب السابقة</translation> <translation id="3699624789011381381">عنوان البريد الإلكتروني</translation> -<translation id="3699920817649120894">هل ترغب في إيقاف المزامنة والتخصيص؟</translation> +<translation id="3699920817649120894">هل تريد إيقاف المزامنة والتخصيص؟</translation> <translation id="3700888195348409686">جارِ تقديم (<ph name="PAGE_ORIGIN" />)</translation> <translation id="3702500414347826004">تم تغيير صفحات بدء التشغيل التابعة لك لإدراج <ph name="URL" />.</translation> <translation id="370415077757856453">تم حظر جافا سكريبت</translation> @@ -2173,7 +2172,7 @@ <translation id="428608937826130504">عنصر الرف 8</translation> <translation id="4287502004382794929">ليست لديك تراخيص برامج كافية لتسجيل هذا الجهاز. يُرجى الاتصال بالمبيعات لشراء المزيد. إذا كنت تعتقد أن هذه الرسالة ظهرت عن طريق الخطأ، فيُرجى الاتصال بالدعم.</translation> <translation id="4289540628985791613">نظرة عامة</translation> -<translation id="4295072614469448764">يُعد التطبيق متاحًا في الوحدة الطرفية. وقد يكون هناك أيضًا رمز في مشغِّل التطبيقات.</translation> +<translation id="4295072614469448764">أصبح التطبيق متاحًا في الوحدة الطرفية وقد تجد رمزًا له في مشغِّل التطبيقات.</translation> <translation id="4296575653627536209">إضافة مستخدم تحت الإشراف</translation> <translation id="4297219207642690536">إعادة التشغيل وإعادة الضبط</translation> <translation id="4297322094678649474">تغيير اللغات</translation> @@ -2574,7 +2573,7 @@ <translation id="4953808748584563296">الصورة الرمزية التلقائية البرتقالية</translation> <translation id="4955814292505481804">سنوي</translation> <translation id="4957949153200969297">يمكنك تفعيل الميزات ذات الصلة بمزامنة <ph name="IDS_SHORT_PRODUCT_NAME" /> فقط.</translation> -<translation id="4959262764292427323">يتم حفظ كلمات المرور في حسابك على Google، حتى تتمكَّن من استخدامها على أي جهاز.</translation> +<translation id="4959262764292427323">يتم حفظ كلمات المرور في حسابك على Google حتى تتمكَّن من استخدامها على أي جهاز.</translation> <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation> <translation id="496226124210045887">المجلد الذي حددته يشتمل على ملفات حساسة. فهل تريد بالتأكيد منح "$1" حق الدخول الدائم للقراءة في هذا المجلد؟</translation> <translation id="4964455510556214366">الترتيب</translation> @@ -3779,7 +3778,6 @@ <translation id="6748775883310276718">كشك التطبيق الواحد</translation> <translation id="6751256176799620176">تم تحديد مجلد واحد</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (التصفح المتخفي)</translation> -<translation id="6751815812172740613">هل تريد حذف جميع تطبيقات Linux والبيانات في مجلد "ملفات Linux" من جهاز <ph name="DEVICE_TYPE" /> هذا؟</translation> <translation id="6757101664402245801">تم نسخ عنوان URL</translation> <translation id="6758056191028427665">يُرجى تقييم أدائنا.</translation> <translation id="6759193508432371551">إعادة تعيين إعدادات المصنع</translation> @@ -4014,7 +4012,7 @@ <translation id="7127980134843952133">سجل التنزيل</translation> <translation id="7131040479572660648">قراءة بياناتك على <ph name="WEBSITE_1" />، <ph name="WEBSITE_2" /> و<ph name="WEBSITE_3" /></translation> <translation id="713122686776214250">إضافة &صفحة...</translation> -<translation id="7133578150266914903">يعمل المشرف على إغلاق هذا الجهاز (<ph name="PROGRESS_PERCENT" />)</translation> +<translation id="7133578150266914903">يعمل المشرف على إعادة النسخة السابقة من نظام التشغيل Chrome إلى هذا الجهاز(<ph name="PROGRESS_PERCENT" />)</translation> <translation id="7134098520442464001">لتصغير النص</translation> <translation id="7136694880210472378">تعيين كافتراضي</translation> <translation id="7136984461011502314">مرحبًا بك في <ph name="PRODUCT_NAME" /></translation> @@ -4056,7 +4054,6 @@ <ph name="BEGIN_PARAGRAPH3" />يمكنك التحكُّم في هذه الميزة من "الإعدادات" > Google. يمكنك بعد ذلك اختيار "الاستخدام وبيانات التشخيص" من القائمة.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">الحصول على مساعدة</translation> <translation id="7200083590239651963">اختيار تهيئة</translation> -<translation id="7201014958346994077">تعذَّر عرض ملفات Linux</translation> <translation id="720110658997053098">تشغيل هذا الجهاز في وضع الكشك دائمًا</translation> <translation id="7201118060536064622">تم حذف "<ph name="DELETED_ITEM_NAME" />"</translation> <translation id="7206693748120342859">جارٍ تنزيل <ph name="PLUGIN_NAME" />...</translation> @@ -4673,7 +4670,6 @@ <translation id="8107015733319732394">تثبيت متجر Google Play على <ph name="DEVICE_TYPE" />. قد يستغرق ذلك بضع دقائق.</translation> <translation id="8111155949205007504">مشاركة كلمة المرور هذه مع جهاز iPhone</translation> <translation id="8113043281354018522">اختيار نوع الترخيص</translation> -<translation id="8116925261070264013">مواقع الويب التي تم كتم الصوت فيها</translation> <translation id="8116972784401310538">م&دير الإشارات</translation> <translation id="8117620576188476503">يمكنك إدارة الاتصالات والتحديثات والإعدادات من خلال شريط الحالة. وللوصول إلى هنا من خلال لوحة المفاتيح، اضغط على Alt + Shift + S.</translation> <translation id="8118362518458010043">تم إيقاف الإضافة بواسطة متصفح Chrome. ربما تكون هذه الإضافة غير آمنة.</translation> @@ -4903,7 +4899,7 @@ <translation id="8497219075884839166">الأدوات المساعدة في Windows</translation> <translation id="8498214519255567734">يمكنك تسهيل النظر إلى الشاشة أو القراءة في الضوء الخافت</translation> <translation id="8498395510292172881">متابعة القراءة في Chrome</translation> -<translation id="8502536196501630039">لاستخدام التطبيقات من Google Play، عليك استعادة تطبيقاتك أولاً. ربما تم فقدان بعض بياناتك.</translation> +<translation id="8502536196501630039">لاستخدام التطبيقات من Google Play، عليك استعادة تطبيقاتك أولاً. وقد تلاحظ فقدان بعض بياناتك.</translation> <translation id="8503813439785031346">اسم المستخدم</translation> <translation id="850875081535031620">لم يتم العثور على أي برامج ضارة</translation> <translation id="8509646642152301857">تعذّر تنزيل قاموس التدقيق الإملائي.</translation> @@ -5132,7 +5128,6 @@ <translation id="8845001906332463065">الحصول على مساعدة</translation> <translation id="8846141544112579928">جارٍ البحث عن لوحة المفاتيح...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">لفتح الملفات باستخدام دولار واحد، يمكنك النسخ أولاً إلى المجلد "ملفات نظام التشغيل Linux".</translation> <translation id="8859057652521303089">حدد لغتك:</translation> <translation id="8859174528519900719">هيكل سفلي: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">جدول بيانات Excel</translation> @@ -5228,7 +5223,7 @@ <translation id="9009369504041480176">جارٍ تحميل (<ph name="PROGRESS_PERCENT" />%)...</translation> <translation id="9011163749350026987">إظهار الرمز دائمًا</translation> <translation id="9011178328451474963">علامة التبويب السابقة</translation> -<translation id="9013707997379828817">أغلق المشرف هذا الجهاز. يُرجى حفظ الملفات المهمة، ثم إعادة التشغيل. وسيتم حذف جميع البيانات المتاحة على الجهاز.</translation> +<translation id="9013707997379828817">أعاد المشرف النسخة السابقة من نظام التشغيل Chrome إلى هذا الجهاز. يُرجى حفظ الملفات المهمة، ثم إعادة التشغيل. وسيتم حذف جميع البيانات المتاحة على الجهاز.</translation> <translation id="9014987600015527693">عرض هاتف آخر</translation> <translation id="9018218886431812662">اكتمل التثبيت</translation> <translation id="901834265349196618">بريد إلكتروني</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index 2cee550..2e3f2df 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -683,7 +683,6 @@ <translation id="200544492091181894">Винаги можете да промените това по-късно от настройките</translation> <translation id="2006638907958895361">Отваряне на връзката чрез <ph name="APP" /></translation> <translation id="2007404777272201486">Подаване на сигнал за проблем...</translation> -<translation id="2016237810978710652">Файловете за Linux се отварят...</translation> <translation id="2016430552235416146">Традиционно</translation> <translation id="2017334798163366053">Деактивиране на събирането на данни за ефективността</translation> <translation id="2017836877785168846">Изчиства историята и автоматичните довършвания в адресната лента.</translation> @@ -3784,7 +3783,6 @@ <translation id="6748775883310276718">Терминал за едно приложение</translation> <translation id="6751256176799620176">Избрахте 1 папка</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Инкогнито)</translation> -<translation id="6751815812172740613">Да се изтрият ли всички приложения за Linux и данни в папката с файлове за Linux от това устройство <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">URL адресът е копиран</translation> <translation id="6758056191028427665">Уведомете ни как се справяме.</translation> <translation id="6759193508432371551">Възстановяване на фабричните настройки</translation> @@ -4061,7 +4059,6 @@ <ph name="BEGIN_PARAGRAPH3" />Можете да контролирате тази функция от „Настройки“ > „Google“. Изберете „Употреба и диагностика“ от менюто.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Получаване на помощ</translation> <translation id="7200083590239651963">Избиране на конфигурация</translation> -<translation id="7201014958346994077">Файловете за Linux не могат да бъдат показани</translation> <translation id="720110658997053098">Това устройство да е постоянно в павилионен режим</translation> <translation id="7201118060536064622">Изтрихте „<ph name="DELETED_ITEM_NAME" />“</translation> <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> се изтегля...</translation> @@ -4677,7 +4674,6 @@ <translation id="8107015733319732394">Google Play Магазин се инсталира на устройството ви <ph name="DEVICE_TYPE" />. Това може да отнеме няколко минути.</translation> <translation id="8111155949205007504">Споделяне на тази парола с вашия iPhone</translation> <translation id="8113043281354018522">Изберете тип лиценз</translation> -<translation id="8116925261070264013">Заглушени</translation> <translation id="8116972784401310538">&Диспечер на отметките</translation> <translation id="8117620576188476503">Управлявайте връзките, актуализациите и настройките от лентата на състоянието. За да я отворите от клавиатурата, натиснете Alt + Shift + S.</translation> <translation id="8118362518458010043">Деактивирано от Chrome. Това разширение може да е опасно.</translation> @@ -5136,7 +5132,6 @@ <translation id="8845001906332463065">Получете помощ</translation> <translation id="8846141544112579928">Търси се клавиатура...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">За да отваряте файлове с(ъс) $1, първо копирайте в папката с файлове на Linux.</translation> <translation id="8859057652521303089">Изберете своя език:</translation> <translation id="8859174528519900719">Подрамка: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Електронна таблица в Excel</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index 9e21d711..1ae399d 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -684,7 +684,6 @@ <translation id="200544492091181894">আপনি পরে সবসময় এগুলি সেটিংস থেকে পরিবর্তন করতে পারেন</translation> <translation id="2006638907958895361"><ph name="APP" /> এ লিঙ্ক খুলুন</translation> <translation id="2007404777272201486">কোনও সমস্যা অভিযোগ করুন...</translation> -<translation id="2016237810978710652">Linux ফাইল খুলছে...</translation> <translation id="2016430552235416146">ঐতিহ্যবাহি</translation> <translation id="2017334798163366053">কার্য-সম্পাদনা ডেটা সংগ্রহ অক্ষম করুন</translation> <translation id="2017836877785168846">অ্যাড্রেস বার থেকে ইতিহাস ও অটোকমপ্লিট মুছে ফেলে।</translation> @@ -3776,7 +3775,6 @@ <translation id="6748775883310276718">একক অ্যাপ কিয়স্ক</translation> <translation id="6751256176799620176">১টি ফোল্ডার নির্বাচন করা হয়েছে</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" />(ছদ্মবেশী)</translation> -<translation id="6751815812172740613"><ph name="DEVICE_TYPE" />-এ Linux ফাইল ফোল্ডার থেকে Linux অ্যাপ এবং সমস্ত ডেটা মুছে ফেলবেন?</translation> <translation id="6757101664402245801">URL কপি করা হয়েছে</translation> <translation id="6758056191028427665">আমাদের পরিষেবা কেমন লাগছে তা জানান।</translation> <translation id="6759193508432371551">ফ্যাক্টরি রিসেট</translation> @@ -4053,7 +4051,6 @@ <ph name="BEGIN_PARAGRAPH3" />আপনি এই বৈশিষ্ট্যটি সেটিংস > Google থেকে নিয়ন্ত্রণ করতে পারেন। মেনু থেকে ব্যবহার ও ডায়গনস্টিক বেছে নিন।<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">সহায়তা পান</translation> <translation id="7200083590239651963">কনফিগারেশন বেছে নিন</translation> -<translation id="7201014958346994077">Linux ফাইল দেখা যায়নি</translation> <translation id="720110658997053098">স্থায়ীভাবে এই ডিভাইসটিকে কিয়স্ক মোডে রাখুন</translation> <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' মুছে ফেলা হয়েছে</translation> <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> ডাউনলোড হচ্ছে ...</translation> @@ -4667,7 +4664,6 @@ <translation id="8107015733319732394">আপনার <ph name="DEVICE_TYPE" /> এ Google Play স্টোর ইনস্টল করা হচ্ছে। এতে কয়েক মিনিট সময় লাগতে পারে।</translation> <translation id="8111155949205007504">আপনার iPhone এর সাথে এই পাসওয়ার্ড শেয়ার করুন</translation> <translation id="8113043281354018522">লাইসেন্সের প্রকার বেছে নিন</translation> -<translation id="8116925261070264013">মিউট করা আছে</translation> <translation id="8116972784401310538">&বুকমার্ক পরিচালক</translation> <translation id="8117620576188476503">স্টেটাস ট্রে থেকে সংযোগ, আপডেট এবং সেটিংস পরিচালনা করুন। কীবোর্ডের সাহায্যে এখানে পেতে Alt + Shift + S বোতামটি টিপুন।</translation> <translation id="8118362518458010043">Chrome এটি অক্ষম করেছে। এই এক্সটেনশনটি নিরাপদ নাও হতে পারে।</translation> @@ -5127,7 +5123,6 @@ <translation id="8845001906332463065">সহায়তা পান</translation> <translation id="8846141544112579928">কীবোর্ডের জন্য সার্চ করা হচ্ছে...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">$1-দিয়ে ফাইল খুলতে আগে সেগুলি Linux Files ফোল্ডারে কপি করুন।</translation> <translation id="8859057652521303089">আপনার ভাষা বেছে নিন:</translation> <translation id="8859174528519900719">সাবফ্রেম: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel spreadsheet</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 17a4254e6..129d085 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Pots canviar aquesta opció més endavant a la configuració</translation> <translation id="2006638907958895361">Obre l'enllaç a <ph name="APP" /></translation> <translation id="2007404777272201486">Informa d'un problema...</translation> -<translation id="2016237810978710652">S'estan obrint els fitxers de Linux...</translation> <translation id="2016430552235416146">Tradicional</translation> <translation id="2017334798163366053">Desactiva la recopilació de dades de rendiment</translation> <translation id="2017836877785168846">Esborra l'historial i les complecions automàtiques a la barra d'adreces.</translation> @@ -3782,7 +3781,6 @@ <translation id="6748775883310276718">Quiosc d'una sola aplicació</translation> <translation id="6751256176799620176">1 carpeta seleccionada</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Incògnit)</translation> -<translation id="6751815812172740613">Vols suprimir totes les aplicacions de Linux i totes les dades de la carpeta Fitxers de Linux d'aquest dispositiu <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">S'ha copiat l'URL</translation> <translation id="6758056191028427665">Digue'ns si ho estem fent bé.</translation> <translation id="6759193508432371551">Restabliment de fàbrica</translation> @@ -4059,7 +4057,6 @@ <ph name="BEGIN_PARAGRAPH3" />Pots controlar aquesta funció des de Configuració > Google. Selecciona Ús i diagnòstic al menú.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Obtén a&juda</translation> <translation id="7200083590239651963">Selecciona la configuració</translation> -<translation id="7201014958346994077">No es poden veure fitxers de Linux</translation> <translation id="720110658997053098">Activa permanentment el mode quiosc en aquest dispositiu</translation> <translation id="7201118060536064622">S'ha suprimit <ph name="DELETED_ITEM_NAME" /></translation> <translation id="7206693748120342859">S'està baixant <ph name="PLUGIN_NAME" />...</translation> @@ -4673,7 +4670,6 @@ <translation id="8107015733319732394">S'està instal·lant Google Play Store al teu dispositiu <ph name="DEVICE_TYPE" />. Aquest procés pot tardar uns quants minuts.</translation> <translation id="8111155949205007504">Comparteix aquesta contrasenya amb el dispositiu iPhone</translation> <translation id="8113043281354018522">Tria el tipus de llicència</translation> -<translation id="8116925261070264013">Silenciats</translation> <translation id="8116972784401310538">&Gestor d'adreces d'interès</translation> <translation id="8117620576188476503">Gestiona les connexions, actualitzacions i configuracions des de la safata d'estat. Per accedir-hi amb el teclat, prem Alt+Maj+S.</translation> <translation id="8118362518458010043">Desactivada per Chrome. Pot ser que aquesta extensió no sigui segura.</translation> @@ -5132,7 +5128,6 @@ <translation id="8845001906332463065">Obteniu ajuda</translation> <translation id="8846141544112579928">S'està cercant el teclat...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Per obrir fitxers amb $1, primer copia'ls a la carpeta Fitxers de Linux.</translation> <translation id="8859057652521303089">Seleccioneu el vostre idioma:</translation> <translation id="8859174528519900719">Submarc: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Full de càlcul d'Excel</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index e8fe74cc..50f42094 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Kdykoliv to později můžete změnit v nastavení</translation> <translation id="2006638907958895361">Otevřít odkaz v aplikaci <ph name="APP" /></translation> <translation id="2007404777272201486">Nahlásit problém...</translation> -<translation id="2016237810978710652">Otevírání souborů systému Linux...</translation> <translation id="2016430552235416146">Tradiční</translation> <translation id="2017334798163366053">Deaktivovat shromažďování údajů o výkonu</translation> <translation id="2017836877785168846">Vymaže historii a automatická dokončení v adresním řádku.</translation> @@ -3780,7 +3779,6 @@ <translation id="6748775883310276718">Terminál – jedna aplikace</translation> <translation id="6751256176799620176">Je vybrána 1 složka</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Anonymní režim)</translation> -<translation id="6751815812172740613">Chcete z tohoto zařízení <ph name="DEVICE_TYPE" /> smazat všechny aplikace pro Linux a data ve složce Soubory systému Linux?</translation> <translation id="6757101664402245801">Adresa URL byla zkopírována</translation> <translation id="6758056191028427665">Sdělte nám, jak si vedeme.</translation> <translation id="6759193508432371551">Tovární nastavení</translation> @@ -4057,7 +4055,6 @@ <ph name="BEGIN_PARAGRAPH3" />Tuto funkci můžete ovládat v Nastavení > Google. Stačí v nabídce vybrat možnost Využití a diagnostika.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Zobrazit nápovědu</translation> <translation id="7200083590239651963">Vyberte konfiguraci</translation> -<translation id="7201014958346994077">Soubory systému Linux nelze zobrazit</translation> <translation id="720110658997053098">Trvale toto zařízení ponechat v režimu veřejného terminálu</translation> <translation id="7201118060536064622">Položka „<ph name="DELETED_ITEM_NAME" />“ byla smazána</translation> <translation id="7206693748120342859">Stahování pluginu <ph name="PLUGIN_NAME" />...</translation> @@ -4671,7 +4668,6 @@ <translation id="8107015733319732394">Instalace Obchodu Google Play do zařízení <ph name="DEVICE_TYPE" />. Tato operace může několik minut trvat.</translation> <translation id="8111155949205007504">Sdílejte toto heslo se svým iPhonem</translation> <translation id="8113043281354018522">Vyberte typ licence</translation> -<translation id="8116925261070264013">Ztlumeno</translation> <translation id="8116972784401310538">&Správce záložek</translation> <translation id="8117620576188476503">Na stavovém panelu můžete spravovat připojení, aktualizace a nastavení. Chcete-li se sem dostat pomocí klávesnice, stiskněte Alt + Shift + S.</translation> <translation id="8118362518458010043">Toto rozšíření Chrome zakázal, protože může být nebezpečné.</translation> @@ -5130,7 +5126,6 @@ <translation id="8845001906332463065">Nápověda</translation> <translation id="8846141544112579928">Vyhledávání klávesnice...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Chcete-li soubory otevřít pomocí aplikace $1, nejdříve je zkopírujte do složky Soubory systému Linux.</translation> <translation id="8859057652521303089">Vyberte jazyk:</translation> <translation id="8859174528519900719">Podrámec: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Tabulka aplikace Excel</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index 164694e..c853229 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -683,7 +683,6 @@ <translation id="200544492091181894">Du kan altid ændre dette senere i Indstillinger</translation> <translation id="2006638907958895361">Åbn linket i <ph name="APP" /></translation> <translation id="2007404777272201486">Rapportér et problem...</translation> -<translation id="2016237810978710652">Åbner Linux-filer...</translation> <translation id="2016430552235416146">Traditionelt</translation> <translation id="2017334798163366053">Deaktiver registrering af data om ydeevne</translation> <translation id="2017836877785168846">Nulstiller historikken og autofuldførelser i adresselinjen.</translation> @@ -3782,7 +3781,6 @@ <translation id="6748775883310276718">Terminal med enkelt app</translation> <translation id="6751256176799620176">1 mappe er valgt</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Inkognito)</translation> -<translation id="6751815812172740613">Vil du slette alle Linux-apps og -data i din mappe med Linux-filer fra denne enhed <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">Webadressen er kopieret</translation> <translation id="6758056191028427665">Fortæl os, hvad du synes.</translation> <translation id="6759193508432371551">Gendannelse af fabriksindstillinger</translation> @@ -4059,7 +4057,6 @@ <ph name="BEGIN_PARAGRAPH3" />Du kan administrere denne funktion i Indstillinger > Google. Vælg Brug og diagnostik i menuen.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Få H&jælp</translation> <translation id="7200083590239651963">Vælg konfiguration</translation> -<translation id="7201014958346994077">Linux-filerne kan ikke ses</translation> <translation id="720110658997053098">Lad kiosktilstand forblive aktiveret på denne enhed</translation> <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" er slettet</translation> <translation id="7206693748120342859">Downloader <ph name="PLUGIN_NAME" />...</translation> @@ -4674,7 +4671,6 @@ <translation id="8107015733319732394">Google Play Butik installeres på din <ph name="DEVICE_TYPE" />. Det kan tage nogle minutter.</translation> <translation id="8111155949205007504">Del denne adgangskode med din iPhone</translation> <translation id="8113043281354018522">Vælg licenstype</translation> -<translation id="8116925261070264013">Websites, hvor lyden er slået fra</translation> <translation id="8116972784401310538">&Bogmærkeadministrator</translation> <translation id="8117620576188476503">Administrer forbindelser, opdateringer og indstillinger med statusbakken. Du kan også bruge tastaturet ved at trykke på Alt+Shift+S.</translation> <translation id="8118362518458010043">Deaktiveret af Chrome. Denne udvidelse er muligvis ikke sikker.</translation> @@ -5134,7 +5130,6 @@ <translation id="8845001906332463065">Få hjælp</translation> <translation id="8846141544112579928">Søger efter tastatur...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Hvis du vil åbne filer med $1, skal du først kopiere dem til mappen med Linux-filer.</translation> <translation id="8859057652521303089">Vælg dit sprog:</translation> <translation id="8859174528519900719">Underramme: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel-regneark</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index e9e1e29e..034868c2 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -683,7 +683,6 @@ <translation id="200544492091181894">Dies kann jederzeit in den Einstellungen geändert werden</translation> <translation id="2006638907958895361">Link in <ph name="APP" /> öffnen</translation> <translation id="2007404777272201486">Problem melden...</translation> -<translation id="2016237810978710652">Linux-Dateien werden geöffnet…</translation> <translation id="2016430552235416146">Traditionell</translation> <translation id="2017334798163366053">Erfassung von Leistungsdaten deaktivieren</translation> <translation id="2017836877785168846">Löscht den Verlauf sowie Autovervollständigungen in der Adressleiste.</translation> @@ -3779,7 +3778,6 @@ <translation id="6748775883310276718">Kiosk mit einer App</translation> <translation id="6751256176799620176">1 Ordner ausgewählt</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (anonym)</translation> -<translation id="6751815812172740613">Alle Linux-Anwendungen und Daten im Ordner "Linux-Dateien" von diesem <ph name="DEVICE_TYPE" /> löschen?</translation> <translation id="6757101664402245801">URL kopiert</translation> <translation id="6758056191028427665">Teilen Sie uns mit, wie zufrieden Sie mit uns sind.</translation> <translation id="6759193508432371551">Zurücksetzen auf Werkseinstellungen</translation> @@ -4056,7 +4054,6 @@ <ph name="BEGIN_PARAGRAPH3" />Sie können diese Funktion unter "Einstellungen" > "Google" steuern. Wählen Sie im angezeigten Menü "Nutzung & Diagnose" aus.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">H&ilfe erhalten</translation> <translation id="7200083590239651963">Konfiguration auswählen</translation> -<translation id="7201014958346994077">Linux-Dateien können nicht angezeigt werden</translation> <translation id="720110658997053098">Gerät dauerhaft im Kioskmodus betreiben</translation> <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" wurde gelöscht</translation> <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> wird heruntergeladen...</translation> @@ -4672,7 +4669,6 @@ <translation id="8107015733319732394">Google Play Store wird auf Ihrem <ph name="DEVICE_TYPE" /> installiert. Dies kann ein paar Minuten dauern.</translation> <translation id="8111155949205007504">Dieses Passwort für Ihr iPhone freigeben</translation> <translation id="8113043281354018522">Lizenztyp auswählen</translation> -<translation id="8116925261070264013">Stummgeschaltet</translation> <translation id="8116972784401310538">&Lesezeichen-Manager</translation> <translation id="8117620576188476503">Verwalten Sie Verbindungen, Updates und Einstellungen über die Statusleiste. Zum Öffnen über die Tastatur drücken Sie Alt + Umschalttaste + S.</translation> <translation id="8118362518458010043">Von Chrome deaktiviert. Diese Erweiterung könnte unsicher sein.</translation> @@ -5132,7 +5128,6 @@ <translation id="8845001906332463065">Hilfe aufrufen</translation> <translation id="8846141544112579928">Suche nach Tastatur läuft...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Um Dateien mit "$1" zu öffnen, kopieren Sie sie zuerst in den Linux-Ordner.</translation> <translation id="8859057652521303089">Sprache auswählen:</translation> <translation id="8859174528519900719">Subframe: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel-Tabelle</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 14298b8..2b8273e5 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Μπορείτε να αλλάξετε αυτήν την επιλογή στις ρυθμίσεις οποιαδήποτε στιγμή</translation> <translation id="2006638907958895361">Άνοιγμα Συνδέσμου στην εφαρμογή <ph name="APP" /></translation> <translation id="2007404777272201486">Αναφορά προβλήματος...</translation> -<translation id="2016237810978710652">Άνοιγμα Αρχείων Linux...</translation> <translation id="2016430552235416146">Τυπική</translation> <translation id="2017334798163366053">Απενεργοποίηση συλλογής δεδομένων απόδοσης</translation> <translation id="2017836877785168846">Διαγράφει το ιστορικό και τις αυτόματες συμπληρώσεις στη γραμμή διευθύνσεων.</translation> @@ -3784,7 +3783,6 @@ <translation id="6748775883310276718">Kiosk μεμονωμένης εφαρμογής</translation> <translation id="6751256176799620176">Επιλέχθηκε 1 φάκελος</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Ανώνυμη περιήγηση)</translation> -<translation id="6751815812172740613">Να διαγραφούν όλες οι εφαρμογές και τα δεδομένα Linux που περιέχονται στον φάκελο "Αρχεία Linux" από αυτήν τη συσκευή <ph name="DEVICE_TYPE" />;</translation> <translation id="6757101664402245801">Το URL αντιγράφηκε</translation> <translation id="6758056191028427665">Πείτε μας πώς τα πηγαίνουμε</translation> <translation id="6759193508432371551">Επαναφορά εργοστασιακών ρυθμίσεων</translation> @@ -4061,7 +4059,6 @@ <ph name="BEGIN_PARAGRAPH3" />Μπορείτε να ελέγχετε αυτήν τη λειτουργία από το μενού Ρυθμίσεις > Google. Επιλέξτε Χρήση και διαγνωστικά από το μενού.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Λάβετε β&οήθεια</translation> <translation id="7200083590239651963">Επιλογή διαμόρφωσης</translation> -<translation id="7201014958346994077">Δεν είναι δυνατή η προβολή Αρχείων Linux</translation> <translation id="720110658997053098">Μόνιμη διατήρηση της παρούσας συσκευής σε λειτουργία Kiosk</translation> <translation id="7201118060536064622">Το "<ph name="DELETED_ITEM_NAME" />" διαγράφηκε</translation> <translation id="7206693748120342859">Γίνεται λήψη της προσθήκης <ph name="PLUGIN_NAME" />…</translation> @@ -4677,7 +4674,6 @@ <translation id="8107015733319732394">Εγκατάσταση του Google Play Store στη συσκευή σας <ph name="DEVICE_TYPE" />. Αυτό μπορεί να διαρκέσει μερικά λεπτά.</translation> <translation id="8111155949205007504">Κοινοποίηση αυτού του κωδικού πρόσβασης στο iPhone σας</translation> <translation id="8113043281354018522">Επιλογή τύπου άδειας</translation> -<translation id="8116925261070264013">Σε σίγαση</translation> <translation id="8116972784401310538">&Διαχείριση σελιδοδεικτών</translation> <translation id="8117620576188476503">Διαχειριστείτε συνδέσεις, ενημερώσεις και ρυθμίσεις από την περιοχή κατάστασης. Για να μεταβείτε εδώ από το πληκτρολόγιο, πατήστε Alt + Shift + S.</translation> <translation id="8118362518458010043">Απενεργοποιήθηκε από το Chrome. Αυτή η επέκταση μπορεί να μην είναι ασφαλής.</translation> @@ -5134,7 +5130,6 @@ <translation id="8845001906332463065">Λήψη βοήθειας</translation> <translation id="8846141544112579928">Αναζήτηση για πληκτρολόγιο…</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Προκειμένου να ανοίξετε αρχεία χρησιμοποιώντας την εφαρμογή $1, πρώτα αντιγράψτε τα στον φάκελο "Αρχεία Linux".</translation> <translation id="8859057652521303089">Επιλέξτε τη γλώσσα σας:</translation> <translation id="8859174528519900719">Υποπλαίσιο: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Υπολογιστικό φύλλο Excel</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 101793b..76bc646 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">You can always change this later in settings</translation> <translation id="2006638907958895361">Open Link in <ph name="APP" /></translation> <translation id="2007404777272201486">Report an Issue...</translation> -<translation id="2016237810978710652">Opening Linux Files…</translation> <translation id="2016430552235416146">Traditional</translation> <translation id="2017334798163366053">Disable performance data collection</translation> <translation id="2017836877785168846">Clears history and autocompletions in the address bar.</translation> @@ -3783,7 +3782,6 @@ <translation id="6748775883310276718">Single App Kiosk</translation> <translation id="6751256176799620176">1 folder selected</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Incognito)</translation> -<translation id="6751815812172740613">Delete all Linux applications and data in your Linux Files folder from this <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">URL copied</translation> <translation id="6758056191028427665">Let us know how we’re doing.</translation> <translation id="6759193508432371551">Factory reset</translation> @@ -4060,7 +4058,6 @@ <ph name="BEGIN_PARAGRAPH3" />You can control this feature from Settings > Google. Select Usage & diagnostics from the menu.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Get H&elp</translation> <translation id="7200083590239651963">Select configuration</translation> -<translation id="7201014958346994077">Unable to view Linux Files</translation> <translation id="720110658997053098">Permanently keep this device in kiosk mode</translation> <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' deleted</translation> <translation id="7206693748120342859">Downloading <ph name="PLUGIN_NAME" />...</translation> @@ -4676,7 +4673,6 @@ <translation id="8107015733319732394">Installing the Google Play Store on your <ph name="DEVICE_TYPE" />. This could take a few minutes.</translation> <translation id="8111155949205007504">Share this password with your iPhone</translation> <translation id="8113043281354018522">Choose license type</translation> -<translation id="8116925261070264013">Muted</translation> <translation id="8116972784401310538">&Bookmark manager</translation> <translation id="8117620576188476503">Manage connections, updates and settings with the status tray. To get here by keyboard, press Alt + Shift + S.</translation> <translation id="8118362518458010043">Disabled by Chrome. This extension may be unsafe.</translation> @@ -5135,7 +5131,6 @@ <translation id="8845001906332463065">Get help</translation> <translation id="8846141544112579928">Searching for keyboard...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">To open files with $1, first copy to Linux Files folder.</translation> <translation id="8859057652521303089">Select your language:</translation> <translation id="8859174528519900719">Subframe: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel spreadsheet</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index 8717b57..35fa50e 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">Sincronización y personalización</translation> <translation id="1398853756734560583">Maximizar</translation> <translation id="1399511500114202393">Sin certificado del usuario</translation> +<translation id="1401165786814632797">Accede a tu Asistente cada vez que digas "Ok Google" cuando tu dispositivo esté activo y desbloqueado.</translation> <translation id="140250605646987970">Se detectó tu teléfono, pero Smart Lock solamente se admite en dispositivos con Android 5.0 y versiones posteriores. <a>Más información</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (supervisado)</translation> <translation id="1405476660552109915">¿Deseas que <ph name="PASSWORD_MANAGER_BRAND" /> guarde tu cuenta para este sitio?</translation> @@ -682,7 +683,6 @@ <translation id="200544492091181894">Puedes cambiar esta opción más tarde en Configuración</translation> <translation id="2006638907958895361">Abrir vínculo en <ph name="APP" /></translation> <translation id="2007404777272201486">Informar de un problema...</translation> -<translation id="2016237810978710652">Abriendo archivos de Linux…</translation> <translation id="2016430552235416146">Tradicional</translation> <translation id="2017334798163366053">Inhabilitar recopilación de datos de rendimiento</translation> <translation id="2017836877785168846">Borra el historial y las opciones de autocompletado en la barra de direcciones.</translation> @@ -1507,6 +1507,7 @@ <translation id="3271648667212143903"><ph name="ORIGIN" /> desea conectarse</translation> <translation id="3274763671541996799">Has activado el modo de pantalla completa.</translation> <translation id="3275778913554317645">Abrir como ventana</translation> +<translation id="3278877214895457897">Cuando tu Chromebook esté configurada, presiona el botón del Asistente o di "Ok Google" para obtener ayuda en cualquier momento.</translation> <translation id="3279230909244266691">Este proceso puede demorar unos minutos. Se está iniciando la máquina virtual.</translation> <translation id="3279741024917655738">Activar opción de mostrar los videos en pantalla completa</translation> <translation id="3280237271814976245">Gu&ardar como...</translation> @@ -2600,6 +2601,7 @@ <translation id="4992066212339426712">Dejar de silenciar</translation> <translation id="4992458225095111526">Confirmar Powerwash</translation> <translation id="4992473555164495036">Tu administrador limitó los métodos de entrada disponibles.</translation> +<translation id="4992926179187649719">Activar "Ok Google"</translation> <translation id="4994474651455208930">Permitir que los sitios web soliciten convertirse en controladores predeterminados de protocolos</translation> <translation id="4994754230098574403">Configurando</translation> <translation id="4996978546172906250">Compartir mediante</translation> @@ -3777,7 +3779,6 @@ <translation id="6748775883310276718">Kiosco de una sola app</translation> <translation id="6751256176799620176">1 carpeta seleccionada</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Incógnito)</translation> -<translation id="6751815812172740613">¿Quieres borrar todos los datos y las apps de Linux que se encuentran en tu carpeta Archivos de Linux de este <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">URL copiada</translation> <translation id="6758056191028427665">Danos tu opinión sobre nuestro trabajo.</translation> <translation id="6759193508432371551">Restablecer configuración de fábrica</translation> @@ -4054,7 +4055,6 @@ <ph name="BEGIN_PARAGRAPH3" />Puedes controlar esta función en Configuración > Google. En el menú, selecciona Uso y diagnóstico.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Obtener ayuda</translation> <translation id="7200083590239651963">Seleccionar configuración</translation> -<translation id="7201014958346994077">No se pueden ver los archivos de Linux</translation> <translation id="720110658997053098">Mantener este dispositivo en modo kiosco de forma permanente</translation> <translation id="7201118060536064622">Se borró "<ph name="DELETED_ITEM_NAME" />"</translation> <translation id="7206693748120342859">Descargando <ph name="PLUGIN_NAME" />...</translation> @@ -4528,6 +4528,7 @@ <translation id="7908378463497120834">Lo sentimos, al menos una partición en tu dispositivo de almacenamiento externo no se pudo montar.</translation> <translation id="7909969815743704077">Descargado en el modo de navegación de incógnito</translation> <translation id="7910768399700579500">&Nueva carpeta</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">Se cambió la contraseña en el servidor. Sal de la cuenta y vuelve a acceder.</translation> <translation id="7915471803647590281">Comunícanos lo que está pasando antes de enviarnos tus comentarios</translation> <translation id="7916556741383518510">Al hacer clic</translation> @@ -4669,7 +4670,6 @@ <translation id="8107015733319732394">Se está instalando Google Play Store en tu <ph name="DEVICE_TYPE" />. Esta acción puede tardar unos minutos.</translation> <translation id="8111155949205007504">Compartir esta contraseña con tu iPhone</translation> <translation id="8113043281354018522">Elige un tipo de licencia</translation> -<translation id="8116925261070264013">Silenciados</translation> <translation id="8116972784401310538">&Administrador de favoritos</translation> <translation id="8117620576188476503">Administra las conexiones, actualizaciones y configuración con la bandeja de estado. Presiona Alt + mayúscula + S para acceder.</translation> <translation id="8118362518458010043">Chrome la inhabilitó. Es posible que esta extensión no sea segura.</translation> @@ -5129,7 +5129,6 @@ <translation id="8845001906332463065">Obtener ayuda</translation> <translation id="8846141544112579928">Buscando teclado…</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Para abrir archivos con $1, primero cópialos a la carpeta Archivos de Linux.</translation> <translation id="8859057652521303089">Selecciona tu idioma:</translation> <translation id="8859174528519900719">Submarco: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Hoja de cálculo de Excel</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index 6cc5dbf0..52c655c1 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Puedes cambiar esta opción más tarde en Configuración</translation> <translation id="2006638907958895361">Abrir enlace en <ph name="APP" /></translation> <translation id="2007404777272201486">Notificar un problema...</translation> -<translation id="2016237810978710652">Abriendo archivos de Linux...</translation> <translation id="2016430552235416146">Tradicional</translation> <translation id="2017334798163366053">Inhabilitar recolección de datos de rendimiento</translation> <translation id="2017836877785168846">Borra el historial y los autocompletados de la barra de direcciones.</translation> @@ -3779,7 +3778,6 @@ <translation id="6748775883310276718">Kiosco de una sola aplicación</translation> <translation id="6751256176799620176">1 carpeta seleccionada</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (incógnito)</translation> -<translation id="6751815812172740613">¿Quieres eliminar todos los datos y aplicaciones de Linux de tu carpeta Archivos de Linux de este <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">URL copiada</translation> <translation id="6758056191028427665">Envíanos tu opinión sobre nuestro servicio.</translation> <translation id="6759193508432371551">Restablecer estado de fábrica</translation> @@ -4056,7 +4054,6 @@ <ph name="BEGIN_PARAGRAPH3" />Puedes controlar esta función en Ajustes > Google. En el menú, selecciona Uso y diagnósticos.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Obtener a&yuda</translation> <translation id="7200083590239651963">Seleccionar configuración</translation> -<translation id="7201014958346994077">No se pueden ver archivos de Linux</translation> <translation id="720110658997053098">Mantener este dispositivo en modo kiosco de forma permanente</translation> <translation id="7201118060536064622">Se ha eliminado "<ph name="DELETED_ITEM_NAME" />"</translation> <translation id="7206693748120342859">Descargando <ph name="PLUGIN_NAME" />...</translation> @@ -4672,7 +4669,6 @@ <translation id="8107015733319732394">Se está instalando Google Play Store en tu <ph name="DEVICE_TYPE" />. Este proceso puede tardar unos minutos.</translation> <translation id="8111155949205007504">Comparte esta contraseña con tu iPhone</translation> <translation id="8113043281354018522">Elige un tipo de licencia</translation> -<translation id="8116925261070264013">Silenciados</translation> <translation id="8116972784401310538">Administrador de &marcadores</translation> <translation id="8117620576188476503">Administra los ajustes, conexiones y actualizaciones con la bandeja de estado. Para acceder a ella con el teclado, pulsa Alt + Mayús + S.</translation> <translation id="8118362518458010043">Chrome ha inhabilitado esta extensión porque es posible que no sea segura.</translation> @@ -5131,7 +5127,6 @@ <translation id="8845001906332463065">Obtener ayuda</translation> <translation id="8846141544112579928">Buscando teclado...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Para abrir los archivos con $1, debes copiarlos en la carpeta Archivos de Linux.</translation> <translation id="8859057652521303089">Selecciona tu idioma:</translation> <translation id="8859174528519900719">Submarco: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Hoja de cálculo de Excel</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index 8898104..5d8fcdd 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Seda saab menüüs Seaded alati hiljem muuta</translation> <translation id="2006638907958895361">Ava link rakenduses <ph name="APP" /></translation> <translation id="2007404777272201486">Anna probleemist teada ...</translation> -<translation id="2016237810978710652">Linuxi failide avamine …</translation> <translation id="2016430552235416146">Traditsiooniline</translation> <translation id="2017334798163366053">Keela toimivusandmete kogumine</translation> <translation id="2017836877785168846">Kustutab aadressiribalt ajaloo ja automaatse täitmise teabe.</translation> @@ -3783,7 +3782,6 @@ <translation id="6748775883310276718">Ühe rakenduse kiosk</translation> <translation id="6751256176799620176">Valitud on üks kaust</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Inkognito)</translation> -<translation id="6751815812172740613">Kas kustutada seadme <ph name="DEVICE_TYPE" /> kaustast Linuxi failid kõik Linuxi rakendused ja andmed?</translation> <translation id="6757101664402245801">URL on kopeeritud</translation> <translation id="6758056191028427665">Andke teada, kuidas meil läheb.</translation> <translation id="6759193508432371551">Tehaseseadete lähtestamine</translation> @@ -4060,7 +4058,6 @@ <ph name="BEGIN_PARAGRAPH3" />Seda funktsiooni saab juhtida jaotises Seaded > Google. Tehke menüüs valik Kasutus ja diagnostika.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">A&bi hankimine</translation> <translation id="7200083590239651963">Seadistuse valimine</translation> -<translation id="7201014958346994077">Linuxi faile ei õnnestu vaadata</translation> <translation id="720110658997053098">Jäta seade püsivalt kioskirežiimile.</translation> <translation id="7201118060536064622">Üksus „<ph name="DELETED_ITEM_NAME" />” kustutati</translation> <translation id="7206693748120342859">Pistikprogrammi <ph name="PLUGIN_NAME" /> allalaadimine ...</translation> @@ -4676,7 +4673,6 @@ <translation id="8107015733319732394">Google Play pood installitakse teie seadmesse <ph name="DEVICE_TYPE" />. See võib võtta mõne minuti.</translation> <translation id="8111155949205007504">Jagage seda parooli oma iPhone'iga</translation> <translation id="8113043281354018522">Valige litsentsi tüüp</translation> -<translation id="8116925261070264013">Vaigistatud</translation> <translation id="8116972784401310538">&Järjehoidjate haldur</translation> <translation id="8117620576188476503">Olekusalves on võimalik hallata ühendusi, värskendusi ja seadeid. Klaviatuuri abil siia liikumiseks vajutage klahvikombinatsiooni Alt + Tõstuklahv + S.</translation> <translation id="8118362518458010043">Chrome on selle keelanud. See laiendus võib olla ebaturvaline.</translation> @@ -5136,7 +5132,6 @@ <translation id="8845001906332463065">Otsige abi</translation> <translation id="8846141544112579928">Klaviatuuri otsimine ...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Kui soovite avada faile rakendusega $1, kopeerige need esmalt Linuxi failide kausta.</translation> <translation id="8859057652521303089">Valige keel:</translation> <translation id="8859174528519900719">Alamraam: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Exceli tabel</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index 6eb7afcf..2f46eaa3 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -683,7 +683,6 @@ <translation id="200544492091181894">همیشه میتوانید این مورد را بعداً در تنظیمات تغییر دهید</translation> <translation id="2006638907958895361">باز کردن پیوند در <ph name="APP" /></translation> <translation id="2007404777272201486">گزارش یک مسئله...</translation> -<translation id="2016237810978710652">درحال باز کردن فایلهای Linux…</translation> <translation id="2016430552235416146">سنتی</translation> <translation id="2017334798163366053">غیرفعال کردن جمعآوری دادههای عملکرد</translation> <translation id="2017836877785168846">سابقه و تکمیل خودکار را در نوار نشانی پاک میکند.</translation> @@ -1379,7 +1378,7 @@ <translation id="3053013834507634016">کاربرد کلید گواهی</translation> <translation id="3057861065630527966">از عکسها و ویدئوهایتان پشتیبان بگیرید</translation> <translation id="3059313675706898490">پیامهای Android</translation> -<translation id="3060379269883947824">فعال کردن «انتخاب کنید تا بتوانید صحبت کنید»</translation> +<translation id="3060379269883947824">فعال کردن «انتخاب برای شنیدن»</translation> <translation id="3061707000357573562">سرویس وصله</translation> <translation id="3064410671692449875">داده ناکافی</translation> <translation id="3065041951436100775">بازخورد بسته شدن برگه.</translation> @@ -3779,7 +3778,6 @@ <translation id="6748775883310276718">کیوسک برنامه تکی</translation> <translation id="6751256176799620176">۱ پوشه انتخاب شد</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (ناشناس)</translation> -<translation id="6751815812172740613">آیا همه برنامههای Linux و دادههای موجود در پوشه Linux Files این <ph name="DEVICE_TYPE" /> حذف شود؟</translation> <translation id="6757101664402245801">نشانی اینترنتی کپی شد</translation> <translation id="6758056191028427665">عملکردمان را به ما نشان دهید.</translation> <translation id="6759193508432371551">بازنشانی به تنظیمات کارخانه</translation> @@ -4056,7 +4054,6 @@ <ph name="BEGIN_PARAGRAPH3" />میتوانید این ویژگی را در «تنظیمات > Google» کنترل کنید. «میزان استفاده و عیبیابی» را از منو انتخاب کنید.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">دریافت راهنمایی</translation> <translation id="7200083590239651963">انتخاب پیکربندی</translation> -<translation id="7201014958346994077">نمیتوان فایلهای Linux را مشاهده کرد</translation> <translation id="720110658997053098">این دستگاه همیشه در حالت کیوسک نگه داشته شود</translation> <translation id="7201118060536064622">«<ph name="DELETED_ITEM_NAME" />» حذف شد</translation> <translation id="7206693748120342859">در حال بارگیری <ph name="PLUGIN_NAME" />…</translation> @@ -4477,7 +4474,7 @@ <translation id="7839051173341654115">مشاهده/پشتیبانگیری رسانه</translation> <translation id="7839192898639727867">شناسه کلید موضوع گواهی</translation> <translation id="7839804798877833423">دریافت این فایلها تقریباً <ph name="FILE_SIZE" /> از داده تلفن همراه شما را مصرف میکند.</translation> -<translation id="7844553762889824470">آنچه را میخواهید بشنوید برجسته کنید، سپس «جستجو + S» را فشار دهید. همچنین میتوانید کلید «جستجو» را فشار دهید و نگه دارید یا در کنار تصویر نمایهتان روی نماد «انتخاب کنید تا بتوانید صحبت کنید» ضربه بزنید تا قسمتی را انتخاب کنید.</translation> +<translation id="7844553762889824470">آنچه را میخواهید بشنوید برجسته کنید، سپس «جستجو + S» را فشار دهید. همچنین میتوانید کلید «جستجو» را فشار دهید و نگه دارید یا در کنار تصویر نمایهتان روی نماد «انتخاب برای شنیدن» ضربه بزنید تا قسمتی را انتخاب کنید.</translation> <translation id="7844992432319478437">بهروزرسانی تفاوت</translation> <translation id="7846076177841592234">لغو انتخاب</translation> <translation id="7846634333498149051">صفحهکلید</translation> @@ -4672,7 +4669,6 @@ <translation id="8107015733319732394">«فروشگاه Google Play» در <ph name="DEVICE_TYPE" /> شما درحال نصب شدن است. ممکن است این کار چند دقیقه طول بکشد.</translation> <translation id="8111155949205007504">اشتراکگذاری این گذرواژه با iPhone</translation> <translation id="8113043281354018522">انتخاب نوع مجوز</translation> -<translation id="8116925261070264013">صامتشده</translation> <translation id="8116972784401310538">مدیر &نشانک</translation> <translation id="8117620576188476503">اتصالها، بهروزرسانیها و تنظیمات را ازطریق سینی وضعیت مدیریت کنید. برای اینکه ازطریق صفحهکلید به اینجا بیایید Alt + Shift + S را فشار دهید.</translation> <translation id="8118362518458010043">توسط Chrome غیرفعال شده است. ممکن است این افزونه ناامن باشد.</translation> @@ -5131,7 +5127,6 @@ <translation id="8845001906332463065">دریافت راهنمایی</translation> <translation id="8846141544112579928">در حال جستجو برای صفحهکلید...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">برای باز کردن فایلها با $1، ابتدا آنها را در پوشه «فایلهای Linux» کپی کنید.</translation> <translation id="8859057652521303089">انتخاب زبان:</translation> <translation id="8859174528519900719">قاب فرعی: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">صفحهگسترده Excel </translation> @@ -5160,7 +5155,7 @@ <translation id="8898786835233784856">انتخاب برگه بعدی</translation> <translation id="8898840733695078011">قدرت سیگنال</translation> <translation id="8899851313684471736">باز کردن پیوند در &پنجره جدید</translation> -<translation id="8902667442496790482">باز کردن تنظیمات «انتخاب کنید تا بتوانید صحبت کنید»</translation> +<translation id="8902667442496790482">باز کردن تنظیمات «انتخاب برای شنیدن»</translation> <translation id="8903921497873541725">بزرگنمایی</translation> <translation id="8904976895050290827">همگامسازی Chrome</translation> <translation id="8909833622202089127">سایت درحال ردیابی مکان شما است</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index f29fcec..01eee6a2 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">Synkronointi ja räätälöinti</translation> <translation id="1398853756734560583">Suurenna</translation> <translation id="1399511500114202393">Ei käyttäjävarmennetta</translation> +<translation id="1401165786814632797">Voit käyttää Assistantia sanomalla Ok Google milloin tahansa, kun laite on päällä ja sen lukitus on avattuna.</translation> <translation id="140250605646987970">Puhelimesi löytyi. Smart Lock toimii kuitenkin vain laitteilla, joissa on Android 5.0 tai uudempi. <a>Lisätietoja</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (valvottu käyttäjä)</translation> <translation id="1405476660552109915">Haluatko, että <ph name="PASSWORD_MANAGER_BRAND" /> tallentaa tilisi tällä sivustolla?</translation> @@ -685,7 +686,6 @@ <translation id="200544492091181894">Voit muuttaa tätä myöhemmin asetuksista.</translation> <translation id="2006638907958895361">Avaa linkki: <ph name="APP" /></translation> <translation id="2007404777272201486">Ilmoita ongelmasta...</translation> -<translation id="2016237810978710652">Avataan Linux-tiedostoja…</translation> <translation id="2016430552235416146">Perinteinen</translation> <translation id="2017334798163366053">Poista tehokkuustietojen kerääminen käytöstä</translation> <translation id="2017836877785168846">Tyhjentää historian ja osoitepalkin automaattiset täydennykset.</translation> @@ -1512,6 +1512,7 @@ <translation id="3271648667212143903"><ph name="ORIGIN" /> haluaa muodostaa yhteyden</translation> <translation id="3274763671541996799">Koko näytön tila on käytössä.</translation> <translation id="3275778913554317645">Avaa ikkunana</translation> +<translation id="3278877214895457897">Kun Chromebook on määritetty, voit puhua Assistantille milloin tahansa painamalla Assistant-painiketta tai sanomalla Ok Google.</translation> <translation id="3279230909244266691">Tämä voi kestää muutaman minuutin. Käynnistetään virtuaalikonetta.</translation> <translation id="3279741024917655738">Koko näytön videoiden näyttötapa:</translation> <translation id="3280237271814976245">Tallenna &nimellä...</translation> @@ -2602,6 +2603,7 @@ <translation id="4992066212339426712">Poista mykistys</translation> <translation id="4992458225095111526">Vahvista powerwash</translation> <translation id="4992473555164495036">Järjestelmänvalvoja on rajoittanut syöttötapoja.</translation> +<translation id="4992926179187649719">Ota käyttöön Ok Google</translation> <translation id="4994474651455208930">Anna sivustojen ehdottaa protokollien oletuskäsittelypalveluiden määrittämistä.</translation> <translation id="4994754230098574403">Määritetään</translation> <translation id="4996978546172906250">Jaa tällä palvelulla:</translation> @@ -3781,7 +3783,6 @@ <translation id="6748775883310276718">Yksittäisen sovelluksen kioskitila</translation> <translation id="6751256176799620176">1 kansio valittu</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Incognito)</translation> -<translation id="6751815812172740613">Poistetaanko kaikki Linux-sovellukset ja Linux-tiedostokansion data laitteelta <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">URL-osoite kopioitu</translation> <translation id="6758056191028427665">Kerro mielipiteesi</translation> <translation id="6759193508432371551">Tehdasasetusten palauttaminen</translation> @@ -4058,7 +4059,6 @@ <ph name="BEGIN_PARAGRAPH3" />Voit hallinnoida tätä ominaisuutta kohdassa Asetukset > Google. Valitse valikosta Käyttö‑ ja diagnostiikkatiedot.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Pyydä ohj&eita</translation> <translation id="7200083590239651963">Valitse konfiguraatio</translation> -<translation id="7201014958346994077">Linux-tiedostoja ei voi näyttää</translation> <translation id="720110658997053098">Pidä tämä laite pysyvästi kioskitilassa</translation> <translation id="7201118060536064622"><ph name="DELETED_ITEM_NAME" /> poistettu</translation> <translation id="7206693748120342859">Ladataan <ph name="PLUGIN_NAME" />...</translation> @@ -4531,6 +4531,7 @@ <translation id="7908378463497120834">Ainakaan yhtä ulkoisen tallennustilan osioista ei voitu ottaa käyttöön.</translation> <translation id="7909969815743704077">Ladattiin incognito-tilassa</translation> <translation id="7910768399700579500">&Uusi kansio</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">Salasana vaihdettiin palvelimella. Kirjaudu ulos ja sitten uudelleen sisään.</translation> <translation id="7915471803647590281">Kerro meille tapahtumista ennen kun lähetät palautteen.</translation> <translation id="7916556741383518510">Klikkaamalla</translation> @@ -4672,7 +4673,6 @@ <translation id="8107015733319732394"><ph name="DEVICE_TYPE" /> asentaa Google Play Kauppaa. Tämä voi kestää pari minuuttia.</translation> <translation id="8111155949205007504">Jaa tämä salasana iPhonellesi</translation> <translation id="8113043281354018522">Valitse lisenssityyppi</translation> -<translation id="8116925261070264013">Mykistetty</translation> <translation id="8116972784401310538">&Kirjanmerkkien hallinta</translation> <translation id="8117620576188476503">Tila-alueella voit hallita yhteyksiä, päivityksiä ja asetuksia. Avaa se näppäimistöllä painamalla Alt + vaihto + S.</translation> <translation id="8118362518458010043">Chrome on poistanut tämän laajennuksen käytöstä, sillä se ei välttämättä ole turvallinen.</translation> @@ -5131,7 +5131,6 @@ <translation id="8845001906332463065">Hae ohjeita</translation> <translation id="8846141544112579928">Näppäimistöä etsitään…</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Jos haluat avata tiedostoja sovelluksella $1, kopioi ne ensin Linux-tiedostot-kansioon.</translation> <translation id="8859057652521303089">Valitse kieli:</translation> <translation id="8859174528519900719">Alakehys: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel-laskentataulukko</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index 296389b..da183aab 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">Pag-sync at pag-personalize</translation> <translation id="1398853756734560583">Maximize</translation> <translation id="1399511500114202393">Walang certificate ng user</translation> +<translation id="1401165786814632797">I-access ang iyong Assistant anumang oras na sabihin mo ang "Ok Google" kapag nakailaw at naka-unlock ang iyong device.</translation> <translation id="140250605646987970">Nakita na ang iyong telepono. Ngunit gumagana lang ang Smart Lock sa mga device na may Android 5.0 o mas bago. <a>Matuto nang higit pa</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (Pinangangasiwaan)</translation> <translation id="1405476660552109915">Gusto mo bang i-save ng <ph name="PASSWORD_MANAGER_BRAND" /> ang iyong account para sa site na ito?</translation> @@ -685,7 +686,6 @@ <translation id="200544492091181894">Maaari mo itong baguhin sa mga setting sa ibang pagkakataon, anumang oras</translation> <translation id="2006638907958895361">Buksan ang Link sa <ph name="APP" /></translation> <translation id="2007404777272201486">Mag-ulat ng Isyu...</translation> -<translation id="2016237810978710652">Binubuksan ang Mga Linux File...</translation> <translation id="2016430552235416146">Tradisyonal</translation> <translation id="2017334798163366053">I-disable ang pagkolekta ng data ng pagganap</translation> <translation id="2017836877785168846">Kini-clear ang history at mga awtomatikong pagkumpleto sa address bar.</translation> @@ -1510,6 +1510,7 @@ <translation id="3271648667212143903">Gustong kumonekta ng <ph name="ORIGIN" /></translation> <translation id="3274763671541996799">Nag-full screen ka.</translation> <translation id="3275778913554317645">Buksan bilang window</translation> +<translation id="3278877214895457897">Kapag na-set up ang iyong Chromebook, pindutin ang button ng Assistant o sabihin ang "Ok Google" para humingi ng tulong sa Assistant mo anumang oras.</translation> <translation id="3279230909244266691">Maaaring abutin nang ilang minuto ang prosesong ito. Sinisimulan ang virtual machine.</translation> <translation id="3279741024917655738">Ipakita ang mga fullscreen video sa</translation> <translation id="3280237271814976245">I-save &bilang...</translation> @@ -2603,6 +2604,7 @@ <translation id="4992066212339426712">I-unmute</translation> <translation id="4992458225095111526">Kumpirmahin ang Powerwash</translation> <translation id="4992473555164495036">Nilimitahan ng iyong administrator ang mga available na pamamaraan ng pag-input.</translation> +<translation id="4992926179187649719">I-on ang 'Ok Google'</translation> <translation id="4994474651455208930">Payagan ang mga site na humiling na maging mga default na handler para sa mga protocol</translation> <translation id="4994754230098574403">Sine-set up</translation> <translation id="4996978546172906250">Ibahagi gamit ang</translation> @@ -3780,7 +3782,6 @@ <translation id="6748775883310276718">Kiosk na Pang-isang App</translation> <translation id="6751256176799620176">1 folder ang napili</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Incognito)</translation> -<translation id="6751815812172740613">I-delete ang lahat ng Linux application at data sa iyong folder ng Mga File ng Linux sa <ph name="DEVICE_TYPE" /> na ito?</translation> <translation id="6757101664402245801">Nakopya ang URL</translation> <translation id="6758056191028427665">Ipaalam sa amin kung ano ang iyong palagay sa ginagawa namin.</translation> <translation id="6759193508432371551">Factory reset</translation> @@ -4057,7 +4058,6 @@ <ph name="BEGIN_PARAGRAPH3" />Maaari mong kontrolin ang feature na ito sa Mga Setting > Google. Piliin ang Paggamit at mga diagnostic mula sa menu.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Humingi ng Tulong</translation> <translation id="7200083590239651963">Pumili ng configuration</translation> -<translation id="7201014958346994077">Hindi matingnan ang Mga Linux File</translation> <translation id="720110658997053098">Permanenteng panatilihin sa kiosk mode ang device na ito</translation> <translation id="7201118060536064622">Na-delete ang '<ph name="DELETED_ITEM_NAME" />'</translation> <translation id="7206693748120342859">Dina-download ang <ph name="PLUGIN_NAME" />...</translation> @@ -4531,6 +4531,7 @@ <translation id="7908378463497120834">Paumanhin, hindi mai-mount ang hindi bababa sa isang bahagi ng iyong device sa storage.</translation> <translation id="7909969815743704077">Na-download sa Incognito</translation> <translation id="7910768399700579500">&Bagong folder</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">Napalitan na ang iyong password sa server. Mag-sign out at muling mag-sign in.</translation> <translation id="7915471803647590281">Mangyaring sabihin sa amin kung ano ang nangyayari bago ang pagpapadala ng feedback.</translation> <translation id="7916556741383518510">Sa Pag-click</translation> @@ -4672,7 +4673,6 @@ <translation id="8107015733319732394">Ini-install ang Google Play Store sa iyong <ph name="DEVICE_TYPE" />. Maaaring abutin ito nang ilang minuto.</translation> <translation id="8111155949205007504">Ibahagi ang password na ito sa iyong iPhone</translation> <translation id="8113043281354018522">Pumili ng uri ng lisensya</translation> -<translation id="8116925261070264013">Naka-mute</translation> <translation id="8116972784401310538">&Tagapangasiwa ng bookmark</translation> <translation id="8117620576188476503">Pamahalaan ang mga koneksyon, update, at setting gamit ang status tray. Upang makapunta rito sa pamamagitan ng keyboard, pindutin ang Alt + Shift + S.</translation> <translation id="8118362518458010043">Na-disable ng Chrome. Maaaring hindi ligtas ang extension na ito.</translation> @@ -5132,7 +5132,6 @@ <translation id="8845001906332463065">Humingi ng tulong</translation> <translation id="8846141544112579928">Naghahanap ng keyboard...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Para buksan ang mga file gamit ang $1, kopyahin muna ang folder ng Mga File ng Linux.</translation> <translation id="8859057652521303089">Piliin ang iyong wika:</translation> <translation id="8859174528519900719">Subframe: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Spreadsheet ng Excel</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index 2e6e2163..330bbfb 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Vous pourrez toujours modifier cette option plus tard dans les paramètres</translation> <translation id="2006638907958895361">Ouvrir le lien dans <ph name="APP" /></translation> <translation id="2007404777272201486">Signaler un problème...</translation> -<translation id="2016237810978710652">Ouverture des fichiers Linux…</translation> <translation id="2016430552235416146">Traditionnel</translation> <translation id="2017334798163366053">Désactiver la collecte de données relatives aux performances</translation> <translation id="2017836877785168846">Efface l'historique et les saisies semi-automatiques dans la barre d'adresse.</translation> @@ -3784,7 +3783,6 @@ <translation id="6748775883310276718">Application kiosque unique</translation> <translation id="6751256176799620176">1 dossier sélectionné</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Navigation privée)</translation> -<translation id="6751815812172740613">Supprimer toutes les applications et les données Linux de votre dossier "Fichiers Linux" sur ce type d'appareil : <ph name="DEVICE_TYPE" /> ?</translation> <translation id="6757101664402245801">URL copiée</translation> <translation id="6758056191028427665">Faites-nous part de vos commentaires.</translation> <translation id="6759193508432371551">Rétablir la configuration d'usine</translation> @@ -4061,7 +4059,6 @@ <ph name="BEGIN_PARAGRAPH3" />Pour contrôler cette fonctionnalité, accédez à Paramètres > Google. Sélectionnez "Utilisation et diagnostics" dans le menu.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Obtenir de l'aid&e</translation> <translation id="7200083590239651963">Sélectionner la configuration</translation> -<translation id="7201014958346994077">Impossible d'afficher les fichiers Linux</translation> <translation id="720110658997053098">Conserver cet appareil en mode Kiosque de manière permanente</translation> <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" supprimé</translation> <translation id="7206693748120342859">Téléchargement de <ph name="PLUGIN_NAME" /> en cours…</translation> @@ -4677,7 +4674,6 @@ <translation id="8107015733319732394">Installation du Google Play Store sur votre <ph name="DEVICE_TYPE" />. Cette opération peut prendre quelques minutes.</translation> <translation id="8111155949205007504">Partagez ce mot de passe avec votre iPhone</translation> <translation id="8113043281354018522">Sélectionner un type de licence</translation> -<translation id="8116925261070264013">Son coupé</translation> <translation id="8116972784401310538">&Gestionnaire de favoris</translation> <translation id="8117620576188476503">Gérez les connexions, les mises à jour et les paramètres depuis la barre d'état. Pour y accéder depuis le clavier, appuyez sur Alt+Maj+S.</translation> <translation id="8118362518458010043">Désactivée par Chrome. Cette extension est peut-être dangereuse.</translation> @@ -5136,7 +5132,6 @@ <translation id="8845001906332463065">Obtenir de l'aide</translation> <translation id="8846141544112579928">Recherche du clavier en cours…</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Pour ouvrir un fichier avec $1, copiez-le d'abord dans le dossier "Fichiers Linux".</translation> <translation id="8859057652521303089">Sélectionnez votre langue :</translation> <translation id="8859174528519900719">Sous-cadre : <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Feuille de calcul Excel</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index bc7e4bd..b0b9bab 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">સિંક અને વૈયક્તિકરણ</translation> <translation id="1398853756734560583">મોટું કરો</translation> <translation id="1399511500114202393">કોઈ વપરાશકર્તા પ્રમાણપત્ર નથી</translation> +<translation id="1401165786814632797">જ્યારે તમારું ઉપકરણ સક્રિય અને અનલૉક હોય, ત્યારે "ઓકે Google" બોલીને ગમે ત્યારે તમારા આસિસ્ટંટને ઍક્સેસ કરો.</translation> <translation id="140250605646987970">તમારો ફોન મળ્યો. પરંતુ Smart Lock માત્ર Android 5.0 અને તેથી ઉપરના ઉપકરણો પર કાર્ય કરે છે. <a>વધુ જાણો</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (નિરીક્ષિત)</translation> <translation id="1405476660552109915">શું તમે ઇચ્છો છો કે <ph name="PASSWORD_MANAGER_BRAND" /> આ સાઇટ માટે તમારા એકાઉન્ટને સાચવે?</translation> @@ -681,7 +682,6 @@ <translation id="200544492091181894">તમે થોડા સમય પછી સેટિંગમાં જઈને હંમેશાં આને બદલી શકો છો</translation> <translation id="2006638907958895361"><ph name="APP" />માં લિંક ખોલો</translation> <translation id="2007404777272201486">સમસ્યાની જાણ કરો...</translation> -<translation id="2016237810978710652">Linux ફાઇલો ખોલી રહ્યાં છીએ...</translation> <translation id="2016430552235416146">પરંપરાગત</translation> <translation id="2017334798163366053">પ્રદર્શન ડેટા સંગ્રહ અક્ષમ કરો</translation> <translation id="2017836877785168846">ઍડ્રેસ બારમાં ઇતિહાસ અને સ્વતઃપૂર્ણ કરવું સાફ કરો.</translation> @@ -1506,6 +1506,7 @@ <translation id="3271648667212143903"><ph name="ORIGIN" />, કનેક્ટ કરવા માગે છે</translation> <translation id="3274763671541996799">તમે પૂર્ણ સ્ક્રીન પર ગયા છો.</translation> <translation id="3275778913554317645">વિંડો તરીકે ખોલો</translation> +<translation id="3278877214895457897">જ્યારે તમારી Chromebook સેટ અપ કરેલ હોય, ત્યારે કોઈપણ સમયે તમારા આસિસ્ટંટની સહાય મેળવવા માટે આસિસ્ટંટ બટન દબાવો અથવા "ઓકે Google" બોલો.</translation> <translation id="3279230909244266691">આ પ્રક્રિયામાં થોડો સમય લાગી શકે છે. વર્ચ્યુઅલ મશીન શરૂ કરી રહ્યાં છીએ.</translation> <translation id="3279741024917655738">આના પર પૂર્ણસ્ક્રીન વીડિઓ બતાવો</translation> <translation id="3280237271814976245">આ &રૂપમાં સાચવો...</translation> @@ -2599,6 +2600,7 @@ <translation id="4992066212339426712">અનમ્યૂટ કરો</translation> <translation id="4992458225095111526">Powerwash ની પુષ્ટિ કરો</translation> <translation id="4992473555164495036">તમારા વ્યવસ્થાપકે ઉપલબ્ધ ઇનપુટ પદ્ધતિઓને મર્યાદિત કરેલ છે.</translation> +<translation id="4992926179187649719">'ઓકે Google' ચાલુ કરો</translation> <translation id="4994474651455208930">પ્રોટોકૉલ્સ માટે ડિફૉલ્ટ હેન્ડલર્સ બનવા માટે સાઇટને પૂછવાની મંજૂરી આપો</translation> <translation id="4994754230098574403">સેટ કરી રહ્યા છીએ</translation> <translation id="4996978546172906250">આનાથી શેર કરો</translation> @@ -3778,7 +3780,6 @@ <translation id="6748775883310276718">સિંગલ ઍપ કિઓસ્ક</translation> <translation id="6751256176799620176">1 ફોલ્ડર પસંદ કર્યું</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (છૂપી)</translation> -<translation id="6751815812172740613">આ <ph name="DEVICE_TYPE" />માંથી બધી Linux ઍપ્લિકેશનો અને તમારા Linux ફાઇલ ફોલ્ડરનો ડેટા ડિલીટ કરીએ?</translation> <translation id="6757101664402245801">URL કૉપિ કર્યું</translation> <translation id="6758056191028427665">અમને જણાવો કે અમે કેવું કાર્ય કરી રહ્યાં છીએ.</translation> <translation id="6759193508432371551">ફેક્ટરી ફરીથી સેટ કરો</translation> @@ -4055,7 +4056,6 @@ <ph name="BEGIN_PARAGRAPH3" />તમે આ સુવિધાનું સેટિંગ > Google પર નિયંત્રણ કરી શકો છો. મેનૂ પરથી વપરાશ અને નિદાન પસંદ કરો.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">સહાય મેળવો</translation> <translation id="7200083590239651963">ગોઠવણી પસંદ કરો</translation> -<translation id="7201014958346994077">Linux ફાઇલો જોવામાં અસમર્થ</translation> <translation id="720110658997053098">આ ઉપકરણને કાયમ માટે કિઓસ્ક મોડમાં રાખો</translation> <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' ડિલીટ કર્યું</translation> <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> ડાઉનલોડ કરી રહ્યું છે...</translation> @@ -4528,6 +4528,7 @@ <translation id="7908378463497120834">માફ કરશો, તમારા બાહ્ય સ્ટોરેજ ઉપકરણ પર ઓછામાં ઓછું એક પાર્ટિશન માઉન્ટ કરી શકાયું નથી.</translation> <translation id="7909969815743704077">છૂપા મોડમાં ડાઉનલોડ કર્યું</translation> <translation id="7910768399700579500">&નવું ફોલ્ડર</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">સર્વર પર તમારો પાસવર્ડ બદલાઈ ગયો છે. કૃપા કરી સાઇન આઉટ કરો પછી ફરીથી સાઇન ઇન કરો.</translation> <translation id="7915471803647590281">કૃપા કરીને પ્રતિસાદ મોકલતા પહેલા શું થઈ રહ્યું છે તે અમને કહો.</translation> <translation id="7916556741383518510">ક્લિક કરવા પર</translation> @@ -4664,7 +4665,6 @@ <translation id="8107015733319732394">તમારા <ph name="DEVICE_TYPE" /> પર Google Play સ્ટોર ઇન્સ્ટૉલ કરી રહ્યાં છીએ. આમાં થોડી મિનિટ લાગી શકે છે.</translation> <translation id="8111155949205007504">તમાર iPhone સાથે આ પાસવર્ડ શેર કરો</translation> <translation id="8113043281354018522">લાઇસન્સનો પ્રકાર પસંદ કરો</translation> -<translation id="8116925261070264013">મ્યૂટ કરેલ</translation> <translation id="8116972784401310538">&બુકમાર્ક વ્યવસ્થાપક</translation> <translation id="8117620576188476503">સ્ટેટસ ટ્રે વડે કનેક્શનો, અપડેટ અને સેટિઁગ મેનેજ કરો. અહીં કીબોર્ડ વડે પહોંચવા માટે, Alt + Shift + S દબાવો.</translation> <translation id="8118362518458010043">Chrome દ્વારા બંધ કરેલ છે. આ એક્સ્ટેંશન અસુરક્ષિત હોઈ શકે છે.</translation> @@ -5123,7 +5123,6 @@ <translation id="8845001906332463065">સહાય મેળવો</translation> <translation id="8846141544112579928">કીબોર્ડ માટે શોધ કરી રહ્યું છે...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">$1 વડે ફાઇલો ખોલવા માટે, પહેલા Linux Files ફોલ્ડરમાં કૉપિ કરો.</translation> <translation id="8859057652521303089">તમારી ભાષા પસંદ કરો:</translation> <translation id="8859174528519900719">સબફ્રેમ: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel સ્પ્રેડશીટ</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index e19d44d3..b8bdf97 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">आप बाद में सेटिंग में जाकर इसे कभी भी बदल सकते हैं</translation> <translation id="2006638907958895361"><ph name="APP" /> में लिंक खोलें</translation> <translation id="2007404777272201486">किसी समस्या की रिपोर्ट करें...</translation> -<translation id="2016237810978710652">'Linux फ़ाइलें' खुल रही हैं...</translation> <translation id="2016430552235416146">परंपरागत</translation> <translation id="2017334798163366053">'परफ़ॉर्मेंस डेटा' इकट्ठा करना बंद करें</translation> <translation id="2017836877785168846">इतिहास साफ़ करता है और पता बार में स्वत: पूर्णता को साफ़ करता है.</translation> @@ -3782,7 +3781,6 @@ <translation id="6748775883310276718">सिंगल ऐप किओस्क</translation> <translation id="6751256176799620176">1 फ़ोल्डर चयनित</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (गुप्त)</translation> -<translation id="6751815812172740613">इस <ph name="DEVICE_TYPE" /> से आपके 'Linux फ़ाइलें' फ़ोल्डर में मौजूद सभी Linux ऐप्लिकेशन और डेटा मिटाएं?</translation> <translation id="6757101664402245801">URL कॉपी किया गया</translation> <translation id="6758056191028427665">हमें बताएं कि हम कैसा प्रदर्शन कर रहे हैं.</translation> <translation id="6759193508432371551">फैक्टरी रीसेट करें</translation> @@ -4059,7 +4057,6 @@ <ph name="BEGIN_PARAGRAPH3" />आप सेटिंग > Google में जाकर इस फ़ीचर को नियंत्रित कर सकते हैं. मेन्यू में जाकर इस्तेमाल और निदान को चुनें.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">स&हायता प्राप्त करें</translation> <translation id="7200083590239651963">कॉन्फ़िगरेशन चुनें</translation> -<translation id="7201014958346994077">Linux फ़ाइलें नहीं दिखाई जा सकीं</translation> <translation id="720110658997053098">इस डिवाइस को हमेशा के लिए किओस्क मोड में रखें</translation> <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' मिटाया गया</translation> <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> डाउनलोड हो रहा है...</translation> @@ -4675,7 +4672,6 @@ <translation id="8107015733319732394">आपके <ph name="DEVICE_TYPE" /> पर Google Play स्टोर इंस्टॉल हो रहा है. इसमें कुछ मिनट लग सकते हैं.</translation> <translation id="8111155949205007504">इस पासवर्ड को अपने iPhone से शेयर करें</translation> <translation id="8113043281354018522">लाइसेंस का प्रकार चुनें</translation> -<translation id="8116925261070264013">आवाज़ बंद की गई</translation> <translation id="8116972784401310538">&बुकमार्क प्रबंधक</translation> <translation id="8117620576188476503">स्टेटस ट्रे के ज़रिए कनेक्शन, अपडेट और सेटिंग प्रबंधित करें. कीबोर्ड से यहां पहुंचने के लिए, Alt + Shift + S दबाएं.</translation> <translation id="8118362518458010043">Chrome ने बंद किया. यह एक्सटेंशन असुरक्षित हो सकता है.</translation> @@ -5134,7 +5130,6 @@ <translation id="8845001906332463065">सहायता प्राप्त करें</translation> <translation id="8846141544112579928">कीबोर्ड खोजा जा रहा है...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">$1 वाली फ़ाइलें खोलने के लिए, पहले Linux फ़ाइल फ़ोल्डर को कॉपी करें.</translation> <translation id="8859057652521303089">अपनी भाषा चुनें:</translation> <translation id="8859174528519900719">सबफ़्रेम: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel स्प्रैडशीट</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index 9aa8772..c5ed6086 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">To možete promijeniti kasnije u postavkama</translation> <translation id="2006638907958895361">Otvori vezu u aplikaciji <ph name="APP" /></translation> <translation id="2007404777272201486">Prijavljivanje problema...</translation> -<translation id="2016237810978710652">Otvaranje Linux datoteka...</translation> <translation id="2016430552235416146">Tradicionalno</translation> <translation id="2017334798163366053">Onemogući prikupljanje podataka o izvedbi</translation> <translation id="2017836877785168846">Briše povijest i automatsko dovršavanje u adresnoj traci.</translation> @@ -3784,7 +3783,6 @@ <translation id="6748775883310276718">Kiosk jedne aplikacije</translation> <translation id="6751256176799620176">Odabrana je 1 mapa</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Anonimno)</translation> -<translation id="6751815812172740613">Želite li s ovog <ph name="DEVICE_TYPE" /> uređaja izbrisati sve Linuxove aplikacije i podatke u mapi Linux datoteke?</translation> <translation id="6757101664402245801">URL kopiran</translation> <translation id="6758056191028427665">Recite nam koliko ste zadovoljni nama.</translation> <translation id="6759193508432371551">Vraćanje na tvorničke postavke</translation> @@ -4061,7 +4059,6 @@ <ph name="BEGIN_PARAGRAPH3" />Tom značajkom možete upravljati tako da otvorite Postavke > Google. Na izborniku odaberite opciju Upotreba i dijagnostika.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">P&omoć</translation> <translation id="7200083590239651963">Odabir konfiguracije</translation> -<translation id="7201014958346994077">Nije moguće pregledati Linux datoteke</translation> <translation id="720110658997053098">Trajno zadrži uređaj u načinu kioska</translation> <translation id="7201118060536064622">Izbrisana je stavka "<ph name="DELETED_ITEM_NAME" />"</translation> <translation id="7206693748120342859">Preuzimanje dodatka <ph name="PLUGIN_NAME" />...</translation> @@ -4677,7 +4674,6 @@ <translation id="8107015733319732394">Trgovina Google Play instalira se na vašem uređaju <ph name="DEVICE_TYPE" />. To bi moglo potrajati nekoliko minuta.</translation> <translation id="8111155949205007504">Dijelite ovu zaporku sa svojim iPhoneom</translation> <translation id="8113043281354018522">Odaberite vrstu licence</translation> -<translation id="8116925261070264013">Bez zvuka</translation> <translation id="8116972784401310538">&Upravitelj oznaka</translation> <translation id="8117620576188476503">Upravljajte vezama, ažuriranjima i postavkama pomoću ladice statusa. Da biste je otvorili pomoću tipkovnice, pritisnite Alt + Shift + S.</translation> <translation id="8118362518458010043">Onemogućio Chrome. To proširenje možda nije sigurno.</translation> @@ -5137,7 +5133,6 @@ <translation id="8845001906332463065">Zatražite pomoć</translation> <translation id="8846141544112579928">Traženje tipkovnice...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Da biste otvarali datoteke pomoću aplikacije $1, najprije ih kopirajte u mapu Linux datoteke.</translation> <translation id="8859057652521303089">Odaberite svoj jezik:</translation> <translation id="8859174528519900719">Podokvir: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excelova proračunska tablica</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index fe35f0c..b1b4988c 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">Szinkronizálás és személyre szabás</translation> <translation id="1398853756734560583">Teljes méret</translation> <translation id="1399511500114202393">Felhasználói tanúsítvány nélkül</translation> +<translation id="1401165786814632797">Segédjéhez bármikor hozzáférhet az „OK Google” kimondásával, ha eszköze nincs alvó üzemmódban, és fel is van oldva.</translation> <translation id="140250605646987970">Megtaláltuk telefonját. A Smart Lock azonban csak Android 5.0 és újabb rendszert futtató eszközökön működik. <a>További információ</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (felügyelt)</translation> <translation id="1405476660552109915">Szeretné, hogy a(z) <ph name="PASSWORD_MANAGER_BRAND" /> mentse az ehhez a webhelyhez tartozó fiókot?</translation> @@ -685,7 +686,6 @@ <translation id="200544492091181894">Ezt később módosíthatja a beállítások között</translation> <translation id="2006638907958895361">Link megnyitása a következőben: <ph name="APP" /></translation> <translation id="2007404777272201486">Hibabejelentés...</translation> -<translation id="2016237810978710652">Linux-fájlok megnyitása…</translation> <translation id="2016430552235416146">Hagyományos</translation> <translation id="2017334798163366053">Teljesítményadatok gyűjtésének letiltása</translation> <translation id="2017836877785168846">Törli a címsávban található előzményeket és automatikus kiegészítéseket.</translation> @@ -1511,6 +1511,7 @@ <translation id="3271648667212143903">A(z) <ph name="ORIGIN" /> csatlakozni szeretne</translation> <translation id="3274763671541996799">Teljes képernyős módra váltott.</translation> <translation id="3275778913554317645">Megnyitás ablakként</translation> +<translation id="3278877214895457897">Miután beállította a Chromebookot, a Segéd-gomb megnyomásával, illetve az „Ok Google” kimondásával bármikor segítséget kérhet Segédjétől.</translation> <translation id="3279230909244266691">Ez a folyamat néhány percet is igénybe vehet. A virtuális gép indítása folyamatban van.</translation> <translation id="3279741024917655738">Teljes képernyős videók megjelenítése a következőn</translation> <translation id="3280237271814976245">Mentés &másként...</translation> @@ -2603,6 +2604,7 @@ <translation id="4992066212339426712">Némítás feloldása</translation> <translation id="4992458225095111526">Powerwash megerősítése</translation> <translation id="4992473555164495036">A rendszergazda korlátozta a rendelkezésre álló beviteli módokat.</translation> +<translation id="4992926179187649719">„Ok Google” bekapcsolása</translation> <translation id="4994474651455208930">A webhelyek kérhetik, hogy protokollok alapértelmezett kezelői legyenek</translation> <translation id="4994754230098574403">Beállítás</translation> <translation id="4996978546172906250">Megosztás itt:</translation> @@ -3782,7 +3784,6 @@ <translation id="6748775883310276718">Egyalkalmazásos kioszk</translation> <translation id="6751256176799620176">1 mappa kiválasztva</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Inkognitómód)</translation> -<translation id="6751815812172740613">Törli a Linux-fájlok mappában található összes Linux-alkalmazást és -adatot erről az eszközről (<ph name="DEVICE_TYPE" />)?</translation> <translation id="6757101664402245801">Az URL kimásolva</translation> <translation id="6758056191028427665">Ossza meg velünk, mennyire van megelégedve munkánkkal.</translation> <translation id="6759193508432371551">Gyári beállítások visszaállítása</translation> @@ -4059,7 +4060,6 @@ <ph name="BEGIN_PARAGRAPH3" />Ezt a funkciót a Beállítások > Google pontnál irányíthatja. Válassza ki a Használat és diagnosztika lehetőséget a menüből.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Súgó</translation> <translation id="7200083590239651963">Konfiguráció kiválasztása</translation> -<translation id="7201014958346994077">A Linux-fájlok megtekintése nem sikerült</translation> <translation id="720110658997053098">Az eszköz állandó kioszk módban tartása</translation> <translation id="7201118060536064622">„<ph name="DELETED_ITEM_NAME" />” törölve</translation> <translation id="7206693748120342859">A(z) <ph name="PLUGIN_NAME" /> plug-in letöltése...</translation> @@ -4533,6 +4533,7 @@ <translation id="7908378463497120834">Sajnos a külső eszközön legalább egy partíció nem csatlakoztatható.</translation> <translation id="7909969815743704077">Letöltve inkognitó módban</translation> <translation id="7910768399700579500">&Új mappa</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">A jelszó megváltozott a szerveren. Jelentkezzen ki, majd jelentkezzen be újra.</translation> <translation id="7915471803647590281">Kérjük, mondja el, mi történik, mielőtt elküldené a visszajelzést.</translation> <translation id="7916556741383518510">Kattintásra</translation> @@ -4674,7 +4675,6 @@ <translation id="8107015733319732394">Folyamatban van a Google Play Áruház telepítése a(z) <ph name="DEVICE_TYPE" /> eszközre. Ez eltarthat néhány percig.</translation> <translation id="8111155949205007504">Ossza meg ezt a jelszót iPhone eszközével</translation> <translation id="8113043281354018522">Válasszon licenctípust</translation> -<translation id="8116925261070264013">Némítva</translation> <translation id="8116972784401310538">&Könyvjelzőkezelő</translation> <translation id="8117620576188476503">Kapcsolatok, frissítések és beállítások kezelése az állapottálca segítségével. Ha a billentyűzet segítségével szeretne ide eljutni, használja az Alt+Shift+s billentyűparancsot.</translation> <translation id="8118362518458010043">A Chrome letiltotta. Ez a bővítmény nem biztonságos.</translation> @@ -5133,7 +5133,6 @@ <translation id="8845001906332463065">Súgó</translation> <translation id="8846141544112579928">Billentyűzet keresése…</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Ha a(z) $1 segítségével szeretne fájlokat megnyitni, először másolja át őket a Linux-fájlok mappába.</translation> <translation id="8859057652521303089">Nyelv kiválasztása:</translation> <translation id="8859174528519900719">Subframe: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel-táblázat</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index 7605cf9..1f70d0f 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Anda dapat mengubah ini nanti di Setelan</translation> <translation id="2006638907958895361">Buka Link di <ph name="APP" /></translation> <translation id="2007404777272201486">Laporkan Masalah...</translation> -<translation id="2016237810978710652">Membuka File Linux...</translation> <translation id="2016430552235416146">Tradisional</translation> <translation id="2017334798163366053">Nonaktifkan koleksi data kinerja</translation> <translation id="2017836877785168846">Hapus histori dan pelengkapan otomatis di kolom URL.</translation> @@ -3784,7 +3783,6 @@ <translation id="6748775883310276718">Kios Aplikasi Tunggal</translation> <translation id="6751256176799620176">1 folder dipilih</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Penyamaran)</translation> -<translation id="6751815812172740613">Hapus semua aplikasi dan data Linux di folder File Linux dari <ph name="DEVICE_TYPE" /> ini?</translation> <translation id="6757101664402245801">URL disalin</translation> <translation id="6758056191028427665">Berikan masukan Anda tentang kinerja kami.</translation> <translation id="6759193508432371551">Kembalikan ke setelan pabrik</translation> @@ -4061,7 +4059,6 @@ <ph name="BEGIN_PARAGRAPH3" />Anda dapat mengontrol fitur ini dari Setelan > Google. Pilih Penggunaan & diagnostik dari menu.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Dapatkan Bantuan</translation> <translation id="7200083590239651963">Pilih konfigurasi</translation> -<translation id="7201014958346994077">Tidak dapat melihat File Linux</translation> <translation id="720110658997053098">Simpan perangkat ini dalam mode kios secara permanen</translation> <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' dihapus</translation> <translation id="7206693748120342859">Mendownload <ph name="PLUGIN_NAME" />...</translation> @@ -4677,7 +4674,6 @@ <translation id="8107015733319732394">Menginstal Google Play Store di <ph name="DEVICE_TYPE" />. Tindakan ini dapat memakan waktu beberapa menit.</translation> <translation id="8111155949205007504">Bagikan sandi ini dengan iPhone</translation> <translation id="8113043281354018522">Pilih jenis lisensi</translation> -<translation id="8116925261070264013">Dinonaktifkan</translation> <translation id="8116972784401310538">&Pengelola bookmark</translation> <translation id="8117620576188476503">Kelola sambungan, update, dan setelan dengan menu status. Untuk membukanya dengan keyboard, tekan Alt + Shift + S.</translation> <translation id="8118362518458010043">Dinonaktifkan oleh Chrome. Ekstensi ini mungkin tidak aman.</translation> @@ -5136,7 +5132,6 @@ <translation id="8845001906332463065">Dapatkan bantuan</translation> <translation id="8846141544112579928">Mencari keyboard...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Untuk membuka file dengan $1, terlebih dahulu salin ke folder File Linux.</translation> <translation id="8859057652521303089">Pilih bahasa Anda:</translation> <translation id="8859174528519900719">Subframe: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Spreadsheet Excel</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index 68fcd451..f1bd0793 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Puoi modificare questa scelta in seguito nelle Impostazioni</translation> <translation id="2006638907958895361">Apri link in <ph name="APP" /></translation> <translation id="2007404777272201486">Segnala un problema...</translation> -<translation id="2016237810978710652">Apertura di file Linux…</translation> <translation id="2016430552235416146">Tradizionale</translation> <translation id="2017334798163366053">Disattiva raccolta di dati sul rendimento</translation> <translation id="2017836877785168846">Consente di cancellare la cronologia e i completamenti automatici nella barra degli indirizzi.</translation> @@ -1370,6 +1369,7 @@ <translation id="3031557471081358569">Seleziona elementi da importare:</translation> <translation id="3031601332414921114">Riprendi la stampa</translation> <translation id="303198083543495566">Area geografica</translation> +<translation id="3033999583152214331">Esegui strumenti, editor e IDE di Linux sul Chromebook. <a target="_blank" href="<ph name="URL" />">Ulteriori informazioni</a></translation> <translation id="3036546437875325427">Abilita Flash</translation> <translation id="3037754279345160234">Impossibile analizzare la configurazione per l'aggiunta al dominio. Contatta l'amministratore.</translation> <translation id="3038612606416062604">Aggiungi manualmente una stampante</translation> @@ -3779,7 +3779,6 @@ <translation id="6748775883310276718">Chiosco app singola</translation> <translation id="6751256176799620176">1 cartella selezionata</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (In incognito)</translation> -<translation id="6751815812172740613">Vuoi eliminare tutti i dati e le applicazioni Linux della cartella File di Linux da questo dispositivo <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">URL copiato</translation> <translation id="6758056191028427665">Comunicaci la tua opinione sul nostro lavoro.</translation> <translation id="6759193508432371551">Ripristino dati di fabbrica</translation> @@ -4056,7 +4055,6 @@ <ph name="BEGIN_PARAGRAPH3" />Puoi controllare questa funzione da Impostazioni > Google. Seleziona Utilizzo e diagnostica dal menu.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Ricevi assistenza</translation> <translation id="7200083590239651963">Seleziona configurazione</translation> -<translation id="7201014958346994077">Impossibile visualizzare i file di Linux</translation> <translation id="720110658997053098">Mantieni definitivamente questo dispositivo in modalità kiosk</translation> <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" eliminato</translation> <translation id="7206693748120342859">Download di <ph name="PLUGIN_NAME" /> in corso...</translation> @@ -4670,7 +4668,6 @@ <translation id="8107015733319732394">Installazione in corso del Google Play Store sul tuo dispositivo <ph name="DEVICE_TYPE" />. L'operazione potrebbe richiedere alcuni minuti.</translation> <translation id="8111155949205007504">Condividi la password con l'iPhone</translation> <translation id="8113043281354018522">Scegli il tipo di licenza</translation> -<translation id="8116925261070264013">Con audio disattivato</translation> <translation id="8116972784401310538">Gestione &Preferiti</translation> <translation id="8117620576188476503">Gestisci connessioni, aggiornamenti e impostazioni dalla barra di stato. Per accedere usando la tastiera, premi ALT + MAIUSC + S.</translation> <translation id="8118362518458010043">Estensione disattivata da Chrome perché potrebbe non essere sicura.</translation> @@ -5129,7 +5126,6 @@ <translation id="8845001906332463065">Richiedi assistenza</translation> <translation id="8846141544112579928">Ricerca tastiera in corso...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Per aprire i file con $1, devi prima copiarli nella cartella File di Linux.</translation> <translation id="8859057652521303089">Seleziona la tua lingua:</translation> <translation id="8859174528519900719">Frame secondario: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Foglio di calcolo Excel</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index 1484e0a..75cabcaf 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -682,7 +682,6 @@ <translation id="200544492091181894">ניתן לשנות את האפשרות הזו מאוחר יותר בהגדרות</translation> <translation id="2006638907958895361">פתח את הקישור ב-<ph name="APP" /></translation> <translation id="2007404777272201486">דיווח על בעיה...</translation> -<translation id="2016237810978710652">מתבצעת פתיחה של קובצי Linux...</translation> <translation id="2016430552235416146">מסורתית</translation> <translation id="2017334798163366053">השבת איסוף של נתוני ביצועים</translation> <translation id="2017836877785168846">מנקה את ההיסטוריה וההשלמות האוטומטיות בסרגל הכתובות</translation> @@ -3778,7 +3777,6 @@ <translation id="6748775883310276718">קיוסק לאפליקציה יחידה</translation> <translation id="6751256176799620176">תיקייה אחת נבחרה</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (גלישה בסתר)</translation> -<translation id="6751815812172740613">למחוק את כל האפליקציות ונתוני Linux מתיקיית קובצי Linux ב-<ph name="DEVICE_TYPE" /> הזה?</translation> <translation id="6757101664402245801">כתובת האתר הועתקה</translation> <translation id="6758056191028427665">נשמח לקבל ממך משוב.</translation> <translation id="6759193508432371551">איפוס להגדרות היצרן</translation> @@ -4055,7 +4053,6 @@ <ph name="BEGIN_PARAGRAPH3" />אפשר לשלוט בתכונה הזו דרך 'הגדרות' > Google. בתפריט יש לבחור באפשרות 'שימוש ואבחון'.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">קבל עזרה</translation> <translation id="7200083590239651963">בחירת תצורה</translation> -<translation id="7201014958346994077">לא ניתן להציג קובצי Linux</translation> <translation id="720110658997053098">השארת המכשיר הזה במצב קיוסק באופן קבוע</translation> <translation id="7201118060536064622">הפריט '<ph name="DELETED_ITEM_NAME" />' נמחק</translation> <translation id="7206693748120342859">מוריד את <ph name="PLUGIN_NAME" />...</translation> @@ -4667,7 +4664,6 @@ <translation id="8107015733319732394">מתקין את חנות Google Play במכשיר <ph name="DEVICE_TYPE" />. ייתכן שההתקנה תימשך כמה דקות.</translation> <translation id="8111155949205007504">שיתוף הסיסמה הזו עם מכשיר ה-iPhone</translation> <translation id="8113043281354018522">בחר סוג רישיון</translation> -<translation id="8116925261070264013">מושתקים</translation> <translation id="8116972784401310538">&מנהל הסימניות</translation> <translation id="8117620576188476503">מגש הסטטוס מאפשר לך לנהל חיבורים, עדכונים והגדרות. כדי להגיע לכאן בעזרת המקלדת יש להקיש Alt + Shift + S.</translation> <translation id="8118362518458010043">הושבת על-ידי Chrome. ייתכן שהתוסף הזה לא בטוח.</translation> @@ -5126,7 +5122,6 @@ <translation id="8845001906332463065">קבל עזרה</translation> <translation id="8846141544112579928">מחפש מקלדת...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">כדי לפתוח קבצים בעזרת $1, קודם צריך להעתיק אל התיקייה Linux Files (קובצי Linux).</translation> <translation id="8859057652521303089">בחר שפה:</translation> <translation id="8859174528519900719">תת-מסגרת: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">גיליון אלקטרוני של Excel</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index 5a516b5..98256c9 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">同期とカスタマイズ</translation> <translation id="1398853756734560583">最大化</translation> <translation id="1399511500114202393">ユーザー証明書なし</translation> +<translation id="1401165786814632797">端末のスリープとロックが解除されている状態で「OK Google」と話すと、いつでもアシスタントにアクセスできます。</translation> <translation id="140250605646987970">スマートフォンが見つかりましたが、Smart Lock は Android 5.0 以上を搭載した端末でのみ機能します。<a>詳細</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" />(管理対象)</translation> <translation id="1405476660552109915"><ph name="PASSWORD_MANAGER_BRAND" /> でこのサイトのアカウントを保存しますか?</translation> @@ -685,7 +686,6 @@ <translation id="200544492091181894">これは後から [設定] で変更することもできます</translation> <translation id="2006638907958895361"><ph name="APP" /> でリンクを開く</translation> <translation id="2007404777272201486">問題の報告...</translation> -<translation id="2016237810978710652">[Linux ファイル] を開いています...</translation> <translation id="2016430552235416146">通常</translation> <translation id="2017334798163366053">パフォーマンス データの収集を無効にする</translation> <translation id="2017836877785168846">アドレスバーの履歴とオートコンプリート データを削除します。</translation> @@ -1510,6 +1510,7 @@ <translation id="3271648667212143903"><ph name="ORIGIN" /> が接続を要求しています</translation> <translation id="3274763671541996799">全画面表示になりました。</translation> <translation id="3275778913554317645">ウィンドウとして開く</translation> +<translation id="3278877214895457897">Chromebook を設定したら、いつでもアシスタント ボタンを押すか「OK Google」と話しかけてアシスタントを呼び出すことができます。</translation> <translation id="3279230909244266691">この処理には数分かかることがあります。仮想マシンを起動します。</translation> <translation id="3279741024917655738">動画の全画面表示:</translation> <translation id="3280237271814976245">名前を付けて保存(&A)...</translation> @@ -2603,6 +2604,7 @@ <translation id="4992066212339426712">ミュートを解除</translation> <translation id="4992458225095111526">Powerwash の実行を確認</translation> <translation id="4992473555164495036">使用できる入力方法が管理者によって制限されています。</translation> +<translation id="4992926179187649719">「OK Google」を有効にする</translation> <translation id="4994474651455208930">プロトコルのデフォルト ハンドラへのサイトの登録要求を許可する</translation> <translation id="4994754230098574403">設定しています</translation> <translation id="4996978546172906250">共有方法</translation> @@ -3780,7 +3782,6 @@ <translation id="6748775883310276718">シングルアプリ キオスク</translation> <translation id="6751256176799620176">フォルダを 1 個選択しました</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" />(シークレット モード)</translation> -<translation id="6751815812172740613">「Linux ファイル」フォルダのすべての Linux アプリケーションとデータをこの <ph name="DEVICE_TYPE" /> から削除しますか?</translation> <translation id="6757101664402245801">URL がコピーされました</translation> <translation id="6758056191028427665">アンケートにご協力ください。</translation> <translation id="6759193508432371551">初期状態へのリセット</translation> @@ -4057,7 +4058,6 @@ <ph name="BEGIN_PARAGRAPH3" />この機能は、[設定] > [Google] に移動し、メニューから [使用状況と診断情報] を選択して管理できます。<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">ヘルプ(&E)</translation> <translation id="7200083590239651963">設定の選択</translation> -<translation id="7201014958346994077">Linux ファイルを表示できません</translation> <translation id="720110658997053098">この端末をキオスクモードに固定する</translation> <translation id="7201118060536064622">「<ph name="DELETED_ITEM_NAME" />」が削除されました</translation> <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> をダウンロードしています...</translation> @@ -4532,6 +4532,7 @@ <translation id="7908378463497120834">外部ストレージ デバイスの少なくとも 1 つのパーティションがマウントできませんでした。</translation> <translation id="7909969815743704077">シークレット モードでダウンロード</translation> <translation id="7910768399700579500">新しいフォルダ(&N)</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">サーバーでパスワードが変更されました。いったんログアウトして再度ログインしてください。</translation> <translation id="7915471803647590281">フィードバックを送信する前に、問題の詳細を入力してください。</translation> <translation id="7916556741383518510">クリックされた場合のみ</translation> @@ -4673,7 +4674,6 @@ <translation id="8107015733319732394"><ph name="DEVICE_TYPE" /> に Google Play ストアをインストールしています。この処理には数分かかる可能性があります。</translation> <translation id="8111155949205007504">このパスワードを iPhone と共有</translation> <translation id="8113043281354018522">ライセンスの種類を選択してください</translation> -<translation id="8116925261070264013">ミュート中</translation> <translation id="8116972784401310538">ブックマーク マネージャ(&B)</translation> <translation id="8117620576188476503">ステータス トレイで接続、アップデート、設定を管理できます。キーボードからステータス トレイを表示するには、Alt+Shift+S キーを押します。</translation> <translation id="8118362518458010043">Chrome によって無効にされました。この拡張機能は安全ではない可能性があります。</translation> @@ -5132,7 +5132,6 @@ <translation id="8845001906332463065">ヘルプ</translation> <translation id="8846141544112579928">キーボードを探しています...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">「$1」でファイルを開くには、まず Linux Files フォルダにコピーします。</translation> <translation id="8859057652521303089">言語の選択:</translation> <translation id="8859174528519900719">サブフレーム: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel スプレッドシート</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index 222c757..f6469e8 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -267,6 +267,7 @@ <translation id="1397854323885047133">ಸಿಂಕ್ ಮತ್ತು ವೈಯಕ್ತೀಕರಣ</translation> <translation id="1398853756734560583">ಗರಿಷ್ಠಗೊಳಿಸು</translation> <translation id="1399511500114202393">ಯಾವುದೇ ಬಳಕೆದಾರ ಪ್ರಮಾಣಪತ್ರವಿಲ್ಲ</translation> +<translation id="1401165786814632797">ನಿಮ್ಮ ಸಾಧನವು ಆನ್ ಮತ್ತು ಅನ್ಲಾಕ್ ಆಗಿರುವಾಗ, ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಬೇಕಾದರೂ "ಓಕೆ Google" ಎಂದು ಹೇಳಿ ನಿಮ್ಮ ಅಸಿಸ್ಟೆಂಟ್ಗೆ ಪ್ರವೇಶ ಪಡೆಯಿರಿ.</translation> <translation id="140250605646987970">ನಿಮ್ಮ ಫೋನ್ ಕಂಡುಬಂದಿದೆ. ಆದರೆ Smart Lock ಕೇವಲ Android 5.0 ಮತ್ತು ಉನ್ನತ ಸಾಧನಗಳಲ್ಲಿ ಮಾತ್ರ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. <a>ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಲಾಗಿದೆ)</translation> <translation id="1405476660552109915">ಈ ಸೈಟ್ಗೆ ನಿಮ್ಮ ಖಾತೆಯನ್ನು <ph name="PASSWORD_MANAGER_BRAND" /> ಉಳಿಸಬೇಕೆಂದು ನೀವು ಬಯಸುವಿರಾ?</translation> @@ -682,7 +683,6 @@ <translation id="200544492091181894">ನೀವು ಯಾವಾಗಲೂ ಇದನ್ನು ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ನಂತರ ಬದಲಾಯಿಸಬಹುದು</translation> <translation id="2006638907958895361">ಲಿಂಕ್ ಅನ್ನು <ph name="APP" /> ನಲ್ಲಿ ತೆರೆಯಿರಿ</translation> <translation id="2007404777272201486">ಸಮಸ್ಯೆ ವರದಿಮಾಡಿ...</translation> -<translation id="2016237810978710652">Linux ಫೈಲ್ಗಳನ್ನು ತೆರೆಯಲಾಗುತ್ತಿದೆ...</translation> <translation id="2016430552235416146">ಸಾಂಪ್ರದಾಯಿಕ</translation> <translation id="2017334798163366053">ಕಾರ್ಯಕ್ಷಮತೆ ಡೇಟಾ ಸಂಗ್ರಹಣೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="2017836877785168846">ಇತಿಹಾಸವನ್ನು ತೆರವುಗೊಳಿಸಿ ಮತ್ತು ವಿಳಾಸಪಟ್ಟಿಯಲ್ಲಿರುವುದನ್ನು ಸ್ವಯಂಪೂರ್ಣಗೊಳಿಸಿ.</translation> @@ -1508,6 +1508,7 @@ <translation id="3271648667212143903"><ph name="ORIGIN" /> ಸಂಪರ್ಕಿಸಲು ಬಯಸುತ್ತದೆ</translation> <translation id="3274763671541996799">ನೀವು ಪೂರ್ಣ ಪರದೆಗೆ ಬಂದಿದ್ದೀರಿ.</translation> <translation id="3275778913554317645">ವಿಂಡೊ ಅಂತೆ ತೆರೆಯಿರಿ</translation> +<translation id="3278877214895457897">ನಿಮ್ಮ Chromebook ಅನ್ನು ಹೊಂದಿಸಿದಾಗ, ಅಸಿಸ್ಟೆಂಟ್ ಬಟನ್ ಅನ್ನು ಒತ್ತಿರಿ ಅಥವಾ ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಬೇಕಾದರೂ ನಿಮ್ಮ ಅಸಿಸ್ಟೆಂಟ್ನಿಂದ ಸಹಾಯ ಪಡೆಯಲು "ಓಕೆ Google" ಎಂದು ಹೇಳಿ.</translation> <translation id="3279230909244266691">ಈ ಪ್ರಕ್ರಿಯೆಯು ಕೆಲವು ನಿಮಿಷಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು. ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ.</translation> <translation id="3279741024917655738">ಇದರಲ್ಲಿ ಪೂರ್ಣಪರದೆಯ ವೀಡಿಯೊಗಳನ್ನು ತೋರಿಸಿ</translation> <translation id="3280237271814976245">&ಇದರಂತೆ ಉಳಿಸು</translation> @@ -2602,6 +2603,7 @@ <translation id="4992066212339426712">ಅನ್ಮ್ಯೂಟ್</translation> <translation id="4992458225095111526">ಪವರ್ವಾಶ್ ಅನ್ನು ಖಚಿತಪಡಿಸಿ</translation> <translation id="4992473555164495036">ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಲಭ್ಯವಿರುವ ಇನ್ಪುಟ್ ವಿಧಾನಗಳನ್ನು ಸೀಮಿತಗೊಳಿಸಿದ್ದಾರೆ.</translation> +<translation id="4992926179187649719">'ಓಕೆ Google' ಆನ್ ಮಾಡಿ</translation> <translation id="4994474651455208930">ಪ್ರೊಟೋಕಾಲ್ಗಳಿಗಾಗಿ ಡಿಫಾಲ್ಟ್ ಹ್ಯಾಂಡ್ಲರ್ಗಳಾಗಲು ಸೈಟ್ಗಳನ್ನು ಅನುಮತಿಸಿ</translation> <translation id="4994754230098574403">ಹೊಂದಿಸಲಾಗುತ್ತಿದೆ</translation> <translation id="4996978546172906250">ಇದರ ಮೂಲಕ ಹಂಚಿ</translation> @@ -3778,7 +3780,6 @@ <translation id="6748775883310276718">ಸಿಂಗಲ್ ಆಪ್ ಕಿಯೊಸ್ಕ್</translation> <translation id="6751256176799620176">1 ಫೋಲ್ಡರ್ ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (ಅದೃಶ್ಯ)</translation> -<translation id="6751815812172740613">ಈ <ph name="DEVICE_TYPE" /> ನಿಂದ ನಿಮ್ಮ Linux ಫೈಲ್ಗಳ ಫೋಲ್ಡರ್ನಲ್ಲಿರುವ ಎಲ್ಲಾ Linux ಅಪ್ಲಿಕೇಶನ್ಗಳು ಹಾಗೂ ಡೇಟಾವನ್ನು ಅಳಿಸುವುದೇ?</translation> <translation id="6757101664402245801">URL ನಕಲಿಸಲಾಗಿದೆ</translation> <translation id="6758056191028427665">ನಮ್ಮ ಕೆಲಸದ ಕುರಿತು ನಿಮ್ಮ ಅಭಿಪ್ರಾಯವನ್ನು ತಿಳಿಸಿ.</translation> <translation id="6759193508432371551">ಫ್ಯಾಕ್ಟರಿ ರಿಸೆಟ್</translation> @@ -4055,7 +4056,6 @@ <ph name="BEGIN_PARAGRAPH3" />ಸೆಟ್ಟಿಂಗ್ಗಳು > Google ನಿಂದ ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ನೀವು ನಿಯಂತ್ರಿಸಬಹುದು. ಮೆನುನಿಂದ ಬಳಕೆ ಮತ್ತು ಡಯಾಗ್ನಾಸ್ಟಿಕ್ ಆಯ್ಕೆಮಾಡಿ.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">ಸಹಾಯ ಪಡೆಯಿರಿ</translation> <translation id="7200083590239651963">ಕಾನ್ಫಿಗರೇಶನ್ ಆಯ್ಕೆ ಮಾಡಿ</translation> -<translation id="7201014958346994077">Linux ಫೈಲ್ಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation> <translation id="720110658997053098">ಈ ಸಾಧನವನ್ನು ಕಿಯೋಸ್ಕ್-ಮೋಡ್ನಲ್ಲಿ ಶಾಶ್ವತವಾಗಿ ಇರಿಸಿಕೊಳ್ಳಿ</translation> <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' ಅನ್ನು ಅಳಿಸಲಾಗಿದೆ</translation> <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation> @@ -4522,6 +4522,7 @@ <translation id="7908378463497120834">ಕ್ಷಮಿಸಿ, ನಿಮ್ಮ ಬಾಹ್ಯ ಸಂಗ್ರಹಣೆ ಸಾಧನದಲ್ಲಿನ ಕನಿಷ್ಠ ಒಂದು ಭಾಗವನ್ನು ಜೋಡಿಸಲಾಗಲಿಲ್ಲ.</translation> <translation id="7909969815743704077">ಅಜ್ಞಾತದಲ್ಲಿ ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗಿದೆ</translation> <translation id="7910768399700579500">&ಹೊಸ ಫೋಲ್ಡರ್</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">ಸರ್ವರ್ನಲ್ಲಿ ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ. ಸೈನ್ ಔಟ್ ಮಾಡಿ ಮತ್ತೆ ಸೈನ್ ಇನ್ ಆಗಿರಿ.</translation> <translation id="7915471803647590281">ದಯವಿಟ್ಟು ಪ್ರತಿಕ್ರಿಯೆ ಕಳುಹಿಸುವ ಮುಂಚಿತವಾಗಿ ಏನು ನಡೆಯುತ್ತಿದೆ ಎಂದು ನಮಗೆ ತಿಳಿಸಿ.</translation> <translation id="7916556741383518510">ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ</translation> @@ -4661,7 +4662,6 @@ <translation id="8107015733319732394">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ನಲ್ಲಿ Google Play ಸ್ಟೋರ್ ಅನ್ನು ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ. ಇದು ಕೆಲವು ನಿಮಿಷಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು.</translation> <translation id="8111155949205007504">ನಿಮ್ಮ iPhone ಮೂಲಕ ಈ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಿ</translation> <translation id="8113043281354018522">ಪರವಾನಗಿ ಪ್ರಕಾರವನ್ನು ಆರಿಸಿ</translation> -<translation id="8116925261070264013">ಮ್ಯೂಟ್ ಆಗಿರುವುದು</translation> <translation id="8116972784401310538">&ಬುಕ್ಮಾರ್ಕ್ ವ್ಯವಸ್ಥಾಪಕ</translation> <translation id="8117620576188476503">ಸ್ಥಿತಿ ಟ್ರೇ ಮೂಲಕ ಸಂಪರ್ಕಗಳು, ಅಪ್ಡೇಟ್ಗಳು ಮತ್ತು ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ನಿರ್ವಹಿಸಿ. ಕೀಬೋರ್ಡ್ಗಳಿಂದ ಇಲ್ಲಿ ಪಡೆಯಲು, Alt + Shift + S ಕೀಗಳನ್ನು ಒತ್ತಿರಿ.</translation> <translation id="8118362518458010043">Chrome ಮೂಲಕ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ಈ ವಿಸ್ತರಣೆಯು ಸುರಕ್ಷಿತವಲ್ಲದಿರಬಹುದು.</translation> @@ -5123,7 +5123,6 @@ <translation id="8845001906332463065">ಸಹಾಯ ಪಡೆಯಿರಿ</translation> <translation id="8846141544112579928">ಕೀಬೋರ್ಡ್ಗಾಗಿ ಹುಡುಕಲಾಗುತ್ತಿದೆ...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">$1 ಮೂಲಕ ಫೈಲ್ಗಳನ್ನು ತೆರೆಯಲು, ಮೊದಲು Linux ಫೈಲ್ಗಳ ಫೋಲ್ಡರ್ಗೆ ನಕಲಿಸಿ.</translation> <translation id="8859057652521303089">ನಿಮ್ಮ ಭಾಷೆ ಆಯ್ಕೆ ಮಾಡಿ:</translation> <translation id="8859174528519900719">ಉಪಫ್ರೇಮ್: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel ಸ್ಪ್ರೆಡ್ಶೀಟ್</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index 9614aa94..d3a751c 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">동기화 및 맞춤설정</translation> <translation id="1398853756734560583">최대화</translation> <translation id="1399511500114202393">사용자 인증서 없음</translation> +<translation id="1401165786814632797">기기가 켜져 있고 잠금 해제되어 있을 때 "Ok Google"이라고 말하면 언제든지 어시스턴트를 이용할 수 있습니다.</translation> <translation id="140250605646987970">휴대전화를 찾았습니다. 하지만 Smart Lock은 Android 5.0 이상이 설치된 기기에서만 작동합니다. <a>자세히 알아보기</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" />(관리 대상)</translation> <translation id="1405476660552109915"><ph name="PASSWORD_MANAGER_BRAND" />에서 이 사이트의 계정을 저장하도록 하시겠습니까?</translation> @@ -685,7 +686,6 @@ <translation id="200544492091181894">나중에 언제든지 설정에서 변경 가능</translation> <translation id="2006638907958895361"><ph name="APP" />에서 링크 열기</translation> <translation id="2007404777272201486">문제 신고...</translation> -<translation id="2016237810978710652">Linux 파일을 여는 중...</translation> <translation id="2016430552235416146">기본</translation> <translation id="2017334798163366053">성능 데이터 수집 사용 중지</translation> <translation id="2017836877785168846">검색주소창의 검색 기록 및 자동 완성 항목을 삭제합니다.</translation> @@ -1510,6 +1510,7 @@ <translation id="3271648667212143903"><ph name="ORIGIN" />에서 연결하려고 함</translation> <translation id="3274763671541996799">전체화면으로 전환되었습니다.</translation> <translation id="3275778913554317645">창으로 열기</translation> +<translation id="3278877214895457897">Chromebook 설정이 완료되면 언제든지 어시스턴트 버튼을 누르거나 "Ok Google"이라고 말하여 어시스턴트로부터 도움을 받으세요.</translation> <translation id="3279230909244266691">이 과정은 몇 분 정도 소요될 수 있습니다. 가상 머신을 시작합니다.</translation> <translation id="3279741024917655738">다음에서 동영상을 전체화면으로 표시</translation> <translation id="3280237271814976245">다른 이름으로 저장(&A)...</translation> @@ -2601,6 +2602,7 @@ <translation id="4992066212339426712">음소거 해제</translation> <translation id="4992458225095111526">Powerwash 확인</translation> <translation id="4992473555164495036">관리자가 사용 가능한 입력 방법을 제한했습니다.</translation> +<translation id="4992926179187649719">'Ok Google' 사용 설정</translation> <translation id="4994474651455208930">사이트에서 프로토콜에 대한 기본 핸들러가 될지 여부를 묻도록 허용</translation> <translation id="4994754230098574403">설정 중입니다.</translation> <translation id="4996978546172906250">공유 방법</translation> @@ -3778,7 +3780,6 @@ <translation id="6748775883310276718">단일 앱 키오스크</translation> <translation id="6751256176799620176">폴더 1개 선택됨</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (시크릿 모드)</translation> -<translation id="6751815812172740613">이 <ph name="DEVICE_TYPE" />에서 Linux 파일 폴더에 있는 모든 Linux 애플리케이션과 데이터를 삭제하시겠습니까?</translation> <translation id="6757101664402245801">URL을 복사했습니다</translation> <translation id="6758056191028427665">개선할 점이나 격려하고 싶은 점을 알려주세요.</translation> <translation id="6759193508432371551">초기화</translation> @@ -4055,7 +4056,6 @@ <ph name="BEGIN_PARAGRAPH3" />설정 > Google에서 이 기능을 관리할 수 있습니다. 메뉴에서 사용 및 진단을 선택하세요.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">도움말 보기</translation> <translation id="7200083590239651963">설정 선택</translation> -<translation id="7201014958346994077">Linux 파일을 볼 수 없음</translation> <translation id="720110658997053098">이 기기를 키오스크 모드로 영구 고정</translation> <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' 삭제됨</translation> <translation id="7206693748120342859"><ph name="PLUGIN_NAME" />을(를) 다운로드 중...</translation> @@ -4529,6 +4529,7 @@ <translation id="7908378463497120834">죄송합니다. 외부 저장장치에 있는 하나 이상의 파티션을 마운트하지 못했습니다.</translation> <translation id="7909969815743704077">시크릿 모드에서 다운로드됨</translation> <translation id="7910768399700579500">새 폴더(&N)</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">서버에서 비밀번호가 변경되었습니다. 로그아웃한 다음 다시 로그인해 주세요.</translation> <translation id="7915471803647590281">의견을 보내기 전에 현재 상황을 입력해 주세요.</translation> <translation id="7916556741383518510">클릭 시</translation> @@ -4670,7 +4671,6 @@ <translation id="8107015733319732394"><ph name="DEVICE_TYPE" />에 Google Play 스토어를 설치합니다. 설치하는 데 몇 분 정도 걸릴 수 있습니다.</translation> <translation id="8111155949205007504">이 비밀번호를 iPhone과 공유하기</translation> <translation id="8113043281354018522">라이선스 유형 선택</translation> -<translation id="8116925261070264013">음소거됨</translation> <translation id="8116972784401310538">북마크 관리자(&B)</translation> <translation id="8117620576188476503">상태 표시줄에서 연결, 업데이트, 설정을 관리하세요. 키보드를 사용하여 이동하려면 Alt + Shift + S를 누르면 됩니다.</translation> <translation id="8118362518458010043">Chrome에서 사용 중지했습니다. 이 확장 프로그램은 안전하지 않을 수 있습니다.</translation> @@ -5129,7 +5129,6 @@ <translation id="8845001906332463065">도움말 보기</translation> <translation id="8846141544112579928">키보드 검색 중...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">$1을(를) 사용하여 파일을 열려면 먼저 파일을 Linux 파일 폴더로 복사하세요.</translation> <translation id="8859057652521303089">언어 선택:</translation> <translation id="8859174528519900719">서브프레임: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel 스프레드시트</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index 338c160..8d0a5f5 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">Sinchronizavimas ir suasmeninimas</translation> <translation id="1398853756734560583">Išskleisti</translation> <translation id="1399511500114202393">Naudotojo sertifikato nereikia</translation> +<translation id="1401165786814632797">Pasiekite Padėjėją bet kuriuo metu pasakę „Ok Google“, kai įrenginys veikia ir yra neužrakintas.</translation> <translation id="140250605646987970">Surastas jūsų telefonas, tačiau „Smart Lock“ veikia tik įrenginiuose, kuriuose įdiegta 5.0 ar naujesnės versijos „Android“. <a>Sužinokite daugiau</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (prižiūrimas)</translation> <translation id="1405476660552109915">Ar norite, kad „<ph name="PASSWORD_MANAGER_BRAND" />“ išsaugotų šios svetainės paskyrą?</translation> @@ -685,7 +686,6 @@ <translation id="200544492091181894">Tai vėliau galėsite pakeisti nustatymuose</translation> <translation id="2006638907958895361">Atidaryti nuorodą programoje „<ph name="APP" />“</translation> <translation id="2007404777272201486">Pranešti apie problemą...</translation> -<translation id="2016237810978710652">Atidaromi „Linux“ failai...</translation> <translation id="2016430552235416146">Tradicinis</translation> <translation id="2017334798163366053">Neleisti našumo duomenų rinkimo</translation> <translation id="2017836877785168846">Išvaloma istorija ir automatiniai užbaigimai adreso juostoje.</translation> @@ -1510,6 +1510,7 @@ <translation id="3271648667212143903"><ph name="ORIGIN" /> nori prisijungti</translation> <translation id="3274763671541996799">Naudojate viso ekrano režimą.</translation> <translation id="3275778913554317645">Atidaryti kaip langą</translation> +<translation id="3278877214895457897">Kai „Chromebook“ nustatytas, norėdami bet kuriuo metu gauti pagalbos iš Padėjėjo, paspauskite Padėjėjo mygtuką arba pasakykite „Ok Google“.</translation> <translation id="3279230909244266691">Šis procesas gali užtrukti kelias minutes. Paleidžiamas virtualus įrenginys.</translation> <translation id="3279741024917655738">Nustatymas „Rodyti vaizdo įrašus viso ekrano režimu“ įjungtas</translation> <translation id="3280237271814976245">Išsaugoti &kaip...</translation> @@ -2603,6 +2604,7 @@ <translation id="4992066212339426712">Įjungti garsą</translation> <translation id="4992458225095111526">Patvirtinti „Powerwash“</translation> <translation id="4992473555164495036">Administratorius apribojo pasiekiamus įvesties metodus.</translation> +<translation id="4992926179187649719">Įjungti „Ok Google“</translation> <translation id="4994474651455208930">Leisti svetainėms pateikti pranešimus, kuriuose prašoma leisti tapti numatytosiomis protokolų apdorojimo programomis</translation> <translation id="4994754230098574403">Nustatoma</translation> <translation id="4996978546172906250">Bendrinti per</translation> @@ -3781,7 +3783,6 @@ <translation id="6748775883310276718">Vienos programos viešasis terminalas</translation> <translation id="6751256176799620176">Pasirinktas 1 aplankas</translation> <translation id="6751344591405861699">„<ph name="WINDOW_TITLE" />“ (Inkognito)</translation> -<translation id="6751815812172740613">Ištrinti visas „Linux“ programas ir duomenis „Linux“ failų aplanke iš šio „<ph name="DEVICE_TYPE" />“ įrenginio?</translation> <translation id="6757101664402245801">URL nukopijuotas</translation> <translation id="6758056191028427665">Pateikite atsiliepimų.</translation> <translation id="6759193508432371551">Gamykliniai nustatymai</translation> @@ -4058,7 +4059,6 @@ <ph name="BEGIN_PARAGRAPH3" />Šią funkciją galite valdyti skiltyje „Nustatymai“ > „Google“. Meniu pasirinkite „Naudojimas ir diagnostika“.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Gauti pagalbos</translation> <translation id="7200083590239651963">Konfigūracijos pasirinkimas</translation> -<translation id="7201014958346994077">Nepavyko peržiūrėti „Linux“ failų</translation> <translation id="720110658997053098">Įgalinti nuolatinį šio įrenginio veikimą viešojo terminalo režimu</translation> <translation id="7201118060536064622">„<ph name="DELETED_ITEM_NAME" />“ ištrintas (-a)</translation> <translation id="7206693748120342859">Atsisiunčiamas „<ph name="PLUGIN_NAME" />“...</translation> @@ -4532,6 +4532,7 @@ <translation id="7908378463497120834">Apgailestaujame, tačiau neįmanoma įrengti mažiausiai vieno išorinio atmintinės įrenginio disko skaidinio.</translation> <translation id="7909969815743704077">Atsisiųsta inkognito režimu</translation> <translation id="7910768399700579500">&Naujas aplankas</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">Slaptažodis pakeistas serveryje. Atsijunkite, tada vėl prisijunkite.</translation> <translation id="7915471803647590281">Prieš atsiųsdami atsiliepimą, aprašykite problemą.</translation> <translation id="7916556741383518510">Spustelėjus</translation> @@ -4673,7 +4674,6 @@ <translation id="8107015733319732394">Įdiegiama „Google Play“ parduotuvė jūsų „<ph name="DEVICE_TYPE" />“ įrenginyje. Tai gali šiek tiek užtrukti.</translation> <translation id="8111155949205007504">Bendrinkite šį slaptažodį su „iPhone“</translation> <translation id="8113043281354018522">Pasirinkite licencijos tipą</translation> -<translation id="8116925261070264013">Išjungta</translation> <translation id="8116972784401310538">&Žymių tvarkytuvė</translation> <translation id="8117620576188476503">Tvarkykite ryšius, naujinius ir nustatymus naudodami būsenos dėklą. Kad čia patektumėte naudodami klaviatūrą, paspauskite „Alt“ + „Shift“ + S.</translation> <translation id="8118362518458010043">„Chrome“ neleidžia. Šis plėtinys gali būti nesaugus.</translation> @@ -5132,7 +5132,6 @@ <translation id="8845001906332463065">Gauti pagalbos</translation> <translation id="8846141544112579928">Ieškoma klaviatūros...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Kad galėtumėte atidaryti failus naudodami „$1“, pirma nukopijuokite juos į aplanką „Linux Files“ („Linux“ failai).</translation> <translation id="8859057652521303089">Pasirinkite kalbą:</translation> <translation id="8859174528519900719">Antrinis kadras: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">„Excel“ skaičiuoklė</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index e470db13..3d49e4d 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Vēlāk varēsiet to mainīt iestatījumos.</translation> <translation id="2006638907958895361">Atvērt saiti lietotnē <ph name="APP" /></translation> <translation id="2007404777272201486">Ziņot par problēmu...</translation> -<translation id="2016237810978710652">Notiek Linux failu atvēršana…</translation> <translation id="2016430552235416146">Tradicionālā</translation> <translation id="2017334798163366053">Atspējot veiktspējas datu apkopošanu</translation> <translation id="2017836877785168846">Notīra vēsturi un automātiskās pabeigšanas ierakstus adreses joslā.</translation> @@ -3783,7 +3782,6 @@ <translation id="6748775883310276718">Vienas lietotnes kiosks</translation> <translation id="6751256176799620176">Atlasīta 1 mape</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Inkognito režīms)</translation> -<translation id="6751815812172740613">Vai dzēst visas Linux lietojumprogrammas un datus mapē Linux faili no šīs ierīces: <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">URL ir nokopēts</translation> <translation id="6758056191028427665">Sniedziet atsauksmes par pakalpojuma darbību.</translation> <translation id="6759193508432371551">Rūpnīcas datu atiestatīšana</translation> @@ -4060,7 +4058,6 @@ <ph name="BEGIN_PARAGRAPH3" />Šo funkciju varat kontrolēt sadaļā Iestatījumi > Google. Izvēlnē atlasiet vienumu Lietojums un diagnostika.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Saņemt p&alīdzību</translation> <translation id="7200083590239651963">Konfigurācijas atlasīšana</translation> -<translation id="7201014958346994077">Nevar skatīt Linux failus</translation> <translation id="720110658997053098">Pastāvīgi turēt ierīcei ieslēgtu kioska režīmu</translation> <translation id="7201118060536064622">Vienums “<ph name="DELETED_ITEM_NAME" />” ir izdzēsts.</translation> <translation id="7206693748120342859">Notiek spraudņa <ph name="PLUGIN_NAME" /> lejupielāde...</translation> @@ -4675,7 +4672,6 @@ <translation id="8107015733319732394">Notiek Google Play veikala instalēšana jūsu ierīcē (<ph name="DEVICE_TYPE" />). Tas var ilgt dažas minūtes.</translation> <translation id="8111155949205007504">Kopīgojiet šo paroli ar savu iPhone tālruni</translation> <translation id="8113043281354018522">Izvēlieties licences veidu</translation> -<translation id="8116925261070264013">Izslēgta skaņa</translation> <translation id="8116972784401310538">&Grāmatzīmju pārvaldnieks</translation> <translation id="8117620576188476503">Statusa joslā varat pārvaldīt savienojumus, atjauninājumus un iestatījumus. Lai tai piekļūtu, nospiediet taustiņu kombināciju Alt + Shift + S.</translation> <translation id="8118362518458010043">Atspējoja pārlūks Chrome. Šis paplašinājums, iespējams, nav drošs.</translation> @@ -5135,7 +5131,6 @@ <translation id="8845001906332463065">Saņemt palīdzību</translation> <translation id="8846141544112579928">Notiek tastatūras meklēšana...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Lai atvērtu failus, izmantojot $1, vispirms kopējiet to Linux failu mapē.</translation> <translation id="8859057652521303089">Atlasiet savu valodu:</translation> <translation id="8859174528519900719">Apakšrāmis: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel izklājlapa</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index 99c90571e..970c38d 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">സമന്വയവും വ്യക്തിപരമാക്കലും</translation> <translation id="1398853756734560583">വലുതാക്കുക</translation> <translation id="1399511500114202393">ഉപയോക്തൃ സർട്ടിഫിക്കറ്റ് പാടില്ല</translation> +<translation id="1401165786814632797">നിങ്ങളുടെ ഉപകരണം സജീവമായി, അൺലോക്ക് ചെയ്യുമ്പോൾ "Ok Google" എന്നുപറഞ്ഞ് ഏതുസമയത്തും നിങ്ങളുടെ അസിസ്റ്റന്റിനെ ആക്സസ് ചെയ്യുക.</translation> <translation id="140250605646987970">നിങ്ങളുടെ ഫോൺ കണ്ടെത്തി. പക്ഷേ Smart Lock, Android 5.0 അല്ലെങ്കിൽ അതിലും ഉയർന്ന പതിപ്പുകളിൽ മാത്രമേ പ്രവർത്തിക്കൂ. <a>കൂടുതലറിയുക</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (സൂപ്പർവൈസുചെയ്തു)</translation> <translation id="1405476660552109915">ഈ സൈറ്റിനായി <ph name="PASSWORD_MANAGER_BRAND" /> നിങ്ങളുടെ അക്കൗണ്ട് സംരക്ഷിക്കണോ?</translation> @@ -682,7 +683,6 @@ <translation id="200544492091181894">നിങ്ങൾക്കിത് എപ്പോൾ വേണമെങ്കിലും ക്രമീകരണത്തിൽ മാറ്റാം</translation> <translation id="2006638907958895361"><ph name="APP" /> ആപ്പില് ലിങ്ക് തുറക്കുക</translation> <translation id="2007404777272201486">ഒരു പ്രശ്നം റിപ്പോര്ട്ടുചെയ്യുക...</translation> -<translation id="2016237810978710652">Linux ഫയലുകൾ തുറക്കുന്നു ...</translation> <translation id="2016430552235416146">പരമ്പരാഗതം</translation> <translation id="2017334798163366053">പ്രകടന ഡാറ്റ ശേഖരണം പ്രവർത്തനരഹിതമാക്കുക</translation> <translation id="2017836877785168846">വിലാസ ബാറിലെ ചരിത്രവും സ്വയം പൂർത്തീകരണങ്ങളും മായ്ക്കുന്നു.</translation> @@ -1507,6 +1507,7 @@ <translation id="3271648667212143903"><ph name="ORIGIN" /> കണക്റ്റുചെയ്യാൻ താൽപ്പര്യപ്പെടുന്നു</translation> <translation id="3274763671541996799">നിങ്ങൾ പൂർണ്ണമായ സ്ക്രീനിലെത്തി.</translation> <translation id="3275778913554317645">വിന്ഡോ ആയി തുറക്കുക</translation> +<translation id="3278877214895457897">നിങ്ങളുടെ Chromebook സജ്ജീകരിക്കുമ്പോൾ, ഏതുസമയത്തും നിങ്ങളുടെ അസിസ്റ്റന്റിൽ നിന്ന് സഹായം ലഭിക്കുന്നതിന് അസിസ്റ്റന്റ് ബട്ടൺ അമർത്തുക അല്ലെങ്കിൽ "Ok Google" എന്ന് പറയുക.</translation> <translation id="3279230909244266691">ഈ പ്രക്രിയയ്ക്ക് കുറച്ച് സമയമെടുത്തേക്കാം. വെർച്വൽ മെഷീൻ പ്രവർത്തനം ആരംഭിക്കുന്നു.</translation> <translation id="3279741024917655738">പൂർണ്ണ സ്ക്രീൻ വീഡിയോകൾ കാണിക്കുക</translation> <translation id="3280237271814976245">ഇതുപോലെ& സംരക്ഷിക്കുക..</translation> @@ -2599,6 +2600,7 @@ <translation id="4992066212339426712">അൺമ്യൂട്ടുചെയ്യുക</translation> <translation id="4992458225095111526">പവർവാഷ് സ്ഥിരീകരിക്കുക</translation> <translation id="4992473555164495036">ലഭ്യമായ ഇൻപുട്ട് രീതികളെ നിങ്ങളുടെ അഡ്മിൻ പരിമിതപ്പെടുത്തി.</translation> +<translation id="4992926179187649719">'Ok Google' ഓണാക്കുക</translation> <translation id="4994474651455208930">പ്രോട്ടോകോളുകള്ക്കായി സ്ഥിരസ്ഥിതി ഹാന്ഡ്ലറുകള് ആവാന് സൈറ്റുകളെ ചോദിക്കാന് അനുവദിക്കുന്നു</translation> <translation id="4994754230098574403">സജ്ജീകരിക്കുന്നു</translation> <translation id="4996978546172906250">ഇതുവഴി പങ്കിടുക</translation> @@ -3778,7 +3780,6 @@ <translation id="6748775883310276718">സിംഗിൾ ആപ്പ് കിയോസ്ക്</translation> <translation id="6751256176799620176">ഒരു ഫോൾഡർ തിരഞ്ഞെടുത്തു</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (ആള്മാറാട്ടം)</translation> -<translation id="6751815812172740613">ഈ <ph name="DEVICE_TYPE" /> നിന്നുള്ള നിങ്ങളുടെ Linux ഫയലുകളുടെ ഫോൾഡറിലുള്ള എല്ലാ Linux അപ്ലിക്കേഷനുകളും ഡാറ്റയും ഇല്ലാതാക്കണോ?</translation> <translation id="6757101664402245801">URL പകർത്തി</translation> <translation id="6758056191028427665">ഞങ്ങളുടെ പ്രവർത്തനത്തെക്കുറിച്ചുള്ള അഭിപ്രായം അറിയിക്കൂ.</translation> <translation id="6759193508432371551">ഫാക്ടറി പുനഃസജ്ജമാക്കൽ</translation> @@ -4055,7 +4056,6 @@ <ph name="BEGIN_PARAGRAPH3" />നിങ്ങൾക്ക്, ക്രമീകരണം > Google എന്നതിൽ നിന്ന് ഈ ഫീച്ചർ നിയന്ത്രിക്കാവുന്നതാണ്. മെനുവിൽ നിന്ന് ഉപയോഗവും ഡയഗ്നോസ്റ്റിക്സും തിരഞ്ഞെടുക്കുക.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">സ&ഹായം നേടുക</translation> <translation id="7200083590239651963">കോൺഫിഗറേഷൻ തിരഞ്ഞെടുക്കുക</translation> -<translation id="7201014958346994077">Linux ഫയലുകൾ കാണാനാകുന്നില്ല</translation> <translation id="720110658997053098">ഈ ഉപകരണം ശാശ്വതമായി കിയോസ്ക് മോഡിൽ നിലനിർത്തുക</translation> <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' ഇല്ലാതാക്കി</translation> <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> ഡൗൺലോഡുചെയ്യുന്നു...</translation> @@ -4529,6 +4529,7 @@ <translation id="7908378463497120834">ക്ഷമിക്കണം, നിങ്ങളുടെ ബാഹ്യ സംഭരണി ഉപകരണത്തിലെ ഏറ്റവും കുറഞ്ഞത് ഒരു ഭാഗം പോലും മൗണ്ട് ചെയ്യാൻ കഴിഞ്ഞില്ല.</translation> <translation id="7909969815743704077">ആൾമാറാട്ട മോഡിൽ ഡൗൺലോഡുചെയ്തു</translation> <translation id="7910768399700579500">&പുതിയ ഫോള്ഡര്</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">സെർവറിൽ നിങ്ങളുടെ പാസ്വേഡ് മാറ്റിയിരിക്കുന്നു. സൈൻ ഔട്ട് ചെയ്യുക, തുടർന്ന് വീണ്ടും സൈൻ ഇൻ ചെയ്യുക.</translation> <translation id="7915471803647590281">ഫീഡ്ബാക്ക് അയയ്ക്കുന്നതിന് മുമ്പ് എന്തുസംഭവിക്കുന്നുവെന്ന് ഞങ്ങളോട് ദയവായി പറയുക.</translation> <translation id="7916556741383518510">ക്ലിക്കിൽ</translation> @@ -4670,7 +4671,6 @@ <translation id="8107015733319732394">നിങ്ങളുടെ <ph name="DEVICE_TYPE" />-ൽ Google Play Store ഇൻസ്റ്റാൾ ചെയ്യുന്നു. ഇതിന് കുറച്ച് മിനിറ്റുകളെടുക്കാം.</translation> <translation id="8111155949205007504">നിങ്ങളുടെ iPhone-മായി ഈ പാസ്വേഡ് പങ്കിടുക</translation> <translation id="8113043281354018522">ലൈസൻസ് തരം തിരഞ്ഞെടുക്കുക</translation> -<translation id="8116925261070264013">മ്യൂട്ടുചെയ്തു</translation> <translation id="8116972784401310538">&ബുക്മാര്ക്ക് മാനേജര്</translation> <translation id="8117620576188476503">സ്റ്റാറ്റസ് ട്രേ ഉപയോഗിച്ച് കണക്ഷനുകളും അപ്ഡേറ്റുകളും ക്രമീകരണവും നിയന്ത്രിക്കുക. കീബോർഡ് ഉപയോഗിച്ച് ഇവിടെ പോകാൻ, Alt + Shift + S അമർത്തുക.</translation> <translation id="8118362518458010043">Chrome പ്രവർത്തനരഹിതമാക്കി. ഈ വിപുലീകരണം സുരക്ഷിതമല്ലായിരിക്കാം.</translation> @@ -5128,8 +5128,6 @@ <translation id="8845001906332463065">സഹായം സ്വീകരിക്കുക</translation> <translation id="8846141544112579928">കീബോർഡിനായി തിരയുന്നു...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">$1 ഉപയോഗിച്ച് ഫയലുകൾ തുറക്കാൻ, ആദ്യം -Linux ഫയലുകൾ ഫോൾഡറിലേക്ക് പകർത്തുക.</translation> <translation id="8859057652521303089">നിങ്ങളുടെ ഭാഷ തിരഞ്ഞെടുക്കുക :</translation> <translation id="8859174528519900719">സബ്ഫ്രെയിം: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel സ്പ്രെഡ്ഷീറ്റ്</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index 55e4645..1ece926 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">सिंक आणि पर्सनलायझेयन</translation> <translation id="1398853756734560583">वाढवा</translation> <translation id="1399511500114202393">वापरकर्ता सर्टिफिकेट नाही</translation> +<translation id="1401165786814632797">तुमचे डिव्हाइस सुरू आणि अनलॉक असताना कधीही "OK Google" म्हणा आणि तुमचे असिस्टंट अॅक्सेस करा.</translation> <translation id="140250605646987970">आपला फोन सापडला. परंतु Smart Lock केवळ Android 5.0 आणि वरील डिव्हाइसेसवर कार्य करते. <a>अधिक जाणून घ्या</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (पर्यवेक्षी)</translation> <translation id="1405476660552109915">या साइटसाठी <ph name="PASSWORD_MANAGER_BRAND" /> ने आपले खाते सेव्ह करावे असे आपण इच्छिता?</translation> @@ -684,7 +685,6 @@ <translation id="200544492091181894">तुम्ही हे नंतर कधीही सेटिंग्ज मध्ये बदलू शकता.</translation> <translation id="2006638907958895361">लिंक <ph name="APP" /> मध्ये उघडा</translation> <translation id="2007404777272201486">समस्या नोंदवा...</translation> -<translation id="2016237810978710652">Linux फायली उघडत आहे...</translation> <translation id="2016430552235416146">पारंपारिक</translation> <translation id="2017334798163366053">कार्यप्रदर्शन डेटा संकलन अक्षम करा</translation> <translation id="2017836877785168846">अॅड्रेस बारमधील इतिहास आणि आपोआप पूर्ण केलेले साफ करते.</translation> @@ -1509,8 +1509,9 @@ <translation id="3271648667212143903"><ph name="ORIGIN" /> कनेक्ट करू इच्छिते</translation> <translation id="3274763671541996799">आपण फुल स्क्रीन केली आहे</translation> <translation id="3275778913554317645">विंडो म्हणून उघडा</translation> +<translation id="3278877214895457897">तुमचे Chromebook सेट केल्यानंतर तुमच्या असिस्टंटकडून कधीही मदत मिळवण्यासाठी असिस्टंट बटण दाबा किंवा "OK Google" म्हणा.</translation> <translation id="3279230909244266691">या प्रक्रियेला काही मिनिटे लागू शकतात. व्हर्च्युअल मशीन सुरू करत आहे.</translation> -<translation id="3279741024917655738">पूर्णस्क्रीन व्हिडिओ दाखवा</translation> +<translation id="3279741024917655738">क्षेत्रे व्हिडिओ दाखवा</translation> <translation id="3280237271814976245">&म्हणून सेव्ह करा...</translation> <translation id="3280243678470289153">Chrome मध्ये रहा</translation> <translation id="3280431534455935878">तयारी करीत आहे</translation> @@ -2602,6 +2603,7 @@ <translation id="4992066212339426712">सशब्द करा</translation> <translation id="4992458225095111526">Powerwash ची पुष्टी करा</translation> <translation id="4992473555164495036">तुमच्या अॅडमिनिस्ट्रेटरने उपलब्ध इनपुट पद्धती मर्यादित केल्या आहेत.</translation> +<translation id="4992926179187649719">'Ok Google' सुरू करा</translation> <translation id="4994474651455208930">प्रोटोकॉलसाठी डीफॉल्ट हँडलर होण्यासाठी साइटना विचारण्याची परवानगी द्या</translation> <translation id="4994754230098574403">सेट अप करीत आहे</translation> <translation id="4996978546172906250">याद्वारे शेअर करा</translation> @@ -3304,7 +3306,7 @@ <translation id="604001903249547235">क्लाउड बॅकअप</translation> <translation id="6040143037577758943">बंद करा</translation> <translation id="6040852767465482106">निनावी ओळख</translation> -<translation id="6041155700700864984">पूर्णस्क्रीनमधून बाहेर पडा</translation> +<translation id="6041155700700864984">क्षेत्रेमधून बाहेर पडा</translation> <translation id="604124094241169006">स्वयंचलित</translation> <translation id="6042169520002885235">प्रिंटरच्या उत्पादनकर्त्याचे नाव आणि मॉडेल</translation> <translation id="6042308850641462728">अधिक</translation> @@ -3782,7 +3784,6 @@ <translation id="6748775883310276718">एकल अॅप कियोस्क</translation> <translation id="6751256176799620176">1 फोल्डर निवडले</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (गुप्त)</translation> -<translation id="6751815812172740613">या <ph name="DEVICE_TYPE" /> वरून तुमच्या Linux फायली फोल्डरमधील सर्व Linux अॅप्लिकेशन आणि डेटा हटवायचा?</translation> <translation id="6757101664402245801">URL कॉपी केली</translation> <translation id="6758056191028427665">आम्ही आमचे काम कसे करत आहोत त्याबद्दल आम्हाला कळवा.</translation> <translation id="6759193508432371551">फॅक्टरी रीसेट</translation> @@ -3990,7 +3991,7 @@ <translation id="7088674813905715446">हे डिव्हाइस प्रशासकाद्वारे तरतूद नसलेल्या स्थितीमध्ये ठेवले गेले आहे. ते नोंदणीकरिता सक्षम करण्यासाठी, कृपया आपल्या प्रशासकाने डिव्हाइस एका प्रलंबित स्थितीमध्ये ठेवावे.</translation> <translation id="7093434536568905704">GTK+</translation> <translation id="7093866338626856921">या नावाच्या डिव्हाइसेससह डेटा अदलाबदल करा: <ph name="HOSTNAMES" /></translation> -<translation id="7096406577040705016">पूर्णस्क्रीन भिंग टॉगल करा</translation> +<translation id="7096406577040705016">क्षेत्रे भिंग टॉगल करा</translation> <translation id="7098447629416471489">इतर सेव्ह शोध इंजिन येथे दिसून येतील</translation> <translation id="7099337801055912064">मोठ्या PPD लोड करू शकत नाही. कमाल आकार 250kB आहे.</translation> <translation id="7100897339030255923"><ph name="COUNT" /> आयटम निवडले</translation> @@ -4059,7 +4060,6 @@ <ph name="BEGIN_PARAGRAPH3" />तुम्ही सेटिंग्ज > Google वरून हे वैशिष्ट्य नियंत्रित करू शकता. मेनूमधून वापर आणि निदान निवडा.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">म&दत मिळवा</translation> <translation id="7200083590239651963">काँफिगरेशन निवडा</translation> -<translation id="7201014958346994077">Linux फायली बघू शकत नाही</translation> <translation id="720110658997053098">हे डिव्हाइस कायमचे कियोस्क मोडमध्ये ठेवा</translation> <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' हटवले</translation> <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> डाउनलोड करीत आहे...</translation> @@ -4531,6 +4531,7 @@ <translation id="7908378463497120834">क्षमस्व, आपल्या बाह्य डिव्हाइस संचयावरील कमीत कमी एक विभाग बसविला जाऊ शकत नाही.</translation> <translation id="7909969815743704077">गुप्त मध्ये डाउनलोड केले</translation> <translation id="7910768399700579500">&नवीन फोल्डर</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">तुमचा पासवर्ड सर्व्हरवर बदलला आहे. कृपया साइन आऊट करा आणि पुन्हा साइन इन करा.</translation> <translation id="7915471803647590281">कृपया अभिप्राय पाठविण्यापूर्वी काय होत आहे ते आम्हाला सांगा.</translation> <translation id="7916556741383518510">क्लिकवर</translation> @@ -4672,7 +4673,6 @@ <translation id="8107015733319732394">तुमच्या <ph name="DEVICE_TYPE" /> वर Google Play स्टोअर इंस्टॉल करत आहे. यासाठी काही मिनिटे लागतील.</translation> <translation id="8111155949205007504">आपल्या iPhone सह हा पासवर्ड शेअर करा</translation> <translation id="8113043281354018522">परवाना प्रकार निवडा</translation> -<translation id="8116925261070264013">म्यूट केले</translation> <translation id="8116972784401310538">&बुकमार्क व्यवस्थापक</translation> <translation id="8117620576188476503">स्थिती ट्रेने कनेक्शन, अपडेट आणि सेटिंग्ज व्यवस्थापित करा. येथे कीबोर्डने येण्यासाठी, Alt + Shift + S दाबा.</translation> <translation id="8118362518458010043">Chrome ने बंद केले आहे. हा विस्तार असुरक्षित असू शकतो.</translation> @@ -4765,7 +4765,7 @@ <translation id="8261387128019234107"><ph name="PROFILE_NAME" /> साठी खाते जोडा</translation> <translation id="8261506727792406068">हटवा</translation> <translation id="8263744495942430914"><ph name="FULLSCREEN_ORIGIN" /> नी आपला माउस कर्सर अक्षम केला आहे.</translation> -<translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" प्रवर्तित पूर्णस्क्रीन.</translation> +<translation id="8264718194193514834">"<ph name="EXTENSION_NAME" />" प्रवर्तित क्षेत्रे.</translation> <translation id="8270242299912238708">PDF दस्तऐवज</translation> <translation id="827097179112817503">मुख्यपृष्ठ बटण दर्शवा</translation> <translation id="8271246892936492311">{COUNT,plural, =1{1 बुकमार्क हटवला}one{# बुकमार्क हटवला}other{# बुकमार्क हटवले}}</translation> @@ -4927,7 +4927,7 @@ <translation id="8546541260734613940">[*.]example.com</translation> <translation id="854655314928502177">वेब प्रॉक्सी स्वयं शोध URL:</translation> <translation id="8546930481464505581">स्पर्श बार कस्टमाइझ करा</translation> -<translation id="8547013269961688403">पूर्णस्क्रीन भिंग सुरू करा</translation> +<translation id="8547013269961688403">क्षेत्रे भिंग सुरू करा</translation> <translation id="85486688517848470">शीर्ष-पंक्ती की चे वर्तन बदलण्यासाठी शोध की दाबून ठेवा</translation> <translation id="855081842937141170">टॅब पिन करा</translation> <translation id="8551388862522347954">परवाने</translation> @@ -5062,7 +5062,7 @@ <translation id="8736288397686080465">ही साइट पार्श्वभूमीमध्ये अपडेट केली गेली आहे.</translation> <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" /> ऐवजी <ph name="PROTOCOL" /> दुवे उघडा</translation> <translation id="8737709691285775803">Shill</translation> -<translation id="8743390665131937741">पूर्णस्क्रीन झूम पातळी:</translation> +<translation id="8743390665131937741">क्षेत्रे झूम पातळी:</translation> <translation id="8743864605301774756">1 तासापूर्वी अपडेट करण्यात आले</translation> <translation id="874689135111202667">{0,plural, =1{या साइटवर एक फाइल अपलोड करायची?}one{या साइटवर # फाइल अपलोड करायची?}other{या साइटवर # फायली अपलोड करायच्या?}}</translation> <translation id="8748384418490037181">Smart Lock पर्याय</translation> @@ -5132,7 +5132,6 @@ <translation id="8845001906332463065">मदत मिळवा</translation> <translation id="8846141544112579928">कीबोर्डचा शोध घेत आहे...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">$१ सह फायली उघडण्यासाठी, प्रथम Linux फायली फोल्डरमध्ये कॉपी करा.</translation> <translation id="8859057652521303089">तुमची भाषा निवडा:</translation> <translation id="8859174528519900719">सबफ्रेम: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel स्प्रेडशीट</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index c9dbedf0..213b60a 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Anda boleh menukar ciri ini dalam tetapan pada bila-bila masa</translation> <translation id="2006638907958895361">Buka Pautan dalam <ph name="APP" /></translation> <translation id="2007404777272201486">Laporkan Isu...</translation> -<translation id="2016237810978710652">Membuka Fail Linux...</translation> <translation id="2016430552235416146">Tradisional</translation> <translation id="2017334798163366053">Lumpuhkan pengumpulan data prestasi</translation> <translation id="2017836877785168846">Kosongkan sejarah dan pelengkapan automatik dalam bar alamat.</translation> @@ -3785,7 +3784,6 @@ <translation id="6748775883310276718">Kios Satu Apl</translation> <translation id="6751256176799620176">1 folder dipilih</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Inkognito)</translation> -<translation id="6751815812172740613">Padam semua aplikasi dan data Linux dalam folder Fail Linux anda daripada <ph name="DEVICE_TYPE" /> ini?</translation> <translation id="6757101664402245801">URL disalin</translation> <translation id="6758056191028427665">Beritahu kami tentang prestasi kami.</translation> <translation id="6759193508432371551">Tetapan semula kilang</translation> @@ -4062,7 +4060,6 @@ <ph name="BEGIN_PARAGRAPH3" />Anda boleh mengawal ciri ini daripada Tetapan > Google. Pilih Penggunaan & diagnostik daripada menu.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Dapatkan B&antuan</translation> <translation id="7200083590239651963">Pilih konfigurasi</translation> -<translation id="7201014958346994077">Tidak dapat melihat Fail Linux</translation> <translation id="720110658997053098">Pastikan peranti ini kekal dalam mod kios</translation> <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' dipadamkan</translation> <translation id="7206693748120342859">Memuat turun <ph name="PLUGIN_NAME" />...</translation> @@ -4678,7 +4675,6 @@ <translation id="8107015733319732394">Memasang Gedung Google Play pada <ph name="DEVICE_TYPE" /> anda. Proses ini mungkin mengambil masa beberapa minit.</translation> <translation id="8111155949205007504">Kongsi kata laluan ini dengan iPhone anda</translation> <translation id="8113043281354018522">Pilih jenis lesen</translation> -<translation id="8116925261070264013">Diredam</translation> <translation id="8116972784401310538">&Pengurus penanda halaman</translation> <translation id="8117620576188476503">Urus sambungan, kemas kini dan tetapan dengan dulang status. Untuk ke sini menggunakan papan kekunci, tekan Alt + Shift + S.</translation> <translation id="8118362518458010043">Dilumpuhkan oleh Chrome. Sambungan ini mungkin tidak selamat.</translation> @@ -5138,7 +5134,6 @@ <translation id="8845001906332463065">Dapatkan bantuan</translation> <translation id="8846141544112579928">Mencari papan kekunci...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Untuk membuka fail dengan $1, salin ke folder Linux Files dahulu.</translation> <translation id="8859057652521303089">Pilih bahasa anda:</translation> <translation id="8859174528519900719">Subbingkai: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Hamparan Excel</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index c9d425c..1cb1ecb 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Je kunt dit later altijd wijzigen via de instellingen</translation> <translation id="2006638907958895361">Link openen in <ph name="APP" /></translation> <translation id="2007404777272201486">Een probleem melden...</translation> -<translation id="2016237810978710652">Linux-bestanden openen…</translation> <translation id="2016430552235416146">Traditioneel</translation> <translation id="2017334798163366053">Het verzamelen van prestatiegegevens uitschakelen</translation> <translation id="2017836877785168846">Wist de geschiedenis en automatische aanvullingen in de adresbalk.</translation> @@ -3785,7 +3784,6 @@ <translation id="6748775883310276718">Kiosk van enkele app</translation> <translation id="6751256176799620176">1 map geselecteerd</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Incognito)</translation> -<translation id="6751815812172740613">Alle Linux-apps en -gegevens in je map met Linux-bestanden verwijderen van deze <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">URL gekopieerd</translation> <translation id="6758056191028427665">Laat ons weten of we goed bezig zijn.</translation> <translation id="6759193508432371551">Terugzetten op fabrieksinstellingen</translation> @@ -4062,7 +4060,6 @@ <ph name="BEGIN_PARAGRAPH3" />Je kunt deze functie beheren via Instellingen > Google. Selecteer 'Gebruik en diagnostische gegevens' in het menu.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">H&ulp vragen</translation> <translation id="7200083590239651963">Configuratie selecteren</translation> -<translation id="7201014958346994077">Kan Linux-bestanden niet weergeven</translation> <translation id="720110658997053098">Dit apparaat permanent in kioskmodus houden</translation> <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' verwijderd</translation> <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> downloaden...</translation> @@ -4677,7 +4674,6 @@ <translation id="8107015733319732394">De Google Play Store wordt geïnstalleerd op je <ph name="DEVICE_TYPE" />. Dit kan enkele minuten duren.</translation> <translation id="8111155949205007504">Dit wachtwoord delen met je iPhone</translation> <translation id="8113043281354018522">Licentietype kiezen</translation> -<translation id="8116925261070264013">Gedempt</translation> <translation id="8116972784401310538">&Bladwijzerbeheer</translation> <translation id="8117620576188476503">Beheer verbindingen, updates en instellingen via het statusvak. Druk op Alt + Shift + S om via het toetsenbord daarnaartoe te gaan.</translation> <translation id="8118362518458010043">Uitgeschakeld door Chrome. Deze extensie kan onveilig zijn.</translation> @@ -5137,7 +5133,6 @@ <translation id="8845001906332463065">Hulp nodig?</translation> <translation id="8846141544112579928">Toetsenbord zoeken...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Als je bestanden wilt openen met $1, moet je ze eerst kopiëren naar de map met Linux-bestanden.</translation> <translation id="8859057652521303089">Selecteer je taal:</translation> <translation id="8859174528519900719">Subframe: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel-spreadsheet</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index ad05a04..03d7b7f 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -682,7 +682,6 @@ <translation id="200544492091181894">Du kan endre dette senere i innstillingene</translation> <translation id="2006638907958895361">Åpne linken i <ph name="APP" /></translation> <translation id="2007404777272201486">Rapportér et problem</translation> -<translation id="2016237810978710652">Åpner Linux-filer …</translation> <translation id="2016430552235416146">Tradisjonell</translation> <translation id="2017334798163366053">Deaktiver innsamling av ytelsesdata</translation> <translation id="2017836877785168846">Tømmer loggen og fjerner automatiske fullføringer fra adressefeltet.</translation> @@ -1366,6 +1365,7 @@ <translation id="3031557471081358569">Velg elementer som skal importeres:</translation> <translation id="3031601332414921114">Gjenoppta utskriftsjobben</translation> <translation id="303198083543495566">Geografi</translation> +<translation id="3033999583152214331">Kjør Linux-verktøy, redigeringsverktøy og IDE-er på Chromebook. <a target="_blank" href="<ph name="URL" />">Finn ut mer</a></translation> <translation id="3036546437875325427">Slå på blitsen</translation> <translation id="3037754279345160234">Kan ikke parse konfigurasjonen for å tilknytte domene. Kontakt administratoren din.</translation> <translation id="3038612606416062604">Legg til en skriver manuelt</translation> @@ -3771,7 +3771,6 @@ <translation id="6748775883310276718">Enkeltapp-kiosk</translation> <translation id="6751256176799620176">1 mappe er valgt</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Inkognito)</translation> -<translation id="6751815812172740613">Vil du slette alle Linux-programmer og -data i Linux-filmappen fra denne <ph name="DEVICE_TYPE" />-enheten?</translation> <translation id="6757101664402245801">Nettadressen er kopiert</translation> <translation id="6758056191028427665">Gi oss tilbakemelding.</translation> <translation id="6759193508432371551">Tilbakestilling til fabrikkstandard</translation> @@ -4048,7 +4047,6 @@ <ph name="BEGIN_PARAGRAPH3" />Du kan kontrollere funksjonen fra Innstillinger > Google. Velg Bruk og diagnostikk fra menyen.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Få hjelp</translation> <translation id="7200083590239651963">Velg konfigurasjon</translation> -<translation id="7201014958346994077">Kan ikke vise Linux-filer</translation> <translation id="720110658997053098">Behold denne enheten permanent i kioskmodus</translation> <translation id="7201118060536064622">«<ph name="DELETED_ITEM_NAME" />» er slettet</translation> <translation id="7206693748120342859">Laster ned <ph name="PLUGIN_NAME" /> …</translation> @@ -4661,7 +4659,6 @@ <translation id="8107015733319732394">Installerer Google Play-butikken på <ph name="DEVICE_TYPE" />-enheten din. Dette kan ta noen minutter.</translation> <translation id="8111155949205007504">Del dette passordet med iPhonen din</translation> <translation id="8113043281354018522">Velg lisenstype</translation> -<translation id="8116925261070264013">Kuttet lyd</translation> <translation id="8116972784401310538">&Bokmerkebehandling</translation> <translation id="8117620576188476503">Administrer tilkoblinger, oppdateringer og innstillinger med statusfeltet. For å komme hit kan du også bruke tastekombinasjonen Alt + Shift + S.</translation> <translation id="8118362518458010043">Deaktivert av Chrome. Denne utvidelsen kan være usikker.</translation> @@ -5120,7 +5117,6 @@ <translation id="8845001906332463065">Få hjelp</translation> <translation id="8846141544112579928">Søker etter tastatur …</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">For å åpne filer med $1 må du først kopiere dem til Files-mappen i Linux.</translation> <translation id="8859057652521303089">Velg språk:</translation> <translation id="8859174528519900719">Underramme: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel-regneark</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 575a42dc..6318a29a 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Możesz zmienić to później w Ustawieniach</translation> <translation id="2006638907958895361">Otwórz link w aplikacji <ph name="APP" /></translation> <translation id="2007404777272201486">Zgłaszanie problemu...</translation> -<translation id="2016237810978710652">Otwieram pliki Linuksa...</translation> <translation id="2016430552235416146">Tradycyjne</translation> <translation id="2017334798163366053">Wyłącz zbieranie danych o wydajności</translation> <translation id="2017836877785168846">Usuwa historię i wpisy autouzupełniania w pasku adresu.</translation> @@ -3407,7 +3406,7 @@ <translation id="6185132558746749656">Lokalizacja urządzenia</translation> <translation id="6185617499004995178">Walidator CUPS IPP</translation> <translation id="6185696379715117369">Strona do góry</translation> -<translation id="6189273858858366896">Skonfiguruj sieciowe udziały plików lub nimi zarządzaj.</translation> +<translation id="6189273858858366896">Skonfiguruj sieciowe magazyny plików lub nimi zarządzaj.</translation> <translation id="6189412234224385711">Otwórz w rozszerzeniu <ph name="EXTENSION_NAME" /></translation> <translation id="6196640612572343990">Blokuj pliki cookie innych firm</translation> <translation id="6196854373336333322">Rozszerzenie „<ph name="EXTENSION_NAME" />” przejęło kontrolę nad ustawieniami serwera proxy, co oznacza, że może zmieniać, przerywać lub podglądać wszystko, co robisz online. Jeśli nie masz pewności, skąd wzięła się ta zmiana, prawdopodobnie jej nie chcesz.</translation> @@ -3784,7 +3783,6 @@ <translation id="6748775883310276718">Pojedyncza aplikacja kiosku</translation> <translation id="6751256176799620176">Wybrano jeden folder</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Incognito)</translation> -<translation id="6751815812172740613">Usunąć wszystkie aplikacje na Linuksa i dane z folderu Pliki Linuksa z tego urządzenia <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">URL został skopiowany</translation> <translation id="6758056191028427665">Co sądzisz o efektach naszej pracy?</translation> <translation id="6759193508432371551">Ustawienia fabryczne</translation> @@ -4061,7 +4059,6 @@ <ph name="BEGIN_PARAGRAPH3" />Działanie tej funkcji możesz skonfigurować w opcji Ustawienia > Google. Wybierz w menu Użycie i diagnostyka.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Uzyskaj p&omoc</translation> <translation id="7200083590239651963">Wybierz konfigurację</translation> -<translation id="7201014958346994077">Nie można wyświetlić plików Linuksa</translation> <translation id="720110658997053098">Trwale utrzymuj to urządzenie w trybie kiosku</translation> <translation id="7201118060536064622">Element „<ph name="DELETED_ITEM_NAME" />” został usunięty</translation> <translation id="7206693748120342859">Pobieram <ph name="PLUGIN_NAME" />...</translation> @@ -4677,7 +4674,6 @@ <translation id="8107015733319732394">Instaluję Sklep Google Play na urządzeniu <ph name="DEVICE_TYPE" />. Może to potrwać kilka minut.</translation> <translation id="8111155949205007504">Udostępnij to hasło za pomocą iPhone'a</translation> <translation id="8113043281354018522">Wybierz typ licencji</translation> -<translation id="8116925261070264013">Wyciszone</translation> <translation id="8116972784401310538">&Menedżer zakładek</translation> <translation id="8117620576188476503">Zarządzaj połączeniami, aktualizacjami i ustawieniami na pasku stanu. Aby je otworzyć za pomocą klawiatury, naciśnij Alt + Shift + S.</translation> <translation id="8118362518458010043">Wyłączone przez Chrome. To rozszerzenie może być niebezpieczne.</translation> @@ -5038,7 +5034,7 @@ <translation id="869884720829132584">Menu aplikacji</translation> <translation id="869891660844655955">Data wygaśnięcia</translation> <translation id="8699566574894671540">Aby włączyć tę funkcję, najpierw w menu Edytuj włącz Sprawdzaj pisownię w trakcie pisania</translation> -<translation id="870073306461175568">Sieciowe udziały plików</translation> +<translation id="870073306461175568">Sieciowe magazyny plików</translation> <translation id="8701677791353449257">Nazwa urządzenia musi odpowiadać wyrażeniu regularnemu <ph name="REGEX" />.</translation> <translation id="8704521619148782536">To trwa o wiele dłużej niż zwykle. Możesz zaczekać albo anulować i spróbować ponownie później.</translation> <translation id="8705331520020532516">Numer seryjny</translation> @@ -5137,7 +5133,6 @@ <translation id="8845001906332463065">Uzyskaj pomoc</translation> <translation id="8846141544112579928">Szukam klawiatury...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Aby otworzyć plik w kontenerze $1, najpierw skopiuj go do folderu Pliki Linuksa.</translation> <translation id="8859057652521303089">Wybierz język:</translation> <translation id="8859174528519900719">Ramka podrzędna: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Arkusz kalkulacyjny Excela</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 4843020d..9aeb22d 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Você pode alterar isso a qualquer momento nas configurações</translation> <translation id="2006638907958895361">Abrir link no <ph name="APP" /></translation> <translation id="2007404777272201486">Informar um problema...</translation> -<translation id="2016237810978710652">Abrindo arquivos do Linux…</translation> <translation id="2016430552235416146">Tradicional</translation> <translation id="2017334798163366053">Desativar coleta de dados de desempenho</translation> <translation id="2017836877785168846">Limpa o histórico e o preenchimento automático na barra de endereço.</translation> @@ -3786,7 +3785,6 @@ <translation id="6748775883310276718">Quiosque de aplicativo único</translation> <translation id="6751256176799620176">1 pasta selecionada</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Modo anônimo)</translation> -<translation id="6751815812172740613">Excluir todos os aplicativos e dados do Linux na pasta de arquivos do Linux deste <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">URL copiado</translation> <translation id="6758056191028427665">Diga como estamos nos saindo.</translation> <translation id="6759193508432371551">Configuração original</translation> @@ -4063,7 +4061,6 @@ <ph name="BEGIN_PARAGRAPH3" />É possível controlar este recurso em Config. > Google. Selecione Uso e diagnóstico no menu.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Conseguir &ajuda</translation> <translation id="7200083590239651963">Selecionar configuração</translation> -<translation id="7201014958346994077">Não é possível ver os arquivos do Linux</translation> <translation id="720110658997053098">Manter este dispositivo permanentemente no modo quiosque</translation> <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' excluído</translation> <translation id="7206693748120342859">Fazendo download do <ph name="PLUGIN_NAME" />...</translation> @@ -4679,7 +4676,6 @@ <translation id="8107015733319732394">Instalando a Google Play Store no seu <ph name="DEVICE_TYPE" />. Isso pode demorar alguns minutos.</translation> <translation id="8111155949205007504">Compartilhar essa senha com seu iPhone</translation> <translation id="8113043281354018522">Escolha o tipo de licença</translation> -<translation id="8116925261070264013">Com som desativado</translation> <translation id="8116972784401310538">&Gerenciador de favoritos</translation> <translation id="8117620576188476503">Gerencie conexões, atualizações e configurações com a bandeja de status. Para chegar aqui com o teclado, pressione Alt + Shift + S.</translation> <translation id="8118362518458010043">Desativada pelo Chrome. Essa extensão pode não ser segura.</translation> @@ -5139,7 +5135,6 @@ <translation id="8845001906332463065">Ajuda</translation> <translation id="8846141544112579928">Procurando teclado...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Para abrir arquivos com $1, primeiro você precisa copiá-los para a pasta de arquivos do Linux.</translation> <translation id="8859057652521303089">Selecione o seu idioma:</translation> <translation id="8859174528519900719">Subquadro: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Planilha do Excel</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index ccfd127..596f1cc 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Pode alterar esta opção mais tarde nas definições.</translation> <translation id="2006638907958895361">Abrir link na aplicação <ph name="APP" /></translation> <translation id="2007404777272201486">Comunicar um problema...</translation> -<translation id="2016237810978710652">A abrir ficheiros Linux…</translation> <translation id="2016430552235416146">Tradicional</translation> <translation id="2017334798163366053">Desativar a recolha de dados de desempenho</translation> <translation id="2017836877785168846">Limpa o histórico e os preenchimentos automáticos da barra de endereço.</translation> @@ -3786,7 +3785,6 @@ <translation id="6748775883310276718">Single App Kiosk</translation> <translation id="6751256176799620176">1 pasta selecionada</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Navegação anónima)</translation> -<translation id="6751815812172740613">Pretende eliminar todas as aplicações e os dados do Linux da pasta Ficheiros Linux deste <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">URL copiado</translation> <translation id="6758056191028427665">Dê-nos a sua opinião acerca do nosso desempenho.</translation> <translation id="6759193508432371551">Reposição de dados de fábrica</translation> @@ -4063,7 +4061,6 @@ <ph name="BEGIN_PARAGRAPH3" />Pode controlar esta funcionalidade a partir de Definições > Google. Selecione Utilização e diagnósticos no menu.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Obter a&juda</translation> <translation id="7200083590239651963">Selecionar configuração</translation> -<translation id="7201014958346994077">Não é possível ver os Ficheiros Linux.</translation> <translation id="720110658997053098">Manter este dispositivo permanentemente no modo quiosque</translation> <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" eliminado</translation> <translation id="7206693748120342859">A transferir <ph name="PLUGIN_NAME" />...</translation> @@ -4679,7 +4676,6 @@ <translation id="8107015733319732394">A instalar a Google Play Store no <ph name="DEVICE_TYPE" />… Esta ação pode demorar alguns minutos.</translation> <translation id="8111155949205007504">Partilhar esta palavra-passe com o seu iPhone</translation> <translation id="8113043281354018522">Selecionar o tipo de licença</translation> -<translation id="8116925261070264013">Com som desativado</translation> <translation id="8116972784401310538">&Gestor de marcadores</translation> <translation id="8117620576188476503">Faça a gestão de ligações, atualizações e definições através do tabuleiro de estado. Para chegar aqui através do teclado, prima Alt + Shift + S.</translation> <translation id="8118362518458010043">Desativada pelo Chrome. Esta extensão pode ser insegura.</translation> @@ -5138,7 +5134,6 @@ <translation id="8845001906332463065">Obter ajuda</translation> <translation id="8846141544112579928">A pesquisar teclado...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Para abrir ficheiros com o $1, copie primeiro para a pasta Ficheiros Linux.</translation> <translation id="8859057652521303089">Selecionar idioma:</translation> <translation id="8859174528519900719">Subestrutura: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Folha de cálculo do Excel</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index cd3f28c..abb0b050 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Poți modifica ulterior această opțiune în Setări</translation> <translation id="2006638907958895361">Deschide linkul în <ph name="APP" /></translation> <translation id="2007404777272201486">Raportează o problemă...</translation> -<translation id="2016237810978710652">Se deschid fișierele Linux...</translation> <translation id="2016430552235416146">Tradițională</translation> <translation id="2017334798163366053">Dezactivați culegerea datelor privind performanța</translation> <translation id="2017836877785168846">Șterge istoricul și completările automate din bara de adrese.</translation> @@ -1371,6 +1370,7 @@ <translation id="3031557471081358569">Selectează elementele de importat:</translation> <translation id="3031601332414921114">Reia printarea</translation> <translation id="303198083543495566">Geografie</translation> +<translation id="3033999583152214331">Rulează instrumentele, aplicațiile de editare și IDE-urile Linux pe Chromebook. <a target="_blank" href="<ph name="URL" />">Află mai multe</a></translation> <translation id="3036546437875325427">Activează Flash</translation> <translation id="3037754279345160234">Nu se poate analiza configurația de conectare la domeniu. Contactează administratorul.</translation> <translation id="3038612606416062604">Adaugă manual o imprimantă</translation> @@ -3783,7 +3783,6 @@ <translation id="6748775883310276718">Chioșc cu o singură aplicație</translation> <translation id="6751256176799620176">Un dosar selectat</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Incognito)</translation> -<translation id="6751815812172740613">Ștergi toate aplicațiile Linux și datele din dosarul Fișiere Linux de pe <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">Adresa URL a fost copiată</translation> <translation id="6758056191028427665">Spune-ne cum ne descurcăm.</translation> <translation id="6759193508432371551">Resetare la setările din fabrică</translation> @@ -4060,7 +4059,6 @@ <ph name="BEGIN_PARAGRAPH3" />Poți controla această funcție din Setări > Google. Selectează Utilizare și diagnosticare din meniu.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Obțineți a&jutor</translation> <translation id="7200083590239651963">Selectează configurația</translation> -<translation id="7201014958346994077">Fișierele Linux nu pot fi afișate</translation> <translation id="720110658997053098">Menține permanent acest dispozitiv în modul chioșc</translation> <translation id="7201118060536064622">„<ph name="DELETED_ITEM_NAME" />” a fost șters</translation> <translation id="7206693748120342859">Se descarcă pluginul <ph name="PLUGIN_NAME" />...</translation> @@ -4676,7 +4674,6 @@ <translation id="8107015733319732394">Se instalează Magazinul Google Play pe dispozitivul <ph name="DEVICE_TYPE" />. Ar putea dura câteva minute.</translation> <translation id="8111155949205007504">Trimite această parolă pe iPhone</translation> <translation id="8113043281354018522">Alege tipul de licență</translation> -<translation id="8116925261070264013">Cu sunetul dezactivat</translation> <translation id="8116972784401310538">&Manager de marcaje</translation> <translation id="8117620576188476503">Gestionează conexiunile, actualizările și setările din bara de stare. Pentru a le accesa folosind tastatura, apasă Alt + Shift + S.</translation> <translation id="8118362518458010043">Dezactivată de Chrome. Această extensie ar putea fi nesigură.</translation> @@ -5135,7 +5132,6 @@ <translation id="8845001906332463065">Obține ajutor</translation> <translation id="8846141544112579928">Se caută tastatura...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Pentru a deschide fișierele cu $1, copiază-le mai întâi în dosarul Fișiere Linux.</translation> <translation id="8859057652521303089">Selectează limba:</translation> <translation id="8859174528519900719">Subcadru: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Foaie de calcul Excel</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index 12b2171..31f4b9f4 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">Настройки синхронизации и персонализации</translation> <translation id="1398853756734560583">Развернуть</translation> <translation id="1399511500114202393">Не использовать сертификат пользователя</translation> +<translation id="1401165786814632797">Чтобы обратиться к Ассистенту, разблокируйте устройство, а затем скажите "Окей, Google".</translation> <translation id="140250605646987970">Телефон обнаружен. К сожалению, функция Smart Lock доступна только на устройствах с Android 5.0 и следующих версий. <a>Подробнее…</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (контролируемый профиль)</translation> <translation id="1405476660552109915">Сохранить данные аккаунта для этого сайта в <ph name="PASSWORD_MANAGER_BRAND" />?</translation> @@ -684,7 +685,6 @@ <translation id="200544492091181894">Вы можете в любое время изменить свой выбор в настройках.</translation> <translation id="2006638907958895361">Открыть ссылку в приложении "<ph name="APP" />"</translation> <translation id="2007404777272201486">Сообщить о проблеме...</translation> -<translation id="2016237810978710652">Открытие файлов Linux…</translation> <translation id="2016430552235416146">Обычная</translation> <translation id="2017334798163366053">Запретить сбор данных о производительности</translation> <translation id="2017836877785168846">Удаление истории и вариантов автозаполнения в адресной строке</translation> @@ -1511,6 +1511,7 @@ <translation id="3271648667212143903">Сайт <ph name="ORIGIN" /> запрашивает подключение</translation> <translation id="3274763671541996799">Вы перешли в полноэкранный режим.</translation> <translation id="3275778913554317645">Открыть в отдельном окне</translation> +<translation id="3278877214895457897">Завершив настройку Chromebook, вы сможете обращаться к Ассистенту в любое время. Для этого нажмите кнопку Ассистента или скажите "Окей, Google".</translation> <translation id="3279230909244266691">Подождите несколько минут. Запуск виртуальной машины…</translation> <translation id="3279741024917655738">Где показывать полноэкранные видео</translation> <translation id="3280237271814976245">Сохранить &как...</translation> @@ -2604,6 +2605,7 @@ <translation id="4992066212339426712">Включить звук</translation> <translation id="4992458225095111526">Подтверждение Powerwash</translation> <translation id="4992473555164495036">Администратор запретил некоторые способы ввода.</translation> +<translation id="4992926179187649719">Включите функцию "Окей, Google"</translation> <translation id="4994474651455208930">Разрешить запрашивать установку обработчиков протоколов для сайтов по умолчанию</translation> <translation id="4994754230098574403">Настройка</translation> <translation id="4996978546172906250">Способ отправки</translation> @@ -3781,7 +3783,6 @@ <translation id="6748775883310276718">Киоск для одного приложения</translation> <translation id="6751256176799620176">1 папка выбрана</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (инкогнито)</translation> -<translation id="6751815812172740613">Удалить с устройства <ph name="DEVICE_TYPE" /> все приложения для Linux, а также данные из папки "Файлы Linux"?</translation> <translation id="6757101664402245801">URL скопирован</translation> <translation id="6758056191028427665">Расскажите, как у вас дела.</translation> <translation id="6759193508432371551">Сброс настроек</translation> @@ -4058,7 +4059,6 @@ <ph name="BEGIN_PARAGRAPH3" />Чтобы отключить эту функцию или включить ее снова: "Настройки > Google > Использование и диагностика".<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">&Справка</translation> <translation id="7200083590239651963">Выбор конфигурации</translation> -<translation id="7201014958346994077">Нет доступа к файлам Linux.</translation> <translation id="720110658997053098">Всегда запускать устройство в режиме киоска</translation> <translation id="7201118060536064622">Объект "<ph name="DELETED_ITEM_NAME" />" удален</translation> <translation id="7206693748120342859">Скачивание плагина <ph name="PLUGIN_NAME" />…</translation> @@ -4532,6 +4532,7 @@ <translation id="7908378463497120834">Не удалось добавить один или несколько разделов внешнего запоминающего устройства.</translation> <translation id="7909969815743704077">Скачано в режиме инкогнито</translation> <translation id="7910768399700579500">&Новая папка</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">Пароль был изменен на сервере. Выйдите из аккаунта и войдите снова.</translation> <translation id="7915471803647590281">Введите текст отзыва.</translation> <translation id="7916556741383518510">При нажатии</translation> @@ -4673,7 +4674,6 @@ <translation id="8107015733319732394">Установка Google Play Маркета на устройство <ph name="DEVICE_TYPE" /> (может занять несколько минут)…</translation> <translation id="8111155949205007504">Поделитесь паролем с iPhone</translation> <translation id="8113043281354018522">Выберите тип лицензии</translation> -<translation id="8116925261070264013">Сайты с отключенным звуком</translation> <translation id="8116972784401310538">&Диспетчер закладок</translation> <translation id="8117620576188476503">Управляйте подключениями, обновлениями и настройками с помощью строки состояния. Для этого нажмите Alt + Shift + S.</translation> <translation id="8118362518458010043">Расширение отключено браузером Chrome. Оно может быть небезопасным.</translation> @@ -5132,7 +5132,6 @@ <translation id="8845001906332463065">Справка</translation> <translation id="8846141544112579928">Поиск клавиатуры…</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Чтобы открыть файлы с помощью приложения "$1", сначала скопируйте их в папку Linux Files (Файлы Linux).</translation> <translation id="8859057652521303089">Выберите язык:</translation> <translation id="8859174528519900719">Субфрейм: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Электронные таблицы Excel</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index c01f324..68c9ed1 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Svoju voľbu môžete kedykoľvek neskôr zmeniť v nastaveniach</translation> <translation id="2006638907958895361">Otvoriť odkaz v aplikácii <ph name="APP" /></translation> <translation id="2007404777272201486">Nahlásiť problém...</translation> -<translation id="2016237810978710652">Otvárajú sa súbory Linux…</translation> <translation id="2016430552235416146">Tradičné</translation> <translation id="2017334798163366053">Zakázať zhromažďovanie údajov o výkonnosti</translation> <translation id="2017836877785168846">Vymaže históriu a automaticky doplňované výrazy v paneli s adresou.</translation> @@ -3783,7 +3782,6 @@ <translation id="6748775883310276718">Verejný terminál s jedinou aplikáciou</translation> <translation id="6751256176799620176">1 vybratý súbor</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Inkognito)</translation> -<translation id="6751815812172740613">Chcete odstrániť všetky aplikácie pre Linux a príslušné dáta v priečinku Linux Files z tohto zariadenia <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">Webová adresa bola skopírovaná</translation> <translation id="6758056191028427665">Dajte nám tak vedieť, ako sa nám darí v našom úsilí.</translation> <translation id="6759193508432371551">Obnovenie výrobných nastavení</translation> @@ -4060,7 +4058,6 @@ <ph name="BEGIN_PARAGRAPH3" />Túto funkciu môžete ovládať v časti Nastavenia > Google. V ponuke vyberte položku Využitie a diagnostika.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Získať p&omoc</translation> <translation id="7200083590239651963">Výber konfigurácie</translation> -<translation id="7201014958346994077">Nepodarilo sa zobraziť súbory systému Linux</translation> <translation id="720110658997053098">Udržiavať toto zariadenie trvale v režime kiosku</translation> <translation id="7201118060536064622">Položka <ph name="DELETED_ITEM_NAME" /> bola odstránená</translation> <translation id="7206693748120342859">Sťahovanie doplnku <ph name="PLUGIN_NAME" />...</translation> @@ -4676,7 +4673,6 @@ <translation id="8107015733319732394">Inštaluje sa Obchod Google Play na zariadení <ph name="DEVICE_TYPE" />. Môžete to chvíľu trvať.</translation> <translation id="8111155949205007504">Zdieľajte toto heslo so svojím zariadením iPhone</translation> <translation id="8113043281354018522">Vyberte typ licencie</translation> -<translation id="8116925261070264013">Zvuk bol vypnutý</translation> <translation id="8116972784401310538">&Správca záložiek</translation> <translation id="8117620576188476503">Spravujte pripojenia, aktualizácie a nastavenia pomocou stavového panela. Ak sem chcete prejsť pomocou klávesnice, stlačte klávesy Alt + Shift + S.</translation> <translation id="8118362518458010043">Zakázané Chromom. Toto rozšírenie môže byť nebezpečné.</translation> @@ -5135,7 +5131,6 @@ <translation id="8845001906332463065">Získať pomoc</translation> <translation id="8846141544112579928">Hľadá sa klávesnica...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Ak chcete otvárať súbory pomocou aplikácie $1, najprv ich skopírujte do priečinka so súbormi systému Linux.</translation> <translation id="8859057652521303089">Vyberte svoj jazyk:</translation> <translation id="8859174528519900719">Podrámec: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Tabuľka aplikácie Excel</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index 00127eb..393ecf8 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">To lahko pozneje spremenite v nastavitvah</translation> <translation id="2006638907958895361">Odpiranje povezave v aplikaciji <ph name="APP" /></translation> <translation id="2007404777272201486">Prijavi težavo ...</translation> -<translation id="2016237810978710652">Odpiranje datotek za Linux ...</translation> <translation id="2016430552235416146">Tradicionalno</translation> <translation id="2017334798163366053">Onemogoči zbiranje podatkov o učinkovitosti delovanja</translation> <translation id="2017836877785168846">Izbriše zgodovino in samodokončanja v naslovni vrstici.</translation> @@ -3783,7 +3782,6 @@ <translation id="6748775883310276718">Način kioska s posamezno aplikacijo</translation> <translation id="6751256176799620176">Izbrana je 1 mapa</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (način brez beleženja zgodovine)</translation> -<translation id="6751815812172740613">Želite izbrisati vse aplikacije in podatke za Linux iz mape Datoteke za Linux v tej napravi <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">URL je kopiran</translation> <translation id="6758056191028427665">Sporočite nam, kako ste zadovoljni z nami.</translation> <translation id="6759193508432371551">Ponastavitev na tovarniške nastavitve</translation> @@ -4060,7 +4058,6 @@ <ph name="BEGIN_PARAGRAPH3" />To funkcijo je mogoče nadzirati v »Nastavitve > Google«. V meniju izberite »Uporaba in diagnostični podatki«.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Pomoč</translation> <translation id="7200083590239651963">Izbira konfiguracije</translation> -<translation id="7201014958346994077">Ni si mogoče ogledati datotek za Linux</translation> <translation id="720110658997053098">Ta naprava naj bo trajno v načinu kioska</translation> <translation id="7201118060536064622">Element »<ph name="DELETED_ITEM_NAME" />« je izbrisan</translation> <translation id="7206693748120342859">Prenos vtičnika <ph name="PLUGIN_NAME" /> ...</translation> @@ -4676,7 +4673,6 @@ <translation id="8107015733319732394">Nameščanje Trgovine Google Play v napravi <ph name="DEVICE_TYPE" />. To lahko traja nekaj minut.</translation> <translation id="8111155949205007504">Deljenje tega gesla z iPhonom</translation> <translation id="8113043281354018522">Izberite vrsto licence</translation> -<translation id="8116925261070264013">Prezrto</translation> <translation id="8116972784401310538">&Upravitelj zaznamkov</translation> <translation id="8117620576188476503">Upravljanje povezav, posodobitev in nastavitev v vrstici stanja. Če želite dostopati s tipkovnico, pritisnite Alt + Shift + S.</translation> <translation id="8118362518458010043">Razširitev je onemogočil Chrome, ker morda ni varna.</translation> @@ -5135,7 +5131,6 @@ <translation id="8845001906332463065">Poiščite pomoč</translation> <translation id="8846141544112579928">Iskanje tipkovnice ...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Če želite datoteke odpirati z aplikacijo $1, jih najprej kopirajte v mapo Linux Files.</translation> <translation id="8859057652521303089">Izberite jezik:</translation> <translation id="8859174528519900719">Podokvir: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excelova preglednica</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 05e0baaf..eecbfb61 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -683,7 +683,6 @@ <translation id="200544492091181894">То можете да промените касније у подешавањима.</translation> <translation id="2006638907958895361">Отвори линк у <ph name="APP" /></translation> <translation id="2007404777272201486">Пријави проблем...</translation> -<translation id="2016237810978710652">Отварају се Linux датотеке...</translation> <translation id="2016430552235416146">Традиционално</translation> <translation id="2017334798163366053">Онемогући прикупљање података о учинку</translation> <translation id="2017836877785168846">Брише историју и аутоматска довршавања у траци за адресу.</translation> @@ -3780,7 +3779,6 @@ <translation id="6748775883310276718">Киоск за појединачне апликације</translation> <translation id="6751256176799620176">Изабран је 1 директоријум</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (без архивирања)</translation> -<translation id="6751815812172740613">Желите ли да избришете све Linux апликације и податке у директоријуму Linux датотеке на овом <ph name="DEVICE_TYPE" /> уређају?</translation> <translation id="6757101664402245801">URL је копиран</translation> <translation id="6758056191028427665">Поделите утиске о нашем учинку.</translation> <translation id="6759193508432371551">Враћање фабричких подешавања</translation> @@ -4057,7 +4055,6 @@ <ph name="BEGIN_PARAGRAPH3" />Ову функцију можете да контролишете ако одете у Подешавања > Google. У менију изаберите Коришћење и дијагностика.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Потражи помоћ</translation> <translation id="7200083590239651963">Изаберите конфигурацију</translation> -<translation id="7201014958346994077">Приказ Linux датотека није успео</translation> <translation id="720110658997053098">Трајно задржи овај уређај у режиму киоска</translation> <translation id="7201118060536064622">Ставка „<ph name="DELETED_ITEM_NAME" />“ је избрисана</translation> <translation id="7206693748120342859">Преузимање додатне компоненте <ph name="PLUGIN_NAME" />...</translation> @@ -4673,7 +4670,6 @@ <translation id="8107015733319732394">Google Play продавница се инсталира на уређају <ph name="DEVICE_TYPE" />. То може да потраје неколико минута.</translation> <translation id="8111155949205007504">Делите ову лозинку са iPhone-ом</translation> <translation id="8113043281354018522">Одаберите тип лиценце</translation> -<translation id="8116925261070264013">Звук је искључен</translation> <translation id="8116972784401310538">&Менаџер обележивача</translation> <translation id="8117620576188476503">Управљајте везама, ажурирањима и подешавањима помоћу статусне траке. Да бисте дошли овде помоћу тастатуре, притисните Alt + Shift + S.</translation> <translation id="8118362518458010043">Chrome је онемогућио додатак. Овај додатак можда није безбедан.</translation> @@ -5132,7 +5128,6 @@ <translation id="8845001906332463065">Затражите помоћ</translation> <translation id="8846141544112579928">Тражимо тастатуру...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Да бисте отворили датотеке помоћу апликације $1, најпре их копирајте у директоријум Linux датотеке.</translation> <translation id="8859057652521303089">Изаберите језик:</translation> <translation id="8859174528519900719">Подоквир: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel табела</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index 46dede4..c66d32b9 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -685,7 +685,6 @@ <translation id="200544492091181894">Du kan alltid ändra detta senare i inställningarna</translation> <translation id="2006638907958895361">Öppna länken i <ph name="APP" /></translation> <translation id="2007404777272201486">Rapportera ett problem...</translation> -<translation id="2016237810978710652">Öppnar Linux-filer …</translation> <translation id="2016430552235416146">Traditionell</translation> <translation id="2017334798163366053">Inaktivera insamling av resultatdata</translation> <translation id="2017836877785168846">Rensar historik och autoslutföranden i adressfältet.</translation> @@ -3783,7 +3782,6 @@ <translation id="6748775883310276718">Licens för ensam kioskapp</translation> <translation id="6751256176799620176">1 mapp har valts</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Inkognito)</translation> -<translation id="6751815812172740613">Vill du radera alla Linux-program och all data i mappen för Linux-filer från denna <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">Webbadressen har kopierats</translation> <translation id="6758056191028427665">Berätta hur vi sköter oss.</translation> <translation id="6759193508432371551">Återställ standardinställningar</translation> @@ -4060,7 +4058,6 @@ <ph name="BEGIN_PARAGRAPH3" />Du kan styra funktionen under Inställningar > Google. Välj Användning och diagnostik i menyn.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Få h&jälp</translation> <translation id="7200083590239651963">Välj konfiguration</translation> -<translation id="7201014958346994077">Det gick inte att visa Linux-filer</translation> <translation id="720110658997053098">Behåll enheten permanent i kioskläge</translation> <translation id="7201118060536064622"><ph name="DELETED_ITEM_NAME" /> har raderats</translation> <translation id="7206693748120342859">Laddar ned <ph name="PLUGIN_NAME" /> ...</translation> @@ -4676,7 +4673,6 @@ <translation id="8107015733319732394">Google Play Butik installeras på din <ph name="DEVICE_TYPE" />. Det kan ta några minuter.</translation> <translation id="8111155949205007504">Dela det här lösenordet med din iPhone</translation> <translation id="8113043281354018522">Välj licenstyp</translation> -<translation id="8116925261070264013">Ljudet avstängt</translation> <translation id="8116972784401310538">&Bokmärkshanteraren</translation> <translation id="8117620576188476503">Hantera anslutningar, uppdateringar och inställningar i statusfältet. Tryck på Alt + Skift + S om du vill öppna statusfältet.</translation> <translation id="8118362518458010043">Tillägget har inaktiverats. Det kan vara osäkert.</translation> @@ -5135,7 +5131,6 @@ <translation id="8845001906332463065">Få hjälp</translation> <translation id="8846141544112579928">Söker efter tangentbord …</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Kopiera filer som du vill öppna med $1 till mappen med Linux-filer först.</translation> <translation id="8859057652521303089">Välj språk:</translation> <translation id="8859174528519900719">Underram: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel-kalkylark</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index 190067f..79a60ee 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -683,7 +683,6 @@ <translation id="200544492091181894">Unaweza kubadilisha hali hii baadaye katika mipangilio</translation> <translation id="2006638907958895361">Fungua Kiungo katika <ph name="APP" /></translation> <translation id="2007404777272201486">Ripoti Tatizo...</translation> -<translation id="2016237810978710652">Inafungua Faili za Linux...</translation> <translation id="2016430552235416146">Vya Asili</translation> <translation id="2017334798163366053">Zima ukusanyaji wa data ya utendaji</translation> <translation id="2017836877785168846">Hufuta historia na ujazaji kiotomatiki katika sehemu ya anwani.</translation> @@ -3775,7 +3774,6 @@ <translation id="6748775883310276718">Skrini Nzima ya Programu Moja</translation> <translation id="6751256176799620176">Folda 1 imechaguliwa</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Hali fiche)</translation> -<translation id="6751815812172740613">Ungependa kufuta data na programu zote za Linux katika folda ya Faili za Linux kwenye <ph name="DEVICE_TYPE" /> hii?</translation> <translation id="6757101664402245801">URL imenakiliwa</translation> <translation id="6758056191028427665">Tueleze jinsi huduma inavyokuridhisha.</translation> <translation id="6759193508432371551">Rejesha upya mipangilio ya kiwandani</translation> @@ -4052,7 +4050,6 @@ <ph name="BEGIN_PARAGRAPH3" />Unaweza kudhibiti kipengele hiki katika Mipangilio > Google. Chagua Matumizi na uchanganuzi kwenye menyu.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Pata Usaidizi</translation> <translation id="7200083590239651963">Chagua mipangilio</translation> -<translation id="7201014958346994077">Imeshindwa kuona Faili za Linux</translation> <translation id="720110658997053098">Weka kifaa hiki katika hali ya skrini nzima kila wakati</translation> <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' imefutwa</translation> <translation id="7206693748120342859">Inapakua <ph name="PLUGIN_NAME" />...</translation> @@ -4669,7 +4666,6 @@ <translation id="8107015733319732394">Inasakinisha duka la Google Play kwenye <ph name="DEVICE_TYPE" />. Huenda hatua hii ikachukua dakika chache.</translation> <translation id="8111155949205007504">Shiriki nenosiri hili ukitumia iPhone yako</translation> <translation id="8113043281354018522">Chagua aina ya leseni</translation> -<translation id="8116925261070264013">Imezimwa</translation> <translation id="8116972784401310538">Kidhi&biti alamisho</translation> <translation id="8117620576188476503">Dhibiti miunganisho, masasisho na mipangilio ukitumia treya ya hali. Ili kufikia kwa kutumia kibodi, bonyeza Alt + Shift + S.</translation> <translation id="8118362518458010043">Imezimwa na Chrome. Huenda kiendelezi hiki si salama.</translation> @@ -5129,7 +5125,6 @@ <translation id="8845001906332463065">Pata usaidizi</translation> <translation id="8846141544112579928">Inatafuta kibodi...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Ili ufungue faili ukitumia $1, nakili kwanza folda ya Faili za Linux.</translation> <translation id="8859057652521303089">Chagua lugha yako:</translation> <translation id="8859174528519900719">Fremu ndogo: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Lahajedwali la Excel</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index a3e8ef6..e38a21f 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">ஒத்திசைவு மற்றும் தனிப்பயனாக்கம்</translation> <translation id="1398853756734560583">பெரிதாக்கு</translation> <translation id="1399511500114202393">பயனர் சான்றிதழ் இல்லை</translation> +<translation id="1401165786814632797">சாதனம் பூட்டப்படாமல் இயங்கிக் கொண்டிருக்கும்போது, "OK Google" என்று சொல்லி எந்த நேரத்திலும் அசிஸ்டண்ட்டை அணுகலாம்.</translation> <translation id="140250605646987970">உங்கள் ஃபோன் அறியப்பட்டது. ஆனால் Android 5.0 மற்றும் அதற்கு மேற்பட்ட பதிப்புகளைக் கொண்ட சாதனங்களில் மட்டும் Smart Lock இயங்கும். <a>மேலும் அறிக</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (கண்காணிக்கப்படும் பயனர்)</translation> <translation id="1405476660552109915">இந்தத் தளத்திற்கான உங்கள் கணக்கை <ph name="PASSWORD_MANAGER_BRAND" /> சேமிக்க வேண்டுமா?</translation> @@ -685,7 +686,6 @@ <translation id="200544492091181894">இதை எப்போது வேண்டுமானாலும் பின்னர் அமைப்புகளில் மாற்றிக்கொள்ளலாம்</translation> <translation id="2006638907958895361"><ph name="APP" /> இல் இணைப்பைத் திற</translation> <translation id="2007404777272201486">சிக்கலைப் புகார் செய்க...</translation> -<translation id="2016237810978710652">Linux கோப்புகளைத் திறக்கிறது...</translation> <translation id="2016430552235416146">பழைய முறை</translation> <translation id="2017334798163366053">செயல்திறன் தரவுச் சேகரிப்பை முடக்கு</translation> <translation id="2017836877785168846">முகவரிப் பட்டியில் வரலாற்றையும் தானே நிரப்புதல்களையும் அழிக்கும்.</translation> @@ -1512,6 +1512,7 @@ <translation id="3271648667212143903"><ph name="ORIGIN" /> இணைய விரும்புகிறது</translation> <translation id="3274763671541996799">முழுத் திரைக்கு வந்துவிட்டீர்கள்.</translation> <translation id="3275778913554317645">சாளரமாகத் திற</translation> +<translation id="3278877214895457897">Chromebook அமைக்கப்படும்போது, அசிஸ்டண்ட்டிடமிருந்து எந்த நேரத்திலும் உதவி பெற, அசிஸ்டண்ட் பட்டனை அழுத்தவும் அல்லது "OK Google" என்று சொல்லவும்.</translation> <translation id="3279230909244266691">இதற்குச் சில நிமிடங்கள் ஆகலாம். விர்ச்சுவல் மெஷினைத் தொடங்குகிறது.</translation> <translation id="3279741024917655738">முழுத்திரை வீடியோக்களை இதில் காட்டு</translation> <translation id="3280237271814976245">&இவ்வாறு சேமி...</translation> @@ -2604,6 +2605,7 @@ <translation id="4992066212339426712">ஒலி இயக்கு</translation> <translation id="4992458225095111526">பவர்வாஷை உறுதிப்படுத்தவும்</translation> <translation id="4992473555164495036">பயன்படுத்தக்கூடிய உள்ளீட்டு முறைகளை உங்கள் நிர்வாகி கட்டுப்படுத்தியுள்ளார்.</translation> +<translation id="4992926179187649719">'Ok Google' அம்சத்தை இயக்கவும்</translation> <translation id="4994474651455208930">நெறிமுறைகளுக்கு இயல்புநிலை ஹேண்ட்லர்களாக இருக்கும்படி கேட்க தளங்களை அனுமதி</translation> <translation id="4994754230098574403">அமைக்கிறது</translation> <translation id="4996978546172906250">இதன்வழியாக பகிர்</translation> @@ -3782,7 +3784,6 @@ <translation id="6748775883310276718">ஒற்றைப் பயன்பாடு கியோஸ்க்</translation> <translation id="6751256176799620176">1 கோப்புறை தேர்ந்தெடுக்கப்பட்டது</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (மறைநிலை)</translation> -<translation id="6751815812172740613">இந்த <ph name="DEVICE_TYPE" /> சாதனத்திலிருந்து உங்கள் Linux கோப்புறையிலுள்ள எல்லா Linux ஆப்ஸ் மற்றும் தரவை நீக்கவா?</translation> <translation id="6757101664402245801">URL நகலெடுக்கப்பட்டது</translation> <translation id="6758056191028427665">எவ்வாறு செயல்படுகிறோம் என்பதை எங்களுக்குத் தெரிவிக்கவும்.</translation> <translation id="6759193508432371551">தொழிற்சாலை மீட்டமைவு</translation> @@ -4059,7 +4060,6 @@ <ph name="BEGIN_PARAGRAPH3" />அமைப்புகள் > Google என்பதற்குச் சென்று, இந்த அம்சத்தைக் கட்டுப்படுத்தலாம். மெனுவிலிருந்து உபயோகம் & பிழை அறிக்கைகள் என்பதைத் தேர்ந்தெடுக்கவும்.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">உதவி பெறுக</translation> <translation id="7200083590239651963">உள்ளமைவைத் தேர்ந்தெடுக்கவும்</translation> -<translation id="7201014958346994077">Linux கோப்புகளைப் பார்க்க முடியவில்லை</translation> <translation id="720110658997053098">இந்தச் சாதனத்தை, கியோஸ்க் பயன்முறையில் நிரந்தரமாக வைத்திரு</translation> <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' நீக்கப்பட்டது</translation> <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> ஐப் பதிவிறக்குகிறது...</translation> @@ -4531,6 +4531,7 @@ <translation id="7908378463497120834">உங்கள் வெளிப்புற சேகரிப்பு சாதனத்தில் குறைந்தபட்சம் ஒரு பிரிவினை இருந்தாலும் அதை ஏற்ற முடியாது. மன்னிக்கவும்.</translation> <translation id="7909969815743704077">மறைநிலையில் பதிவிறக்கப்பட்டது</translation> <translation id="7910768399700579500">&புதிய கோப்புறை</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">சேவையகத்தில் உங்கள் கடவுச்சொல் மாற்றப்பட்டது. வெளியேறி, மீண்டும் உள்நுழையவும்.</translation> <translation id="7915471803647590281">மறுமொழி அனுப்புவதற்கு முன், என்ன நடந்துகொண்டிருக்கிறது என்பதை எங்களிடம் தெரியப்படுத்துங்கள்.</translation> <translation id="7916556741383518510">கிளிக் செய்யும் போது</translation> @@ -4672,7 +4673,6 @@ <translation id="8107015733319732394">உங்கள் <ph name="DEVICE_TYPE" /> இல் Google Play ஸ்டோரை நிறுவுகிறது. இதற்குச் சில நிமிடங்கள் ஆகலாம்.</translation> <translation id="8111155949205007504">இந்தக் கடவுச்சொல்லை உங்கள் iPhone உடன் பகிருங்கள்</translation> <translation id="8113043281354018522">உரிம வகையைத் தேர்வு செய்யவும்</translation> -<translation id="8116925261070264013">ஒலியடக்கியவை</translation> <translation id="8116972784401310538">&புக்மார்க் நிர்வாகி</translation> <translation id="8117620576188476503">இணைப்புகள், அறிவிப்புகள், அமைப்புகள் ஆகியவற்றை நிலைத் தட்டில் நிர்வகிக்கலாம். விசைப்பலகை மூலம் இங்கே வர, Alt, Shift, S ஆகிய விசைகளை ஒன்றாக அழுத்தவும்.</translation> <translation id="8118362518458010043">இந்த நீட்டிப்பு பாதுகாப்பற்றதாக இருக்கலாம் என்பதால் Chrome ஆல் முடக்கப்பட்டது.</translation> @@ -5131,7 +5131,6 @@ <translation id="8845001906332463065">உதவி பெறுக</translation> <translation id="8846141544112579928">விசைப்பலகையைத் தேடுகிறது...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">$1 இல் கோப்புகளைத் திறப்பதற்கு, அவற்றை முதலில் “Linux கோப்புகள்” கோப்புறைக்கு நகலெடுக்கவும்.</translation> <translation id="8859057652521303089">உங்கள் மொழியைத் தேர்ந்தெடுங்கள்:</translation> <translation id="8859174528519900719">துணைச்சட்டகம்: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel விரிதாள்</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index 5c4da4cf..bde12bf 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -685,7 +685,6 @@ <translation id="200544492091181894">మీరు దీన్ని తర్వాత ఎప్పుడైనా సెట్టింగ్లలో మార్చవచ్చు</translation> <translation id="2006638907958895361">లింక్ను <ph name="APP" />లో తెరువు</translation> <translation id="2007404777272201486">ఒక సమస్యను నివేదించండి...</translation> -<translation id="2016237810978710652">Linux ఫైల్లను తెరుస్తోంది...</translation> <translation id="2016430552235416146">సాంప్రదాయకం</translation> <translation id="2017334798163366053">పనితీరు డేటా సేకరణను నిలిపివేయి</translation> <translation id="2017836877785168846">చిరునామా బార్లో చరిత్రను మరియు స్వీయ పూరణలను క్లియర్ చేస్తుంది.</translation> @@ -3780,7 +3779,6 @@ <translation id="6748775883310276718">ఒకే యాప్ కియోస్క్</translation> <translation id="6751256176799620176">1 ఫోల్డర్ ఎంచుకోబడింది</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (అజ్ఞాతంగా)</translation> -<translation id="6751815812172740613">ఈ <ph name="DEVICE_TYPE" /> నుండి మీ Linux ఫైల్ల ఫోల్డర్లోని అన్ని Linux అప్లికేషన్లు మరియు మొత్తం డేటాను తొలగించాలా?</translation> <translation id="6757101664402245801">URL కాపీ చేయబడింది</translation> <translation id="6758056191028427665">మేము అందించే సేవలు ఎలా ఉన్నాయో మాకు తెలియజేయండి.</translation> <translation id="6759193508432371551">ఫ్యాక్టరీ రీసెట్</translation> @@ -4057,7 +4055,6 @@ <ph name="BEGIN_PARAGRAPH3" />మీరు సెట్టింగ్లు > Google నుండి ఈ ఫీచర్ని నియంత్రించవచ్చు. మెనూ నుండి వినియోగం & సమస్య విశ్లేషణలను ఎంచుకోండి.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">సహా&యం పొందండి</translation> <translation id="7200083590239651963">కాన్ఫిగరేషన్ను ఎంచుకోండి</translation> -<translation id="7201014958346994077">Linux ఫైల్లను చూడటం సాధ్యపడలేదు</translation> <translation id="720110658997053098">ఈ పరికరాన్ని శాశ్వతంగా కియోస్క్ మోడ్లో ఉంచు</translation> <translation id="7201118060536064622">'<ph name="DELETED_ITEM_NAME" />' తొలగించబడింది</translation> <translation id="7206693748120342859"><ph name="PLUGIN_NAME" />ని డౌన్లోడ్ చేస్తోంది...</translation> @@ -4668,7 +4665,6 @@ <translation id="8107015733319732394">మీ <ph name="DEVICE_TYPE" />లో Google Play స్టోర్ని ఇన్స్టాల్ చేస్తోంది. ఇందుకు కొన్ని నిమిషాలు పట్టవచ్చు.</translation> <translation id="8111155949205007504">మీ iPhoneతో ఈ పాస్వర్డ్ను భాగస్వామ్యం చేయండి</translation> <translation id="8113043281354018522">లైసెన్స్ రకాన్ని ఎంచుకోండి</translation> -<translation id="8116925261070264013">మ్యూట్ చేసినవి</translation> <translation id="8116972784401310538">&బుక్మార్క్ నిర్వాహకుడు</translation> <translation id="8117620576188476503">స్థితి ట్రేతో కనెక్షన్లు, అప్డేట్లు మరియు సెట్టింగ్లను నిర్వహించండి. కీబోర్డ్ ద్వారా ఇక్కడికి రావాలాంటే, Alt + Shift + Sని నొక్కండి.</translation> <translation id="8118362518458010043">Chrome నిలిపివేసింది. ఈ పొడిగింపు సురక్షితం కాకపోవచ్చు.</translation> @@ -5128,7 +5124,6 @@ <translation id="8845001906332463065">సహాయం పొందండి</translation> <translation id="8846141544112579928">కీబోర్డ్ కోసం శోధిస్తోంది...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">$1తో ఫైల్లను తెరవడానికి, మొదట Linux ఫైల్ల ఫోల్డర్లకు కాపీ చేయండి.</translation> <translation id="8859057652521303089">మీ భాషను ఎంచుకోండి:</translation> <translation id="8859174528519900719">సబ్ఫ్రేమ్: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel స్ప్రెడ్షీట్</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index 47cf333..74e3a31 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">การซิงค์และการปรับเปลี่ยนในแบบของคุณ</translation> <translation id="1398853756734560583">ย่อ</translation> <translation id="1399511500114202393">ไม่มีใบรับรองของผู้ใช้</translation> +<translation id="1401165786814632797">เข้าถึง Assistant ได้ทุกเมื่อเพียงพูดว่า "Ok Google" เมื่ออุปกรณ์เปิดอยู่และไม่ได้ล็อก</translation> <translation id="140250605646987970">พบโทรศัพท์ แต่Smart Lock จะทำงานบนอุปกรณ์ที่ใช้ Android 5.0 ขึ้นไปเท่านั้น <a>ดูข้อมูลเพิ่มเติม</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (อยู่ภายใต้การดูแล)</translation> <translation id="1405476660552109915">คุณต้องการให้ <ph name="PASSWORD_MANAGER_BRAND" /> บันทึกบัญชีของคุณสำหรับเว็บไซต์นี้ไหม</translation> @@ -685,7 +686,6 @@ <translation id="200544492091181894">คุณเปลี่ยนค่านี้ภายหลังได้ในการตั้งค่า</translation> <translation id="2006638907958895361">เปิดลิงก์ใน <ph name="APP" /></translation> <translation id="2007404777272201486">รายงานปัญหา...</translation> -<translation id="2016237810978710652">กำลังเปิดไฟล์ Linux...</translation> <translation id="2016430552235416146">ดั้งเดิม</translation> <translation id="2017334798163366053">ปิดใช้งานการเก็บรวบรวมข้อมูลผลการปฏิบัติงาน</translation> <translation id="2017836877785168846">ล้างประวัติการเข้าชมและการเติมข้อความอัตโนมัติในแถบที่อยู่เว็บ</translation> @@ -1370,6 +1370,7 @@ <translation id="3031557471081358569">เลือกรายการที่จะนำเข้าต่อไปนี้:</translation> <translation id="3031601332414921114">พิมพ์ต่อ</translation> <translation id="303198083543495566">ภูมิศาสตร์</translation> +<translation id="3033999583152214331">เรียกใช้เครื่องมือ ตัวแก้ไข และ IDE สำหรับ Linux ใน Chromebook <a target="_blank" href="<ph name="URL" />">ดูข้อมูลเพิ่มเติม</a></translation> <translation id="3036546437875325427">เปิดใช้ Flash</translation> <translation id="3037754279345160234">แยกวิเคราะห์การกำหนดค่าเพื่อเข้าร่วมโดเมนไม่ได้ โปรดติดต่อผู้ดูแลระบบ</translation> <translation id="3038612606416062604">เพิ่มเครื่องพิมพ์ด้วยตนเอง</translation> @@ -1510,6 +1511,7 @@ <translation id="3271648667212143903"><ph name="ORIGIN" /> ต้องการเชื่อมต่อ</translation> <translation id="3274763671541996799">คุณอยู่ในการแสดงแบบเต็มหน้าจอแล้ว</translation> <translation id="3275778913554317645">เปิดเป็นหน้าต่าง</translation> +<translation id="3278877214895457897">เมื่อตั้งค่า Chromebook แล้ว ก็กดปุ่ม Assistant หรือพูดว่า "Ok Google" เพื่อรับความช่วยเหลือจาก Assistant ได้ทุกเมื่อ</translation> <translation id="3279230909244266691">ขั้นตอนนี้อาจใช้เวลาสักครู่ กำลังเริ่มเครื่องเสมือน</translation> <translation id="3279741024917655738">เปิดวิดีโอเต็มหน้าจอใน</translation> <translation id="3280237271814976245">บันทึกใ&ห้เป็น...</translation> @@ -2603,6 +2605,7 @@ <translation id="4992066212339426712">เปิดเสียง</translation> <translation id="4992458225095111526">ยืนยัน Powerwash</translation> <translation id="4992473555164495036">ผู้ดูแลระบบจำกัดวิธีการป้อนข้อมูลที่ใช้ได้เอาไว้</translation> +<translation id="4992926179187649719">เปิด "Ok Google"</translation> <translation id="4994474651455208930">อนุญาตให้ไซต์แจ้งขอเป็นตัวจัดการเริ่มต้นสำหรับโปรโตคอล</translation> <translation id="4994754230098574403">กำลังตั้งค่า</translation> <translation id="4996978546172906250">แชร์ผ่าน</translation> @@ -3780,7 +3783,6 @@ <translation id="6748775883310276718">คีออสก์แอปเดี่ยว</translation> <translation id="6751256176799620176">เลือกไว้ 1 โฟลเดอร์</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (โหมดไม่ระบุตัวตน)</translation> -<translation id="6751815812172740613">ลบแอปพลิเคชัน Linux และข้อมูลทั้งหมดในโฟลเดอร์ "ไฟล์ Linux" ออกจาก <ph name="DEVICE_TYPE" /> นี้ไหม</translation> <translation id="6757101664402245801">คัดลอก URL แล้ว</translation> <translation id="6758056191028427665">แจ้งให้เราทราบถึงความพึงพอใจ</translation> <translation id="6759193508432371551">รีเซ็ตเป็นค่าเริ่มต้นจากโรงงาน</translation> @@ -4057,7 +4059,6 @@ <ph name="BEGIN_PARAGRAPH3" />คุณควบคุมฟีเจอร์นี้ได้จากการตั้งค่า > Google เลือก "การใช้งานและการวินิจฉัย" จากเมนู<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">รั&บความช่วยเหลือ</translation> <translation id="7200083590239651963">เลือกการกำหนดค่า</translation> -<translation id="7201014958346994077">ดูไฟล์ Linux ไม่ได้</translation> <translation id="720110658997053098">เก็บอุปกรณ์นี้ไว้ในโหมดคีออสก์อย่างถาวร</translation> <translation id="7201118060536064622">ลบ "<ph name="DELETED_ITEM_NAME" />" แล้ว</translation> <translation id="7206693748120342859">กำลังดาวน์โหลด <ph name="PLUGIN_NAME" />...</translation> @@ -4531,6 +4532,7 @@ <translation id="7908378463497120834">ขออภัย ไม่สามารถติดตั้งอย่างน้อยหนึ่งพาร์ทิชันในอุปกรณ์จัดเก็บข้อมูลภายนอกของคุณ</translation> <translation id="7909969815743704077">ดาวน์โหลดในโหมดไม่ระบุตัวตนแล้ว</translation> <translation id="7910768399700579500">โ&ฟลเดอร์ใหม่</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">มีการเปลี่ยนรหัสผ่านของคุณในเซิร์ฟเวอร์ โปรดออกจากระบบแล้วลงชื่อเข้าใช้อีกครั้ง</translation> <translation id="7915471803647590281">โปรดแจ้งให้เราทราบถึงสิ่งที่เกิดขึ้นก่อนส่งความคิดเห็น</translation> <translation id="7916556741383518510">เมื่อคลิก</translation> @@ -4672,7 +4674,6 @@ <translation id="8107015733319732394">กำลังติดตั้ง Google Play Store ใน <ph name="DEVICE_TYPE" /> อาจใช้เวลาสักครู่</translation> <translation id="8111155949205007504">แชร์รหัสผ่านนี้กับ iPhone</translation> <translation id="8113043281354018522">เลือกประเภทใบอนุญาต</translation> -<translation id="8116925261070264013">ปิดเสียง</translation> <translation id="8116972784401310538">ตั&วจัดการบุ๊กมาร์ก</translation> <translation id="8117620576188476503">จัดการการเชื่อมต่อ อัปเดต และการตั้งค่าด้วยถาดสถานะ หากต้องการมาที่นี่โดยใช้แป้นพิมพ์ ให้กด Alt + Shift + S</translation> <translation id="8118362518458010043">ปิดใช้โดย Chrome เนื่องจากส่วนขยายนี้อาจไม่ปลอดภัย</translation> @@ -5131,7 +5132,6 @@ <translation id="8845001906332463065">ขอความช่วยเหลือ</translation> <translation id="8846141544112579928">กำลังค้นหาแป้นพิมพ์...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">คัดลอกไปที่โฟลเดอร์ "ไฟล์ Linux" ก่อนจึงจะเปิดไฟล์ด้วย $1 ได้</translation> <translation id="8859057652521303089">เลือกภาษาที่ต้องการ:</translation> <translation id="8859174528519900719">เฟรมย่อย: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">สเปรดชีต Excel</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 980e1d0..3a0446b 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">Senkronizasyon ve kişiselleştirme</translation> <translation id="1398853756734560583">Büyüt</translation> <translation id="1399511500114202393">Kullanıcı sertifikası yok</translation> +<translation id="1401165786814632797">Cihazınız uyanık ve kilidi açık durumdayken "Ok Google" diyerek istediğiniz zaman Asistanınıza erişin.</translation> <translation id="140250605646987970">Telefonunuz bulundu. Ancak Smart Lock yalnızca Android 5.0 ve üzeri sürümlere sahip cihazlarda çalışır. <a>Daha fazla bilgi edinin</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (Denetlenen)</translation> <translation id="1405476660552109915">Bu siteye ait hesabınızın <ph name="PASSWORD_MANAGER_BRAND" /> tarafından kaydedilmesini ister misiniz?</translation> @@ -685,7 +686,6 @@ <translation id="200544492091181894">Bunu daha sonra ayarlarda değiştirebilirsiniz</translation> <translation id="2006638907958895361">Bağlantıyı <ph name="APP" /> uygulamasında aç</translation> <translation id="2007404777272201486">Sorun Bildirin...</translation> -<translation id="2016237810978710652">Linux Dosyaları Açılıyor...</translation> <translation id="2016430552235416146">Geleneksel</translation> <translation id="2017334798163366053">Performans verisi toplamayı devre dışı bırak</translation> <translation id="2017836877785168846">Geçmişi ve adres çubuğundaki otomatik tamamlama bilgilerini temizler.</translation> @@ -1510,6 +1510,7 @@ <translation id="3271648667212143903"><ph name="ORIGIN" /> bağlanmak istiyor</translation> <translation id="3274763671541996799">Tam ekrana geçtiniz.</translation> <translation id="3275778913554317645">Pencere olarak aç</translation> +<translation id="3278877214895457897">Chromebook'unuzu kurarken istediğiniz zaman Asistanınızdan yardım almak için Asistan düğmesine basın veya "Ok Google" deyin.</translation> <translation id="3279230909244266691">Bu işlem birkaç dakika sürebilir. Sanal makine başlatılıyor.</translation> <translation id="3279741024917655738">Tam ekran videoları şurada göster:</translation> <translation id="3280237271814976245">Farklı k&aydet...</translation> @@ -2603,6 +2604,7 @@ <translation id="4992066212339426712">Sesi aç</translation> <translation id="4992458225095111526">Powerwash'ı onaylayın</translation> <translation id="4992473555164495036">Yöneticiniz kullanılıabilir giriş yöntemlerini sınırladı.</translation> +<translation id="4992926179187649719">"Ok Google"ı aç</translation> <translation id="4994474651455208930">Sitelerin, protokoller için varsayılan işleyiciler olmasını sormasına izin ver</translation> <translation id="4994754230098574403">Ayarlanıyor</translation> <translation id="4996978546172906250">Paylaşım yöntemi:</translation> @@ -3781,7 +3783,6 @@ <translation id="6748775883310276718">Tek Uygulama Kiosk'u</translation> <translation id="6751256176799620176">1 klasör seçildi</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Gizli mod)</translation> -<translation id="6751815812172740613">Linux Dosyaları klasörünüzdeki tüm Linux uygulamaları ve verileri bu <ph name="DEVICE_TYPE" /> cihazdan silinsin mi?</translation> <translation id="6757101664402245801">URL kopyalandı</translation> <translation id="6758056191028427665">Bizimle ilgili görüşünüzü bildirin.</translation> <translation id="6759193508432371551">Fabrika ayarlarına sıfırlama</translation> @@ -4058,7 +4059,6 @@ <ph name="BEGIN_PARAGRAPH3" />Bu özelliği Ayarlar > Google bölümünden kontrol edebilirsiniz. Menüden Kullanım ve teşhis aracı seçeneğini belirleyin.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">&Yardım Al</translation> <translation id="7200083590239651963">Yapılandırmayı seçin</translation> -<translation id="7201014958346994077">Linux Dosyaları görüntülenemiyor</translation> <translation id="720110658997053098">Bu cihazı kalıcı olarak kiosk modunda tut</translation> <translation id="7201118060536064622">"<ph name="DELETED_ITEM_NAME" />" silindi</translation> <translation id="7206693748120342859"><ph name="PLUGIN_NAME" /> indiriliyor...</translation> @@ -4531,6 +4531,7 @@ <translation id="7908378463497120834">Maalesef, harici depolama cihazınızdaki en az bir bölüm eklenemedi.</translation> <translation id="7909969815743704077">Gizli modda indirildi</translation> <translation id="7910768399700579500">&Yeni klasör</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">Şifreniz sunucuda değiştirildi. Lütfen oturumu kapatıp tekrar açın.</translation> <translation id="7915471803647590281">Geri bildirimi göndermeden önce lütfen bize ne olduğunu söyleyin.</translation> <translation id="7916556741383518510">Tıklandığında</translation> @@ -4672,7 +4673,6 @@ <translation id="8107015733319732394">Google Play Store <ph name="DEVICE_TYPE" /> cihazınıza yükleniyor. Bu işlem birkaç dakika sürebilir.</translation> <translation id="8111155949205007504">Bu şifreyi iPhone'unuz ile paylaşın</translation> <translation id="8113043281354018522">Lisans türünü seçin</translation> -<translation id="8116925261070264013">Ses kapatıldı</translation> <translation id="8116972784401310538">&Yer imi yöneticisi</translation> <translation id="8117620576188476503">Durum tepsisi ile bağlantıları, güncellemeleri ve ayarları yönetin. Klavyeyle buraya ulaşmak için Alt + Üst Karakter + S tuşlarına basın.</translation> <translation id="8118362518458010043">Chrome tarafından devre dışı bırakıldı. Bu uzantı güvenli olmayabilir.</translation> @@ -5131,7 +5131,6 @@ <translation id="8845001906332463065">Yardım alın</translation> <translation id="8846141544112579928">Klavye aranıyor...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Dosyaları $1 ile açmak için öncelikle Linux Dosyaları klasörüne kopyalayın.</translation> <translation id="8859057652521303089">Dilinizi seçin:</translation> <translation id="8859174528519900719">Alt çerçeve: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel e-tablosu</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index 65d7ad9d..fb23faac 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -686,7 +686,6 @@ <translation id="200544492091181894">Це можна змінити пізніше в налаштуваннях</translation> <translation id="2006638907958895361">Відкрити посилання в додатку <ph name="APP" /></translation> <translation id="2007404777272201486">Повідомити про проблему...</translation> -<translation id="2016237810978710652">Відкриваються файли Linux…</translation> <translation id="2016430552235416146">Традиційне</translation> <translation id="2017334798163366053">Вимкнути збір даних про ефективність</translation> <translation id="2017836877785168846">Очищує історію й автозавершення в адресному рядку.</translation> @@ -3784,7 +3783,6 @@ <translation id="6748775883310276718">Термінал з одним додатком</translation> <translation id="6751256176799620176">Вибрано 1 папку</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Анонімний перегляд)</translation> -<translation id="6751815812172740613">Видалити всі додатки та дані Linux у папці "Файли Linux" на цьому пристрої <ph name="DEVICE_TYPE" />?</translation> <translation id="6757101664402245801">URL-адресу скопійовано</translation> <translation id="6758056191028427665">Поділіться з нами своїми враженнями.</translation> <translation id="6759193508432371551">Відновлення заводських налаштувань</translation> @@ -4061,7 +4059,6 @@ <ph name="BEGIN_PARAGRAPH3" />Ви можете керувати цією функцією в меню "Налаштування" > Google. Виберіть у меню опцію "Використання та діагностика".<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Довідка</translation> <translation id="7200083590239651963">Виберіть налаштування</translation> -<translation id="7201014958346994077">Не вдалося переглянути файли Linux</translation> <translation id="720110658997053098">Назавжди перевести цей пристрій у режим термінала</translation> <translation id="7201118060536064622">Елемент "<ph name="DELETED_ITEM_NAME" />" видалено</translation> <translation id="7206693748120342859">Завантаження плагіна <ph name="PLUGIN_NAME" />...</translation> @@ -4677,7 +4674,6 @@ <translation id="8107015733319732394">Встановлення додатка Google Play Store на ваш <ph name="DEVICE_TYPE" />. Це може зайняти кілька хвилин.</translation> <translation id="8111155949205007504">Надішліть цей пароль на пристрій iPhone</translation> <translation id="8113043281354018522">Виберіть тип ліцензії</translation> -<translation id="8116925261070264013">Звук вимкнено</translation> <translation id="8116972784401310538">&Диспетчер закладок</translation> <translation id="8117620576188476503">Керуйте з’єднаннями, оновленнями та налаштуваннями за допомогою панелі статусу. Щоб відкрити панель статусу з клавіатури, натисніть Alt+Shift+S.</translation> <translation id="8118362518458010043">Розширення вимкнено, оскільки воно може бути небезпечним.</translation> @@ -5136,7 +5132,6 @@ <translation id="8845001906332463065">Отримати довідку</translation> <translation id="8846141544112579928">Пошук клавіатури…</translation> <translation id="8847988622838149491">Сповіщення щодо USB</translation> -<translation id="885217322790849332">Щоб відкривати файли за допомогою додатка $1, спершу скопіюйте їх у папку "Файли Linux".</translation> <translation id="8859057652521303089">Виберіть мову:</translation> <translation id="8859174528519900719">Додатковий фрейм: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Таблиця Excel</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 3fe04e1..f71528fb9 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">Đồng bộ hóa và cá nhân hóa</translation> <translation id="1398853756734560583">Phóng to</translation> <translation id="1399511500114202393">Không có chứng chỉ người dùng</translation> +<translation id="1401165786814632797">Khi thiết bị đang ở chế độ bật và mở khóa, nói "Ok Google" bất cứ lúc nào để sử dụng Trợ lý.</translation> <translation id="140250605646987970">Đã phát hiện thấy điện thoại của bạn. Nhưng Smart Lock chỉ hoạt động trên các thiết bị chạy Android 5.0 trở lên. <a>Tìm hiểu thêm</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (Được giám sát)</translation> <translation id="1405476660552109915">Bạn có muốn <ph name="PASSWORD_MANAGER_BRAND" /> lưu tài khoản của mình cho trang web này không?</translation> @@ -685,7 +686,6 @@ <translation id="200544492091181894">Bạn luôn có thể thay đổi tùy chọn này trong mục cài đặt</translation> <translation id="2006638907958895361">Mở liên kết trong <ph name="APP" /></translation> <translation id="2007404777272201486">Báo cáo sự cố...</translation> -<translation id="2016237810978710652">Đang mở tệp Linux...</translation> <translation id="2016430552235416146">Truyền thống</translation> <translation id="2017334798163366053">Tắt tính năng thu thập dữ liệu hoạt động</translation> <translation id="2017836877785168846">Xóa lịch sử và tự động hoàn thành trong thanh địa chỉ.</translation> @@ -1370,6 +1370,7 @@ <translation id="3031557471081358569">Chọn các mục cần nhập:</translation> <translation id="3031601332414921114">Tiếp tục in</translation> <translation id="303198083543495566">Địa lý</translation> +<translation id="3033999583152214331">Chạy các công cụ, trình chỉnh sửa và môi trường phát triển được tích hợp (IDE) của Linux trên Chromebook của bạn. <a target="_blank" href="<ph name="URL" />">Tìm hiểu thêm</a></translation> <translation id="3036546437875325427">Bật Flash</translation> <translation id="3037754279345160234">Không thể phân tích cú pháp cấu hình để tham gia miền. Vui lòng liên hệ với quản trị viên của bạn.</translation> <translation id="3038612606416062604">Thêm máy in theo cách thủ công</translation> @@ -1510,6 +1511,7 @@ <translation id="3271648667212143903"><ph name="ORIGIN" /> muốn kết nối</translation> <translation id="3274763671541996799">Bạn đang ở chế độ toàn màn hình.</translation> <translation id="3275778913554317645">Mở dưới dạng cửa sổ</translation> +<translation id="3278877214895457897">Khi thiết lập xong Chromebook, hãy nhấn nút Trợ lý hoặc nói "Ok Google" để nhận trợ giúp từ Trợ lý bất cứ lúc nào.</translation> <translation id="3279230909244266691">Quá trình này có thể mất vài phút. Đang khởi động máy ảo.</translation> <translation id="3279741024917655738">Hiển thị video ở chế độ toàn màn hình trên</translation> <translation id="3280237271814976245">Lưu &thành...</translation> @@ -2603,6 +2605,7 @@ <translation id="4992066212339426712">Bật âm thanh</translation> <translation id="4992458225095111526">Xác nhận Powerwash</translation> <translation id="4992473555164495036">Quản trị viên của bạn đã giới hạn các phương thức nhập có sẵn.</translation> +<translation id="4992926179187649719">Bật 'Ok Google'</translation> <translation id="4994474651455208930">Cho phép các trang web yêu cầu trở thành trình xử lý mặc định cho giao thức</translation> <translation id="4994754230098574403">Đang thiết lập</translation> <translation id="4996978546172906250">Chia sẻ qua</translation> @@ -3780,7 +3783,6 @@ <translation id="6748775883310276718">Kiosk ứng dụng đơn</translation> <translation id="6751256176799620176">Đã chọn 1 thư mục</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (Ẩn danh)</translation> -<translation id="6751815812172740613">Bạn muốn xóa tất cả các ứng dụng Linux và dữ liệu trong thư mục Tệp Linux của mình khỏi <ph name="DEVICE_TYPE" /> này?</translation> <translation id="6757101664402245801">Đã sao chép URL</translation> <translation id="6758056191028427665">Hãy cho chúng tôi biết ý kiến của bạn về dịch vụ của chúng tôi.</translation> <translation id="6759193508432371551">Khôi phục cài đặt gốc</translation> @@ -4057,7 +4059,6 @@ <ph name="BEGIN_PARAGRAPH3" />Bạn có thể kiểm soát tính năng này trong phần Cài đặt > Google. Sau đó, chọn Sử dụng và chẩn đoán từ menu này.<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">Nhận &trợ giúp</translation> <translation id="7200083590239651963">Chọn cấu hình</translation> -<translation id="7201014958346994077">Không thể xem tệp Linux</translation> <translation id="720110658997053098">Vĩnh viễn giữ thiết bị này ở chế độ kiosk</translation> <translation id="7201118060536064622">Đã xóa '<ph name="DELETED_ITEM_NAME" />'</translation> <translation id="7206693748120342859">Đang tải xuống <ph name="PLUGIN_NAME" />...</translation> @@ -4531,6 +4532,7 @@ <translation id="7908378463497120834">Rất tiếc, ít nhất một phân vùng trên thiết bị lưu trữ bên ngoài của bạn không thể kết nối được.</translation> <translation id="7909969815743704077">Đã tải xuống ở chế độ Ẩn danh</translation> <translation id="7910768399700579500">&Thư mục mới</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">Đã thay đổi mật khẩu của bạn trên máy chủ. Vui lòng đăng xuất rồi đăng nhập lại.</translation> <translation id="7915471803647590281">Vui lòng cho chúng tôi biết điều đang xảy ra trước khi gửi phản hồi.</translation> <translation id="7916556741383518510">Khi nhấp chuột</translation> @@ -4672,7 +4674,6 @@ <translation id="8107015733319732394">Đang cài đặt Cửa hàng Google Play trên <ph name="DEVICE_TYPE" /> của bạn. Quá trình này có thể mất vài phút.</translation> <translation id="8111155949205007504">Chia sẻ mật khẩu này với iPhone của bạn</translation> <translation id="8113043281354018522">Chọn loại giấy phép</translation> -<translation id="8116925261070264013">Đã ẩn</translation> <translation id="8116972784401310538">&Trình quản lý dấu trang</translation> <translation id="8117620576188476503">Quản lý các kết nối, bản cập nhật và cài đặt bằng khay trạng thái. Để truy cập vào đây bằng bàn phím, hãy nhấn tổ hợp phím Alt + Shift + S.</translation> <translation id="8118362518458010043">Đã bị Chrome vô hiệu hóa. Tiện ích này có thể không an toàn.</translation> @@ -5131,7 +5132,6 @@ <translation id="8845001906332463065">Nhận trợ giúp</translation> <translation id="8846141544112579928">Đang tìm kiếm bàn phím...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">Để mở tệp bằng $1, trước tiên, hãy sao chép sang thư mục Tệp Linux.</translation> <translation id="8859057652521303089">Chọn ngôn ngữ:</translation> <translation id="8859174528519900719">Khung phụ: <ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Bảng tính Excel</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index 8cf9093..85703dc 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">同步和个性化</translation> <translation id="1398853756734560583">最大化</translation> <translation id="1399511500114202393">不使用任何用户证书</translation> +<translation id="1401165786814632797">当设备处于唤醒状态且已解锁时,您可以随时访问自己的 Google 助理,只需说“Ok Google”即可。</translation> <translation id="140250605646987970">已找到您的手机,但 Smart Lock 仅适用于运行 Android 5.0 或更高版本的设备。<a>了解详情</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" />(受监管用户)</translation> <translation id="1405476660552109915">您希望 <ph name="PASSWORD_MANAGER_BRAND" /> 保存您在此网站上使用的帐号吗?</translation> @@ -509,7 +510,7 @@ <translation id="1744060673522309905">无法将此设备加入到该网域中。请确保您未超出可添加的设备数量上限。</translation> <translation id="1744108098763830590">背景页</translation> <translation id="1745520510852184940">一律进行此翻译</translation> -<translation id="1746417874336251387">提供将手机与 Chromebook 连接便能使用的新功能</translation> +<translation id="1746417874336251387">提供可在手机与 Chromebook 连接后使用的新功能</translation> <translation id="174937106936716857">文件总数</translation> <translation id="175196451752279553">重新打开关闭的标签页(&E)</translation> <translation id="1753905327828125965">常去网站</translation> @@ -682,7 +683,6 @@ <translation id="200544492091181894">以后,您随时可在“设置”中更改此设置</translation> <translation id="2006638907958895361">在<ph name="APP" />中打开链接</translation> <translation id="2007404777272201486">报告问题...</translation> -<translation id="2016237810978710652">正在打开 Linux 文件…</translation> <translation id="2016430552235416146">传统</translation> <translation id="2017334798163366053">停用性能数据收集</translation> <translation id="2017836877785168846">清除历史记录和地址栏中的自动填充项。</translation> @@ -1507,6 +1507,7 @@ <translation id="3271648667212143903"><ph name="ORIGIN" /> 希望连接到以下所选设备:</translation> <translation id="3274763671541996799">您已进入全屏模式。</translation> <translation id="3275778913554317645">在窗口中打开</translation> +<translation id="3278877214895457897">设置完 Chromebook 后,您只需按 Google 助理按钮或说出“Ok Google”,便可随时获得 Google 助理的帮助。</translation> <translation id="3279230909244266691">此过程可能需要几分钟的时间。正在启动虚拟机。</translation> <translation id="3279741024917655738">在以下屏幕显示全屏视频</translation> <translation id="3280237271814976245">另存为(&A)...</translation> @@ -2270,7 +2271,7 @@ <translation id="4481530544597605423">未配对的设备</translation> <translation id="4482194545587547824">Google 可能会使用您的浏览记录对 Google 搜索和其他 Google 服务进行个性化设置</translation> <translation id="4495419450179050807">不要在本页上显示</translation> -<translation id="4499718683476608392">启用信用卡自动填充功能后,只需点击一次即可填写多个表单</translation> +<translation id="4499718683476608392">启用信用卡自动填充功能后,只需点击一次即可填写表单</translation> <translation id="4500114933761911433">“<ph name="PLUGIN_NAME" />”崩溃了</translation> <translation id="450099669180426158">感叹号图标</translation> <translation id="4501530680793980440">确认删除</translation> @@ -2597,6 +2598,7 @@ <translation id="4992066212339426712">取消静音</translation> <translation id="4992458225095111526">确认 Powerwash 操作</translation> <translation id="4992473555164495036">您的管理员限制了可用的输入法。</translation> +<translation id="4992926179187649719">开启“Ok Google”</translation> <translation id="4994474651455208930">允许网站要求成为协议的默认处理程序</translation> <translation id="4994754230098574403">正在设置</translation> <translation id="4996978546172906250">分享方式</translation> @@ -3767,7 +3769,6 @@ <translation id="6748775883310276718">单个应用自助服务终端</translation> <translation id="6751256176799620176">已选择 1 个文件夹</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" />(隐身)</translation> -<translation id="6751815812172740613">要从这部 <ph name="DEVICE_TYPE" /> 中删除您“Linux 文件”文件夹中的所有 Linux 应用和数据吗?</translation> <translation id="6757101664402245801">网址已复制</translation> <translation id="6758056191028427665">让我们知道您的满意度。</translation> <translation id="6759193508432371551">恢复出厂设置</translation> @@ -4044,7 +4045,6 @@ <ph name="BEGIN_PARAGRAPH3" />要想控制此功能,请依次转到“设置”>“Google”,并从菜单中选择“使用情况和诊断信息”。<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">获取帮助(&E)</translation> <translation id="7200083590239651963">选择配置</translation> -<translation id="7201014958346994077">无法查看 Linux 文件</translation> <translation id="720110658997053098">让此设备永久处于自助服务终端模式</translation> <translation id="7201118060536064622">已删除“<ph name="DELETED_ITEM_NAME" />”</translation> <translation id="7206693748120342859">正在下载 <ph name="PLUGIN_NAME" />...</translation> @@ -4516,6 +4516,7 @@ <translation id="7908378463497120834">抱歉,您的外部存储设备上至少有一个分区无法加载。</translation> <translation id="7909969815743704077">已在隐身模式下进行下载</translation> <translation id="7910768399700579500">新建文件夹(&N)</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">您已在服务器上更改密码。请先退出,然后重新登录。</translation> <translation id="7915471803647590281">请先告诉我们所发生的情况,然后再发送反馈。</translation> <translation id="7916556741383518510">点击时</translation> @@ -4657,7 +4658,6 @@ <translation id="8107015733319732394">正在在您的 <ph name="DEVICE_TYPE" /> 上安装 Google Play 商店。这可能需要几分钟的时间。</translation> <translation id="8111155949205007504">将此密码发送到您的 iPhone</translation> <translation id="8113043281354018522">选择许可类型</translation> -<translation id="8116925261070264013">已静音的网站</translation> <translation id="8116972784401310538">书签管理器(&B)</translation> <translation id="8117620576188476503">使用状态栏管理连接、更新和设置。若要通过键盘访问这些内容,请按 Alt + Shift + S 组合键。</translation> <translation id="8118362518458010043">已被 Chrome 停用。此扩展程序可能不安全。</translation> @@ -5116,7 +5116,6 @@ <translation id="8845001906332463065">获取帮助</translation> <translation id="8846141544112579928">正在搜索键盘…</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">要使用$1打开文件,请先将文件复制到“Linux 文件”文件夹。</translation> <translation id="8859057652521303089">选择语言:</translation> <translation id="8859174528519900719">辅助框架:<ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel 电子表格</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 4d42e178..943f313 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -271,6 +271,7 @@ <translation id="1397854323885047133">同步處理和個人化</translation> <translation id="1398853756734560583">放到最大</translation> <translation id="1399511500114202393">不使用使用者憑證</translation> +<translation id="1401165786814632797">在裝置已喚醒並解鎖的狀態下,只要說出「Ok Google」,就能隨時存取 Google 助理。</translation> <translation id="140250605646987970">找到您的手機,但 Smart Lock 僅適用於搭載 Android 5.0 以上版本的裝置。<a>瞭解詳情</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (受監管)</translation> <translation id="1405476660552109915">您要讓 <ph name="PASSWORD_MANAGER_BRAND" /> 儲存您在這個網站使用的帳戶嗎?</translation> @@ -685,7 +686,6 @@ <translation id="200544492091181894">日後你隨時可以在設定中進行變更</translation> <translation id="2006638907958895361">在「<ph name="APP" />」中開啟連結</translation> <translation id="2007404777272201486">回報問題...</translation> -<translation id="2016237810978710652">正在開啟 Linux 檔案...</translation> <translation id="2016430552235416146">傳統</translation> <translation id="2017334798163366053">停用效能資料收集</translation> <translation id="2017836877785168846">將歷史記錄和自動即時查詢從網址列中清除。</translation> @@ -1510,6 +1510,7 @@ <translation id="3271648667212143903"><ph name="ORIGIN" /> 要求連線</translation> <translation id="3274763671541996799">你已進入全螢幕模式。</translation> <translation id="3275778913554317645">在視窗中開啟</translation> +<translation id="3278877214895457897">Chromebook 設定完成後,只要按下 Google 助理按鈕或說出「Ok Google」,就能隨時向你的 Google 助理下達指令。</translation> <translation id="3279230909244266691">正在啟動虛擬機器,過程可能需要幾分鐘。</translation> <translation id="3279741024917655738">在以下位置顯示全螢幕影片</translation> <translation id="3280237271814976245">另存新檔(&A)...</translation> @@ -2602,6 +2603,7 @@ <translation id="4992066212339426712">取消靜音</translation> <translation id="4992458225095111526">確認執行 Powerwash</translation> <translation id="4992473555164495036">你的管理員對可用的輸入法設定了限制。</translation> +<translation id="4992926179187649719">開啟「Ok Google」功能</translation> <translation id="4994474651455208930">允許網站要求成為通訊協定的預設處理常式</translation> <translation id="4994754230098574403">設定中</translation> <translation id="4996978546172906250">分享方式:</translation> @@ -3777,7 +3779,6 @@ <translation id="6748775883310276718">單一應用程式資訊站</translation> <translation id="6751256176799620176">已選取 1 個資料夾</translation> <translation id="6751344591405861699"><ph name="WINDOW_TITLE" /> (無痕模式)</translation> -<translation id="6751815812172740613">要將所有 Linux 應用程式和「Linux 檔案」資料夾中的資料從這部 <ph name="DEVICE_TYPE" /> 上刪除嗎?</translation> <translation id="6757101664402245801">已複製網址</translation> <translation id="6758056191028427665">請讓我們瞭解你的滿意度。</translation> <translation id="6759193508432371551">恢復原廠設定</translation> @@ -4054,7 +4055,6 @@ <ph name="BEGIN_PARAGRAPH3" />如要管理這項功能,請依序前往 [設定] > [Google],然後從選單中選取 [使用情形與診斷資訊]。<ph name="END_PARAGRAPH3" /></translation> <translation id="7199158086730159431">取得說明(&E)</translation> <translation id="7200083590239651963">選取設定</translation> -<translation id="7201014958346994077">無法查看 Linux 檔案</translation> <translation id="720110658997053098">讓裝置永久使用 Kiosk 模式</translation> <translation id="7201118060536064622">已刪除「<ph name="DELETED_ITEM_NAME" />」</translation> <translation id="7206693748120342859">正在下載 <ph name="PLUGIN_NAME" />...</translation> @@ -4527,6 +4527,7 @@ <translation id="7908378463497120834">很抱歉,你的外部儲存裝置上至少有一個分割區無法掛載。</translation> <translation id="7909969815743704077">已在無痕模式中下載</translation> <translation id="7910768399700579500">新增資料夾(&N)</translation> +<translation id="7911118814695487383">Linux</translation> <translation id="7912080627461681647">伺服器上的密碼已變更。請先登出然後重新登入。</translation> <translation id="7915471803647590281">請將發生的狀況告訴我們,然後再提供意見。</translation> <translation id="7916556741383518510">點擊時</translation> @@ -4668,7 +4669,6 @@ <translation id="8107015733319732394">正在為 <ph name="DEVICE_TYPE" /> 安裝 Google Play 商店。這可能需要幾分鐘時間。</translation> <translation id="8111155949205007504">透過 iPhone 分享這個密碼</translation> <translation id="8113043281354018522">選擇授權類型</translation> -<translation id="8116925261070264013">已設為靜音</translation> <translation id="8116972784401310538">書籤管理員(&B)</translation> <translation id="8117620576188476503">透過狀態匣管理連線、更新和設定。如要使用鍵盤開啟這個畫面,請按下 Alt + Shift + S 鍵。</translation> <translation id="8118362518458010043">這個擴充功能可能不安全,因此遭到 Chrome 停用。</translation> @@ -5127,7 +5127,6 @@ <translation id="8845001906332463065">尋求協助</translation> <translation id="8846141544112579928">正在搜尋鍵盤...</translation> <translation id="8847988622838149491">USB</translation> -<translation id="885217322790849332">如要使用「$1」開啟檔案,請先將檔案複製到「Linux 檔案」資料夾。</translation> <translation id="8859057652521303089">選擇語言:</translation> <translation id="8859174528519900719">子頁框:<ph name="SUBFRAME_SITE" /></translation> <translation id="8860454412039442620">Excel 試算表</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ar.xtb b/chrome/app/resources/google_chrome_strings_ar.xtb index 5da44dc..a737ce9 100644 --- a/chrome/app/resources/google_chrome_strings_ar.xtb +++ b/chrome/app/resources/google_chrome_strings_ar.xtb
@@ -13,7 +13,7 @@ <translation id="123620459398936149">تعذر على نظام التشغيل Chrome مزامنة البيانات. يُرجى تحديث عبارة مرور المزامنة.</translation> <translation id="127345590676626841">يجري تحديث Chrome تلقائيًا بحيث يكون لديك أحدث إصدار. عند اكتمال هذا التحميل، ستتم إعادة تشغيل Chrome وستبدأ العمل.</translation> <translation id="1302523850133262269">يُرجى الانتظار لحين تثبيت Chrome لآخر تحديثات النظام.</translation> -<translation id="1312676208694947750">{0,plural, =0{هناك تحديث متاح لنظام التشغيل Chrome}=1{هناك تحديث واحد متاح لنظام التشغيل Chrome}two{هناك تحديث متاح لنظام التشغيل Chrome منذ يومين (#)}few{هناك تحديث متاح لنظام التشغيل Chrome منذ # أيام}many{هناك تحديث متاح لنظام التشغيل Chrome منذ # يومًا}other{هناك تحديث متاح لنظام التشغيل Chrome منذ # يوم}}</translation> +<translation id="1312676208694947750">{0,plural, =0{يتوفر تحديث لنظام التشغيل Chrome}=1{يتوفر تحديث واحد لنظام التشغيل Chrome}two{يتوفر تحديث لنظام التشغيل Chrome منذ يومين (#)}few{يتوفر تحديث لنظام التشغيل Chrome منذ # أيام}many{يتوفر تحديث لنظام التشغيل Chrome منذ # يومًا}other{يتوفر تحديث لنظام التشغيل Chrome منذ # يوم}}</translation> <translation id="137466361146087520">الإصدار التجريبي من Google Chrome</translation> <translation id="1393853151966637042">الحصول على مساعدة بشأن استخدام Chrome</translation> <translation id="1399397803214730675">يحتوي جهاز الكمبيوتر هذا على نسخة أحدث من Google Chrome. إذا كان برنامج Google Chrome لا يعمل، فالرجاء إزالة Google Chrome وإعادة المحاولة.</translation> @@ -32,7 +32,7 @@ <ph name="USER_DATA_DIRECTORY" /></translation> <translation id="1698376642261615901">إن Google Chrome هو متصفح ويب يشغّل صفحات الويب والتطبيقات بسرعة خاطفة. فهذا المتصفح سريع ويتميز بالثبات وسهولة الاستخدام، ويمكنك من خلاله تصفح الويب بقدر أكبر من الأمان من خلال وجود حماية مضمنة داخله ضد البرامج الضارة والتصيّد.</translation> <translation id="1718131156967340976">تحديد <ph name="SMALL_PRODUCT_LOGO" /> <ph name="BEGIN_BOLD" />Google Chrome<ph name="END_BOLD" /></translation> -<translation id="1734234790201236882">سيحفظ Chrome كلمة المرور هذه في حسابك على Google. ولن تحتاج إلى تذكُّرها.</translation> +<translation id="1734234790201236882">سيحفظ Chrome كلمة المرور هذه في حسابك على Google ولن تحتاج إلى تذكُّرها.</translation> <translation id="174539241580958092">تعذر على Google Chrome مزامنة البيانات نظرًا لوجود خطأ في تسجيل الدخول.</translation> <translation id="1759842336958782510">Chrome</translation> <translation id="1773601347087397504">الحصول على مساعدة بشأن استخدام نظام التشغيل Chrome</translation> @@ -207,7 +207,7 @@ <translation id="683440813066116847">قاعدة الوارد إلى Google Chrome Canary للسماح بحركة مرور mDNS.</translation> <translation id="686561893457936865">إمكانية استخدام Chrome في كل مكان</translation> <translation id="6885412569789873916">تطبيقات الإصدار التجريبي من Chrome</translation> -<translation id="6964107240822114422">{0,plural, =0{هناك تحديث متاح لـ Chrome}=1{هناك تحديث واحد متاح لـ Chrome}two{هناك تحديث متاح لـ Chrome منذ يومين (#)}few{هناك تحديث متاح لـ Chrome منذ # أيام}many{هناك تحديث متاح لـ Chrome منذ # يومًا}other{هناك تحديث متاح لـ Chrome منذ # يوم}}</translation> +<translation id="6964107240822114422">{0,plural, =0{يتوفر تحديث لـ Chrome}=1{يتوفر تحديث واحد لـ Chrome}two{يتوفر تحديث لـ Chrome منذ يومين (#)}few{يتوفر تحديث لـ Chrome منذ # أيام}many{يتوفر تحديث لـ Chrome منذ # يومًا}other{يتوفر تحديث لـ Chrome منذ # يوم}}</translation> <translation id="6967962315388095737">قاعدة الوارد إلى الإصدار التجريبي من Google Chrome للسماح بحركة مرور mDNS.</translation> <translation id="6970811910055250180">جارٍ تحديث الجهاز...</translation> <translation id="6982337800632491844"><ph name="DOMAIN" /> يتطلب قراءة وقبول بنود الخدمة التالية قبل استخدام هذا الجهاز. وهذه البنود لا توسع أو تعدّل أو تقيّد بنود نظام التشغيل Google Chrome.</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index aa3449df..8a3799c 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -1201,6 +1201,7 @@ "previews/previews_lite_page_decider.h", "previews/previews_lite_page_navigation_throttle.cc", "previews/previews_lite_page_navigation_throttle.h", + "previews/previews_lite_page_navigation_throttle_manager.h", "previews/previews_service.cc", "previews/previews_service.h", "previews/previews_service_factory.cc", @@ -2100,6 +2101,11 @@ "android/explore_sites/explore_sites_bridge.h", "android/explore_sites/explore_sites_feature.cc", "android/explore_sites/explore_sites_feature.h", + "android/explore_sites/explore_sites_service.h", + "android/explore_sites/explore_sites_service_factory.cc", + "android/explore_sites/explore_sites_service_factory.h", + "android/explore_sites/explore_sites_service_impl.cc", + "android/explore_sites/explore_sites_service_impl.h", "android/explore_sites/ntp_json_fetcher.cc", "android/explore_sites/ntp_json_fetcher.h", "android/explore_sites/url_util.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 15560b2..0d3bdea 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -1215,6 +1215,19 @@ {"Experimental", &kExploreSitesExperimental, 1, nullptr}}; #endif // defined(OS_ANDROID) +const FeatureEntry::FeatureParam + kAutofillCreditCardLocalCardMigrationWithoutSettingsPage[] = { + {autofill::kAutofillCreditCardLocalCardMigrationParameterName, + autofill:: + kAutofillCreditCardLocalCardMigrationParameterWithoutSettingsPage}}; + +const FeatureEntry::FeatureVariation + kAutofillCreditCardLocalCardMigrationVariations[] = { + {"(without settings page)", + kAutofillCreditCardLocalCardMigrationWithoutSettingsPage, + base::size(kAutofillCreditCardLocalCardMigrationWithoutSettingsPage), + nullptr}}; + // RECORDING USER METRICS FOR FLAGS: // ----------------------------------------------------------------------------- // The first line of the entry is the internal name. @@ -2861,6 +2874,10 @@ flag_descriptions::kUseSurfaceLayerForVideoName, flag_descriptions::kUseSurfaceLayerForVideoDescription, kOsAll, FEATURE_VALUE_TYPE(media::kUseSurfaceLayerForVideo)}, + {"enable-surfaces-for-videos-ms", + flag_descriptions::kUseSurfaceLayerForVideoMSName, + flag_descriptions::kUseSurfaceLayerForVideoMSDescription, kOsAll, + FEATURE_VALUE_TYPE(media::kUseSurfaceLayerForVideoMS)}, #if defined(OS_CHROMEOS) {"quick-unlock-pin", flag_descriptions::kQuickUnlockPinName, flag_descriptions::kQuickUnlockPinDescription, kOsCrOS, @@ -2981,7 +2998,10 @@ flag_descriptions::kEnableAutofillCreditCardLocalCardMigrationName, flag_descriptions::kEnableAutofillCreditCardLocalCardMigrationDescription, kOsDesktop, - FEATURE_VALUE_TYPE(autofill::kAutofillCreditCardLocalCardMigration)}, + FEATURE_WITH_PARAMS_VALUE_TYPE( + autofill::kAutofillCreditCardLocalCardMigration, + kAutofillCreditCardLocalCardMigrationVariations, + "AutofillLocalCardMigration")}, {"enable-autofill-credit-card-upload-editable-cardholder-name", flag_descriptions:: kEnableAutofillCreditCardUploadEditableCardholderNameName, @@ -3921,6 +3941,11 @@ flag_descriptions::kEnableLayoutNGDescription, kOsAll, FEATURE_VALUE_TYPE(blink::features::kLayoutNG)}, + {"enable-lazy-image-loading", + flag_descriptions::kEnableLazyImageLoadingName, + flag_descriptions::kEnableLazyImageLoadingDescription, kOsAll, + FEATURE_VALUE_TYPE(features::kLazyImageLoading)}, + {"enable-lazy-frame-loading", flag_descriptions::kEnableLazyFrameLoadingName, flag_descriptions::kEnableLazyFrameLoadingDescription, kOsAll, @@ -4227,6 +4252,11 @@ SINGLE_VALUE_TYPE(chromeos::switches::kEnableChromevoxDeveloperOption)}, #endif + {"sync-USS-autofill-wallet-data", + flag_descriptions::kSyncUSSAutofillWalletDataName, + flag_descriptions::kSyncUSSAutofillWalletDataDescription, kOsAll, + FEATURE_VALUE_TYPE(switches::kSyncUSSAutofillWalletData)}, + // NOTE: Adding a new flag requires adding a corresponding entry to enum // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag // Histograms" in tools/metrics/histograms/README.md (run the
diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc index 8f85ee9..562fa8a0 100644 --- a/chrome/browser/android/chrome_feature_list.cc +++ b/chrome/browser/android/chrome_feature_list.cc
@@ -401,7 +401,7 @@ base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kTabModalJsDialog{"TabModalJsDialog", - base::FEATURE_DISABLED_BY_DEFAULT}; + base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kTabReparenting{"TabReparenting", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/chrome/browser/android/explore_sites/explore_sites_service.h b/chrome/browser/android/explore_sites/explore_sites_service.h new file mode 100644 index 0000000..32da523b --- /dev/null +++ b/chrome/browser/android/explore_sites/explore_sites_service.h
@@ -0,0 +1,21 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_ANDROID_EXPLORE_SITES_EXPLORE_SITES_SERVICE_H_ +#define CHROME_BROWSER_ANDROID_EXPLORE_SITES_EXPLORE_SITES_SERVICE_H_ + +#include "components/keyed_service/core/keyed_service.h" + +namespace explore_sites { + +// Main class and entry point for the Explore Sites feature, that +// controls the lifetime of all major subcomponents. +class ExploreSitesService : public KeyedService { + public: + ~ExploreSitesService() override = default; +}; + +} // namespace explore_sites + +#endif // CHROME_BROWSER_ANDROID_EXPLORE_SITES_EXPLORE_SITES_SERVICE_H_
diff --git a/chrome/browser/android/explore_sites/explore_sites_service_factory.cc b/chrome/browser/android/explore_sites/explore_sites_service_factory.cc new file mode 100644 index 0000000..d23d3574 --- /dev/null +++ b/chrome/browser/android/explore_sites/explore_sites_service_factory.cc
@@ -0,0 +1,42 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/android/explore_sites/explore_sites_service_factory.h" + +#include <memory> +#include <utility> + +#include "base/memory/singleton.h" + +#include "chrome/browser/android/explore_sites/explore_sites_service.h" +#include "chrome/browser/android/explore_sites/explore_sites_service_impl.h" +#include "chrome/browser/profiles/profile.h" +#include "components/keyed_service/content/browser_context_dependency_manager.h" +#include "content/public/browser/browser_context.h" + +namespace explore_sites { + +ExploreSitesServiceFactory::ExploreSitesServiceFactory() + : BrowserContextKeyedServiceFactory( + "ExploreSitesService", + BrowserContextDependencyManager::GetInstance()) {} + +// static +ExploreSitesServiceFactory* ExploreSitesServiceFactory::GetInstance() { + return base::Singleton<ExploreSitesServiceFactory>::get(); +} + +// static +ExploreSitesService* ExploreSitesServiceFactory::GetForBrowserContext( + content::BrowserContext* context) { + return static_cast<ExploreSitesService*>( + GetInstance()->GetServiceForBrowserContext(context, true)); +} + +KeyedService* ExploreSitesServiceFactory::BuildServiceInstanceFor( + content::BrowserContext* context) const { + return new ExploreSitesServiceImpl(); +} + +} // namespace explore_sites
diff --git a/chrome/browser/android/explore_sites/explore_sites_service_factory.h b/chrome/browser/android/explore_sites/explore_sites_service_factory.h new file mode 100644 index 0000000..01d5aa1 --- /dev/null +++ b/chrome/browser/android/explore_sites/explore_sites_service_factory.h
@@ -0,0 +1,42 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_ANDROID_EXPLORE_SITES_EXPLORE_SITES_SERVICE_FACTORY_H_ +#define CHROME_BROWSER_ANDROID_EXPLORE_SITES_EXPLORE_SITES_SERVICE_FACTORY_H_ + +#include "base/macros.h" +#include "chrome/browser/android/explore_sites/explore_sites_service.h" +#include "components/keyed_service/content/browser_context_keyed_service_factory.h" + +namespace base { +template <typename T> +struct DefaultSingletonTraits; +} // namespace base + +namespace explore_sites { + +class ExploreSitesService; + +// A factory to create one ExploreSitesServiceImpl per browser context. +class ExploreSitesServiceFactory : public BrowserContextKeyedServiceFactory { + public: + static ExploreSitesServiceFactory* GetInstance(); + static ExploreSitesService* GetForBrowserContext( + content::BrowserContext* context); + + private: + friend struct base::DefaultSingletonTraits<ExploreSitesServiceFactory>; + + ExploreSitesServiceFactory(); + ~ExploreSitesServiceFactory() override {} + + KeyedService* BuildServiceInstanceFor( + content::BrowserContext* context) const override; + + DISALLOW_COPY_AND_ASSIGN(ExploreSitesServiceFactory); +}; + +} // namespace explore_sites + +#endif // CHROME_BROWSER_ANDROID_EXPLORE_SITES_EXPLORE_SITES_SERVICE_FACTORY_H_
diff --git a/chrome/browser/android/explore_sites/explore_sites_service_impl.cc b/chrome/browser/android/explore_sites/explore_sites_service_impl.cc new file mode 100644 index 0000000..a4c1f08f --- /dev/null +++ b/chrome/browser/android/explore_sites/explore_sites_service_impl.cc
@@ -0,0 +1,15 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/android/explore_sites/explore_sites_service_impl.h" + +namespace explore_sites { + +ExploreSitesServiceImpl::ExploreSitesServiceImpl() {} + +ExploreSitesServiceImpl::~ExploreSitesServiceImpl() {} + +void ExploreSitesServiceImpl::Shutdown() {} + +} // namespace explore_sites
diff --git a/chrome/browser/android/explore_sites/explore_sites_service_impl.h b/chrome/browser/android/explore_sites/explore_sites_service_impl.h new file mode 100644 index 0000000..4000771 --- /dev/null +++ b/chrome/browser/android/explore_sites/explore_sites_service_impl.h
@@ -0,0 +1,29 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_ANDROID_EXPLORE_SITES_EXPLORE_SITES_SERVICE_IMPL_H_ +#define CHROME_BROWSER_ANDROID_EXPLORE_SITES_EXPLORE_SITES_SERVICE_IMPL_H_ + +#include <memory> + +#include "base/macros.h" +#include "chrome/browser/android/explore_sites/explore_sites_service.h" + +namespace explore_sites { + +class ExploreSitesServiceImpl : public ExploreSitesService { + public: + ExploreSitesServiceImpl(); + ~ExploreSitesServiceImpl() override; + + // KeyedService implementation: + void Shutdown() override; + + private: + DISALLOW_COPY_AND_ASSIGN(ExploreSitesServiceImpl); +}; + +} // namespace explore_sites + +#endif // CHROME_BROWSER_ANDROID_EXPLORE_SITES_EXPLORE_SITES_SERVICE_IMPL_H_
diff --git a/chrome/browser/android/vr/BUILD.gn b/chrome/browser/android/vr/BUILD.gn index 2856e3b2..3d80b3b 100644 --- a/chrome/browser/android/vr/BUILD.gn +++ b/chrome/browser/android/vr/BUILD.gn
@@ -31,6 +31,7 @@ "mailbox_to_surface_bridge.h", "metrics_util_android.cc", "metrics_util_android.h", + "register_jni.h", "scoped_gpu_trace.cc", "scoped_gpu_trace.h", "vr_controller.cc", @@ -41,6 +42,7 @@ "vr_gl_thread.h", "vr_input_connection.cc", "vr_input_connection.h", + "vr_module_provider.cc", "vr_shell.cc", "vr_shell.h", "vr_shell_delegate.cc", @@ -127,12 +129,66 @@ } } +android_library("java") { + java_files = [ + "//chrome/android/java/src/org/chromium/chrome/browser/component_updater/VrAssetsComponentInstaller.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/AndroidUiGestureTarget.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/AndroidVSyncHelper.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/EmptySniffingVrViewContainer.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/keyboard/BuildConstants.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/keyboard/GvrKeyboardLoaderClient.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/keyboard/TextEditAction.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/keyboard/VrInputMethodManagerWrapper.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/NoopCanvas.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/OnDispatchTouchEventCallback.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrAlertDialog.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrCancelAnimationActivity.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrCompositorSurfaceManager.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrCoreInfo.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrCoreVersionChecker.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrDaydreamApi.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrDelegateImpl.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrDelegateProviderImpl.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrDialog.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrDialogManager.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrFeedbackStatus.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrFirstRunActivity.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrInputConnection.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrIntentUtils.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrModalPresenter.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrPopupWindow.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrShell.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrToast.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrToastManager.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrUiWidgetFactory.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrViewContainer.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrWindowAndroid.java", + ] + + classpath_deps = [ + "//base:base_java", + "//chrome/android:chrome_java", + "//components/policy/android:policy_java", + "//content/public/android:content_java", + "//third_party/android_tools:android_arch_lifecycle_common_java", + "//third_party/android_tools:android_arch_lifecycle_runtime_java", + "//third_party/android_tools:android_support_annotations_java", + "//third_party/android_tools:android_support_v7_appcompat_java", + "//third_party/gvr-android-keyboard:kb_java", + "//third_party/gvr-android-sdk:gvr_common_java", + "//ui/android:ui_full_java", + "//ui/android:ui_utils_java", + ] +} + generate_jni("vr_jni_headers") { sources = [ "//chrome/android/java/src/org/chromium/chrome/browser/vr/AndroidUiGestureTarget.java", "//chrome/android/java/src/org/chromium/chrome/browser/vr/AndroidVSyncHelper.java", "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrCoreInfo.java", "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrInputConnection.java", + "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrModuleProvider.java", "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrShell.java", "//chrome/android/java/src/org/chromium/chrome/browser/vr/VrShellDelegate.java", "//chrome/android/java/src/org/chromium/chrome/browser/vr/keyboard/GvrKeyboardLoaderClient.java", @@ -149,3 +205,11 @@ jni_package = "vr" } } + +if (current_toolchain == default_toolchain) { + generate_jni_registration("jni_registration") { + target = ":java" + output = "$target_gen_dir/${target_name}.h" + namespace = "vr" + } +}
diff --git a/chrome/browser/android/vr/register_jni.cc b/chrome/browser/android/vr/register_jni.cc new file mode 100644 index 0000000..c1e87c5 --- /dev/null +++ b/chrome/browser/android/vr/register_jni.cc
@@ -0,0 +1,23 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/android/vr/register_jni.h" + +#include "base/android/jni_utils.h" +#include "chrome/browser/android/vr/jni_registration.h" + +namespace vr { + +bool RegisterJni(JNIEnv* env) { + if (!base::android::IsSelectiveJniRegistrationEnabled(env) && + !vr::RegisterNonMainDexNatives(env)) { + return false; + } + if (!vr::RegisterMainDexNatives(env)) { + return false; + } + return true; +} + +} // namespace vr
diff --git a/chrome/browser/android/vr/register_jni.h b/chrome/browser/android/vr/register_jni.h new file mode 100644 index 0000000..63fa103 --- /dev/null +++ b/chrome/browser/android/vr/register_jni.h
@@ -0,0 +1,16 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_ANDROID_VR_REGISTER_JNI_H_ +#define CHROME_BROWSER_ANDROID_VR_REGISTER_JNI_H_ + +#include <jni.h> + +namespace vr { + +bool RegisterJni(JNIEnv* env); + +} // namespace vr + +#endif // CHROME_BROWSER_ANDROID_VR_REGISTER_JNI_H_
diff --git a/chrome/browser/android/vr/register_jni_monochrome.cc b/chrome/browser/android/vr/register_jni_monochrome.cc new file mode 100644 index 0000000..24834a9 --- /dev/null +++ b/chrome/browser/android/vr/register_jni_monochrome.cc
@@ -0,0 +1,13 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/android/vr/register_jni.h" + +namespace vr { + +bool RegisterJni(JNIEnv* env) { + return true; +} + +} // namespace vr
diff --git a/chrome/browser/android/vr/vr_module_provider.cc b/chrome/browser/android/vr/vr_module_provider.cc new file mode 100644 index 0000000..15e49ba --- /dev/null +++ b/chrome/browser/android/vr/vr_module_provider.cc
@@ -0,0 +1,16 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/android/vr/register_jni.h" +#include "jni/VrModuleProvider_jni.h" + +namespace vr { + +static void JNI_VrModuleProvider_RegisterJni( + JNIEnv* env, + const base::android::JavaParamRef<jclass>& clazz) { + CHECK(RegisterJni(env)); +} + +} // namespace vr
diff --git a/chrome/browser/apps/guest_view/web_view_browsertest.cc b/chrome/browser/apps/guest_view/web_view_browsertest.cc index 9183faa..ea7c17e5 100644 --- a/chrome/browser/apps/guest_view/web_view_browsertest.cc +++ b/chrome/browser/apps/guest_view/web_view_browsertest.cc
@@ -233,23 +233,6 @@ } #if defined (USE_AURA) -views::View* FindWebView(views::View* view) { - base::queue<views::View*> queue; - queue.push(view); - while (!queue.empty()) { - views::View* current = queue.front(); - queue.pop(); - if (std::string(current->GetClassName()).find("WebView") != - std::string::npos) { - return current; - } - - for (int i = 0; i < current->child_count(); ++i) - queue.push(current->child_at(i)); - } - return nullptr; -} - // Waits for select control shown/closed. class SelectControlWaiter : public aura::WindowObserver, public aura::EnvObserver { @@ -4175,65 +4158,6 @@ } }; -#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) -#define MAYBE_ScrollGuestContent DISABLED_ScrollGuestContent -#else -#define MAYBE_ScrollGuestContent ScrollGuestContent -#endif -IN_PROC_BROWSER_TEST_F(WebViewScrollGuestContentBrowserPluginSpecificTest, - MAYBE_ScrollGuestContent) { - LoadAppWithGuest("web_view/scrollable_embedder_and_guest"); - - content::WebContents* embedder_contents = GetEmbedderWebContents(); - content::RenderFrameSubmissionObserver embedder_frame_observer( - embedder_contents); - - std::vector<content::WebContents*> guest_web_contents_list; - GetGuestViewManager()->WaitForNumGuestsCreated(1u); - GetGuestViewManager()->GetGuestWebContentsList(&guest_web_contents_list); - ASSERT_EQ(1u, guest_web_contents_list.size()); - - content::WebContents* guest_contents = guest_web_contents_list[0]; - content::RenderFrameSubmissionObserver guest_frame_observer(guest_contents); - - gfx::Rect embedder_rect = embedder_contents->GetContainerBounds(); - gfx::Rect guest_rect = guest_contents->GetContainerBounds(); - guest_rect.set_x(guest_rect.x() - embedder_rect.x()); - guest_rect.set_y(guest_rect.y() - embedder_rect.y()); - - gfx::Vector2dF default_offset; - guest_frame_observer.WaitForScrollOffset(default_offset); - embedder_frame_observer.WaitForScrollOffset(default_offset); - - gfx::Point guest_scroll_location(guest_rect.width() / 2, 0); - - float gesture_distance = 15.f; - { - gfx::Vector2dF expected_offset(0.f, gesture_distance); - - content::SimulateGestureScrollSequence( - guest_contents, guest_scroll_location, - gfx::Vector2dF(0, -gesture_distance)); - - guest_frame_observer.WaitForScrollOffset(expected_offset); - } - - embedder_frame_observer.WaitForScrollOffset(default_offset); - - // Use fling gesture to scroll back, velocity should be big enough to scroll - // content back. - float fling_velocity = 300.f; - { - content::SimulateGestureFlingSequence( - guest_contents, guest_scroll_location, - gfx::Vector2dF(0, fling_velocity)); - - guest_frame_observer.WaitForScrollOffset(default_offset); - } - - embedder_frame_observer.WaitForScrollOffset(default_offset); -} - #if defined(USE_AURA) // This verifies the fix for crbug.com/694393 . IN_PROC_BROWSER_TEST_F(WebViewScrollGuestContentBrowserPluginSpecificTest, @@ -4285,119 +4209,6 @@ } #endif -#if defined(USE_AURA) -// TODO(wjmaclean): when WebViewTest is re-enabled on the site-isolation -// bots, then re-enable this test class as well. -// https://crbug.com/503751 -class WebViewFocusBrowserPluginSpecificTest - : public WebViewBrowserPluginSpecificTest { - public: - ~WebViewFocusBrowserPluginSpecificTest() override {} - - void SetUpCommandLine(base::CommandLine* command_line) override { - WebViewBrowserPluginSpecificTest::SetUpCommandLine(command_line); - - command_line->AppendSwitchASCII( - switches::kTouchEventFeatureDetection, - switches::kTouchEventFeatureDetectionEnabled); - } - - void ForceCompositorFrame( - content::RenderFrameSubmissionObserver& frame_observer) { - while (!RequestFrame(GetEmbedderWebContents())) { - // RequestFrame failed because we were waiting on an ack ... wait a short - // time and retry. - base::RunLoop run_loop; - base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( - FROM_HERE, run_loop.QuitClosure(), - base::TimeDelta::FromMilliseconds(10)); - run_loop.Run(); - } - frame_observer.WaitForAnyFrameSubmission(); - } -}; - -// Flaky on Linux. See: https://crbug.com/870604. -#if defined(OS_LINUX) -#define MAYBE_TouchFocusesEmbedder DISABLED_TouchFocusesEmbedder -#else -#define MAYBE_TouchFocusesEmbedder TouchFocusesEmbedder -#endif - -// The following test verifies that a views::WebView hosting an embedder -// gains focus on touchstart. -IN_PROC_BROWSER_TEST_F(WebViewFocusBrowserPluginSpecificTest, - MAYBE_TouchFocusesEmbedder) { - LoadAppWithGuest("web_view/accept_touch_events"); - - content::WebContents* web_contents = GetEmbedderWebContents(); - content::RenderViewHost* embedder_rvh = web_contents->GetRenderViewHost(); - content::RenderFrameSubmissionObserver frame_observer( - GetEmbedderWebContents()); - - bool embedder_has_touch_handler = - content::RenderViewHostTester::HasTouchEventHandler(embedder_rvh); - EXPECT_FALSE(embedder_has_touch_handler); - - SendMessageToGuestAndWait("install-touch-handler", "installed-touch-handler"); - - // Note that we need to wait for the installed/registered touch handler to - // appear in browser process before querying |embedder_rvh|. - // In practice, since we do a roundrtip from browser process to guest and - // back, this is sufficient. - embedder_has_touch_handler = - content::RenderViewHostTester::HasTouchEventHandler(embedder_rvh); - EXPECT_TRUE(embedder_has_touch_handler); - - extensions::AppWindow* app_window = GetFirstAppWindowForBrowser(browser()); - aura::Window* window = app_window->GetNativeWindow(); - EXPECT_TRUE(app_window); - EXPECT_TRUE(window); - views::Widget* widget = views::Widget::GetWidgetForNativeView(window); - EXPECT_TRUE(widget->GetRootView()); - // We only expect a single views::webview in the view hierarchy. - views::View* aura_webview = FindWebView(widget->GetRootView()); - ASSERT_TRUE(aura_webview); - gfx::Rect bounds(aura_webview->bounds()); - EXPECT_TRUE(aura_webview->IsFocusable()); - - views::View* other_focusable_view = new views::View(); - other_focusable_view->SetBounds(bounds.x() + bounds.width(), bounds.y(), 100, - 100); - other_focusable_view->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); - // Focusable views require an accessible name to pass accessibility checks. - other_focusable_view->GetViewAccessibility().OverrideName("Any name"); - aura_webview->parent()->AddChildView(other_focusable_view); - other_focusable_view->SetPosition(gfx::Point(bounds.x() + bounds.width(), 0)); - - // Sync changes to compositor. - ForceCompositorFrame(frame_observer); - - aura_webview->RequestFocus(); - // Verify that other_focusable_view can steal focus from aura_webview. - EXPECT_TRUE(aura_webview->HasFocus()); - other_focusable_view->RequestFocus(); - EXPECT_TRUE(other_focusable_view->HasFocus()); - EXPECT_FALSE(aura_webview->HasFocus()); - - // Compute location of guest within embedder so we can more accurately - // target our touch event. - gfx::Rect guest_rect = GetGuestWebContents()->GetContainerBounds(); - gfx::Point embedder_origin = - GetEmbedderWebContents()->GetContainerBounds().origin(); - guest_rect.Offset(-embedder_origin.x(), -embedder_origin.y()); - - // Generate and send synthetic touch event. - content::InputEventAckWaiter waiter( - GetGuestWebContents()->GetRenderWidgetHostView()->GetRenderWidgetHost(), - blink::WebInputEvent::kTouchStart); - content::SimulateTouchPressAt(GetEmbedderWebContents(), - guest_rect.CenterPoint()); - waiter.Wait(); - EXPECT_TRUE(aura_webview->HasFocus()); -} -#endif - // This runs the chrome://chrome-signin page which includes an OOPIF-<webview> // of accounts.google.com. class ChromeSignInWebViewTest : public WebViewTest { @@ -4615,23 +4426,3 @@ embedder->GetRenderWidgetHostView()->GetRenderWidgetHost()->GetProcess(), guest->GetRenderWidgetHostView()->GetRenderWidgetHost())); } - -// Flaky under MSan: crbug.com/837757 -#if defined(MEMORY_SANITIZER) -#define MAYBE_BP_AutoResizeMessages DISABLED_AutoResizeMessages -#else -#define MAYBE_BP_AutoResizeMessages AutoResizeMessages -#endif -IN_PROC_BROWSER_TEST_F(WebViewBrowserPluginSpecificTest, - MAYBE_BP_AutoResizeMessages) { - LoadAppWithGuest("web_view/simple"); - content::WebContents* embedder = GetEmbedderWebContents(); - content::WebContents* guest = GetGuestWebContents(); - - // Helper function as this test requires inspecting a number of content:: - // internal objects. - EXPECT_TRUE(content::TestChildOrGuestAutoresize( - true, - embedder->GetRenderWidgetHostView()->GetRenderWidgetHost()->GetProcess(), - guest->GetRenderWidgetHostView()->GetRenderWidgetHost())); -}
diff --git a/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc b/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc index 749d404..fcd952fab 100644 --- a/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc +++ b/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc
@@ -97,12 +97,14 @@ public ::testing::WithParamInterface<std::string> { public: // TestRecipeReplayChromeFeatureActionExecutor - bool AutofillForm(content::WebContents* web_contents, + bool AutofillForm(content::RenderFrameHost* frame, const std::string& focus_element_css_selector, - int attempts = 1) override { + const int attempts = 1) override { + content::WebContents* web_contents = + content::WebContents::FromRenderFrameHost(frame); AutofillManager* autofill_manager = ContentAutofillDriverFactory::FromWebContents(web_contents) - ->DriverForFrame(web_contents->GetMainFrame()) + ->DriverForFrame(frame) ->autofill_manager(); autofill_manager->SetTestDelegate(test_delegate()); @@ -111,27 +113,25 @@ tries++; autofill_manager->client()->HideAutofillPopup(); - if (!ShowAutofillSuggestion(focus_element_css_selector)) { + if (!ShowAutofillSuggestion(frame, focus_element_css_selector)) { LOG(WARNING) << "Failed to bring up the autofill suggestion drop down."; continue; } - if (!ShouldAutoselectFirstSuggestionOnArrowDown()) { - // Press the down key to highlight the first choice in the autofill - // suggestion drop down. - test_delegate()->Reset(); - SendKeyToPopup(ui::DomKey::ARROW_DOWN); - if (!test_delegate()->Wait({ObservedUiEvents::kPreviewFormData}, - autofill_wait_for_action_interval)) { - LOG(WARNING) << "Failed to select an option from the " - << "autofill suggestion drop down."; - continue; - } + // Press the down key to highlight the first choice in the autofill + // suggestion drop down. + test_delegate()->Reset(); + SendKeyToPopup(frame, ui::DomKey::ARROW_DOWN); + if (!test_delegate()->Wait({ObservedUiEvents::kPreviewFormData}, + autofill_wait_for_action_interval)) { + LOG(WARNING) << "Failed to select an option from the " + << "autofill suggestion drop down."; + continue; } // Press the enter key to invoke autofill using the first suggestion. test_delegate()->Reset(); - SendKeyToPopup(ui::DomKey::ENTER); + SendKeyToPopup(frame, ui::DomKey::ENTER); if (!test_delegate()->Wait({ObservedUiEvents::kFormDataFilled}, autofill_wait_for_action_interval)) { LOG(WARNING) << "Failed to fill the form."; @@ -197,30 +197,59 @@ AddTestAutofillData(browser(), profile_, card_); } - bool ShowAutofillSuggestion(const std::string& focus_element_xpath) { - const std::string js(base::StringPrintf( - "try {" - " var element = automation_helper.getElementByXpath(`%s`);" - " while (document.activeElement !== element) {" - " element.focus();" - " }" - "} catch(ex) {}", - focus_element_xpath.c_str())); - if (content::ExecuteScript(GetWebContents(), js)) { - test_delegate()->Reset(); + bool ShowAutofillSuggestion(content::RenderFrameHost* frame, + const std::string& target_element_xpath) { + const std::string get_target_field_x_js(base::StringPrintf( + "window.domAutomationController.send(" + " (function() {" + " try {" + " const element = automation_helper.getElementByXpath(`%s`);" + " const rect = element.getBoundingClientRect();" + " console.log(`Window href x: ${location.href}`);" + " return Math.floor(rect.left + rect.width / 2);" + " } catch(ex) {}" + " return -1;" + " })());", + target_element_xpath.c_str())); + const std::string get_target_field_y_js(base::StringPrintf( + "window.domAutomationController.send(" + " (function() {" + " try {" + " const element = automation_helper.getElementByXpath(`%s`);" + " const rect = element.getBoundingClientRect();" + " console.log(`Window href y: ${location.href}`);" + " return Math.floor(rect.top + rect.height / 2);" + " } catch(ex) {}" + " return -1;" + " })());", + target_element_xpath.c_str())); - if (ShouldAutoselectFirstSuggestionOnArrowDown()) { - SendKeyToPage(ui::DomKey::ARROW_DOWN); - return test_delegate()->Wait({ObservedUiEvents::kSuggestionShown, - ObservedUiEvents::kPreviewFormData}, - autofill_wait_for_action_interval); - } else { - SendKeyToPage(ui::DomKey::ARROW_DOWN); - return test_delegate()->Wait({ObservedUiEvents::kSuggestionShown}, - autofill_wait_for_action_interval); - } - } - return false; + // First, automation should focus on the frame containg the autofill form. + // Doing so ensures that Chrome scrolls the element into view if the + // element is off the page. + if (!captured_sites_test_utils::TestRecipeReplayer::PlaceFocusOnElement( + frame, target_element_xpath)) + return false; + + int x; + if (!content::ExecuteScriptAndExtractInt(frame, get_target_field_x_js, &x)) + return false; + if (x == -1) + return false; + + int y; + if (!content::ExecuteScriptAndExtractInt(frame, get_target_field_y_js, &y)) + return false; + if (y == -1) + return false; + + test_delegate()->Reset(); + if (!captured_sites_test_utils::TestRecipeReplayer:: + SimulateLeftMouseClickAt(frame, gfx::Point(x, y))) + return false; + + return test_delegate()->Wait({ObservedUiEvents::kSuggestionShown}, + autofill_wait_for_action_interval); } AutofillProfile profile_;
diff --git a/chrome/browser/autofill/autofill_uitest.cc b/chrome/browser/autofill/autofill_uitest.cc index ac10be6b..2a3e1b3 100644 --- a/chrome/browser/autofill/autofill_uitest.cc +++ b/chrome/browser/autofill/autofill_uitest.cc
@@ -19,6 +19,7 @@ #include "components/autofill/core/browser/personal_data_manager.h" #include "components/autofill/core/browser/personal_data_manager_observer.h" #include "content/public/browser/render_view_host.h" +#include "content/public/browser/render_widget_host_view.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/test_utils.h" #include "ui/events/base_event_utils.h" @@ -89,10 +90,11 @@ test::ReenableSystemServices(); } -void AutofillUiTest::SendKeyToPage(ui::DomKey key) { +void AutofillUiTest::SendKeyToPage(content::WebContents* web_contents, + const ui::DomKey key) { ui::KeyboardCode key_code = ui::NonPrintableDomKeyToKeyboardCode(key); ui::DomCode code = ui::UsLayoutKeyboardCodeToDomCode(key_code); - content::SimulateKeyPress(GetWebContents(), key, code, key_code, false, false, + content::SimulateKeyPress(web_contents, key, code, key_code, false, false, false, false); } @@ -115,10 +117,12 @@ test_delegate()->Wait(std::move(expected_events)); } -void AutofillUiTest::SendKeyToPopup(ui::DomKey key) { +void AutofillUiTest::SendKeyToPopup(content::RenderFrameHost* render_frame_host, + const ui::DomKey key) { ui::KeyboardCode key_code = ui::NonPrintableDomKeyToKeyboardCode(key); ui::DomCode code = ui::UsLayoutKeyboardCodeToDomCode(key_code); - content::RenderWidgetHost* widget = GetRenderViewHost()->GetWidget(); + content::RenderWidgetHost* widget = + render_frame_host->GetView()->GetRenderWidgetHost(); // Route popup-targeted key presses via the render view host. content::NativeWebKeyboardEvent event(blink::WebKeyboardEvent::kRawKeyDown,
diff --git a/chrome/browser/autofill/autofill_uitest.h b/chrome/browser/autofill/autofill_uitest.h index ac78ecd..85185ae 100644 --- a/chrome/browser/autofill/autofill_uitest.h +++ b/chrome/browser/autofill/autofill_uitest.h
@@ -64,14 +64,15 @@ void SetUpOnMainThread() override; void TearDownOnMainThread() override; - void SendKeyToPage(ui::DomKey key); + void SendKeyToPage(content::WebContents* web_contents, const ui::DomKey key); void SendKeyToPageAndWait(ui::DomKey key, std::list<ObservedUiEvents> expected_events); void SendKeyToPageAndWait(ui::DomKey key, ui::DomCode code, ui::KeyboardCode key_code, std::list<ObservedUiEvents> expected_events); - void SendKeyToPopup(ui::DomKey key); + void SendKeyToPopup(content::RenderFrameHost* render_frame_host, + const ui::DomKey key); // Send key to the render host view's widget if |widget| is null. void SendKeyToPopupAndWait(ui::DomKey key, std::list<ObservedUiEvents> expected_events,
diff --git a/chrome/browser/autofill/captured_sites_test_utils.cc b/chrome/browser/autofill/captured_sites_test_utils.cc index cfbc19cb..08cd6b4 100644 --- a/chrome/browser/autofill/captured_sites_test_utils.cc +++ b/chrome/browser/autofill/captured_sites_test_utils.cc
@@ -17,6 +17,7 @@ #include "base/values.h" #include "build/build_config.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/test/base/interactive_test_utils.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/browser/browsing_data_remover.h" #include "content/public/browser/navigation_handle.h" @@ -43,6 +44,7 @@ // Automation Framework will retry an autofill action a couple times before // concluding that Chrome Autofill does not work. const int kAutofillActionNumRetries = 5; + } // namespace namespace captured_sites_test_utils { @@ -95,6 +97,93 @@ paint_occurred_during_last_loop_ = true; } +// FrameObserver -------------------------------------------------------------- +IFrameWaiter::IFrameWaiter(content::WebContents* web_contents) + : content::WebContentsObserver(web_contents), + query_type_(URL), + target_frame_(nullptr) {} + +IFrameWaiter::~IFrameWaiter() {} + +content::RenderFrameHost* IFrameWaiter::WaitForFrameMatchingName( + const std::string& name, + const base::TimeDelta timeout) { + content::RenderFrameHost* frame = FrameMatchingPredicate( + web_contents(), base::BindRepeating(&content::FrameMatchesName, name)); + if (frame) { + return frame; + } else { + query_type_ = NAME; + frame_name_ = name; + base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( + FROM_HERE, run_loop_.QuitClosure(), timeout); + run_loop_.Run(); + return target_frame_; + } +} + +content::RenderFrameHost* IFrameWaiter::WaitForFrameMatchingOrigin( + const GURL origin, + const base::TimeDelta timeout) { + content::RenderFrameHost* frame = FrameMatchingPredicate( + web_contents(), base::BindRepeating(&FrameHasOrigin, origin)); + if (frame) { + return frame; + } else { + query_type_ = ORIGIN; + origin_ = origin; + base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( + FROM_HERE, run_loop_.QuitClosure(), timeout); + run_loop_.Run(); + return target_frame_; + } +} + +content::RenderFrameHost* IFrameWaiter::WaitForFrameMatchingUrl( + const GURL url, + const base::TimeDelta timeout) { + content::RenderFrameHost* frame = FrameMatchingPredicate( + web_contents(), base::BindRepeating(&content::FrameHasSourceUrl, url)); + if (frame) { + return frame; + } else { + query_type_ = URL; + url_ = url; + base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( + FROM_HERE, run_loop_.QuitClosure(), timeout); + run_loop_.Run(); + return target_frame_; + } +} + +void IFrameWaiter::RenderFrameCreated( + content::RenderFrameHost* render_frame_host) { + if (!run_loop_.running()) + return; + switch (query_type_) { + case NAME: + if (FrameMatchesName(frame_name_, render_frame_host)) + run_loop_.Quit(); + break; + case ORIGIN: + if (render_frame_host->GetLastCommittedURL().GetOrigin() == origin_) + run_loop_.Quit(); + break; + case URL: + if (FrameHasSourceUrl(url_, render_frame_host)) + run_loop_.Quit(); + break; + default: + break; + } +} + +bool IFrameWaiter::FrameHasOrigin(const GURL& origin, + content::RenderFrameHost* frame) { + GURL url = frame->GetLastCommittedURL(); + return (url.GetOrigin() == origin.GetOrigin()); +} + // TestRecipeReplayer --------------------------------------------------------- TestRecipeReplayer::TestRecipeReplayer( Browser* browser, @@ -298,7 +387,7 @@ } bool TestRecipeReplayer::ReplayRecordedActions( - const base::FilePath recipe_file_path) { + const base::FilePath& recipe_file_path) { // Read the text of the recipe file. base::ThreadRestrictions::SetIOAllowed(true); std::string json_text; @@ -313,7 +402,8 @@ return false; } - InitializeBrowserToExecuteRecipe(recipe); + if (!InitializeBrowserToExecuteRecipe(recipe)) + return false; // Iterate through and execute each action in the recipe. base::Value* action_list_container = recipe->FindKey("actions"); @@ -337,17 +427,23 @@ std::string type = type_container->GetString(); if (base::CompareCaseInsensitiveASCII(type, "autofill") == 0) { - ExecuteAutofillAction(action); + if (!ExecuteAutofillAction(*action)) + return false; } else if (base::CompareCaseInsensitiveASCII(type, "click") == 0) { - ExecuteClickAction(action); + if (!ExecuteClickAction(*action)) + return false; } else if (base::CompareCaseInsensitiveASCII(type, "select") == 0) { - ExecuteSelectDropdownAction(action); + if (!ExecuteSelectDropdownAction(*action)) + return false; } else if (base::CompareCaseInsensitiveASCII(type, "type") == 0) { - ExecuteTypeAction(action); + if (!ExecuteTypeAction(*action)) + return false; } else if (base::CompareCaseInsensitiveASCII(type, "validateField") == 0) { - ExecuteValidateFieldValueAction(action); + if (!ExecuteValidateFieldValueAction(*action)) + return false; } else if (base::CompareCaseInsensitiveASCII(type, "waitFor") == 0) { - ExecuteWaitForStateAction(action); + if (!ExecuteWaitForStateAction(*action)) + return false; } else { ADD_FAILURE() << "Unrecognized action type: " << type; } @@ -357,149 +453,206 @@ // Functions for deserializing and executing actions from the test recipe // JSON object. -void TestRecipeReplayer::InitializeBrowserToExecuteRecipe( +bool TestRecipeReplayer::InitializeBrowserToExecuteRecipe( std::unique_ptr<base::DictionaryValue>& recipe) { // Extract the starting URL from the test recipe. base::Value* starting_url_container = recipe->FindKey("startingURL"); - ASSERT_TRUE(starting_url_container); - ASSERT_EQ(base::Value::Type::STRING, starting_url_container->type()); + if (!starting_url_container) + return false; + if (base::Value::Type::STRING != starting_url_container->type()) + return false; // Navigate to the starting URL, wait for the page to complete loading. PageActivityObserver page_activity_observer(GetWebContents()); - ASSERT_TRUE(content::ExecuteScript( - GetWebContents(), - base::StringPrintf("window.location.href = '%s';", - starting_url_container->GetString().c_str()))); + if (!content::ExecuteScript( + GetWebContents(), + base::StringPrintf("window.location.href = '%s';", + starting_url_container->GetString().c_str()))) + return false; page_activity_observer.WaitTillPageIsIdle(); + return true; } -void TestRecipeReplayer::ExecuteAutofillAction(base::DictionaryValue* action) { +bool TestRecipeReplayer::ExecuteAutofillAction( + const base::DictionaryValue& action) { std::string xpath; - ASSERT_TRUE(GetTargetHTMLElementXpathFromAction(action, &xpath)); - WaitForElemementToBeReady(xpath); + if (!GetTargetHTMLElementXpathFromAction(action, &xpath)) + return false; + content::RenderFrameHost* frame; + if (!GetTargetFrameFromAction(action, &frame)) + return false; + if (!WaitForElementToBeReady(frame, xpath)) + return false; VLOG(1) << "Invoking Chrome Autofill on `" << xpath << "`."; - PageActivityObserver page_activity_observer(GetWebContents()); + PageActivityObserver page_activity_observer(frame); // Clear the input box first, in case a previous value is there. // If the text input box is not clear, pressing the down key will not // bring up the autofill suggestion box. // This can happen on sites that requires the user to sign in. After // signing in, the site fills the form with the user's profile // information. - ASSERT_TRUE(ExecuteJavaScriptOnElementByXpath( - xpath, "automation_helper.setInputElementValue(target, ``);")); - ASSERT_TRUE(feature_action_executor()->AutofillForm( - GetWebContents(), xpath, kAutofillActionNumRetries)); + if (!ExecuteJavaScriptOnElementByXpath( + frame, xpath, "automation_helper.setInputElementValue(target, ``);")) + return false; + if (!feature_action_executor()->AutofillForm(frame, xpath, + kAutofillActionNumRetries)) + return false; page_activity_observer.WaitTillPageIsIdle( kAutofillActionWaitForVisualUpdateTimeout); + return true; } -void TestRecipeReplayer::ExecuteClickAction(base::DictionaryValue* action) { +bool TestRecipeReplayer::ExecuteClickAction( + const base::DictionaryValue& action) { std::string xpath; - ASSERT_TRUE(GetTargetHTMLElementXpathFromAction(action, &xpath)); - WaitForElemementToBeReady(xpath); + if (!GetTargetHTMLElementXpathFromAction(action, &xpath)) + return false; + content::RenderFrameHost* frame; + if (!GetTargetFrameFromAction(action, &frame)) + return false; + if (!WaitForElementToBeReady(frame, xpath)) + return false; VLOG(1) << "Left mouse clicking `" << xpath << "`."; - PageActivityObserver page_activity_observer(GetWebContents()); - ASSERT_TRUE(ExecuteJavaScriptOnElementByXpath(xpath, "target.click();")); + PageActivityObserver page_activity_observer(frame); + if (!ExecuteJavaScriptOnElementByXpath(frame, xpath, "target.click();")) + return false; page_activity_observer.WaitTillPageIsIdle(); + return true; } -void TestRecipeReplayer::ExecuteSelectDropdownAction( - base::DictionaryValue* action) { - base::Value* index_container = action->FindKey("index"); - ASSERT_TRUE(index_container); - ASSERT_EQ(base::Value::Type::INTEGER, index_container->type()); +bool TestRecipeReplayer::ExecuteSelectDropdownAction( + const base::DictionaryValue& action) { + const base::Value* index_container = action.FindKey("index"); + if (!index_container) + return false; + if (base::Value::Type::INTEGER != index_container->type()) + return false; int index = index_container->GetInt(); std::string xpath; - ASSERT_TRUE(GetTargetHTMLElementXpathFromAction(action, &xpath)); - WaitForElemementToBeReady(xpath); + if (!GetTargetHTMLElementXpathFromAction(action, &xpath)) + return false; + content::RenderFrameHost* frame; + if (!GetTargetFrameFromAction(action, &frame)) + return false; + if (!WaitForElementToBeReady(frame, xpath)) + return false; VLOG(1) << "Select option '" << index << "' from `" << xpath << "`."; - PageActivityObserver page_activity_observer(GetWebContents()); - ASSERT_TRUE(ExecuteJavaScriptOnElementByXpath( - xpath, base::StringPrintf( - "automation_helper" - " .selectOptionFromDropDownElementByIndex(target, %d);", - index_container->GetInt()))); + PageActivityObserver page_activity_observer(frame); + if (!ExecuteJavaScriptOnElementByXpath( + frame, xpath, + base::StringPrintf( + "automation_helper" + " .selectOptionFromDropDownElementByIndex(target, %d);", + index_container->GetInt()))) + return false; page_activity_observer.WaitTillPageIsIdle(); + return true; } -void TestRecipeReplayer::ExecuteTypeAction(base::DictionaryValue* action) { - base::Value* value_container = action->FindKey("value"); - ASSERT_TRUE(value_container); - ASSERT_EQ(base::Value::Type::STRING, value_container->type()); +bool TestRecipeReplayer::ExecuteTypeAction( + const base::DictionaryValue& action) { + const base::Value* value_container = action.FindKey("value"); + if (!value_container) + return false; + if (base::Value::Type::STRING != value_container->type()) + return false; std::string value = value_container->GetString(); std::string xpath; - ASSERT_TRUE(GetTargetHTMLElementXpathFromAction(action, &xpath)); - WaitForElemementToBeReady(xpath); + if (!GetTargetHTMLElementXpathFromAction(action, &xpath)) + return false; + content::RenderFrameHost* frame; + if (!GetTargetFrameFromAction(action, &frame)) + return false; + if (!WaitForElementToBeReady(frame, xpath)) + return false; VLOG(1) << "Typing '" << value << "' inside `" << xpath << "`."; - PageActivityObserver page_activity_observer(GetWebContents()); - ASSERT_TRUE(ExecuteJavaScriptOnElementByXpath( - xpath, base::StringPrintf( - "automation_helper.setInputElementValue(target, `%s`);", - value.c_str()))); + PageActivityObserver page_activity_observer(frame); + if (!ExecuteJavaScriptOnElementByXpath( + frame, xpath, + base::StringPrintf( + "automation_helper.setInputElementValue(target, `%s`);", + value.c_str()))) + return false; page_activity_observer.WaitTillPageIsIdle(); + return true; } -void TestRecipeReplayer::ExecuteValidateFieldValueAction( - base::DictionaryValue* action) { +bool TestRecipeReplayer::ExecuteValidateFieldValueAction( + const base::DictionaryValue& action) { std::string xpath; - ASSERT_TRUE(GetTargetHTMLElementXpathFromAction(action, &xpath)); - WaitForElemementToBeReady(xpath); + if (!GetTargetHTMLElementXpathFromAction(action, &xpath)) + return false; + content::RenderFrameHost* frame; + if (!GetTargetFrameFromAction(action, &frame)) + return false; + if (!WaitForElementToBeReady(frame, xpath)) + return false; - base::Value* autofill_prediction_container = - action->FindKey("expectedAutofillType"); + const base::Value* autofill_prediction_container = + action.FindKey("expectedAutofillType"); if (autofill_prediction_container) { - ASSERT_EQ(base::Value::Type::STRING, autofill_prediction_container->type()); + if (base::Value::Type::STRING != autofill_prediction_container->type()) + return false; std::string expected_autofill_prediction_type = autofill_prediction_container->GetString(); VLOG(1) << "Checking the field `" << xpath << "` has the autofill type '" << expected_autofill_prediction_type << "'"; ExpectElementPropertyEquals( - xpath.c_str(), "return target.getAttribute('autofill-prediction');", + frame, xpath.c_str(), + "return target.getAttribute('autofill-prediction');", expected_autofill_prediction_type, true); } - base::Value* expected_value_container = action->FindKey("expectedValue"); - ASSERT_TRUE(expected_value_container); - ASSERT_EQ(base::Value::Type::STRING, expected_value_container->type()); + const base::Value* expected_value_container = action.FindKey("expectedValue"); + if (!expected_value_container) + return false; + if (base::Value::Type::STRING != expected_value_container->type()) + return false; std::string expected_value = expected_value_container->GetString(); VLOG(1) << "Checking the field `" << xpath << "`."; - ExpectElementPropertyEquals(xpath.c_str(), "return target.value;", + ExpectElementPropertyEquals(frame, xpath.c_str(), "return target.value;", expected_value); + return true; } -void TestRecipeReplayer::ExecuteWaitForStateAction( - base::DictionaryValue* action) { +bool TestRecipeReplayer::ExecuteWaitForStateAction( + const base::DictionaryValue& action) { // Extract the list of JavaScript assertions into a vector. std::vector<std::string> state_assertions; - base::Value* assertions_list_container = action->FindKey("assertions"); - ASSERT_TRUE(assertions_list_container); - ASSERT_EQ(base::Value::Type::LIST, assertions_list_container->type()); - base::Value::ListStorage& assertions_list = + const base::Value* assertions_list_container = action.FindKey("assertions"); + if (!assertions_list_container) + return false; + if (base::Value::Type::LIST != assertions_list_container->type()) + return false; + const base::Value::ListStorage& assertions_list = assertions_list_container->GetList(); - for (base::ListValue::iterator it_assertion = assertions_list.begin(); - it_assertion != assertions_list.end(); ++it_assertion) { - ASSERT_EQ(base::Value::Type::STRING, it_assertion->type()); - state_assertions.push_back(it_assertion->GetString()); + for (const base::Value& assertion : assertions_list) { + if (base::Value::Type::STRING != assertion.type()) + return false; + state_assertions.push_back(assertion.GetString()); } + content::RenderFrameHost* frame; + if (!GetTargetFrameFromAction(action, &frame)) + return false; VLOG(1) << "Waiting for page to reach a state."; // Wait for all of the assertions to become true on the current page. - ASSERT_TRUE(WaitForStateChange(state_assertions, default_action_timeout)); + return WaitForStateChange(frame, state_assertions, default_action_timeout); } bool TestRecipeReplayer::GetTargetHTMLElementXpathFromAction( - base::DictionaryValue* action, + const base::DictionaryValue& action, std::string* xpath) { xpath->clear(); - base::Value* xpath_container = action->FindKey("selector"); + const base::Value* xpath_container = action.FindKey("selector"); if (!xpath_container) return false; if (base::Value::Type::STRING != xpath_container->type()) @@ -508,20 +661,78 @@ return true; } -void TestRecipeReplayer::WaitForElemementToBeReady(std::string xpath) { +bool TestRecipeReplayer::GetTargetFrameFromAction( + const base::DictionaryValue& action, + content::RenderFrameHost** frame) { + const base::Value* iframe_container = action.FindKey("context"); + if (!iframe_container) + return false; + const base::DictionaryValue* iframe; + if (!iframe_container->GetAsDictionary(&iframe)) + return false; + + const base::Value* is_iframe_container = iframe->FindKey("isIframe"); + if (!is_iframe_container) + return false; + if (base::Value::Type::BOOLEAN != is_iframe_container->type()) + return false; + + if (!is_iframe_container->GetBool()) { + *frame = GetWebContents()->GetMainFrame(); + return true; + } + + const base::Value* frame_name_container = + iframe->FindPath({"browserTest", "name"}); + const base::Value* frame_scheme_host_container = + iframe->FindPath({"browserTest", "origin"}); + const base::Value* frame_url_container = + iframe->FindPath({"browserTest", "url"}); + IFrameWaiter iframe_waiter(GetWebContents()); + + if (frame_name_container != nullptr) { + if (base::Value::Type::STRING != frame_name_container->type()) + return false; + *frame = iframe_waiter.WaitForFrameMatchingName( + frame_name_container->GetString()); + return frame != nullptr; + } else if (frame_scheme_host_container != nullptr) { + if (base::Value::Type::STRING != frame_scheme_host_container->type()) + return false; + *frame = iframe_waiter.WaitForFrameMatchingOrigin( + GURL(frame_scheme_host_container->GetString())); + return frame != nullptr; + } else if (frame_url_container != nullptr) { + if (base::Value::Type::STRING != frame_url_container->type()) + return false; + *frame = iframe_waiter.WaitForFrameMatchingUrl( + GURL(frame_url_container->GetString())); + return frame != nullptr; + } else { + ADD_FAILURE() << "The recipe does not specify a way to find the iframe!"; + } + + return false; +} + +bool TestRecipeReplayer::WaitForElementToBeReady( + content::RenderFrameHost* frame, + const std::string& xpath) { std::vector<std::string> state_assertions; state_assertions.push_back(base::StringPrintf( "return automation_helper.isElementWithXpathReady(`%s`);", xpath.c_str())); - ASSERT_TRUE(WaitForStateChange(state_assertions, default_action_timeout)); + return WaitForStateChange(frame, state_assertions, default_action_timeout); } bool TestRecipeReplayer::WaitForStateChange( + content::RenderFrameHost* frame, const std::vector<std::string>& state_assertions, const base::TimeDelta& timeout) { const base::TimeTicks start_time = base::TimeTicks::Now(); - PageActivityObserver page_activity_observer(GetWebContents()); - while (!AllAssertionsPassed(state_assertions)) { + PageActivityObserver page_activity_observer( + content::WebContents::FromRenderFrameHost(frame)); + while (!AllAssertionsPassed(frame, state_assertions)) { if (base::TimeTicks::Now() - start_time > timeout) { ADD_FAILURE() << "State change hasn't completed within timeout."; return false; @@ -532,11 +743,12 @@ } bool TestRecipeReplayer::AllAssertionsPassed( + const content::ToRenderFrameHost& frame, const std::vector<std::string>& assertions) { for (const std::string& assertion : assertions) { bool assertion_passed = false; EXPECT_TRUE(ExecuteScriptAndExtractBool( - GetWebContents(), + frame, base::StringPrintf("window.domAutomationController.send(" " (function() {" " try {" @@ -555,6 +767,7 @@ } bool TestRecipeReplayer::ExecuteJavaScriptOnElementByXpath( + const content::ToRenderFrameHost& frame, const std::string& element_xpath, const std::string& execute_function_body, const base::TimeDelta& time_to_wait_for_element) { @@ -564,17 +777,18 @@ " (function(target) { %s })(element);" "} catch(ex) {}", element_xpath.c_str(), execute_function_body.c_str())); - return ExecuteScript(GetWebContents(), js); + return ExecuteScript(frame, js); } bool TestRecipeReplayer::ExpectElementPropertyEquals( + const content::ToRenderFrameHost& frame, const std::string& element_xpath, const std::string& get_property_function_body, const std::string& expected_value, bool ignoreCase) { std::string value; if (ExecuteScriptAndExtractString( - GetWebContents(), + frame, base::StringPrintf( "window.domAutomationController.send(" " (function() {" @@ -602,6 +816,68 @@ return false; } +bool TestRecipeReplayer::PlaceFocusOnElement(content::RenderFrameHost* frame, + const std::string& element_xpath) { + const std::string focus_on_target_field_js(base::StringPrintf( + "try {" + " function onFocusHandler(event) {" + " event.target.removeEventListener(event.type, arguments.callee);" + " window.domAutomationController.send(true);" + " }" + " const element = automation_helper.getElementByXpath(`%s`);" + " element.scrollIntoView();" + " if (document.activeElement === element) {" + " window.domAutomationController.send(true);" + " } else {" + " element.addEventListener('focus', onFocusHandler);" + " element.focus();" + " }" + " setTimeout(() => {" + " element.removeEventListener('focus', onFocusHandler);" + " window.domAutomationController.send(false);" + " }, 1000);" + "} catch(ex) {" + " window.domAutomationController.send(false);" + "}", + element_xpath.c_str())); + + bool focused = false; + if (!ExecuteScriptAndExtractBool(frame, focus_on_target_field_js, &focused)) + return false; + return focused; +} + +bool TestRecipeReplayer::SimulateLeftMouseClickAt( + content::RenderFrameHost* render_frame_host, + const gfx::Point& point) { + blink::WebMouseEvent mouse_event( + blink::WebInputEvent::kMouseDown, blink::WebInputEvent::kNoModifiers, + blink::WebInputEvent::GetStaticTimeStampForTests()); + mouse_event.button = blink::WebMouseEvent::Button::kLeft; + mouse_event.SetPositionInWidget(point.x(), point.y()); + + // Mac needs positionInScreen for events to plugins. + gfx::Rect offset = + content::WebContents::FromRenderFrameHost(render_frame_host) + ->GetContainerBounds(); + mouse_event.SetPositionInScreen(point.x() + offset.x(), + point.y() + offset.y()); + mouse_event.click_count = 1; + content::RenderWidgetHost* widget = + render_frame_host->GetView()->GetRenderWidgetHost(); + + gfx::Point reset_mouse(offset.origin()); + reset_mouse = + gfx::Point(reset_mouse.x() + point.x(), reset_mouse.y() + point.y()); + if (!ui_test_utils::SendMouseMoveSync(reset_mouse)) + return false; + + widget->ForwardMouseEvent(mouse_event); + mouse_event.SetType(blink::WebInputEvent::kMouseUp); + widget->ForwardMouseEvent(mouse_event); + return true; +} + // TestRecipeReplayChromeFeatureActionExecutor -------------------------------- TestRecipeReplayChromeFeatureActionExecutor:: TestRecipeReplayChromeFeatureActionExecutor() {} @@ -609,7 +885,7 @@ ~TestRecipeReplayChromeFeatureActionExecutor() {} bool TestRecipeReplayChromeFeatureActionExecutor::AutofillForm( - content::WebContents* web_contents, + content::RenderFrameHost* frame, const std::string& focus_element_css_selector, const int attempts) { return false;
diff --git a/chrome/browser/autofill/captured_sites_test_utils.h b/chrome/browser/autofill/captured_sites_test_utils.h index 10e1e12..93e80264 100644 --- a/chrome/browser/autofill/captured_sites_test_utils.h +++ b/chrome/browser/autofill/captured_sites_test_utils.h
@@ -84,6 +84,44 @@ DISALLOW_COPY_AND_ASSIGN(PageActivityObserver); }; +// IFrameWaiter +// +// IFrameWaiter is an waiter object that waits for an iframe befitting a +// criteria to appear. The criteria can be the iframe's 'name' attribute, +// the iframe's origin, or the iframe's full url. +class IFrameWaiter : public content::WebContentsObserver { + public: + explicit IFrameWaiter(content::WebContents* webcontents); + ~IFrameWaiter() override; + content::RenderFrameHost* WaitForFrameMatchingName( + const std::string& name, + const base::TimeDelta timeout = default_action_timeout); + content::RenderFrameHost* WaitForFrameMatchingOrigin( + const GURL origin, + const base::TimeDelta timeout = default_action_timeout); + content::RenderFrameHost* WaitForFrameMatchingUrl( + const GURL url, + const base::TimeDelta timeout = default_action_timeout); + + private: + enum QueryType { NAME, ORIGIN, URL }; + + static bool FrameHasOrigin(const GURL& origin, + content::RenderFrameHost* frame); + + // content::WebContentsObserver + void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override; + + QueryType query_type_; + base::RunLoop run_loop_; + content::RenderFrameHost* target_frame_; + std::string frame_name_; + GURL origin_; + GURL url_; + + DISALLOW_COPY_AND_ASSIGN(IFrameWaiter); +}; + // TestRecipeReplayChromeFeatureActionExecutor // // TestRecipeReplayChromeFeatureActionExecutor is a helper interface. A @@ -100,9 +138,9 @@ // Chrome Autofill feature methods. // Triggers Chrome Autofill in the specified input element on the specified // document. - virtual bool AutofillForm(content::WebContents* web_contents, + virtual bool AutofillForm(content::RenderFrameHost* frame, const std::string& focus_element_css_selector, - int attempts = 1); + const int attempts = 1); protected: TestRecipeReplayChromeFeatureActionExecutor(); @@ -145,6 +183,11 @@ const base::FilePath recipe_file_path); static void SetUpCommandLine(base::CommandLine* command_line); + static bool PlaceFocusOnElement(content::RenderFrameHost* frame, + const std::string& element_xpath); + static bool SimulateLeftMouseClickAt( + content::RenderFrameHost* render_frame_host, + const gfx::Point& point); private: TestRecipeReplayChromeFeatureActionExecutor* feature_action_executor(); @@ -161,31 +204,38 @@ bool RunWebPageReplayCmd(const std::string& cmd, const std::vector<std::string>& args, base::Process* process); - bool ReplayRecordedActions(const base::FilePath recipe_file_path); - void InitializeBrowserToExecuteRecipe( + bool ReplayRecordedActions(const base::FilePath& recipe_file_path); + bool InitializeBrowserToExecuteRecipe( std::unique_ptr<base::DictionaryValue>& recipe); - void ExecuteAutofillAction(base::DictionaryValue* action); - void ExecuteClickAction(base::DictionaryValue* action); - void ExecuteSelectDropdownAction(base::DictionaryValue* action); - void ExecuteTypeAction(base::DictionaryValue* action); - void ExecuteValidateFieldValueAction(base::DictionaryValue* action); - void ExecuteWaitForStateAction(base::DictionaryValue* action); - bool GetTargetHTMLElementXpathFromAction(base::DictionaryValue* action, + bool ExecuteAutofillAction(const base::DictionaryValue& action); + bool ExecuteClickAction(const base::DictionaryValue& action); + bool ExecuteSelectDropdownAction(const base::DictionaryValue& action); + bool ExecuteTypeAction(const base::DictionaryValue& action); + bool ExecuteValidateFieldValueAction(const base::DictionaryValue& action); + bool ExecuteWaitForStateAction(const base::DictionaryValue& action); + bool GetTargetHTMLElementXpathFromAction(const base::DictionaryValue& action, std::string* xpath); - void WaitForElemementToBeReady(std::string xpath); + bool GetTargetFrameFromAction(const base::DictionaryValue& action, + content::RenderFrameHost** frame); + bool WaitForElementToBeReady(content::RenderFrameHost* frame, + const std::string& xpath); bool WaitForStateChange( + content::RenderFrameHost* frame, const std::vector<std::string>& state_assertions, const base::TimeDelta& timeout = default_action_timeout); - bool AllAssertionsPassed(const std::vector<std::string>& assertions); + bool AllAssertionsPassed(const content::ToRenderFrameHost& frame, + const std::vector<std::string>& assertions); bool ExecuteJavaScriptOnElementByXpath( + const content::ToRenderFrameHost& frame, const std::string& element_xpath, const std::string& execute_function_body, const base::TimeDelta& time_to_wait_for_element = default_action_timeout); bool ExpectElementPropertyEquals( + const content::ToRenderFrameHost& frame, const std::string& element_xpath, const std::string& get_property_function_body, const std::string& expected_value, - bool ignoreCase = false); + const bool ignoreCase = false); Browser* browser_; TestRecipeReplayChromeFeatureActionExecutor* feature_action_executor_;
diff --git a/chrome/browser/background_fetch/background_fetch_delegate_impl.cc b/chrome/browser/background_fetch/background_fetch_delegate_impl.cc index ae54f4b..f5da352 100644 --- a/chrome/browser/background_fetch/background_fetch_delegate_impl.cc +++ b/chrome/browser/background_fetch/background_fetch_delegate_impl.cc
@@ -27,15 +27,24 @@ #include "ui/gfx/image/image_skia.h" BackgroundFetchDelegateImpl::BackgroundFetchDelegateImpl(Profile* profile) - : download_service_( - DownloadServiceFactory::GetInstance()->GetForBrowserContext(profile)), + : profile_(profile), offline_content_aggregator_( OfflineContentAggregatorFactory::GetForBrowserContext(profile)), weak_ptr_factory_(this) { + DCHECK(profile_); offline_content_aggregator_->RegisterProvider("background_fetch", this); } -BackgroundFetchDelegateImpl::~BackgroundFetchDelegateImpl() {} +BackgroundFetchDelegateImpl::~BackgroundFetchDelegateImpl() = default; + +download::DownloadService* BackgroundFetchDelegateImpl::GetDownloadService() { + if (download_service_) + return download_service_; + + download_service_ = + DownloadServiceFactory::GetInstance()->GetForBrowserContext(profile_); + return download_service_; +} void BackgroundFetchDelegateImpl::Shutdown() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); @@ -150,9 +159,9 @@ for (const auto& download_guid : details.fetch_description->current_guids) { DCHECK(!download_job_unique_id_map_.count(download_guid)); download_job_unique_id_map_.emplace(download_guid, job_unique_id); - if (download_service_->GetStatus() == + if (GetDownloadService()->GetStatus() == download::DownloadService::ServiceStatus::READY) { - download_service_->ResumeDownload(download_guid); + GetDownloadService()->ResumeDownload(download_guid); } } @@ -189,7 +198,7 @@ params.traffic_annotation = net::MutableNetworkTrafficAnnotationTag(traffic_annotation); - download_service_->StartDownload(params); + GetDownloadService()->StartDownload(params); } void BackgroundFetchDelegateImpl::Abort(const std::string& job_unique_id) { @@ -203,7 +212,7 @@ job_details.cancelled = true; for (const auto& download_guid : job_details.current_download_guids) { - download_service_->CancelDownload(download_guid); + GetDownloadService()->CancelDownload(download_guid); download_job_unique_id_map_.erase(download_guid); } UpdateOfflineItemAndUpdateObservers(&job_details); @@ -481,18 +490,18 @@ JobDetails& job_details = job_details_iter->second; for (auto& download_guid : job_details.current_download_guids) - download_service_->ResumeDownload(download_guid); + GetDownloadService()->ResumeDownload(download_guid); // TODO(delphick): Start new downloads that weren't started because of pause. } void BackgroundFetchDelegateImpl::ResumeActiveJobs() { - DCHECK_EQ(download_service_->GetStatus(), + DCHECK_EQ(GetDownloadService()->GetStatus(), download::DownloadService::ServiceStatus::READY); for (const auto& job_details : job_details_map_) { for (const auto& download_guid : job_details.second.current_download_guids) - download_service_->ResumeDownload(download_guid); + GetDownloadService()->ResumeDownload(download_guid); } }
diff --git a/chrome/browser/background_fetch/background_fetch_delegate_impl.h b/chrome/browser/background_fetch/background_fetch_delegate_impl.h index 97a787b48..9339ac19 100644 --- a/chrome/browser/background_fetch/background_fetch_delegate_impl.h +++ b/chrome/browser/background_fetch/background_fetch_delegate_impl.h
@@ -43,6 +43,9 @@ ~BackgroundFetchDelegateImpl() override; + // Lazily initializes and returns the DownloadService. + download::DownloadService* GetDownloadService(); + // KeyedService implementation: void Shutdown() override; @@ -139,9 +142,12 @@ void OnDownloadReceived(const std::string& guid, download::DownloadParams::StartResult result); + // The profile this service is being created for. + Profile* profile_; + // The BackgroundFetchDelegateImplFactory depends on the // DownloadServiceFactory, so |download_service_| should outlive |this|. - download::DownloadService* download_service_; + download::DownloadService* download_service_ = nullptr; // Map from individual download GUIDs to job unique ids. std::map<std::string, std::string> download_job_unique_id_map_;
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc index cca59ea3d..8ca357fc 100644 --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc
@@ -522,6 +522,23 @@ waitable_event_.TimedWait(timeout); } +#if !defined(OS_ANDROID) +void RequestProxyResolvingSocketFactoryOnUIThread( + network::mojom::ProxyResolvingSocketFactoryRequest request) { + network::mojom::NetworkContext* network_context = + g_browser_process->system_network_context_manager()->GetContext(); + network_context->CreateProxyResolvingSocketFactory(std::move(request)); +} + +void RequestProxyResolvingSocketFactory( + network::mojom::ProxyResolvingSocketFactoryRequest request) { + BrowserThread::PostTask( + BrowserThread::UI, FROM_HERE, + base::BindOnce(&RequestProxyResolvingSocketFactoryOnUIThread, + std::move(request))); +} +#endif + } // namespace void BrowserProcessImpl::FlushLocalStateAndReply(base::OnceClosure reply) { @@ -1338,7 +1355,7 @@ gcm_driver_ = gcm::CreateGCMDriverDesktop( base::WrapUnique(new gcm::GCMClientFactory), local_state(), store_path, - system_request_context(), + base::BindRepeating(&RequestProxyResolvingSocketFactory), system_network_context_manager()->GetSharedURLLoaderFactory(), chrome::GetChannel(), gcm::GetProductCategoryForSubtypes(local_state()), content::BrowserThread::GetTaskRunnerForThread(
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc index b596e7d0..34a8760 100644 --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc
@@ -136,7 +136,6 @@ #include "components/language/core/common/language_experiments.h" #include "components/language_usage_metrics/language_usage_metrics.h" #include "components/metrics/call_stack_profile_builder.h" -#include "components/metrics/call_stack_profile_metrics_provider.h" #include "components/metrics/call_stack_profile_params.h" #include "components/metrics/expired_histogram_util.h" #include "components/metrics/metrics_reporting_default_state.h" @@ -2114,7 +2113,7 @@ void ChromeBrowserMainParts::PreShutdown() { metrics::CallStackProfileBuilder::SetProcessMilestone( - metrics::CallStackProfileMetricsProvider::SHUTDOWN_START); + metrics::CallStackProfileBuilder::SHUTDOWN_START); } void ChromeBrowserMainParts::PostDestroyThreads() {
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 429f6ef..ae16709 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -4402,8 +4402,7 @@ content::BrowserContext* browser_context, content::RenderFrameHost* frame, bool is_navigation, - network::mojom::URLLoaderFactoryRequest* factory_request, - scoped_refptr<content::RedirectChecker>* redirect_checker) { + network::mojom::URLLoaderFactoryRequest* factory_request) { #if BUILDFLAG(ENABLE_EXTENSIONS) auto* web_request_api = extensions::BrowserContextKeyedAPIFactory<extensions::WebRequestAPI>::Get( @@ -4414,8 +4413,8 @@ if (!web_request_api) return false; - return web_request_api->MaybeProxyURLLoaderFactory( - frame, is_navigation, factory_request, redirect_checker); + return web_request_api->MaybeProxyURLLoaderFactory(frame, is_navigation, + factory_request); #else return false; #endif
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h index 6aebbe0..17ffcd5 100644 --- a/chrome/browser/chrome_content_browser_client.h +++ b/chrome/browser/chrome_content_browser_client.h
@@ -430,8 +430,7 @@ content::BrowserContext* browser_context, content::RenderFrameHost* frame, bool is_navigation, - network::mojom::URLLoaderFactoryRequest* factory_request, - scoped_refptr<content::RedirectChecker>* redirect_checker) override; + network::mojom::URLLoaderFactoryRequest* factory_request) override; std::vector<std::unique_ptr<content::URLLoaderRequestInterceptor>> WillCreateURLLoaderRequestInterceptors( content::NavigationUIData* navigation_ui_data,
diff --git a/chrome/browser/chrome_service_worker_browsertest.cc b/chrome/browser/chrome_service_worker_browsertest.cc index 8afafcf..a2091a3 100644 --- a/chrome/browser/chrome_service_worker_browsertest.cc +++ b/chrome/browser/chrome_service_worker_browsertest.cc
@@ -34,6 +34,7 @@ #include "content/public/test/browser_test_utils.h" #include "net/test/embedded_test_server/embedded_test_server.h" #include "ppapi/shared_impl/ppapi_switches.h" +#include "third_party/blink/public/common/message_port/string_message_codec.h" namespace { @@ -208,6 +209,31 @@ IsContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT)); } +IN_PROC_BROWSER_TEST_F(ChromeServiceWorkerTest, + StartServiceWorkerForLongRunningMessage) { + base::RunLoop run_loop; + blink::TransferableMessage msg; + const base::string16 message_data = base::UTF8ToUTF16("testMessage"); + + WriteFile(FILE_PATH_LITERAL("sw.js"), "self.onfetch = function(e) {};"); + WriteFile(FILE_PATH_LITERAL("test.html"), kInstallAndWaitForActivatedPage); + InitializeServer(); + NavigateToPageAndWaitForReadyTitle("/test.html"); + msg.owned_encoded_message = blink::EncodeStringMessage(message_data); + msg.encoded_message = msg.owned_encoded_message; + + content::BrowserThread::PostTask( + content::BrowserThread::IO, FROM_HERE, + base::BindOnce(&content::ServiceWorkerContext:: + StartServiceWorkerAndDispatchLongRunningMessage, + base::Unretained(GetServiceWorkerContext()), + embedded_test_server()->GetURL("/scope/"), std::move(msg), + base::BindRepeating(&ExpectResultAndRun<bool>, true, + run_loop.QuitClosure()))); + + run_loop.Run(); +} + class ChromeServiceWorkerFetchTest : public ChromeServiceWorkerTest { protected: ChromeServiceWorkerFetchTest() {}
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index ed9a451..e45b8d7 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -1510,6 +1510,11 @@ "policy/user_network_configuration_updater_factory.h", "policy/user_policy_manager_factory_chromeos.cc", "policy/user_policy_manager_factory_chromeos.h", + "policy/value_validation/onc_device_policy_value_validator.cc", + "policy/value_validation/onc_device_policy_value_validator.h", + "policy/value_validation/onc_policy_value_validator_base.h", + "policy/value_validation/onc_user_policy_value_validator.cc", + "policy/value_validation/onc_user_policy_value_validator.h", "policy/weekly_time/time_utils.cc", "policy/weekly_time/time_utils.h", "policy/weekly_time/weekly_time.cc",
diff --git a/chrome/browser/chromeos/accessibility/select_to_speak_event_handler_unittest.cc b/chrome/browser/chromeos/accessibility/select_to_speak_event_handler_unittest.cc index 5dc9a1e..68de968 100644 --- a/chrome/browser/chromeos/accessibility/select_to_speak_event_handler_unittest.cc +++ b/chrome/browser/chromeos/accessibility/select_to_speak_event_handler_unittest.cc
@@ -94,6 +94,7 @@ void SetUp() override { ash::AshTestBase::SetUp(); + SetRunningOutsideAsh(); // This test triggers a resize of WindowTreeHost, which will end up // throttling events. set_throttle_input_on_resize_for_testing() disables // this.
diff --git a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge_browsertest.cc b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge_browsertest.cc index 473f9c3d..434cb84 100644 --- a/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge_browsertest.cc +++ b/chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge_browsertest.cc
@@ -21,6 +21,7 @@ #include "components/exo/wm_helper.h" #include "components/viz/common/features.h" #include "ui/aura/client/aura_constants.h" +#include "ui/aura/env.h" #include "ui/views/widget/widget.h" #include "ui/wm/public/activation_client.h" @@ -44,7 +45,7 @@ chromeos::AccessibilityManager::Get()->SetProfileForTest( browser()->profile()); - wm_helper_ = std::make_unique<exo::WMHelper>(); + wm_helper_ = std::make_unique<exo::WMHelper>(ash::Shell::Get()->aura_env()); exo::WMHelper::SetInstance(wm_helper_.get()); }
diff --git a/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service_unittest.cc b/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service_unittest.cc index fe65f6f..08258af 100644 --- a/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service_unittest.cc +++ b/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service_unittest.cc
@@ -127,6 +127,7 @@ void SetUp() override { AshTestBase::SetUp(); + SetRunningOutsideAsh(); // Setup test profile. ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); TestingProfile::Builder profile_builder;
diff --git a/chrome/browser/chromeos/arc/voice_interaction/voice_interaction_controller_client.cc b/chrome/browser/chromeos/arc/voice_interaction/voice_interaction_controller_client.cc index 4b828748..3cfae84d 100644 --- a/chrome/browser/chromeos/arc/voice_interaction/voice_interaction_controller_client.cc +++ b/chrome/browser/chromeos/arc/voice_interaction/voice_interaction_controller_client.cc
@@ -45,6 +45,10 @@ content::NotificationService::AllSources()); g_voice_interaction_controller_client_instance = this; + + if (chromeos::switches::IsAssistantEnabled()) { + voice_interaction_state_ = ash::mojom::VoiceInteractionState::NOT_READY; + } } VoiceInteractionControllerClient::~VoiceInteractionControllerClient() {
diff --git a/chrome/browser/chromeos/child_accounts/usage_time_limit_processor.cc b/chrome/browser/chromeos/child_accounts/usage_time_limit_processor.cc index 4462e8b..a4636f3 100644 --- a/chrome/browser/chromeos/child_accounts/usage_time_limit_processor.cc +++ b/chrome/browser/chromeos/child_accounts/usage_time_limit_processor.cc
@@ -604,9 +604,16 @@ // Check when next time window limit starts. if (time_window_limit) { - internal::Weekday start_day = current_weekday; - if (IsTodayTimeWindowLimitActive()) - start_day = internal::WeekdayShift(start_day, 1); + internal::Weekday start_day = internal::WeekdayShift(current_weekday, 1); + base::TimeDelta delta_from_midnight = + current_time - LocalMidnight(current_time); + bool todays_time_limit_not_started = + time_window_limit->entries[current_weekday] && + time_window_limit->entries[current_weekday]->starts_at > + delta_from_midnight; + // If today's time limit has not started yet, start search today. + if (todays_time_limit_not_started) + start_day = current_weekday; // Search a time window limit in the next following days. for (int i = 0; i < static_cast<int>(internal::Weekday::kCount); i++) {
diff --git a/chrome/browser/chromeos/child_accounts/usage_time_limit_processor_unittest.cc b/chrome/browser/chromeos/child_accounts/usage_time_limit_processor_unittest.cc index b1b37445..56d4341 100644 --- a/chrome/browser/chromeos/child_accounts/usage_time_limit_processor_unittest.cc +++ b/chrome/browser/chromeos/child_accounts/usage_time_limit_processor_unittest.cc
@@ -228,6 +228,9 @@ base::Value monday_time_limit = CreateTimeWindow(base::Value("MONDAY"), CreateTime(21, 0), CreateTime(7, 30), base::Value(last_updated_millis)); + base::Value tuesday_time_limit = + CreateTimeWindow(base::Value("TUESDAY"), CreateTime(7, 30), + CreateTime(9, 0), base::Value(last_updated_millis)); base::Value friday_time_limit = CreateTimeWindow(base::Value("FRIDAY"), CreateTime(21, 0), CreateTime(7, 30), base::Value(last_updated_millis)); @@ -235,6 +238,7 @@ base::Value window_limit_entries(base::Value::Type::LIST); window_limit_entries.GetList().push_back(std::move(sunday_time_limit)); window_limit_entries.GetList().push_back(std::move(monday_time_limit)); + window_limit_entries.GetList().push_back(std::move(tuesday_time_limit)); window_limit_entries.GetList().push_back(std::move(friday_time_limit)); base::Value time_window_limit(base::Value::Type::DICTIONARY); @@ -251,6 +255,8 @@ TimeFromString("Mon, 1 Jan 2018 21:00 GMT+0300"); base::Time monday_time_window_limit_end = TimeFromString("Tue, 2 Jan 2018 7:30 GMT+0300"); + base::Time tuesday_time_window_limit_end = + TimeFromString("Tue, 2 Jan 2018 9:00 GMT+0300"); base::Time friday_time_window_limit_start = TimeFromString("Fri, 5 Jan 2018 21:00 GMT+0300"); @@ -281,8 +287,8 @@ expected_state_two.active_policy = ActivePolicies::kFixedLimit; expected_state_two.is_time_usage_limit_enabled = false; expected_state_two.next_state_change_time = monday_time_window_limit_end; - expected_state_two.next_state_active_policy = ActivePolicies::kNoActivePolicy; - expected_state_two.next_unlock_time = monday_time_window_limit_end; + expected_state_two.next_state_active_policy = ActivePolicies::kFixedLimit; + expected_state_two.next_unlock_time = tuesday_time_window_limit_end; expected_state_two.last_state_changed = time_two; AssertEqState(expected_state_two, state_two);
diff --git a/chrome/browser/chromeos/drive/drive_integration_service.cc b/chrome/browser/chromeos/drive/drive_integration_service.cc index cf90e81..459ce98 100644 --- a/chrome/browser/chromeos/drive/drive_integration_service.cc +++ b/chrome/browser/chromeos/drive/drive_integration_service.cc
@@ -101,7 +101,8 @@ // This part is <client_name>/<version>. const char kLibraryInfo[] = "chrome-cc/none"; - const std::string os_cpu_info = content::BuildOSCpuInfo(); + const std::string os_cpu_info = + content::BuildOSCpuInfo(false /* include_android_build_number */); // Add "gzip" to receive compressed data from the server. // (see https://developers.google.com/drive/performance)
diff --git a/chrome/browser/chromeos/extensions/extension_tab_util_delegate_chromeos.cc b/chrome/browser/chromeos/extensions/extension_tab_util_delegate_chromeos.cc index 0d9ffa1..14d1f9d0 100644 --- a/chrome/browser/chromeos/extensions/extension_tab_util_delegate_chromeos.cc +++ b/chrome/browser/chromeos/extensions/extension_tab_util_delegate_chromeos.cc
@@ -22,7 +22,7 @@ const Extension* extension, content::WebContents* contents, api::tabs::Tab* tab) { - if (!profiles::IsPublicSession() || !tab->url || + if (!profiles::ArePublicSessionRestrictionsEnabled() || !tab->url || chromeos::DeviceLocalAccountManagementPolicyProvider::IsWhitelisted( extension->id())) { return;
diff --git a/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos.cc b/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos.cc index 9c35eaa..0aeba203 100644 --- a/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos.cc +++ b/chrome/browser/chromeos/extensions/permissions_updater_delegate_chromeos.cc
@@ -21,7 +21,7 @@ void PermissionsUpdaterDelegateChromeOS::InitializePermissions( const Extension* extension, std::unique_ptr<const PermissionSet>* granted_permissions) { - if (!profiles::IsPublicSession() || + if (!profiles::ArePublicSessionRestrictionsEnabled() || chromeos::DeviceLocalAccountManagementPolicyProvider::IsWhitelisted( extension->id()) || !(*granted_permissions)
diff --git a/chrome/browser/chromeos/extensions/public_session_permission_helper.cc b/chrome/browser/chromeos/extensions/public_session_permission_helper.cc index d6b7454..3a442c4 100644 --- a/chrome/browser/chromeos/extensions/public_session_permission_helper.cc +++ b/chrome/browser/chromeos/extensions/public_session_permission_helper.cc
@@ -101,7 +101,7 @@ content::WebContents* web_contents, const RequestResolvedCallback& callback, const PromptFactory& prompt_factory) { - DCHECK(profiles::IsPublicSession()); + DCHECK(profiles::ArePublicSessionRestrictionsEnabled()); if (!PermissionCheckNeeded(&extension)) { if (!callback.is_null()) callback.Run(requested_permissions); @@ -172,7 +172,7 @@ bool PublicSessionPermissionHelper::PermissionAllowedImpl( const Extension* extension, APIPermission::ID permission) { - DCHECK(profiles::IsPublicSession()); + DCHECK(profiles::ArePublicSessionRestrictionsEnabled()); return !PermissionCheckNeeded(extension) || allowed_permission_set_.ContainsID(permission); }
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc index 191c0ec..4c0c831 100644 --- a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc +++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
@@ -214,14 +214,8 @@ TestCase("imageOpenGalleryOpenDrive"), TestCase("imageOpenGalleryOpenDrive").EnableDriveFs())); -// NaCl crashes in DEBUG in the zipFileOpen cases crbug.com/867738 -#if !defined(NDEBUG) -#define MAYBE_ZipFiles DISABLED_ZipFiles -#else -#define MAYBE_ZipFiles ZipFiles -#endif WRAPPED_INSTANTIATE_TEST_CASE_P( - MAYBE_ZipFiles, /* zip_files.js */ + ZipFiles, /* zip_files.js */ FilesAppBrowserTest, ::testing::Values(ZipCase("zipFileOpenDownloads").InGuestMode(), ZipCase("zipFileOpenDownloads"),
diff --git a/chrome/browser/chromeos/file_manager/gallery_jstest.cc b/chrome/browser/chromeos/file_manager/gallery_jstest.cc index 3c9b71a..6580e24 100644 --- a/chrome/browser/chromeos/file_manager/gallery_jstest.cc +++ b/chrome/browser/chromeos/file_manager/gallery_jstest.cc
@@ -35,7 +35,7 @@ } IN_PROC_BROWSER_TEST_F(GalleryJsTest, GalleryUtilTest) { - RunTest(base::FilePath(FILE_PATH_LITERAL("gallery_util_unittest.html"))); + RunGeneratedTest("/gallery_util_unittest.html"); } IN_PROC_BROWSER_TEST_F(GalleryJsTest, GalleryItemTest) { @@ -48,7 +48,7 @@ } IN_PROC_BROWSER_TEST_F(GalleryJsTest, RibbonTest) { - RunTest(base::FilePath(FILE_PATH_LITERAL("ribbon_unittest.html"))); + RunGeneratedTest("/ribbon_unittest.html"); } IN_PROC_BROWSER_TEST_F(GalleryJsTest, SlideModeTest) { @@ -56,6 +56,5 @@ } IN_PROC_BROWSER_TEST_F(GalleryJsTest, DimmableUIControllerTest) { - RunTest(base::FilePath( - FILE_PATH_LITERAL("dimmable_ui_controller_unittest.html"))); + RunGeneratedTest("/dimmable_ui_controller_unittest.html"); }
diff --git a/chrome/browser/chromeos/file_manager/snapshot_manager.cc b/chrome/browser/chromeos/file_manager/snapshot_manager.cc index b23c2a0..96c2915e 100644 --- a/chrome/browser/chromeos/file_manager/snapshot_manager.cc +++ b/chrome/browser/chromeos/file_manager/snapshot_manager.cc
@@ -4,6 +4,8 @@ #include "chrome/browser/chromeos/file_manager/snapshot_manager.h" +#include <utility> + #include "base/bind.h" #include "base/containers/circular_deque.h" #include "base/sys_info.h" @@ -85,9 +87,9 @@ void CreateSnapshotFileOnIOThread( scoped_refptr<storage::FileSystemContext> context, const storage::FileSystemURL& url, - const storage::FileSystemOperation::SnapshotFileCallback& callback) { + storage::FileSystemOperation::SnapshotFileCallback callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - context->operation_runner()->CreateSnapshotFile(url, callback); + context->operation_runner()->CreateSnapshotFile(url, std::move(callback)); } // Utility for destructing the bound |file_refs| on IO thread. This is meant
diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc index 56f09bc..1ee40bfa 100644 --- a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc +++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc
@@ -329,7 +329,7 @@ // Skip if it's not a keyboard layout. Drop input methods including // extension ones. We need to keep all IMEs to support inputting on inline // reply on a notification if notifications on lock screen is enabled. - if ((!ash::features::IsLockScreenNotificationsEnabled() && + if ((!ash::features::IsLockScreenInlineReplyEnabled() && !manager_->IsLoginKeyboard(input_method_id)) || added_ids.count(input_method_id)) { continue;
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc index 203617b..e6bcdd1 100644 --- a/chrome/browser/chromeos/login/session/user_session_manager.cc +++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -1426,6 +1426,10 @@ ScreenTimeControllerFactory::GetForBrowserContext(profile); ConsumerStatusReportingServiceFactory::GetForBrowserContext(profile); } + + // PrefService is ready, check whether we need to force a VPN connection. + always_on_vpn_manager_ = + std::make_unique<arc::AlwaysOnVpnManager>(profile->GetPrefs()); } UpdateEasyUnlockKeys(user_context_); @@ -2131,6 +2135,7 @@ token_handle_fetcher_.reset(); token_handle_util_.reset(); first_run::GoodiesDisplayer::Delete(); + always_on_vpn_manager_.reset(); } void UserSessionManager::SetSwitchesForUser(
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.h b/chrome/browser/chromeos/login/session/user_session_manager.h index 62bf49d..84b3324 100644 --- a/chrome/browser/chromeos/login/session/user_session_manager.h +++ b/chrome/browser/chromeos/login/session/user_session_manager.h
@@ -31,6 +31,7 @@ #include "chromeos/dbus/session_manager_client.h" #include "chromeos/login/auth/authenticator.h" #include "chromeos/login/auth/user_context.h" +#include "components/arc/net/always_on_vpn_manager.h" #include "components/user_manager/user.h" #include "components/user_manager/user_manager.h" #include "net/base/network_change_notifier.h" @@ -613,6 +614,8 @@ // Mapped to |chrome::AttemptRestart|, except in tests. base::RepeatingClosure attempt_restart_closure_; + std::unique_ptr<arc::AlwaysOnVpnManager> always_on_vpn_manager_; + base::WeakPtrFactory<UserSessionManager> weak_factory_; DISALLOW_COPY_AND_ASSIGN(UserSessionManager);
diff --git a/chrome/browser/chromeos/login/ui/fake_login_display_host.cc b/chrome/browser/chromeos/login/ui/fake_login_display_host.cc index 0a413b2..ebee6661 100644 --- a/chrome/browser/chromeos/login/ui/fake_login_display_host.cc +++ b/chrome/browser/chromeos/login/ui/fake_login_display_host.cc
@@ -142,8 +142,6 @@ void FakeLoginDisplayHost::ShowResetScreen() {} -void FakeLoginDisplayHost::ShowAccountAccessHelpApp() {} - void FakeLoginDisplayHost::ShowDialogForCaptivePortal() {} void FakeLoginDisplayHost::HideDialogForCaptivePortal() {}
diff --git a/chrome/browser/chromeos/login/ui/fake_login_display_host.h b/chrome/browser/chromeos/login/ui/fake_login_display_host.h index 7c09a82d..a6415c54 100644 --- a/chrome/browser/chromeos/login/ui/fake_login_display_host.h +++ b/chrome/browser/chromeos/login/ui/fake_login_display_host.h
@@ -66,7 +66,6 @@ void ResyncUserData() override; void ShowFeedback() override; void ShowResetScreen() override; - void ShowAccountAccessHelpApp() override; void ShowDialogForCaptivePortal() override; void HideDialogForCaptivePortal() override; void UpdateAddUserButtonStatus() override;
diff --git a/chrome/browser/chromeos/login/ui/login_display_host.h b/chrome/browser/chromeos/login/ui/login_display_host.h index 00272c98..ba21d944 100644 --- a/chrome/browser/chromeos/login/ui/login_display_host.h +++ b/chrome/browser/chromeos/login/ui/login_display_host.h
@@ -197,9 +197,6 @@ // Shows the powerwash dialog. virtual void ShowResetScreen() = 0; - // Start up the help application for trouble signin in. - virtual void ShowAccountAccessHelpApp() = 0; - // In the views case, make the OobeUIDialogDelegate visible so that Captive // Portal web modal can be seen. In webui login, this should be a no-op. virtual void ShowDialogForCaptivePortal() = 0;
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_mojo.cc b/chrome/browser/chromeos/login/ui/login_display_host_mojo.cc index 6cdad38..1fcc680 100644 --- a/chrome/browser/chromeos/login/ui/login_display_host_mojo.cc +++ b/chrome/browser/chromeos/login/ui/login_display_host_mojo.cc
@@ -317,12 +317,6 @@ GetOobeUI()->ForwardAccelerator(kAccelReset); } -void LoginDisplayHostMojo::ShowAccountAccessHelpApp() { - scoped_refptr<HelpAppLauncher>(new HelpAppLauncher(GetNativeWindow())) - ->ShowHelpTopic(HelpAppLauncher::HELP_CANT_ACCESS_ACCOUNT); - dialog_->Show(); -} - void LoginDisplayHostMojo::UpdateAddUserButtonStatus() { DCHECK(GetOobeUI()); LoginScreenClient::Get()->login_screen()->SetAddUserButtonEnabled(
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_mojo.h b/chrome/browser/chromeos/login/ui/login_display_host_mojo.h index 332ae3ea..1591ac01 100644 --- a/chrome/browser/chromeos/login/ui/login_display_host_mojo.h +++ b/chrome/browser/chromeos/login/ui/login_display_host_mojo.h
@@ -93,7 +93,6 @@ void OnCancelPasswordChangedFlow() override; void ShowFeedback() override; void ShowResetScreen() override; - void ShowAccountAccessHelpApp() override; void ShowDialogForCaptivePortal() override; void HideDialogForCaptivePortal() override; void UpdateAddUserButtonStatus() override;
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_webui.cc b/chrome/browser/chromeos/login/ui/login_display_host_webui.cc index 86b3a2e..a77031a 100644 --- a/chrome/browser/chromeos/login/ui/login_display_host_webui.cc +++ b/chrome/browser/chromeos/login/ui/login_display_host_webui.cc
@@ -1177,10 +1177,6 @@ NOTREACHED(); } -void LoginDisplayHostWebUI::ShowAccountAccessHelpApp() { - NOTREACHED(); -} - // This is handled differently in webui. void LoginDisplayHostWebUI::ShowDialogForCaptivePortal() {}
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_webui.h b/chrome/browser/chromeos/login/ui/login_display_host_webui.h index 6f0af3c..e7d0042 100644 --- a/chrome/browser/chromeos/login/ui/login_display_host_webui.h +++ b/chrome/browser/chromeos/login/ui/login_display_host_webui.h
@@ -81,7 +81,6 @@ const user_manager::UserList GetUsers() override; void ShowFeedback() override; void ShowResetScreen() override; - void ShowAccountAccessHelpApp() override; void ShowDialogForCaptivePortal() override; void HideDialogForCaptivePortal() override; void UpdateAddUserButtonStatus() override;
diff --git a/chrome/browser/chromeos/login/users/chrome_user_manager_util.cc b/chrome/browser/chromeos/login/users/chrome_user_manager_util.cc index dfbd69e..1e0c99b2 100644 --- a/chrome/browser/chromeos/login/users/chrome_user_manager_util.cc +++ b/chrome/browser/chromeos/login/users/chrome_user_manager_util.cc
@@ -6,11 +6,17 @@ #include "base/values.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/browser_process_platform_part_chromeos.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" +#include "chrome/browser/chromeos/policy/device_local_account_policy_service.h" #include "chrome/browser/chromeos/policy/minimum_version_policy_handler.h" #include "chrome/browser/chromeos/settings/cros_settings.h" #include "chrome/browser/chromeos/settings/device_settings_provider.h" #include "chromeos/settings/cros_settings_names.h" +#include "components/policy/core/common/cloud/cloud_policy_core.h" +#include "components/policy/core/common/cloud/cloud_policy_store.h" +#include "components/policy/core/common/policy_map.h" +#include "components/policy/policy_constants.h" #include "components/prefs/pref_value_map.h" #include "components/user_manager/user_manager.h" #include "components/user_manager/user_names.h" @@ -43,6 +49,26 @@ return false; return true; } + +bool IsManagedSessionEnabled(const user_manager::User* active_user) { + policy::DeviceLocalAccountPolicyService* service = + g_browser_process->platform_part() + ->browser_policy_connector_chromeos() + ->GetDeviceLocalAccountPolicyService(); + + if (!service) + return false; + + const policy::PolicyMap::Entry* entry = + service->GetBrokerForUser(active_user->GetAccountId().GetUserEmail()) + ->core() + ->store() + ->policy_map() + .Get(policy::key::kDeviceLocalAccountManagedSessionEnabled); + + return entry && entry->value && entry->value->GetBool(); +} + } // namespace bool GetPlatformKnownUserId(const std::string& user_email, @@ -77,22 +103,26 @@ : chromeos::LoginState::LOGGED_IN_NONE; chromeos::LoginState::LoggedInUserType login_user_type; - if (logged_in_state == chromeos::LoginState::LOGGED_IN_NONE) + if (logged_in_state == chromeos::LoginState::LOGGED_IN_NONE) { login_user_type = chromeos::LoginState::LOGGED_IN_USER_NONE; - else if (is_current_user_owner) + } else if (is_current_user_owner) { login_user_type = chromeos::LoginState::LOGGED_IN_USER_OWNER; - else if (active_user->GetType() == user_manager::USER_TYPE_GUEST) + } else if (active_user->GetType() == user_manager::USER_TYPE_GUEST) { login_user_type = chromeos::LoginState::LOGGED_IN_USER_GUEST; - else if (active_user->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT) - login_user_type = chromeos::LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT; - else if (active_user->GetType() == user_manager::USER_TYPE_SUPERVISED) + } else if (active_user->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT) { + login_user_type = + IsManagedSessionEnabled(active_user) + ? chromeos::LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT_MANAGED + : chromeos::LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT; + } else if (active_user->GetType() == user_manager::USER_TYPE_SUPERVISED) { login_user_type = chromeos::LoginState::LOGGED_IN_USER_SUPERVISED; - else if (active_user->GetType() == user_manager::USER_TYPE_KIOSK_APP) + } else if (active_user->GetType() == user_manager::USER_TYPE_KIOSK_APP) { login_user_type = chromeos::LoginState::LOGGED_IN_USER_KIOSK_APP; - else if (active_user->GetType() == user_manager::USER_TYPE_ARC_KIOSK_APP) + } else if (active_user->GetType() == user_manager::USER_TYPE_ARC_KIOSK_APP) { login_user_type = chromeos::LoginState::LOGGED_IN_USER_ARC_KIOSK_APP; - else + } else { login_user_type = chromeos::LoginState::LOGGED_IN_USER_REGULAR; + } if (primary_user) { chromeos::LoginState::Get()->SetLoggedInStateAndPrimaryUser(
diff --git a/chrome/browser/chromeos/policy/configuration_policy_handler_chromeos.cc b/chrome/browser/chromeos/policy/configuration_policy_handler_chromeos.cc index d746172..4781e178 100644 --- a/chrome/browser/chromeos/policy/configuration_policy_handler_chromeos.cc +++ b/chrome/browser/chromeos/policy/configuration_policy_handler_chromeos.cc
@@ -204,6 +204,7 @@ chromeos::onc::ReadDictionaryFromJson(onc_blob); if (!root_dict) { errors->AddError(policy_name(), IDS_POLICY_NETWORK_CONFIG_PARSE_FAILED); + errors->SetDebugInfo(policy_name(), "ERROR: JSON parse error"); return false; } @@ -222,10 +223,31 @@ root_dict = validator.ValidateAndRepairObject( &chromeos::onc::kToplevelConfigurationSignature, *root_dict, &validation_result); + + // Pass error/warning message and non-localized debug_info to + // PolicyErrorMap. + std::vector<base::StringPiece> messages; + for (const chromeos::onc::Validator::ValidationIssue& issue : + validator.validation_issues()) { + messages.push_back(issue.message); + } + std::string debug_info = base::JoinString(messages, "\n"); + if (validation_result == chromeos::onc::Validator::VALID_WITH_WARNINGS) - errors->AddError(policy_name(), IDS_POLICY_NETWORK_CONFIG_IMPORT_PARTIAL); + errors->AddError(policy_name(), IDS_POLICY_NETWORK_CONFIG_IMPORT_PARTIAL, + debug_info); else if (validation_result == chromeos::onc::Validator::INVALID) - errors->AddError(policy_name(), IDS_POLICY_NETWORK_CONFIG_IMPORT_FAILED); + errors->AddError(policy_name(), IDS_POLICY_NETWORK_CONFIG_IMPORT_FAILED, + debug_info); + + if (!validator.validation_issues().empty()) { + std::vector<std::string> messages; + for (const chromeos::onc::Validator::ValidationIssue& issue : + validator.validation_issues()) { + messages.push_back(issue.message); + } + errors->SetDebugInfo(policy_name(), base::JoinString(messages, "\n")); + } // In any case, don't reject the policy as some networks or certificates // could still be applied.
diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.cc b/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.cc index f8bbd6b..0d6aef17 100644 --- a/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.cc +++ b/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.cc
@@ -12,6 +12,7 @@ #include "base/sequenced_task_runner.h" #include "chrome/browser/chromeos/login/startup_utils.h" #include "chrome/browser/chromeos/policy/device_policy_decoder_chromeos.h" +#include "chrome/browser/chromeos/policy/value_validation/onc_device_policy_value_validator.h" #include "chrome/browser/chromeos/settings/install_attributes.h" #include "components/ownership/owner_key_util.h" #include "components/policy/core/common/cloud/cloud_policy_constants.h" @@ -78,6 +79,9 @@ } void DeviceCloudPolicyStoreChromeOS::Load() { + // Cancel all pending requests. + weak_factory_.InvalidateWeakPtrs(); + device_settings_service_->Load(); } @@ -120,14 +124,15 @@ validator->ValidateDomain(install_attributes_->GetDomain()); validator->ValidatePolicyType(dm_protocol::kChromeDevicePolicyType); validator->ValidatePayload(); + validator->ValidateValues(std::make_unique<ONCDevicePolicyValueValidator>()); return validator; } void DeviceCloudPolicyStoreChromeOS::OnPolicyToStoreValidated( DeviceCloudPolicyValidator* validator) { + validation_result_ = validator->GetValidationResult(); if (!validator->success()) { status_ = STATUS_VALIDATION_ERROR; - validation_status_ = validator->status(); NotifyStoreError(); return; }
diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos_unittest.cc b/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos_unittest.cc index 0134f56..7f418a5 100644 --- a/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos_unittest.cc +++ b/chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos_unittest.cc
@@ -19,7 +19,9 @@ #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/fake_cryptohome_client.h" #include "chromeos/dbus/util/tpm_util.h" +#include "chromeos/network/onc/onc_test_utils.h" #include "components/policy/core/common/cloud/cloud_policy_constants.h" +#include "components/policy/core/common/cloud/mock_cloud_policy_store.h" #include "components/policy/policy_constants.h" #include "components/policy/proto/chrome_device_policy.pb.h" #include "components/policy/proto/device_management_backend.pb.h" @@ -58,6 +60,8 @@ void SetUp() override { DeviceSettingsTestBase::SetUp(); + store_->AddObserver(&observer_); + dbus_setter_->SetCryptohomeClient( std::unique_ptr<chromeos::CryptohomeClient>(fake_cryptohome_client_)); @@ -73,6 +77,11 @@ ASSERT_EQ(chromeos::InstallAttributes::LOCK_SUCCESS, result); } + void TearDown() override { + store_->RemoveObserver(&observer_); + DeviceSettingsTestBase::TearDown(); + } + void ExpectFailure(CloudPolicyStore::Status expected_status) { EXPECT_EQ(expected_status, store_->status()); EXPECT_TRUE(store_->is_initialized()); @@ -110,6 +119,7 @@ } void ResetToNonEnterprise() { + store_->RemoveObserver(&observer_); store_.reset(); chromeos::tpm_util::InstallAttributesSet("enterprise.owned", std::string()); install_attributes_.reset( @@ -117,6 +127,7 @@ store_.reset(new DeviceCloudPolicyStoreChromeOS( &device_settings_service_, install_attributes_.get(), base::ThreadTaskRunnerHandle::Get())); + store_->AddObserver(&observer_); } ScopedTestingLocalState local_state_; @@ -124,6 +135,7 @@ std::unique_ptr<chromeos::InstallAttributes> install_attributes_; std::unique_ptr<DeviceCloudPolicyStoreChromeOS> store_; + MockCloudPolicyStoreObserver observer_; private: DISALLOW_COPY_AND_ASSIGN(DeviceCloudPolicyStoreChromeOSTest); @@ -237,6 +249,31 @@ store_->policy_signature_public_key()); } +TEST_F(DeviceCloudPolicyStoreChromeOSTest, StoreValueValidationError) { + PrepareExistingPolicy(); + + std::string onc_policy = chromeos::onc::test_utils::ReadTestData( + "toplevel_with_unknown_fields.onc"); + device_policy_.payload() + .mutable_open_network_configuration() + ->set_open_network_configuration(onc_policy); + device_policy_.Build(); + + EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); + + store_->Store(device_policy_.policy()); + FlushDeviceSettings(); + const CloudPolicyValidatorBase::ValidationResult* validation_result = + store_->validation_result(); + EXPECT_EQ(CloudPolicyStore::STATUS_OK, store_->status()); + EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_OK, validation_result->status); + EXPECT_EQ(3u, validation_result->value_validation_issues.size()); + EXPECT_EQ(device_policy_.policy_data().policy_token(), + validation_result->policy_token); + EXPECT_EQ(device_policy_.policy().policy_data_signature(), + validation_result->policy_data_signature); +} + TEST_F(DeviceCloudPolicyStoreChromeOSTest, InstallInitialPolicySuccess) { PrepareNewSigningKey(); store_->InstallInitialPolicy(device_policy_.policy());
diff --git a/chrome/browser/chromeos/policy/device_local_account_policy_store.cc b/chrome/browser/chromeos/policy/device_local_account_policy_store.cc index ba4594d..963c52b4 100644 --- a/chrome/browser/chromeos/policy/device_local_account_policy_store.cc +++ b/chrome/browser/chromeos/policy/device_local_account_policy_store.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/callback.h" #include "base/sequenced_task_runner.h" +#include "chrome/browser/chromeos/policy/value_validation/onc_user_policy_value_validator.h" #include "components/ownership/owner_key_util.h" #include "components/policy/core/common/cloud/device_management_service.h" #include "components/policy/core/common/external_data_fetcher.h" @@ -39,13 +40,25 @@ DeviceLocalAccountPolicyStore::~DeviceLocalAccountPolicyStore() {} void DeviceLocalAccountPolicyStore::Load() { + // Cancel all pending requests. weak_factory_.InvalidateWeakPtrs(); + session_manager_client_->RetrieveDeviceLocalAccountPolicy( account_id_, base::Bind(&DeviceLocalAccountPolicyStore::ValidateLoadedPolicyBlob, weak_factory_.GetWeakPtr(), true /*validate_in_background*/)); } +std::unique_ptr<UserCloudPolicyValidator> +DeviceLocalAccountPolicyStore::CreateValidator( + std::unique_ptr<em::PolicyFetchResponse> policy, + CloudPolicyValidatorBase::ValidateTimestampOption option) { + auto validator = + UserCloudPolicyStoreBase::CreateValidator(std::move(policy), option); + validator->ValidateValues(std::make_unique<ONCUserPolicyValueValidator>()); + return validator; +} + void DeviceLocalAccountPolicyStore::LoadImmediately() { // This blocking D-Bus call is in the startup path and will block the UI // thread. This only happens when the Profile is created synchronously, which @@ -69,11 +82,13 @@ void DeviceLocalAccountPolicyStore::Store( const em::PolicyFetchResponse& policy) { + // Cancel all pending requests. weak_factory_.InvalidateWeakPtrs(); + CheckKeyAndValidate( true, std::make_unique<em::PolicyFetchResponse>(policy), true /*validate_in_background*/, - base::Bind(&DeviceLocalAccountPolicyStore::StoreValidatedPolicy, + base::Bind(&DeviceLocalAccountPolicyStore::OnPolicyToStoreValidated, weak_factory_.GetWeakPtr())); } @@ -105,7 +120,7 @@ UserCloudPolicyValidator* validator) { DCHECK(!signature_validation_public_key.empty()); - validation_status_ = validator->status(); + validation_result_ = validator->GetValidationResult(); if (!validator->success()) { status_ = STATUS_VALIDATION_ERROR; NotifyStoreError(); @@ -119,12 +134,12 @@ NotifyStoreLoaded(); } -void DeviceLocalAccountPolicyStore::StoreValidatedPolicy( +void DeviceLocalAccountPolicyStore::OnPolicyToStoreValidated( const std::string& signature_validation_public_key_unused, UserCloudPolicyValidator* validator) { + validation_result_ = validator->GetValidationResult(); if (!validator->success()) { - status_ = CloudPolicyStore::STATUS_VALIDATION_ERROR; - validation_status_ = validator->status(); + status_ = STATUS_VALIDATION_ERROR; NotifyStoreError(); return; }
diff --git a/chrome/browser/chromeos/policy/device_local_account_policy_store.h b/chrome/browser/chromeos/policy/device_local_account_policy_store.h index 0021ecab..b711a6c6 100644 --- a/chrome/browser/chromeos/policy/device_local_account_policy_store.h +++ b/chrome/browser/chromeos/policy/device_local_account_policy_store.h
@@ -48,6 +48,12 @@ // Loads the policy synchronously on the current thread. void LoadImmediately(); + protected: + // UserCloudPolicyStoreBase: + std::unique_ptr<UserCloudPolicyValidator> CreateValidator( + std::unique_ptr<enterprise_management::PolicyFetchResponse> policy, + CloudPolicyValidatorBase::ValidateTimestampOption option) override; + private: // The callback invoked once policy validation is complete. Passed are the // used public key and the validator. @@ -66,7 +72,7 @@ UserCloudPolicyValidator* validator); // Sends the policy blob to session_manager for storing after validation. - void StoreValidatedPolicy( + void OnPolicyToStoreValidated( const std::string& signature_validation_public_key_unused, UserCloudPolicyValidator* validator);
diff --git a/chrome/browser/chromeos/policy/enrollment_handler_chromeos.cc b/chrome/browser/chromeos/policy/enrollment_handler_chromeos.cc index 50f0428c..de36090 100644 --- a/chrome/browser/chromeos/policy/enrollment_handler_chromeos.cc +++ b/chrome/browser/chromeos/policy/enrollment_handler_chromeos.cc
@@ -9,6 +9,7 @@ #include "base/base64.h" #include "base/bind.h" #include "base/command_line.h" +#include "base/guid.h" #include "base/location.h" #include "base/logging.h" #include "base/sequenced_task_runner.h" @@ -490,7 +491,9 @@ return; } - device_id_ = validator->policy_data()->device_id(); + // Don't use the device ID within the validated policy -- it's common among + // all of the offline-enrolled devices. + device_id_ = base::GenerateGUID(); policy_ = std::move(validator->policy()); // The steps for OAuth2 token fetching is skipped for the OFFLINE_DEMO_MODE.
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos.cc b/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos.cc index 3336601..995d874 100644 --- a/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos.cc +++ b/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos.cc
@@ -13,6 +13,7 @@ #include "base/metrics/histogram_macros.h" #include "base/sequenced_task_runner.h" #include "chrome/browser/chromeos/policy/cached_policy_key_loader_chromeos.h" +#include "chrome/browser/chromeos/policy/value_validation/onc_user_policy_value_validator.h" #include "chrome/browser/lifetime/application_lifetime.h" #include "chromeos/cryptohome/cryptohome_parameters.h" #include "google_apis/gaia/gaia_auth_util.h" @@ -60,6 +61,7 @@ // Cancel all pending requests. weak_factory_.InvalidateWeakPtrs(); + std::unique_ptr<em::PolicyFetchResponse> response( new em::PolicyFetchResponse(policy)); cached_policy_key_loader_->EnsurePolicyKeyLoaded( @@ -70,12 +72,23 @@ void UserCloudPolicyStoreChromeOS::Load() { // Cancel all pending requests. weak_factory_.InvalidateWeakPtrs(); + session_manager_client_->RetrievePolicyForUser( cryptohome::CreateAccountIdentifierFromAccountId(account_id_), base::BindOnce(&UserCloudPolicyStoreChromeOS::OnPolicyRetrieved, weak_factory_.GetWeakPtr())); } +std::unique_ptr<UserCloudPolicyValidator> +UserCloudPolicyStoreChromeOS::CreateValidator( + std::unique_ptr<em::PolicyFetchResponse> policy, + CloudPolicyValidatorBase::ValidateTimestampOption option) { + auto validator = + UserCloudPolicyStoreBase::CreateValidator(std::move(policy), option); + validator->ValidateValues(std::make_unique<ONCUserPolicyValueValidator>()); + return validator; +} + void UserCloudPolicyStoreChromeOS::LoadImmediately() { // This blocking D-Bus call is in the startup path and will block the UI // thread. This only happens when the Profile is created synchronously, which @@ -153,13 +166,11 @@ UserCloudPolicyValidator* validator) { DCHECK(!is_active_directory_); - validation_status_ = validator->status(); + UMA_HISTOGRAM_ENUMERATION("Enterprise.UserPolicyValidationStoreStatus", + validator->status(), + UserCloudPolicyValidator::VALIDATION_STATUS_SIZE); - UMA_HISTOGRAM_ENUMERATION( - "Enterprise.UserPolicyValidationStoreStatus", - validation_status_, - UserCloudPolicyValidator::VALIDATION_STATUS_SIZE); - + validation_result_ = validator->GetValidationResult(); if (!validator->success()) { status_ = STATUS_VALIDATION_ERROR; NotifyStoreError(); @@ -248,13 +259,11 @@ void UserCloudPolicyStoreChromeOS::OnRetrievedPolicyValidated( UserCloudPolicyValidator* validator) { - validation_status_ = validator->status(); + UMA_HISTOGRAM_ENUMERATION("Enterprise.UserPolicyValidationLoadStatus", + validator->status(), + UserCloudPolicyValidator::VALIDATION_STATUS_SIZE); - UMA_HISTOGRAM_ENUMERATION( - "Enterprise.UserPolicyValidationLoadStatus", - validation_status_, - UserCloudPolicyValidator::VALIDATION_STATUS_SIZE); - + validation_result_ = validator->GetValidationResult(); if (!validator->success()) { status_ = STATUS_VALIDATION_ERROR; NotifyStoreError();
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos.h b/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos.h index 0327877..2a4b63f2 100644 --- a/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos.h +++ b/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos.h
@@ -58,6 +58,12 @@ // Loads the policy synchronously on the current thread. void LoadImmediately(); + protected: + // UserCloudPolicyStoreBase: + std::unique_ptr<UserCloudPolicyValidator> CreateValidator( + std::unique_ptr<enterprise_management::PolicyFetchResponse> policy, + CloudPolicyValidatorBase::ValidateTimestampOption option) override; + private: // Starts validation of |policy| before storing it. void ValidatePolicyForStore(
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos_unittest.cc b/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos_unittest.cc index e95a090..cf76ca5 100644 --- a/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos_unittest.cc +++ b/chrome/browser/chromeos/policy/user_cloud_policy_store_chromeos_unittest.cc
@@ -23,6 +23,7 @@ #include "chromeos/dbus/fake_cryptohome_client.h" #include "chromeos/dbus/fake_session_manager_client.h" #include "chromeos/dbus/util/account_identifier_operators.h" +#include "chromeos/network/onc/onc_test_utils.h" #include "components/policy/core/common/cloud/cloud_policy_constants.h" #include "components/policy/core/common/cloud/mock_cloud_policy_store.h" #include "components/policy/core/common/cloud/policy_builder.h" @@ -41,6 +42,7 @@ using testing::_; using testing::AllOf; using testing::Eq; +using testing::InvokeWithoutArgs; using testing::Mock; using testing::Property; using testing::Return; @@ -146,15 +148,32 @@ void TearDown() override { store_->RemoveObserver(&observer_); store_.reset(); - base::RunLoop().RunUntilIdle(); } // Install an expectation on |observer_| for an error code. - void ExpectError(CloudPolicyStore::Status error) { - EXPECT_CALL( - observer_, - OnStoreError(AllOf(Eq(store_.get()), - Property(&CloudPolicyStore::status, Eq(error))))); + // This method should be called after a store->Store()/Load() call has been + // initiated. The expected OnStoreError call will be initiated asynchronously + // from this run_loop's iteration. + void RunLoopAndExpectError(CloudPolicyStore::Status error) { + base::RunLoop run_loop; + EXPECT_CALL(observer_, OnStoreError(AllOf( + Eq(store_.get()), + Property(&CloudPolicyStore::status, Eq(error))))) + .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); + run_loop.Run(); + Mock::VerifyAndClearExpectations(&observer_); + } + + // Install an expectation on |observer_| for a successful load operation. + // This method should be called after a store->Store()/Load() call has been + // initiated. The expected OnStoreLoaded call will be initiated asynchronously + // from this run_loop's iteration. + void RunLoopAndExpectLoaded() { + base::RunLoop run_loop; + EXPECT_CALL(observer_, OnStoreLoaded(store_.get())) + .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); + run_loop.Run(); + Mock::VerifyAndClearExpectations(&observer_); } // Triggers a store_->Load() operation, handles the expected call to @@ -163,7 +182,6 @@ // Issue a load command. session_manager_client_->set_user_policy(cryptohome_id_, response); store_->Load(); - base::RunLoop().RunUntilIdle(); } // Verifies that store_->policy_map() has the HomepageLocation entry with @@ -198,8 +216,7 @@ EXPECT_TRUE(previous_policy.Equals(store_->policy_map())); EXPECT_EQ(initial_status, store_->status()); - EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); - base::RunLoop().RunUntilIdle(); + RunLoopAndExpectLoaded(); ASSERT_TRUE(store_->policy()); EXPECT_EQ(policy_.policy_data().SerializeAsString(), store_->policy()->SerializeAsString()); @@ -262,7 +279,8 @@ "garbage"; store_->Store(policy_.policy()); - base::RunLoop().RunUntilIdle(); + RunLoopAndExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); + EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status()); EXPECT_EQ(std::string(), store_->policy_signature_public_key()); } @@ -276,7 +294,8 @@ policy_.policy().clear_new_public_key_verification_signature_deprecated(); store_->Store(policy_.policy()); - base::RunLoop().RunUntilIdle(); + RunLoopAndExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); + EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status()); EXPECT_EQ(std::string(), store_->policy_signature_public_key()); } @@ -306,7 +325,8 @@ policy_.policy().clear_new_public_key_verification_signature_deprecated(); store_->Store(policy_.policy()); - base::RunLoop().RunUntilIdle(); + RunLoopAndExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); + EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status()); EXPECT_EQ(std::string(), store_->policy_signature_public_key()); } @@ -319,7 +339,8 @@ "garbage"; store_->Store(policy_.policy()); - base::RunLoop().RunUntilIdle(); + RunLoopAndExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); + EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status()); EXPECT_EQ(std::string(), store_->policy_signature_public_key()); } @@ -328,9 +349,8 @@ // Let store policy fail. session_manager_client_->set_store_policy_success(false); - ExpectError(CloudPolicyStore::STATUS_STORE_ERROR); store_->Store(policy_.policy()); - base::RunLoop().RunUntilIdle(); + RunLoopAndExpectError(CloudPolicyStore::STATUS_STORE_ERROR); EXPECT_FALSE(store_->policy()); EXPECT_TRUE(store_->policy_map().empty()); @@ -342,23 +362,41 @@ policy_.policy_data().clear_policy_type(); policy_.Build(); - // Store policy. - ExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); - store_->Store(policy_.policy()); - base::RunLoop().RunUntilIdle(); + RunLoopAndExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); + EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status()); EXPECT_EQ(std::string(), store_->policy_signature_public_key()); } +TEST_F(UserCloudPolicyStoreChromeOSTest, StoreValueValidationError) { + std::string onc_policy = chromeos::onc::test_utils::ReadTestData( + "toplevel_with_unknown_fields.onc"); + policy_.payload().mutable_opennetworkconfiguration()->set_value(onc_policy); + policy_.Build(); + + store_->Store(policy_.policy()); + RunLoopAndExpectLoaded(); + + const CloudPolicyValidatorBase::ValidationResult* validation_result = + store_->validation_result(); + EXPECT_EQ(CloudPolicyStore::STATUS_OK, store_->status()); + ASSERT_TRUE(validation_result); + EXPECT_EQ(CloudPolicyValidatorBase::VALIDATION_OK, validation_result->status); + EXPECT_EQ(3u, validation_result->value_validation_issues.size()); + EXPECT_EQ(policy_.policy_data().policy_token(), + validation_result->policy_token); + EXPECT_EQ(policy_.policy().policy_data_signature(), + validation_result->policy_data_signature); +} + TEST_F(UserCloudPolicyStoreChromeOSTest, StoreWithoutPolicyKey) { // Make the dbus call to cryptohome fail. cryptohome_client_.SetServiceIsAvailable(false); - // Store policy. - ExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); store_->Store(policy_.policy()); - base::RunLoop().RunUntilIdle(); + RunLoopAndExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); + EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status()); EXPECT_EQ(std::string(), store_->policy_signature_public_key()); } @@ -367,10 +405,9 @@ // Break the signature. policy_.policy().mutable_policy_data_signature()->append("garbage"); - // Store policy. - ExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); store_->Store(policy_.policy()); - base::RunLoop().RunUntilIdle(); + RunLoopAndExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); + EXPECT_EQ(CloudPolicyStore::STATUS_VALIDATION_ERROR, store_->status()); EXPECT_EQ(std::string(), store_->policy_signature_public_key()); } @@ -385,9 +422,11 @@ policy_.SetDefaultNewSigningKey(); policy_.policy_data().clear_policy_type(); policy_.Build(); - ExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); + + // Store policy store_->Store(policy_.policy()); - base::RunLoop().RunUntilIdle(); + RunLoopAndExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); + // Still the initial public key is exposed. EXPECT_EQ(initial_public_key, store_->policy_signature_public_key()); @@ -404,9 +443,8 @@ } TEST_F(UserCloudPolicyStoreChromeOSTest, Load) { - EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); ASSERT_NO_FATAL_FAILURE(PerformPolicyLoad(policy_.GetBlob())); - Mock::VerifyAndClearExpectations(&observer_); + RunLoopAndExpectLoaded(); // Verify that the policy has been loaded. ASSERT_TRUE(store_->policy()); @@ -419,9 +457,8 @@ } TEST_F(UserCloudPolicyStoreChromeOSTest, LoadNoPolicy) { - EXPECT_CALL(observer_, OnStoreLoaded(store_.get())); ASSERT_NO_FATAL_FAILURE(PerformPolicyLoad("")); - Mock::VerifyAndClearExpectations(&observer_); + RunLoopAndExpectLoaded(); // Verify no policy has been installed. EXPECT_FALSE(store_->policy()); @@ -431,8 +468,8 @@ } TEST_F(UserCloudPolicyStoreChromeOSTest, LoadInvalidPolicy) { - ExpectError(CloudPolicyStore::STATUS_PARSE_ERROR); ASSERT_NO_FATAL_FAILURE(PerformPolicyLoad("invalid")); + RunLoopAndExpectError(CloudPolicyStore::STATUS_PARSE_ERROR); // Verify no policy has been installed. EXPECT_FALSE(store_->policy()); @@ -445,8 +482,8 @@ policy_.policy_data().clear_policy_type(); policy_.Build(); - ExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); ASSERT_NO_FATAL_FAILURE(PerformPolicyLoad(policy_.GetBlob())); + RunLoopAndExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); VerifyStoreHasValidationError(); EXPECT_EQ(std::string(), store_->policy_signature_public_key()); } @@ -454,8 +491,8 @@ TEST_F(UserCloudPolicyStoreChromeOSTest, LoadNoKey) { // The loaded policy can't be verified without the public key. ASSERT_TRUE(base::DeleteFile(user_policy_key_file(), false)); - ExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); ASSERT_NO_FATAL_FAILURE(PerformPolicyLoad(policy_.GetBlob())); + RunLoopAndExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); VerifyStoreHasValidationError(); EXPECT_EQ(std::string(), store_->policy_signature_public_key()); } @@ -463,8 +500,8 @@ TEST_F(UserCloudPolicyStoreChromeOSTest, LoadInvalidSignature) { // Break the signature. policy_.policy().mutable_policy_data_signature()->append("garbage"); - ExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); ASSERT_NO_FATAL_FAILURE(PerformPolicyLoad(policy_.GetBlob())); + RunLoopAndExpectError(CloudPolicyStore::STATUS_VALIDATION_ERROR); VerifyStoreHasValidationError(); EXPECT_EQ(std::string(), store_->policy_signature_public_key()); }
diff --git a/chrome/browser/chromeos/policy/value_validation/onc_device_policy_value_validator.cc b/chrome/browser/chromeos/policy/value_validation/onc_device_policy_value_validator.cc new file mode 100644 index 0000000..7bd11e4e --- /dev/null +++ b/chrome/browser/chromeos/policy/value_validation/onc_device_policy_value_validator.cc
@@ -0,0 +1,31 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/policy/value_validation/onc_device_policy_value_validator.h" + +#include "components/policy/policy_constants.h" +#include "components/policy/proto/chrome_device_policy.pb.h" + +namespace em = enterprise_management; + +namespace policy { + +ONCDevicePolicyValueValidator::ONCDevicePolicyValueValidator() + : ONCPolicyValueValidatorBase<em::ChromeDeviceSettingsProto>( + key::kDeviceOpenNetworkConfiguration, + ::onc::ONCSource::ONC_SOURCE_DEVICE_POLICY) {} + +base::Optional<std::string> +ONCDevicePolicyValueValidator::GetONCStringFromPayload( + const em::ChromeDeviceSettingsProto& policy_payload) const { + if (policy_payload.has_open_network_configuration() && + policy_payload.open_network_configuration() + .has_open_network_configuration()) { + return policy_payload.open_network_configuration() + .open_network_configuration(); + } + return base::nullopt; +} + +} // namespace policy
diff --git a/chrome/browser/chromeos/policy/value_validation/onc_device_policy_value_validator.h b/chrome/browser/chromeos/policy/value_validation/onc_device_policy_value_validator.h new file mode 100644 index 0000000..a9b301d --- /dev/null +++ b/chrome/browser/chromeos/policy/value_validation/onc_device_policy_value_validator.h
@@ -0,0 +1,34 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_POLICY_VALUE_VALIDATION_ONC_DEVICE_POLICY_VALUE_VALIDATOR_H_ +#define CHROME_BROWSER_CHROMEOS_POLICY_VALUE_VALIDATION_ONC_DEVICE_POLICY_VALUE_VALIDATOR_H_ + +#include "chrome/browser/chromeos/policy/value_validation/onc_policy_value_validator_base.h" + +namespace enterprise_management { +class ChromeDeviceSettingsProto; +} + +namespace policy { + +class ONCDevicePolicyValueValidator + : public ONCPolicyValueValidatorBase< + enterprise_management::ChromeDeviceSettingsProto> { + public: + ONCDevicePolicyValueValidator(); + + protected: + // ONCPolicyValueValidatorBase: + base::Optional<std::string> GetONCStringFromPayload( + const enterprise_management::ChromeDeviceSettingsProto& policy_payload) + const override; + + private: + DISALLOW_COPY_AND_ASSIGN(ONCDevicePolicyValueValidator); +}; + +} // namespace policy + +#endif // CHROME_BROWSER_CHROMEOS_POLICY_VALUE_VALIDATION_ONC_DEVICE_POLICY_VALUE_VALIDATOR_H_
diff --git a/chrome/browser/chromeos/policy/value_validation/onc_policy_value_validator_base.h b/chrome/browser/chromeos/policy/value_validation/onc_policy_value_validator_base.h new file mode 100644 index 0000000..e2f84b1 --- /dev/null +++ b/chrome/browser/chromeos/policy/value_validation/onc_policy_value_validator_base.h
@@ -0,0 +1,84 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_POLICY_VALUE_VALIDATION_ONC_POLICY_VALUE_VALIDATOR_BASE_H_ +#define CHROME_BROWSER_CHROMEOS_POLICY_VALUE_VALIDATION_ONC_POLICY_VALUE_VALIDATOR_BASE_H_ + +#include "components/policy/core/common/cloud/policy_value_validator.h" + +#include "chromeos/network/onc/onc_signature.h" +#include "chromeos/network/onc/onc_utils.h" +#include "chromeos/network/onc/onc_validator.h" +#include "components/onc/onc_constants.h" + +namespace policy { + +// Base class for validating OpenNetworkConfiguration (ONC) device and network +// policy values. Subclasses will implement the access to the concrete policy +// fields. +template <typename PayloadProto> +class ONCPolicyValueValidatorBase : public PolicyValueValidator<PayloadProto> { + public: + ONCPolicyValueValidatorBase(const std::string& onc_policy_name, + ::onc::ONCSource source) + : policy_name_(onc_policy_name), source_(source) {} + virtual ~ONCPolicyValueValidatorBase() {} + + // PolicyValueValidator: + bool ValidateValues( + const PayloadProto& policy_payload, + std::vector<ValueValidationIssue>* out_validation_issues) const override { + base::Optional<std::string> onc_string = + GetONCStringFromPayload(policy_payload); + + if (!onc_string.has_value()) + return true; + + std::unique_ptr<base::Value> root_dict = + chromeos::onc::ReadDictionaryFromJson(onc_string.value()); + if (!root_dict.get()) { + out_validation_issues->push_back({policy_name_, + ValueValidationIssue::Severity::kError, + "JSON parse error."}); + return false; + } + + chromeos::onc::Validator validator( + false, // Ignore unknown fields. + false, // Ignore invalid recommended field names. + true, // Fail on missing fields. + true, // Validate for managed ONC. + true); // Log warnings. + validator.SetOncSource(source_); + chromeos::onc::Validator::Result validation_result; + root_dict = validator.ValidateAndRepairObject( + &chromeos::onc::kToplevelConfigurationSignature, *root_dict, + &validation_result); + + bool error_found = false; + for (const chromeos::onc::Validator::ValidationIssue& issue : + validator.validation_issues()) { + ValueValidationIssue::Severity severity = + issue.is_error ? ValueValidationIssue::Severity::kError + : ValueValidationIssue::Severity::kWarning; + out_validation_issues->push_back({policy_name_, severity, issue.message}); + error_found |= issue.is_error; + } + return !error_found; + } + + protected: + virtual base::Optional<std::string> GetONCStringFromPayload( + const PayloadProto& policy_payload) const = 0; + + private: + const std::string policy_name_; + const ::onc::ONCSource source_; + + DISALLOW_COPY_AND_ASSIGN(ONCPolicyValueValidatorBase); +}; + +} // namespace policy + +#endif // CHROME_BROWSER_CHROMEOS_POLICY_VALUE_VALIDATION_ONC_POLICY_VALUE_VALIDATOR_BASE_H_
diff --git a/chrome/browser/chromeos/policy/value_validation/onc_user_policy_value_validator.cc b/chrome/browser/chromeos/policy/value_validation/onc_user_policy_value_validator.cc new file mode 100644 index 0000000..01382f3 --- /dev/null +++ b/chrome/browser/chromeos/policy/value_validation/onc_user_policy_value_validator.cc
@@ -0,0 +1,31 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/policy/value_validation/onc_user_policy_value_validator.h" + +#include "components/policy/policy_constants.h" +#include "components/policy/proto/cloud_policy.pb.h" + +namespace em = enterprise_management; + +namespace policy { + +ONCUserPolicyValueValidator::ONCUserPolicyValueValidator() + : ONCPolicyValueValidatorBase<em::CloudPolicySettings>( + key::kOpenNetworkConfiguration, + ::onc::ONCSource::ONC_SOURCE_USER_POLICY) {} + +base::Optional<std::string> +ONCUserPolicyValueValidator::GetONCStringFromPayload( + const em::CloudPolicySettings& policy_payload) const { + if (policy_payload.has_opennetworkconfiguration()) { + const em::StringPolicyProto& policy_proto = + policy_payload.opennetworkconfiguration(); + if (policy_proto.has_value()) + return policy_proto.value(); + } + return base::nullopt; +} + +} // namespace policy
diff --git a/chrome/browser/chromeos/policy/value_validation/onc_user_policy_value_validator.h b/chrome/browser/chromeos/policy/value_validation/onc_user_policy_value_validator.h new file mode 100644 index 0000000..8a356215 --- /dev/null +++ b/chrome/browser/chromeos/policy/value_validation/onc_user_policy_value_validator.h
@@ -0,0 +1,34 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_POLICY_VALUE_VALIDATION_ONC_USER_POLICY_VALUE_VALIDATOR_H_ +#define CHROME_BROWSER_CHROMEOS_POLICY_VALUE_VALIDATION_ONC_USER_POLICY_VALUE_VALIDATOR_H_ + +#include "chrome/browser/chromeos/policy/value_validation/onc_policy_value_validator_base.h" + +namespace enterprise_management { +class CloudPolicySettings; +} + +namespace policy { + +class ONCUserPolicyValueValidator + : public ONCPolicyValueValidatorBase< + enterprise_management::CloudPolicySettings> { + public: + ONCUserPolicyValueValidator(); + + protected: + // ONCPolicyValueValidatorBase: + base::Optional<std::string> GetONCStringFromPayload( + const enterprise_management::CloudPolicySettings& policy_payload) + const override; + + private: + DISALLOW_COPY_AND_ASSIGN(ONCUserPolicyValueValidator); +}; + +} // namespace policy + +#endif // CHROME_BROWSER_CHROMEOS_POLICY_VALUE_VALIDATION_ONC_USER_POLICY_VALUE_VALIDATOR_H_
diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc index 659167ea..349f17e 100644 --- a/chrome/browser/chromeos/preferences.cc +++ b/chrome/browser/chromeos/preferences.cc
@@ -119,9 +119,13 @@ // perhaps after sync system initialization. Whitelist these prefs so that any // values obtained via sync before the prefs are registered will be stored. const char* const kAshForeignSyncablePrefs[] = { - ash::prefs::kEnableAutoScreenLock, ash::prefs::kEnableStylusTools, - ash::prefs::kLaunchPaletteOnEjectEvent, ash::prefs::kShelfAlignment, - ash::prefs::kShelfAutoHideBehavior, ash::prefs::kTapDraggingEnabled, + ash::prefs::kEnableAutoScreenLock, + ash::prefs::kEnableStylusTools, + ash::prefs::kLaunchPaletteOnEjectEvent, + ash::prefs::kMessageCenterLockScreenMode, + ash::prefs::kShelfAlignment, + ash::prefs::kShelfAutoHideBehavior, + ash::prefs::kTapDraggingEnabled, }; for (const auto* pref : kAshForeignSyncablePrefs) registry->WhitelistLateRegistrationPrefForSync(pref);
diff --git a/chrome/browser/client_hints/client_hints.cc b/chrome/browser/client_hints/client_hints.cc index bbb2cb8..23a3933 100644 --- a/chrome/browser/client_hints/client_hints.cc +++ b/chrome/browser/client_hints/client_hints.cc
@@ -12,9 +12,8 @@ #include "base/rand_util.h" #include "base/strings/string_number_conversions.h" #include "build/build_config.h" +#include "chrome/browser/browser_process.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" -#include "chrome/browser/net/nqe/ui_network_quality_estimator_service.h" -#include "chrome/browser/net/nqe/ui_network_quality_estimator_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/client_hints/client_hints.h" #include "components/content_settings/core/browser/cookie_settings.h" @@ -27,6 +26,7 @@ #include "net/http/http_request_headers.h" #include "net/nqe/effective_connection_type.h" #include "net/url_request/url_request.h" +#include "services/network/public/cpp/network_quality_tracker.h" #include "third_party/blink/public/common/client_hints/client_hints.h" #include "third_party/blink/public/common/device_memory/approximated_device_memory.h" #include "third_party/blink/public/platform/web_client_hints_type.h" @@ -278,16 +278,15 @@ } } - UINetworkQualityEstimatorService* estimator = - UINetworkQualityEstimatorServiceFactory::GetForProfile( - Profile::FromBrowserContext(context)); + network::NetworkQualityTracker* network_quality_tracker = + g_browser_process->network_quality_tracker(); if (web_client_hints.IsEnabled(blink::mojom::WebClientHintsType::kRtt)) { additional_headers->SetHeader( blink::kClientHintsHeaderMapping[static_cast<int>( blink::mojom::WebClientHintsType::kRtt)], - base::NumberToString( - internal::RoundRtt(url.host(), estimator->GetHttpRTT()))); + base::NumberToString(internal::RoundRtt( + url.host(), network_quality_tracker->GetHttpRTT()))); } if (web_client_hints.IsEnabled(blink::mojom::WebClientHintsType::kDownlink)) { @@ -295,7 +294,8 @@ blink::kClientHintsHeaderMapping[static_cast<int>( blink::mojom::WebClientHintsType::kDownlink)], DoubleToSpecCompliantString(internal::RoundKbpsToMbps( - url.host(), estimator->GetDownstreamThroughputKbps()))); + url.host(), + network_quality_tracker->GetDownstreamThroughputKbps()))); } if (web_client_hints.IsEnabled(blink::mojom::WebClientHintsType::kEct)) { @@ -305,7 +305,7 @@ static_cast<size_t>(net::EFFECTIVE_CONNECTION_TYPE_LAST)); int effective_connection_type = - static_cast<int>(estimator->GetEffectiveConnectionType()); + static_cast<int>(network_quality_tracker->GetEffectiveConnectionType()); additional_headers->SetHeader( blink::kClientHintsHeaderMapping[static_cast<int>(
diff --git a/chrome/browser/client_hints/client_hints_browsertest.cc b/chrome/browser/client_hints/client_hints_browsertest.cc index fa540753..4c2738f 100644 --- a/chrome/browser/client_hints/client_hints_browsertest.cc +++ b/chrome/browser/client_hints/client_hints_browsertest.cc
@@ -539,9 +539,13 @@ EXPECT_FALSE(request.headers.find("ect")->second.empty()); // TODO(tbansal): https://crbug.com/819244: When network servicification is - // enabled, the UI thread NQE observers do not receive notifications on - // change in the network quality. - if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) { + // enabled, the renderer processes do not receive notifications on + // change in the network quality. Hence, the network quality client hints + // are not set to the correct value on subresources. + bool is_main_frame_navigation = + request.GetURL().spec().find(".html") != std::string::npos; + if (!base::FeatureList::IsEnabled(network::features::kNetworkService) || + is_main_frame_navigation) { // Effective connection type is forced to 2G using command line in these // tests. RTT is expected to be 1800 msec but leave some gap to account // for added noise and randomization.
diff --git a/chrome/browser/component_updater/cros_component_installer_chromeos.cc b/chrome/browser/component_updater/cros_component_installer_chromeos.cc index 80260780..157c709 100644 --- a/chrome/browser/component_updater/cros_component_installer_chromeos.cc +++ b/chrome/browser/component_updater/cros_component_installer_chromeos.cc
@@ -36,7 +36,7 @@ "1913a5e0a6cad30b6f03e176177e0d7ed62c5d6700a9c66da556d7c3f5d6a47e"}, {"cros-termina", "70.1", "e9d960f84f628e1f42d05de4046bb5b3154b6f1f65c08412c6af57a29aecaffb"}, - {"rtanalytics-light", "4.1", + {"rtanalytics-light", "5.0", "69f09d33c439c2ab55bbbe24b47ab55cb3f6c0bd1f1ef46eefea3216ec925038"}, {"rtanalytics-full", "1.0", "c93c3e1013c52100a20038b405ac854d69fa889f6dc4fa6f188267051e05e444"}, @@ -217,18 +217,11 @@ MountPolicy mount_policy, UpdatePolicy update_policy, LoadCallback load_callback) { - if (!IsCompatible(name)) { - // A compatible component is not installed. - // Start installation process. + if (!IsCompatible(name) || update_policy == UpdatePolicy::kForce) { + // A compatible component is not installed, or forced update is requested. + // Start registration and installation/update process. auto* const cus = g_browser_process->component_updater(); - Install(cus, name, OnDemandUpdater::Priority::FOREGROUND, mount_policy, - std::move(load_callback)); - } else if (update_policy == UpdatePolicy::kForce) { - // Caller forces update check. - // Start update process. - auto* const cus = g_browser_process->component_updater(); - Install(cus, name, OnDemandUpdater::Priority::BACKGROUND, mount_policy, - std::move(load_callback)); + Install(cus, name, update_policy, mount_policy, std::move(load_callback)); } else if (mount_policy == MountPolicy::kMount) { // A compatible component is installed, load it. LoadInternal(name, std::move(load_callback)); @@ -297,7 +290,7 @@ void CrOSComponentManager::Install(ComponentUpdateService* cus, const std::string& name, - OnDemandUpdater::Priority priority, + UpdatePolicy update_policy, MountPolicy mount_policy, LoadCallback load_callback) { const ComponentConfig* config = FindConfig(name); @@ -308,10 +301,11 @@ base::FilePath())); return; } + Register(cus, *config, base::BindOnce( &CrOSComponentManager::StartInstall, base::Unretained(this), cus, - GenerateId(config->sha2hash), priority, + name, GenerateId(config->sha2hash), update_policy, base::BindOnce(&CrOSComponentManager::FinishInstall, base::Unretained(this), name, mount_policy, std::move(load_callback)))); @@ -319,9 +313,23 @@ void CrOSComponentManager::StartInstall( ComponentUpdateService* cus, + const std::string& name, const std::string& id, - OnDemandUpdater::Priority priority, + UpdatePolicy update_policy, update_client::Callback install_callback) { + // Check whether an installed component was found during registration, and + // determine whether OnDemandUpdater should be started accordingly. + const bool is_compatible = IsCompatible(name); + if (is_compatible && update_policy != UpdatePolicy::kForce) { + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(install_callback), + update_client::Error::NONE)); + return; + } + + const component_updater::OnDemandUpdater::Priority priority = + is_compatible ? component_updater::OnDemandUpdater::Priority::BACKGROUND + : component_updater::OnDemandUpdater::Priority::FOREGROUND; cus->GetOnDemandUpdater().OnDemandUpdate(id, priority, std::move(install_callback)); } @@ -346,7 +354,6 @@ void CrOSComponentManager::LoadInternal(const std::string& name, LoadCallback load_callback) { - DCHECK(IsCompatible(name)); const base::FilePath path = GetCompatiblePath(name); // path is empty if no compatible component is available to load. if (!path.empty()) {
diff --git a/chrome/browser/component_updater/cros_component_installer_chromeos.h b/chrome/browser/component_updater/cros_component_installer_chromeos.h index 4164897..03eb4e1 100644 --- a/chrome/browser/component_updater/cros_component_installer_chromeos.h +++ b/chrome/browser/component_updater/cros_component_installer_chromeos.h
@@ -164,15 +164,16 @@ // Installs a component with a dedicated ComponentUpdateService instance. void Install(ComponentUpdateService* cus, const std::string& name, - OnDemandUpdater::Priority priority, + UpdatePolicy update_policy, MountPolicy mount_policy, LoadCallback load_callback); // Calls OnDemandUpdate to install the component right after being registered. // |id| is the component id generated from its sha2 hash. void StartInstall(ComponentUpdateService* cus, + const std::string& name, const std::string& id, - OnDemandUpdater::Priority priority, + UpdatePolicy update_policy, update_client::Callback install_callback); // Calls LoadInternal to load the installed component.
diff --git a/chrome/browser/conflicts/uninstall_application_win.cc b/chrome/browser/conflicts/uninstall_application_win.cc index 8d860cc4..4f35fea 100644 --- a/chrome/browser/conflicts/uninstall_application_win.cc +++ b/chrome/browser/conflicts/uninstall_application_win.cc
@@ -4,7 +4,6 @@ #include "chrome/browser/conflicts/uninstall_application_win.h" -#include <atlbase.h> #include <wrl/client.h> #include <memory> @@ -22,6 +21,7 @@ #include "base/strings/string_util.h" #include "base/synchronization/lock.h" #include "base/threading/sequenced_task_runner_handle.h" +#include "base/win/atl.h" #include "base/win/scoped_variant.h" #include "chrome/browser/win/automation_controller.h" #include "chrome/browser/win/ui_automation_util.h"
diff --git a/chrome/browser/extensions/api/management/management_browsertest.cc b/chrome/browser/extensions/api/management/management_browsertest.cc index 8650617..24da4131 100644 --- a/chrome/browser/extensions/api/management/management_browsertest.cc +++ b/chrome/browser/extensions/api/management/management_browsertest.cc
@@ -12,6 +12,7 @@ #include "base/stl_util.h" #include "base/strings/stringprintf.h" #include "base/task/post_task.h" +#include "base/test/bind_test_util.h" #include "build/build_config.h" #include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/extensions/extension_management.h" @@ -31,6 +32,7 @@ #include "content/public/browser/notification_service.h" #include "content/public/browser/render_view_host.h" #include "content/public/test/browser_test_utils.h" +#include "content/public/test/url_loader_interceptor.h" #include "extensions/browser/extension_host.h" #include "extensions/browser/extension_prefs.h" #include "extensions/browser/extension_registry.h" @@ -343,18 +345,32 @@ basedir.AppendASCII("v2"), temp_dir.GetPath().AppendASCII("v2.crx"), pem_path, base::FilePath()); - // Note: This interceptor gets requests on the IO thread. - net::LocalHostTestURLRequestInterceptor interceptor( - BrowserThread::GetTaskRunnerForThread(BrowserThread::IO), - base::CreateTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BEST_EFFORT, - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})); - - interceptor.SetResponseIgnoreQuery( - GURL("http://localhost/autoupdate/manifest"), - basedir.AppendASCII("manifest_v2.xml")); - interceptor.SetResponseIgnoreQuery(GURL("http://localhost/autoupdate/v2.crx"), - v2_path); + content::URLLoaderInterceptor interceptor(base::BindLambdaForTesting( + [&](content::URLLoaderInterceptor::RequestParams* params) -> bool { + if (params->url_request.url.path() == "/autoupdate/v2.crx") { + content::URLLoaderInterceptor::WriteResponse(v2_path, + params->client.get()); + return true; + } + if (params->url_request.url.path() == "/autoupdate/v3.crx") { + content::URLLoaderInterceptor::WriteResponse( + basedir.AppendASCII("v3.crx"), params->client.get()); + return true; + } + if (params->url_request.url.path() == "/autoupdate/manifest") { + static bool first = true; + if (first) { + content::URLLoaderInterceptor::WriteResponse( + basedir.AppendASCII("manifest_v2.xml"), params->client.get()); + first = false; + } else { + content::URLLoaderInterceptor::WriteResponse( + basedir.AppendASCII("manifest_v3.xml"), params->client.get()); + } + return true; + } + return false; + })); // Install version 1 of the extension. ExtensionTestMessageListener listener1("v1 installed", false); @@ -394,11 +410,6 @@ // Now try doing an update to version 3, which has been incorrectly // signed. This should fail. - interceptor.SetResponseIgnoreQuery( - GURL("http://localhost/autoupdate/manifest"), - basedir.AppendASCII("manifest_v3.xml")); - interceptor.SetResponseIgnoreQuery(GURL("http://localhost/autoupdate/v3.crx"), - basedir.AppendASCII("v3.crx")); extensions::ExtensionUpdater::CheckParams params2; params2.callback = base::BindOnce(&NotificationListener::OnFinished, @@ -447,18 +458,20 @@ basedir.AppendASCII("v2"), temp_dir.GetPath().AppendASCII("v2.crx"), pem_path, base::FilePath()); - // Note: This interceptor gets requests on the IO thread. - net::LocalHostTestURLRequestInterceptor interceptor( - BrowserThread::GetTaskRunnerForThread(BrowserThread::IO), - base::CreateTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BEST_EFFORT, - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})); - - interceptor.SetResponseIgnoreQuery( - GURL("http://localhost/autoupdate/manifest"), - basedir.AppendASCII("manifest_v2.xml")); - interceptor.SetResponseIgnoreQuery(GURL("http://localhost/autoupdate/v2.crx"), - v2_path); + content::URLLoaderInterceptor interceptor(base::BindLambdaForTesting( + [&](content::URLLoaderInterceptor::RequestParams* params) -> bool { + if (params->url_request.url.path() == "/autoupdate/manifest") { + content::URLLoaderInterceptor::WriteResponse( + basedir.AppendASCII("manifest_v2.xml"), params->client.get()); + return true; + } + if (params->url_request.url.path() == "/autoupdate/v2.crx") { + content::URLLoaderInterceptor::WriteResponse(v2_path, + params->client.get()); + return true; + } + return false; + })); // Install version 1 of the extension. ExtensionTestMessageListener listener1("v1 installed", false); @@ -523,18 +536,20 @@ basedir.AppendASCII("v2"), temp_dir.GetPath().AppendASCII("v2.crx"), pem_path, base::FilePath()); - // Note: This interceptor gets requests on the IO thread. - net::LocalHostTestURLRequestInterceptor interceptor( - BrowserThread::GetTaskRunnerForThread(BrowserThread::IO), - base::CreateTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BEST_EFFORT, - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})); - - interceptor.SetResponseIgnoreQuery( - GURL("http://localhost/autoupdate/manifest"), - basedir.AppendASCII("manifest_v2.xml")); - interceptor.SetResponseIgnoreQuery(GURL("http://localhost/autoupdate/v2.crx"), - v2_path); + content::URLLoaderInterceptor interceptor(base::BindLambdaForTesting( + [&](content::URLLoaderInterceptor::RequestParams* params) -> bool { + if (params->url_request.url.path() == "/autoupdate/manifest") { + content::URLLoaderInterceptor::WriteResponse( + basedir.AppendASCII("manifest_v2.xml"), params->client.get()); + return true; + } + if (params->url_request.url.path() == "/autoupdate/v2.crx") { + content::URLLoaderInterceptor::WriteResponse(v2_path, + params->client.get()); + return true; + } + return false; + })); ExtensionRegistry* registry = ExtensionRegistry::Get(browser()->profile()); const size_t size_before = registry->enabled_extensions().size(); @@ -630,18 +645,20 @@ basedir.AppendASCII("v2"), temp_dir.GetPath().AppendASCII("v2.crx"), pem_path, base::FilePath()); - // Note: This interceptor gets requests on the IO thread. - net::LocalHostTestURLRequestInterceptor interceptor( - BrowserThread::GetTaskRunnerForThread(BrowserThread::IO), - base::CreateTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BEST_EFFORT, - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})); - - interceptor.SetResponseIgnoreQuery( - GURL("http://localhost/autoupdate/manifest"), - basedir.AppendASCII("manifest_v2.xml")); - interceptor.SetResponseIgnoreQuery(GURL("http://localhost/autoupdate/v2.crx"), - v2_path); + content::URLLoaderInterceptor interceptor(base::BindLambdaForTesting( + [&](content::URLLoaderInterceptor::RequestParams* params) -> bool { + if (params->url_request.url.path() == "/autoupdate/manifest") { + content::URLLoaderInterceptor::WriteResponse( + basedir.AppendASCII("manifest_v2.xml"), params->client.get()); + return true; + } + if (params->url_request.url.path() == "/autoupdate/v2.crx") { + content::URLLoaderInterceptor::WriteResponse(v2_path, + params->client.get()); + return true; + } + return false; + })); ExtensionRegistry* registry = ExtensionRegistry::Get(browser()->profile()); const size_t size_before = registry->enabled_extensions().size(); @@ -722,18 +739,20 @@ basedir.AppendASCII("v2"), temp_dir.GetPath().AppendASCII("v2.crx"), pem_path, base::FilePath()); - // Note: This interceptor gets requests on the IO thread. - net::LocalHostTestURLRequestInterceptor interceptor( - BrowserThread::GetTaskRunnerForThread(BrowserThread::IO), - base::CreateTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BEST_EFFORT, - base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})); - - interceptor.SetResponseIgnoreQuery( - GURL("http://localhost/autoupdate/manifest"), - basedir.AppendASCII("manifest_v2.xml")); - interceptor.SetResponseIgnoreQuery(GURL("http://localhost/autoupdate/v2.crx"), - v2_path); + content::URLLoaderInterceptor interceptor(base::BindLambdaForTesting( + [&](content::URLLoaderInterceptor::RequestParams* params) -> bool { + if (params->url_request.url.path() == "/autoupdate/manifest") { + content::URLLoaderInterceptor::WriteResponse( + basedir.AppendASCII("manifest_v2.xml"), params->client.get()); + return true; + } + if (params->url_request.url.path() == "/autoupdate/v2.crx") { + content::URLLoaderInterceptor::WriteResponse(v2_path, + params->client.get()); + return true; + } + return false; + })); // Check that the policy is initially empty. ASSERT_TRUE(extensions::ExtensionManagementFactory::GetForBrowserContext(
diff --git a/chrome/browser/extensions/api/mdns/mdns_api.cc b/chrome/browser/extensions/api/mdns/mdns_api.cc index 2bf04ff..e27d9f1 100644 --- a/chrome/browser/extensions/api/mdns/mdns_api.cc +++ b/chrome/browser/extensions/api/mdns/mdns_api.cc
@@ -74,7 +74,7 @@ void MDnsAPI::ForceDiscovery() { DCHECK(thread_checker_.CalledOnValidThread()); DnsSdRegistry* registry = dns_sd_registry(); - return registry->ForceDiscovery(); + return registry->ResetAndDiscover(); } DnsSdRegistry* MDnsAPI::dns_sd_registry() {
diff --git a/chrome/browser/extensions/api/mdns/mdns_apitest.cc b/chrome/browser/extensions/api/mdns/mdns_apitest.cc index 7751cef..49536664 100644 --- a/chrome/browser/extensions/api/mdns/mdns_apitest.cc +++ b/chrome/browser/extensions/api/mdns/mdns_apitest.cc
@@ -100,7 +100,7 @@ EXPECT_CALL(*dns_sd_registry_, RegisterDnsSdListener(service_type)).Times(1); EXPECT_CALL(*dns_sd_registry_, UnregisterDnsSdListener(service_type)) .Times(1); - EXPECT_CALL(*dns_sd_registry_, ForceDiscovery()).Times(1); + EXPECT_CALL(*dns_sd_registry_, ResetAndDiscover()).Times(1); EXPECT_CALL(*dns_sd_registry_, RemoveObserver(A<DnsSdRegistry::DnsSdObserver*>())) .Times(1);
diff --git a/chrome/browser/extensions/api/page_capture/page_capture_api.cc b/chrome/browser/extensions/api/page_capture/page_capture_api.cc index 3574ce5..e328205 100644 --- a/chrome/browser/extensions/api/page_capture/page_capture_api.cc +++ b/chrome/browser/extensions/api/page_capture/page_capture_api.cc
@@ -95,7 +95,7 @@ // time, we show the user a dialog where they can choose whether to allow the // extension access to the API. #if defined(OS_CHROMEOS) - if (profiles::IsPublicSession()) { + if (profiles::ArePublicSessionRestrictionsEnabled()) { WebContents* web_contents = GetWebContents(); if (!web_contents) { ReturnFailure(kTabClosedError);
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc index de28fdcf..ddd7bfc5 100644 --- a/chrome/browser/extensions/api/settings_private/prefs_util.cc +++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc
@@ -296,6 +296,8 @@ settings_api::PrefType::PREF_TYPE_NUMBER; (*s_whitelist)[proximity_auth::prefs::kProximityAuthIsChromeOSLoginEnabled] = settings_api::PrefType::PREF_TYPE_BOOLEAN; + (*s_whitelist)[ash::prefs::kMessageCenterLockScreenMode] = + settings_api::PrefType::PREF_TYPE_STRING; // Accessibility. (*s_whitelist)[ash::prefs::kAccessibilitySpokenFeedbackEnabled] =
diff --git a/chrome/browser/extensions/bookmark_app_helper.cc b/chrome/browser/extensions/bookmark_app_helper.cc index 18a69668..6ea2b79 100644 --- a/chrome/browser/extensions/bookmark_app_helper.cc +++ b/chrome/browser/extensions/bookmark_app_helper.cc
@@ -6,7 +6,6 @@ #include <stddef.h> -#include <cctype> #include <string> #include <utility> @@ -46,7 +45,6 @@ #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" #include "chrome/common/origin_trials/chrome_origin_trial_policy.h" #include "chrome/common/url_constants.h" -#include "chrome/grit/platform_locale_settings.h" #include "components/prefs/pref_service.h" #include "content/public/browser/navigation_controller.h" #include "content/public/browser/notification_service.h" @@ -61,21 +59,9 @@ #include "extensions/common/extension.h" #include "extensions/common/url_pattern.h" #include "net/base/load_flags.h" -#include "net/base/registry_controlled_domains/registry_controlled_domain.h" #include "net/url_request/url_request.h" -#include "skia/ext/image_operations.h" -#include "skia/ext/platform_canvas.h" #include "third_party/blink/public/common/manifest/web_display_mode.h" #include "third_party/skia/include/core/SkBitmap.h" -#include "ui/base/l10n/l10n_util.h" -#include "ui/gfx/canvas.h" -#include "ui/gfx/color_analysis.h" -#include "ui/gfx/color_utils.h" -#include "ui/gfx/font.h" -#include "ui/gfx/font_list.h" -#include "ui/gfx/geometry/rect.h" -#include "ui/gfx/image/canvas_image_source.h" -#include "ui/gfx/image/image.h" #if defined(OS_MACOSX) #include "chrome/browser/web_applications/extensions/web_app_extension_shortcut_mac.h" @@ -92,62 +78,6 @@ namespace { -// Overlays a shortcut icon over the bottom left corner of a given image. -class GeneratedIconImageSource : public gfx::CanvasImageSource { - public: - explicit GeneratedIconImageSource(char letter, SkColor color, int output_size) - : gfx::CanvasImageSource(gfx::Size(output_size, output_size), false), - letter_(letter), - color_(color), - output_size_(output_size) {} - ~GeneratedIconImageSource() override {} - - private: - // gfx::CanvasImageSource overrides: - void Draw(gfx::Canvas* canvas) override { - const uint8_t kLumaThreshold = 190; - const int icon_size = output_size_ * 3 / 4; - const int icon_inset = output_size_ / 8; - const size_t border_radius = output_size_ / 16; - const size_t font_size = output_size_ * 7 / 16; - - std::string font_name = - l10n_util::GetStringUTF8(IDS_SANS_SERIF_FONT_FAMILY); -#if defined(OS_CHROMEOS) - const std::string kChromeOSFontFamily = "Noto Sans"; - font_name = kChromeOSFontFamily; -#endif - - // Draw a rounded rect of the given |color|. - cc::PaintFlags background_flags; - background_flags.setAntiAlias(true); - background_flags.setColor(color_); - - gfx::Rect icon_rect(icon_inset, icon_inset, icon_size, icon_size); - canvas->DrawRoundRect(icon_rect, border_radius, background_flags); - - // The text rect's size needs to be odd to center the text correctly. - gfx::Rect text_rect(icon_inset, icon_inset, icon_size + 1, icon_size + 1); - // Draw the letter onto the rounded rect. The letter's color depends on the - // luma of |color|. - const uint8_t luma = color_utils::GetLuma(color_); - canvas->DrawStringRectWithFlags( - base::string16(1, std::toupper(letter_)), - gfx::FontList(gfx::Font(font_name, font_size)), - (luma > kLumaThreshold) ? SK_ColorBLACK : SK_ColorWHITE, - text_rect, - gfx::Canvas::TEXT_ALIGN_CENTER); - } - - char letter_; - - SkColor color_; - - int output_size_; - - DISALLOW_COPY_AND_ASSIGN(GeneratedIconImageSource); -}; - std::set<int> SizesToGenerate() { // Generate container icons from smaller icons. const int kIconSizesToGenerate[] = { @@ -162,49 +92,8 @@ kIconSizesToGenerate + arraysize(kIconSizesToGenerate)); } -void GenerateIcons( - std::set<int> generate_sizes, - const GURL& app_url, - SkColor generated_icon_color, - std::map<int, BookmarkAppHelper::BitmapAndSource>* bitmap_map) { - // The letter that will be painted on the generated icon. - char icon_letter = ' '; - std::string domain_and_registry( - net::registry_controlled_domains::GetDomainAndRegistry( - app_url, - net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES)); - if (!domain_and_registry.empty()) { - icon_letter = domain_and_registry[0]; - } else if (app_url.has_host()) { - icon_letter = app_url.host_piece()[0]; - } - - // If no color has been specified, use a dark gray so it will stand out on the - // black shelf. - if (generated_icon_color == SK_ColorTRANSPARENT) - generated_icon_color = SK_ColorDKGRAY; - - for (int size : generate_sizes) { - BookmarkAppHelper::GenerateIcon(bitmap_map, size, generated_icon_color, - icon_letter); - } -} - -SkBitmap GenerateBitmap(int output_size, SkColor color, char letter) { - gfx::ImageSkia icon_image( - std::make_unique<GeneratedIconImageSource>(letter, color, output_size), - gfx::Size(output_size, output_size)); - SkBitmap dst; - if (dst.tryAllocPixels(icon_image.bitmap()->info())) { - icon_image.bitmap()->readPixels(dst.info(), dst.getPixels(), dst.rowBytes(), - 0, 0); - } - return dst; -} - -void ReplaceWebAppIcons( - std::map<int, BookmarkAppHelper::BitmapAndSource> bitmap_map, - WebApplicationInfo* web_app_info) { +void ReplaceWebAppIcons(std::map<int, web_app::BitmapAndSource> bitmap_map, + WebApplicationInfo* web_app_info) { web_app_info->icons.clear(); // Populate the icon data into the WebApplicationInfo we are using to @@ -297,7 +186,7 @@ continue; downloaded_bitmaps_.push_back( - BookmarkAppHelper::BitmapAndSource(url_bitmaps.first, bitmap)); + web_app::BitmapAndSource(url_bitmaps.first, bitmap)); } } } @@ -319,7 +208,7 @@ for (const auto& icon : web_app_info_.icons) sizes_to_generate.insert(icon.width); - std::map<int, BookmarkAppHelper::BitmapAndSource> size_map = + std::map<int, web_app::BitmapAndSource> size_map = BookmarkAppHelper::ResizeIconsAndGenerateMissing( downloaded_bitmaps_, sizes_to_generate, &web_app_info_); BookmarkAppHelper::UpdateWebAppIconsWithoutChangingLinks(size_map, @@ -335,7 +224,7 @@ std::unique_ptr<content::WebContents> web_contents_; std::unique_ptr<WebAppIconDownloader> web_app_icon_downloader_; std::vector<GURL> urls_to_download_; - std::vector<BookmarkAppHelper::BitmapAndSource> downloaded_bitmaps_; + std::vector<web_app::BitmapAndSource> downloaded_bitmaps_; }; } // namespace @@ -383,54 +272,6 @@ } // static -std::map<int, BookmarkAppHelper::BitmapAndSource> -BookmarkAppHelper::ConstrainBitmapsToSizes( - const std::vector<BookmarkAppHelper::BitmapAndSource>& bitmaps, - const std::set<int>& sizes) { - std::map<int, BitmapAndSource> output_bitmaps; - std::map<int, BitmapAndSource> ordered_bitmaps; - for (const BitmapAndSource& bitmap_and_source : bitmaps) { - const SkBitmap& bitmap = bitmap_and_source.bitmap; - DCHECK(bitmap.width() == bitmap.height()); - ordered_bitmaps[bitmap.width()] = bitmap_and_source; - } - - if (ordered_bitmaps.size() > 0) { - for (const auto& size : sizes) { - // Find the closest not-smaller bitmap, or failing that use the largest - // icon available. - auto bitmaps_it = ordered_bitmaps.lower_bound(size); - if (bitmaps_it != ordered_bitmaps.end()) - output_bitmaps[size] = bitmaps_it->second; - else - output_bitmaps[size] = ordered_bitmaps.rbegin()->second; - - // Resize the bitmap if it does not exactly match the desired size. - if (output_bitmaps[size].bitmap.width() != size) { - output_bitmaps[size].bitmap = skia::ImageOperations::Resize( - output_bitmaps[size].bitmap, skia::ImageOperations::RESIZE_LANCZOS3, - size, size); - } - } - } - - return output_bitmaps; -} - -// static -void BookmarkAppHelper::GenerateIcon( - std::map<int, BookmarkAppHelper::BitmapAndSource>* bitmaps, - int output_size, - SkColor color, - char letter) { - // Do nothing if there is already an icon of |output_size|. - if (bitmaps->count(output_size)) - return; - - (*bitmaps)[output_size].bitmap = GenerateBitmap(output_size, color, letter); -} - -// static WebApplicationInfo::IconInfo BookmarkAppHelper::GenerateIconInfo( int output_size, SkColor color, @@ -438,7 +279,7 @@ WebApplicationInfo::IconInfo icon_info; icon_info.width = output_size; icon_info.height = output_size; - icon_info.data = GenerateBitmap(output_size, color, letter); + icon_info.data = web_app::GenerateBitmap(output_size, color, letter); return icon_info; } @@ -464,47 +305,25 @@ } // static -std::map<int, BookmarkAppHelper::BitmapAndSource> +std::map<int, web_app::BitmapAndSource> BookmarkAppHelper::ResizeIconsAndGenerateMissing( - std::vector<BookmarkAppHelper::BitmapAndSource> icons, + std::vector<web_app::BitmapAndSource> icons, std::set<int> sizes_to_generate, WebApplicationInfo* web_app_info) { - // Resize provided icons to make sure we have versions for each size in - // |sizes_to_generate|. - std::map<int, BitmapAndSource> resized_bitmaps( - ConstrainBitmapsToSizes(icons, sizes_to_generate)); + SkColor generated_icon_color = SK_ColorTRANSPARENT; - // Also add all provided icon sizes. - for (const BitmapAndSource& icon : icons) { - if (resized_bitmaps.find(icon.bitmap.width()) == resized_bitmaps.end()) - resized_bitmaps.insert(std::make_pair(icon.bitmap.width(), icon)); - } + std::map<int, web_app::BitmapAndSource> resized_bitmaps = + web_app::ResizeIconsAndGenerateMissing(icons, sizes_to_generate, + web_app_info->app_url, + &generated_icon_color); - // Determine the color that will be used for the icon's background. For this - // the dominant color of the first icon found is used. - if (resized_bitmaps.size()) { - color_utils::GridSampler sampler; - web_app_info->generated_icon_color = - color_utils::CalculateKMeanColorOfBitmap( - resized_bitmaps.begin()->second.bitmap); - } - - // Work out what icons we need to generate here. Icons are only generated if - // there is no icon in the required size. - std::set<int> generate_sizes; - for (int size : sizes_to_generate) { - if (resized_bitmaps.find(size) == resized_bitmaps.end()) - generate_sizes.insert(size); - } - GenerateIcons(generate_sizes, web_app_info->app_url, - web_app_info->generated_icon_color, &resized_bitmaps); - + web_app_info->generated_icon_color = generated_icon_color; return resized_bitmaps; } // static void BookmarkAppHelper::UpdateWebAppIconsWithoutChangingLinks( - std::map<int, BookmarkAppHelper::BitmapAndSource> bitmap_map, + std::map<int, web_app::BitmapAndSource> bitmap_map, WebApplicationInfo* web_app_info) { // First add in the icon data that have urls with the url / size data from the // original web app info, and the data from the new icons (if any). @@ -528,17 +347,6 @@ } } -BookmarkAppHelper::BitmapAndSource::BitmapAndSource() { -} - -BookmarkAppHelper::BitmapAndSource::BitmapAndSource(const GURL& source_url_p, - const SkBitmap& bitmap_p) - : source_url(source_url_p), - bitmap(bitmap_p) { -} - -BookmarkAppHelper::BitmapAndSource::~BitmapAndSource() { -} BookmarkAppHelper::BookmarkAppHelper(Profile* profile, WebApplicationInfo web_app_info, @@ -676,13 +484,14 @@ return; } - std::vector<BitmapAndSource> downloaded_icons; + std::vector<web_app::BitmapAndSource> downloaded_icons; for (const std::pair<GURL, std::vector<SkBitmap>>& url_bitmap : bitmaps) { for (const SkBitmap& bitmap : url_bitmap.second) { if (bitmap.empty() || bitmap.width() != bitmap.height()) continue; - downloaded_icons.push_back(BitmapAndSource(url_bitmap.first, bitmap)); + downloaded_icons.push_back( + web_app::BitmapAndSource(url_bitmap.first, bitmap)); } } @@ -690,7 +499,7 @@ for (const WebApplicationInfo::IconInfo& icon_info : web_app_info_.icons) { const SkBitmap& icon = icon_info.data; if (!icon.drawsNothing() && icon.width() == icon.height()) { - downloaded_icons.push_back(BitmapAndSource(icon_info.url, icon)); + downloaded_icons.push_back(web_app::BitmapAndSource(icon_info.url, icon)); } } @@ -698,8 +507,9 @@ // icons down to smaller sizes, and generating icons for sizes where resizing // is not possible. web_app_info_.generated_icon_color = SK_ColorTRANSPARENT; - std::map<int, BitmapAndSource> size_to_icons = ResizeIconsAndGenerateMissing( - downloaded_icons, SizesToGenerate(), &web_app_info_); + std::map<int, web_app::BitmapAndSource> size_to_icons = + ResizeIconsAndGenerateMissing(downloaded_icons, SizesToGenerate(), + &web_app_info_); ReplaceWebAppIcons(size_to_icons, &web_app_info_); web_app_icon_downloader_.reset();
diff --git a/chrome/browser/extensions/bookmark_app_helper.h b/chrome/browser/extensions/bookmark_app_helper.h index 31827d5a0..382dd3c9 100644 --- a/chrome/browser/extensions/bookmark_app_helper.h +++ b/chrome/browser/extensions/bookmark_app_helper.h
@@ -15,6 +15,7 @@ #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/installable/installable_metrics.h" +#include "chrome/browser/web_applications/components/web_app_icon_generator.h" #include "chrome/common/web_application_info.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" @@ -45,15 +46,6 @@ kUnknown, }; - struct BitmapAndSource { - BitmapAndSource(); - BitmapAndSource(const GURL& source_url_p, const SkBitmap& bitmap_p); - ~BitmapAndSource(); - - GURL source_url; - SkBitmap bitmap; - }; - typedef base::Callback<void(const Extension*, const WebApplicationInfo&)> CreateBookmarkAppCallback; @@ -75,24 +67,10 @@ WebApplicationInfo* web_app_info, ForInstallableSite installable_site); - // This finds the closest not-smaller bitmap in |bitmaps| for each size in - // |sizes| and resizes it to that size. This returns a map of sizes to bitmaps - // which contains only bitmaps of a size in |sizes| and at most one bitmap of - // each size. - static std::map<int, BitmapAndSource> ConstrainBitmapsToSizes( - const std::vector<BitmapAndSource>& bitmaps, - const std::set<int>& sizes); - // Adds a square container icon of |output_size| and 2 * |output_size| pixels // to |bitmaps| by drawing the given |letter| into a rounded background of // |color|. For each size, if an icon of the requested size already exists in - // |bitmaps|, nothing will happen. - static void GenerateIcon(std::map<int, BitmapAndSource>* bitmaps, - int output_size, - SkColor color, - char letter); - - // Same as above, but the generated icon is returned in a + // |bitmaps|, nothing will happen. The generated icon is returned in a // `WebApplicationInfo::IconInfo`. static WebApplicationInfo::IconInfo GenerateIconInfo(int output_size, SkColor color, @@ -105,8 +83,8 @@ // Resize icons to the accepted sizes, and generate any that are missing. Does // not update |web_app_info| except to update |generated_icon_color|. - static std::map<int, BitmapAndSource> ResizeIconsAndGenerateMissing( - std::vector<BitmapAndSource> icons, + static std::map<int, web_app::BitmapAndSource> ResizeIconsAndGenerateMissing( + std::vector<web_app::BitmapAndSource> icons, std::set<int> sizes_to_generate, WebApplicationInfo* web_app_info); @@ -118,7 +96,7 @@ // |bitmap_map| that has a URL and size matching that in |web_app_info|, as // well as adding any new images from |bitmap_map| that have no URL. static void UpdateWebAppIconsWithoutChangingLinks( - std::map<int, BookmarkAppHelper::BitmapAndSource> bitmap_map, + std::map<int, web_app::BitmapAndSource> bitmap_map, WebApplicationInfo* web_app_info); // Begins the asynchronous bookmark app creation.
diff --git a/chrome/browser/extensions/bookmark_app_helper_unittest.cc b/chrome/browser/extensions/bookmark_app_helper_unittest.cc index 3255caa..4c430cf 100644 --- a/chrome/browser/extensions/bookmark_app_helper_unittest.cc +++ b/chrome/browser/extensions/bookmark_app_helper_unittest.cc
@@ -53,18 +53,11 @@ const char kAppIcon3[] = "fav3.png"; const char kAppIconURL1[] = "http://foo.com/1.png"; const char kAppIconURL2[] = "http://foo.com/2.png"; -const char kAppIconURL3[] = "http://foo.com/3.png"; -const char kAppIconURL4[] = "http://foo.com/4.png"; const int kIconSizeTiny = extension_misc::EXTENSION_ICON_BITTY; const int kIconSizeSmall = extension_misc::EXTENSION_ICON_SMALL; const int kIconSizeMedium = extension_misc::EXTENSION_ICON_MEDIUM; const int kIconSizeLarge = extension_misc::EXTENSION_ICON_LARGE; -const int kIconSizeGigantor = extension_misc::EXTENSION_ICON_GIGANTOR; -const int kIconSizeUnsupported = 123; - -const int kIconSizeSmallBetweenMediumAndLarge = 63; -const int kIconSizeLargeBetweenMediumAndLarge = 96; class BookmarkAppHelperTest : public testing::Test { public: @@ -112,20 +105,6 @@ return bitmap; } -BookmarkAppHelper::BitmapAndSource CreateSquareBitmapAndSourceWithColor( - int size, - SkColor color) { - return BookmarkAppHelper::BitmapAndSource( - GURL(), CreateSquareBitmapWithColor(size, color)); -} - -void ValidateBitmapSizeAndColor(SkBitmap bitmap, int size, SkColor color) { - // Obtain pixel lock to access pixels. - EXPECT_EQ(color, bitmap.getColor(0, 0)); - EXPECT_EQ(size, bitmap.width()); - EXPECT_EQ(size, bitmap.height()); -} - WebApplicationInfo::IconInfo CreateIconInfoWithBitmap(int size, SkColor color) { WebApplicationInfo::IconInfo icon_info; icon_info.width = size; @@ -134,152 +113,6 @@ return icon_info; } -std::set<int> TestSizesToGenerate() { - const int kIconSizesToGenerate[] = { - extension_misc::EXTENSION_ICON_SMALL, - extension_misc::EXTENSION_ICON_MEDIUM, - extension_misc::EXTENSION_ICON_LARGE, - }; - return std::set<int>(kIconSizesToGenerate, - kIconSizesToGenerate + arraysize(kIconSizesToGenerate)); -} - -void ValidateAllIconsWithURLsArePresent(const WebApplicationInfo& info_to_check, - const WebApplicationInfo& other_info) { - for (const auto& icon : info_to_check.icons) { - if (!icon.url.is_empty()) { - bool found = false; - for (const auto& other_icon : info_to_check.icons) { - if (other_icon.url == icon.url && other_icon.width == icon.width) { - found = true; - break; - } - } - EXPECT_TRUE(found); - } - } -} - -std::vector<BookmarkAppHelper::BitmapAndSource>::const_iterator -FindLargestBitmapAndSourceVector( - const std::vector<BookmarkAppHelper::BitmapAndSource>& bitmap_vector) { - auto result = bitmap_vector.end(); - int largest = -1; - for (std::vector<BookmarkAppHelper::BitmapAndSource>::const_iterator it = - bitmap_vector.begin(); - it != bitmap_vector.end(); ++it) { - if (it->bitmap.width() > largest) { - result = it; - } - } - return result; -} - -std::vector<BookmarkAppHelper::BitmapAndSource>::const_iterator -FindMatchingBitmapAndSourceVector( - const std::vector<BookmarkAppHelper::BitmapAndSource>& bitmap_vector, - int size) { - for (std::vector<BookmarkAppHelper::BitmapAndSource>::const_iterator it = - bitmap_vector.begin(); - it != bitmap_vector.end(); ++it) { - if (it->bitmap.width() == size) { - return it; - } - } - return bitmap_vector.end(); -} - -std::vector<BookmarkAppHelper::BitmapAndSource>::const_iterator -FindEqualOrLargerBitmapAndSourceVector( - const std::vector<BookmarkAppHelper::BitmapAndSource>& bitmap_vector, - int size) { - for (std::vector<BookmarkAppHelper::BitmapAndSource>::const_iterator it = - bitmap_vector.begin(); - it != bitmap_vector.end(); ++it) { - if (it->bitmap.width() >= size) { - return it; - } - } - return bitmap_vector.end(); -} - -void ValidateIconsGeneratedAndResizedCorrectly( - std::vector<BookmarkAppHelper::BitmapAndSource> downloaded, - std::map<int, BookmarkAppHelper::BitmapAndSource> size_map, - std::set<int> sizes_to_generate, - int expected_generated, - int expected_resized) { - GURL empty_url(""); - int number_generated = 0; - int number_resized = 0; - - auto icon_largest = FindLargestBitmapAndSourceVector(downloaded); - for (const auto& size : sizes_to_generate) { - auto icon_downloaded = FindMatchingBitmapAndSourceVector(downloaded, size); - auto icon_larger = FindEqualOrLargerBitmapAndSourceVector(downloaded, size); - if (icon_downloaded == downloaded.end()) { - auto icon_resized = size_map.find(size); - if (icon_largest == downloaded.end()) { - // There are no downloaded icons. Expect an icon to be generated. - EXPECT_NE(size_map.end(), icon_resized); - EXPECT_EQ(size, icon_resized->second.bitmap.width()); - EXPECT_EQ(size, icon_resized->second.bitmap.height()); - EXPECT_EQ(size, icon_resized->second.bitmap.height()); - EXPECT_EQ(empty_url, icon_resized->second.source_url); - ++number_generated; - } else { - // If there is a larger downloaded icon, it should be resized. Otherwise - // the largest downloaded icon should be resized. - auto icon_to_resize = icon_largest; - if (icon_larger != downloaded.end()) - icon_to_resize = icon_larger; - EXPECT_NE(size_map.end(), icon_resized); - EXPECT_EQ(size, icon_resized->second.bitmap.width()); - EXPECT_EQ(size, icon_resized->second.bitmap.height()); - EXPECT_EQ(size, icon_resized->second.bitmap.height()); - EXPECT_EQ(icon_to_resize->source_url, icon_resized->second.source_url); - ++number_resized; - } - } else { - // There is an icon of exactly this size downloaded. Expect no icon to be - // generated, and the existing downloaded icon to be used. - auto icon_resized = size_map.find(size); - EXPECT_NE(size_map.end(), icon_resized); - EXPECT_EQ(size, icon_resized->second.bitmap.width()); - EXPECT_EQ(size, icon_resized->second.bitmap.height()); - EXPECT_EQ(size, icon_downloaded->bitmap.width()); - EXPECT_EQ(size, icon_downloaded->bitmap.height()); - EXPECT_EQ(icon_downloaded->source_url, icon_resized->second.source_url); - } - } - EXPECT_EQ(expected_generated, number_generated); - EXPECT_EQ(expected_resized, number_resized); -} - -void TestIconGeneration(int icon_size, - int expected_generated, - int expected_resized) { - std::vector<BookmarkAppHelper::BitmapAndSource> downloaded; - - // Add an icon with a URL and bitmap. 'Download' it. - WebApplicationInfo::IconInfo icon_info = - CreateIconInfoWithBitmap(icon_size, SK_ColorRED); - icon_info.url = GURL(kAppIconURL1); - downloaded.push_back(BookmarkAppHelper::BitmapAndSource( - icon_info.url, icon_info.data)); - - // Now run the resizing/generation and validation. - WebApplicationInfo web_app_info; - std::map<int, BookmarkAppHelper::BitmapAndSource> size_map = - BookmarkAppHelper::ResizeIconsAndGenerateMissing( - downloaded, TestSizesToGenerate(), &web_app_info); - - ValidateIconsGeneratedAndResizedCorrectly(downloaded, size_map, - TestSizesToGenerate(), - expected_generated, - expected_resized); -} - class TestBookmarkAppHelper : public BookmarkAppHelper { public: TestBookmarkAppHelper(ExtensionService* service, @@ -691,53 +524,6 @@ } } -TEST_F(BookmarkAppHelperExtensionServiceTest, LinkedAppIconsAreNotChanged) { - WebApplicationInfo web_app_info; - - // Add two icons with a URL and bitmap, two icons with just a bitmap, an - // icon with just URL and an icon in an unsupported size with just a URL. - WebApplicationInfo::IconInfo icon_info = - CreateIconInfoWithBitmap(kIconSizeSmall, SK_ColorRED); - icon_info.url = GURL(kAppIconURL1); - web_app_info.icons.push_back(icon_info); - - icon_info = CreateIconInfoWithBitmap(kIconSizeMedium, SK_ColorRED); - icon_info.url = GURL(kAppIconURL2); - web_app_info.icons.push_back(icon_info); - - icon_info.data = SkBitmap(); - icon_info.url = GURL(kAppIconURL3); - icon_info.width = 0; - icon_info.height = 0; - web_app_info.icons.push_back(icon_info); - - icon_info.url = GURL(kAppIconURL4); - web_app_info.icons.push_back(icon_info); - - icon_info = CreateIconInfoWithBitmap(kIconSizeLarge, SK_ColorRED); - web_app_info.icons.push_back(icon_info); - - icon_info = CreateIconInfoWithBitmap(kIconSizeUnsupported, SK_ColorRED); - web_app_info.icons.push_back(icon_info); - - // 'Download' one of the icons without a size or bitmap. - std::vector<BookmarkAppHelper::BitmapAndSource> downloaded; - downloaded.push_back(BookmarkAppHelper::BitmapAndSource( - GURL(kAppIconURL3), - CreateSquareBitmapWithColor(kIconSizeLarge, SK_ColorBLACK))); - - // Now run the resizing and generation into a new web app info. - WebApplicationInfo new_web_app_info; - std::map<int, BookmarkAppHelper::BitmapAndSource> size_map = - BookmarkAppHelper::ResizeIconsAndGenerateMissing( - downloaded, TestSizesToGenerate(), &new_web_app_info); - - // Now check that the linked app icons (i.e. those with URLs) are matching in - // both lists. - ValidateAllIconsWithURLsArePresent(web_app_info, new_web_app_info); - ValidateAllIconsWithURLsArePresent(new_web_app_info, web_app_info); -} - TEST_F(BookmarkAppHelperTest, UpdateWebAppInfoFromManifest) { WebApplicationInfo web_app_info; web_app_info.title = base::UTF8ToUTF16(kAlternativeAppTitle); @@ -812,53 +598,6 @@ } } -TEST_F(BookmarkAppHelperTest, ConstrainBitmapsToSizes) { - std::set<int> desired_sizes; - desired_sizes.insert(16); - desired_sizes.insert(32); - desired_sizes.insert(48); - desired_sizes.insert(96); - desired_sizes.insert(128); - desired_sizes.insert(256); - - { - std::vector<BookmarkAppHelper::BitmapAndSource> bitmaps; - bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(16, SK_ColorRED)); - bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(32, SK_ColorGREEN)); - bitmaps.push_back( - CreateSquareBitmapAndSourceWithColor(144, SK_ColorYELLOW)); - - std::map<int, BookmarkAppHelper::BitmapAndSource> results( - BookmarkAppHelper::ConstrainBitmapsToSizes(bitmaps, desired_sizes)); - - EXPECT_EQ(6u, results.size()); - ValidateBitmapSizeAndColor(results[16].bitmap, 16, SK_ColorRED); - ValidateBitmapSizeAndColor(results[32].bitmap, 32, SK_ColorGREEN); - ValidateBitmapSizeAndColor(results[48].bitmap, 48, SK_ColorYELLOW); - ValidateBitmapSizeAndColor(results[96].bitmap, 96, SK_ColorYELLOW); - ValidateBitmapSizeAndColor(results[128].bitmap, 128, SK_ColorYELLOW); - ValidateBitmapSizeAndColor(results[256].bitmap, 256, SK_ColorYELLOW); - } - { - std::vector<BookmarkAppHelper::BitmapAndSource> bitmaps; - bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(512, SK_ColorRED)); - bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(18, SK_ColorGREEN)); - bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(33, SK_ColorBLUE)); - bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(17, SK_ColorYELLOW)); - - std::map<int, BookmarkAppHelper::BitmapAndSource> results( - BookmarkAppHelper::ConstrainBitmapsToSizes(bitmaps, desired_sizes)); - - EXPECT_EQ(6u, results.size()); - ValidateBitmapSizeAndColor(results[16].bitmap, 16, SK_ColorYELLOW); - ValidateBitmapSizeAndColor(results[32].bitmap, 32, SK_ColorBLUE); - ValidateBitmapSizeAndColor(results[48].bitmap, 48, SK_ColorRED); - ValidateBitmapSizeAndColor(results[96].bitmap, 96, SK_ColorRED); - ValidateBitmapSizeAndColor(results[128].bitmap, 128, SK_ColorRED); - ValidateBitmapSizeAndColor(results[256].bitmap, 256, SK_ColorRED); - } -} - TEST_F(BookmarkAppHelperTest, IsValidBookmarkAppUrl) { EXPECT_TRUE(IsValidBookmarkAppUrl(GURL("https://chromium.org"))); EXPECT_TRUE(IsValidBookmarkAppUrl(GURL("https://www.chromium.org"))); @@ -879,140 +618,4 @@ EXPECT_FALSE(IsValidBookmarkAppUrl(GURL("chrome://extensions"))); } -TEST_F(BookmarkAppHelperTest, IconsResizedFromOddSizes) { - std::vector<BookmarkAppHelper::BitmapAndSource> downloaded; - - // Add three icons with a URL and bitmap. 'Download' each of them. - WebApplicationInfo::IconInfo icon_info = - CreateIconInfoWithBitmap(kIconSizeSmall, SK_ColorRED); - icon_info.url = GURL(kAppIconURL1); - downloaded.push_back(BookmarkAppHelper::BitmapAndSource( - icon_info.url, icon_info.data)); - - icon_info = CreateIconInfoWithBitmap(kIconSizeSmallBetweenMediumAndLarge, - SK_ColorRED); - icon_info.url = GURL(kAppIconURL2); - downloaded.push_back(BookmarkAppHelper::BitmapAndSource( - icon_info.url, icon_info.data)); - - icon_info = CreateIconInfoWithBitmap(kIconSizeLargeBetweenMediumAndLarge, - SK_ColorRED); - icon_info.url = GURL(kAppIconURL3); - downloaded.push_back(BookmarkAppHelper::BitmapAndSource( - icon_info.url, icon_info.data)); - - // Now run the resizing and generation. - WebApplicationInfo web_app_info; - std::map<int, BookmarkAppHelper::BitmapAndSource> size_map = - BookmarkAppHelper::ResizeIconsAndGenerateMissing( - downloaded, TestSizesToGenerate(), &web_app_info); - - // No icons should be generated. The LARGE and MEDIUM sizes should be resized. - ValidateIconsGeneratedAndResizedCorrectly( - downloaded, size_map, TestSizesToGenerate(), 0, 2); -} - -TEST_F(BookmarkAppHelperTest, IconsResizedFromLarger) { - std::vector<BookmarkAppHelper::BitmapAndSource> downloaded; - - // Add three icons with a URL and bitmap. 'Download' two of them and pretend - // the third failed to download. - WebApplicationInfo::IconInfo icon_info = - CreateIconInfoWithBitmap(kIconSizeSmall, SK_ColorRED); - icon_info.url = GURL(kAppIconURL1); - downloaded.push_back(BookmarkAppHelper::BitmapAndSource( - icon_info.url, icon_info.data)); - - icon_info = CreateIconInfoWithBitmap(kIconSizeLarge, SK_ColorBLUE); - icon_info.url = GURL(kAppIconURL2); - - icon_info = CreateIconInfoWithBitmap(kIconSizeGigantor, SK_ColorBLACK); - icon_info.url = GURL(kAppIconURL3); - downloaded.push_back(BookmarkAppHelper::BitmapAndSource( - icon_info.url, icon_info.data)); - - // Now run the resizing and generation. - WebApplicationInfo web_app_info; - std::map<int, BookmarkAppHelper::BitmapAndSource> size_map = - BookmarkAppHelper::ResizeIconsAndGenerateMissing( - downloaded, TestSizesToGenerate(), &web_app_info); - - // Expect icon for MEDIUM and LARGE to be resized from the gigantor icon - // as it was not downloaded. - ValidateIconsGeneratedAndResizedCorrectly( - downloaded, size_map, TestSizesToGenerate(), 0, 2); -} - -TEST_F(BookmarkAppHelperTest, AllIconsGeneratedWhenNotDownloaded) { - std::vector<BookmarkAppHelper::BitmapAndSource> downloaded; - - // Add three icons with a URL and bitmap. 'Download' none of them. - WebApplicationInfo::IconInfo icon_info = - CreateIconInfoWithBitmap(kIconSizeSmall, SK_ColorRED); - icon_info.url = GURL(kAppIconURL1); - - icon_info = CreateIconInfoWithBitmap(kIconSizeLarge, SK_ColorBLUE); - icon_info.url = GURL(kAppIconURL2); - - icon_info = CreateIconInfoWithBitmap(kIconSizeGigantor, SK_ColorBLACK); - icon_info.url = GURL(kAppIconURL3); - - // Now run the resizing and generation. - WebApplicationInfo web_app_info; - std::map<int, BookmarkAppHelper::BitmapAndSource> size_map = - BookmarkAppHelper::ResizeIconsAndGenerateMissing( - downloaded, TestSizesToGenerate(), &web_app_info); - - // Expect all icons to be generated. - ValidateIconsGeneratedAndResizedCorrectly( - downloaded, size_map, TestSizesToGenerate(), 3, 0); -} - -TEST_F(BookmarkAppHelperTest, IconResizedFromLargerAndSmaller) { - std::vector<BookmarkAppHelper::BitmapAndSource> downloaded; - - // Pretend the huge icon wasn't downloaded but two smaller ones were. - WebApplicationInfo::IconInfo icon_info = - CreateIconInfoWithBitmap(kIconSizeTiny, SK_ColorRED); - icon_info.url = GURL(kAppIconURL1); - downloaded.push_back(BookmarkAppHelper::BitmapAndSource( - icon_info.url, icon_info.data)); - - icon_info = CreateIconInfoWithBitmap(kIconSizeMedium, SK_ColorBLUE); - icon_info.url = GURL(kAppIconURL2); - downloaded.push_back(BookmarkAppHelper::BitmapAndSource( - icon_info.url, icon_info.data)); - - icon_info = CreateIconInfoWithBitmap(kIconSizeGigantor, SK_ColorBLACK); - icon_info.url = GURL(kAppIconURL3); - - // Now run the resizing and generation. - WebApplicationInfo web_app_info; - std::map<int, BookmarkAppHelper::BitmapAndSource> size_map = - BookmarkAppHelper::ResizeIconsAndGenerateMissing( - downloaded, TestSizesToGenerate(), &web_app_info); - - // Expect no icons to be generated, but the LARGE and SMALL icons to be - // resized from the MEDIUM icon. - ValidateIconsGeneratedAndResizedCorrectly( - downloaded, size_map, TestSizesToGenerate(), 0, 2); - - // Verify specifically that the LARGE icons was resized from the medium icon. - const auto it = size_map.find(kIconSizeLarge); - EXPECT_NE(size_map.end(), it); - EXPECT_EQ(GURL(kAppIconURL2), it->second.source_url); -} - -TEST_F(BookmarkAppHelperTest, IconsResizedWhenOnlyATinyOneIsProvided) { - // When only a tiny icon is downloaded (smaller than the three desired - // sizes), 3 icons should be resized. - TestIconGeneration(kIconSizeTiny, 0, 3); -} - -TEST_F(BookmarkAppHelperTest, IconsResizedWhenOnlyAGigantorOneIsProvided) { - // When an enormous icon is provided, each desired icon size should be resized - // from it, and no icons should be generated. - TestIconGeneration(kIconSizeGigantor, 0, 3); -} - } // namespace extensions
diff --git a/chrome/browser/extensions/extension_gcm_app_handler_unittest.cc b/chrome/browser/extensions/extension_gcm_app_handler_unittest.cc index f14183e4..25fc22c3 100644 --- a/chrome/browser/extensions/extension_gcm_app_handler_unittest.cc +++ b/chrome/browser/extensions/extension_gcm_app_handler_unittest.cc
@@ -73,6 +73,28 @@ const char kTestExtensionName[] = "FooBar"; +void RequestProxyResolvingSocketFactoryOnUIThread( + Profile* profile, + base::WeakPtr<gcm::GCMProfileService> service, + network::mojom::ProxyResolvingSocketFactoryRequest request) { + if (!service) + return; + network::mojom::NetworkContext* network_context = + content::BrowserContext::GetDefaultStoragePartition(profile) + ->GetNetworkContext(); + network_context->CreateProxyResolvingSocketFactory(std::move(request)); +} + +void RequestProxyResolvingSocketFactory( + Profile* profile, + base::WeakPtr<gcm::GCMProfileService> service, + network::mojom::ProxyResolvingSocketFactoryRequest request) { + content::BrowserThread::PostTask( + content::BrowserThread::UI, FROM_HERE, + base::BindOnce(&RequestProxyResolvingSocketFactoryOnUIThread, profile, + service, std::move(request))); +} + } // namespace // Helper class for asynchronous waiting. @@ -208,6 +230,7 @@ {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})); return std::make_unique<gcm::GCMProfileService>( profile->GetPrefs(), profile->GetPath(), profile->GetRequestContext(), + base::BindRepeating(&RequestProxyResolvingSocketFactory, profile), content::BrowserContext::GetDefaultStoragePartition(profile) ->GetURLLoaderFactoryForBrowserProcess(), chrome::GetChannel(),
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 7dd201c..5fb5141 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -570,6 +570,10 @@ "Defers the loading of certain cross-origin frames until the page is " "scrolled down near them."; +const char kEnableLazyImageLoadingName[] = "Enable lazy image loading"; +const char kEnableLazyImageLoadingDescription[] = + "Defers the loading of images until the page is scrolled down near them."; + const char kEnableMacMaterialDesignDownloadShelfName[] = "Enable Material Design download shelf"; @@ -1155,6 +1159,11 @@ const char kUseSurfaceLayerForVideoDescription[] = "Enable compositing onto a Surface instead of a VideoLayer " "for videos."; +const char kUseSurfaceLayerForVideoMSName[] = + "Enable the use of SurfaceLayer objects for media stream videos."; +const char kUseSurfaceLayerForVideoMSDescription[] = + "Enable compositing onto a Surface instead of a VideoLayer " + "for media stream videos."; const char kNewUsbBackendName[] = "Enable new USB backend"; const char kNewUsbBackendDescription[] = @@ -1769,6 +1778,11 @@ "this mode, the Sync machinery can start without user opt-in, but only a " "subset of data types are supported."; +const char kSyncUSSAutofillWalletDataName[] = + "Enable USS for autofill wallet data"; +const char kSyncUSSAutofillWalletDataDescription[] = + "Enables the new implementation of autofill walet data sync"; + const char kSyncSandboxName[] = "Use Chrome Sync sandbox"; const char kSyncSandboxDescription[] = "Connects to the testing server for Chrome Sync.";
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index feb88988..7984625b 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -372,6 +372,9 @@ extern const char kEnableLazyFrameLoadingName[]; extern const char kEnableLazyFrameLoadingDescription[]; +extern const char kEnableLazyImageLoadingName[]; +extern const char kEnableLazyImageLoadingDescription[]; + extern const char kEnableMacMaterialDesignDownloadShelfName[]; extern const char kEnableMacMaterialDesignDownloadShelfDescription[]; @@ -717,6 +720,9 @@ extern const char kUseSurfaceLayerForVideoName[]; extern const char kUseSurfaceLayerForVideoDescription[]; +extern const char kUseSurfaceLayerForVideoMSName[]; +extern const char kUseSurfaceLayerForVideoMSDescription[]; + extern const char kNewUsbBackendName[]; extern const char kNewUsbBackendDescription[]; @@ -1082,6 +1088,9 @@ extern const char kSyncStandaloneTransportName[]; extern const char kSyncStandaloneTransportDescription[]; +extern const char kSyncUSSAutofillWalletDataName[]; +extern const char kSyncUSSAutofillWalletDataDescription[]; + extern const char kSysInternalsName[]; extern const char kSysInternalsDescription[];
diff --git a/chrome/browser/gcm/gcm_profile_service_factory.cc b/chrome/browser/gcm/gcm_profile_service_factory.cc index 2890eb1..ed3be69 100644 --- a/chrome/browser/gcm/gcm_profile_service_factory.cc +++ b/chrome/browser/gcm/gcm_profile_service_factory.cc
@@ -35,6 +35,38 @@ namespace gcm { +namespace { + +#if !defined(OS_ANDROID) +// Requests a ProxyResolvingSocketFactoryPtr on the UI thread. Note that a +// WeakPtr of GCMProfileService is needed to detect when the KeyedService shuts +// down, and avoid calling into |profile| which might have also been destroyed. +void RequestProxyResolvingSocketFactoryOnUIThread( + Profile* profile, + base::WeakPtr<GCMProfileService> service, + network::mojom::ProxyResolvingSocketFactoryRequest request) { + if (!service) + return; + network::mojom::NetworkContext* network_context = + content::BrowserContext::GetDefaultStoragePartition(profile) + ->GetNetworkContext(); + network_context->CreateProxyResolvingSocketFactory(std::move(request)); +} + +// A thread-safe wrapper to request a ProxyResolvingSocketFactoryPtr. +void RequestProxyResolvingSocketFactory( + Profile* profile, + base::WeakPtr<GCMProfileService> service, + network::mojom::ProxyResolvingSocketFactoryRequest request) { + content::BrowserThread::PostTask( + content::BrowserThread::UI, FROM_HERE, + base::BindOnce(&RequestProxyResolvingSocketFactoryOnUIThread, profile, + std::move(service), std::move(request))); +} +#endif + +} // namespace + // static GCMProfileService* GCMProfileServiceFactory::GetForProfile( content::BrowserContext* profile) { @@ -78,8 +110,9 @@ service = base::WrapUnique( new GCMProfileService(profile->GetPath(), blocking_task_runner)); #else - service = base::WrapUnique(new GCMProfileService( + service = std::make_unique<GCMProfileService>( profile->GetPrefs(), profile->GetPath(), profile->GetRequestContext(), + base::BindRepeating(&RequestProxyResolvingSocketFactory, profile), content::BrowserContext::GetDefaultStoragePartition(profile) ->GetURLLoaderFactoryForBrowserProcess(), chrome::GetChannel(), @@ -90,7 +123,7 @@ content::BrowserThread::UI), content::BrowserThread::GetTaskRunnerForThread( content::BrowserThread::IO), - blocking_task_runner)); + blocking_task_runner); #endif #if BUILDFLAG(ENABLE_OFFLINE_PAGES) offline_pages::PrefetchService* prefetch_service =
diff --git a/chrome/browser/gcm/gcm_profile_service_unittest.cc b/chrome/browser/gcm/gcm_profile_service_unittest.cc index 7c72d74..55e0bf1 100644 --- a/chrome/browser/gcm/gcm_profile_service_unittest.cc +++ b/chrome/browser/gcm/gcm_profile_service_unittest.cc
@@ -43,6 +43,27 @@ const char kTestAppID[] = "TestApp"; const char kUserID[] = "user"; +void RequestProxyResolvingSocketFactoryOnUIThread( + Profile* profile, + base::WeakPtr<gcm::GCMProfileService> service, + network::mojom::ProxyResolvingSocketFactoryRequest request) { + if (!service) + return; + return content::BrowserContext::GetDefaultStoragePartition(profile) + ->GetNetworkContext() + ->CreateProxyResolvingSocketFactory(std::move(request)); +} + +void RequestProxyResolvingSocketFactory( + Profile* profile, + base::WeakPtr<gcm::GCMProfileService> service, + network::mojom::ProxyResolvingSocketFactoryRequest request) { + content::BrowserThread::PostTask( + content::BrowserThread::UI, FROM_HERE, + base::BindOnce(&RequestProxyResolvingSocketFactoryOnUIThread, profile, + service, std::move(request))); +} + std::unique_ptr<KeyedService> BuildGCMProfileService( content::BrowserContext* context) { Profile* profile = Profile::FromBrowserContext(context); @@ -51,6 +72,7 @@ {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN})); return std::make_unique<gcm::GCMProfileService>( profile->GetPrefs(), profile->GetPath(), profile->GetRequestContext(), + base::BindRepeating(&RequestProxyResolvingSocketFactory, profile), content::BrowserContext::GetDefaultStoragePartition(profile) ->GetURLLoaderFactoryForBrowserProcess(), chrome::GetChannel(),
diff --git a/chrome/browser/google/google_update_win.cc b/chrome/browser/google/google_update_win.cc index e602b36..8613faa 100644 --- a/chrome/browser/google/google_update_win.cc +++ b/chrome/browser/google/google_update_win.cc
@@ -4,8 +4,6 @@ #include "chrome/browser/google/google_update_win.h" -#include <atlbase.h> -#include <atlcom.h> #include <objbase.h> #include <stdint.h> #include <string.h> @@ -33,6 +31,7 @@ #include "base/threading/sequenced_task_runner_handle.h" #include "base/time/time.h" #include "base/version.h" +#include "base/win/atl.h" #include "base/win/scoped_bstr.h" #include "chrome/common/url_constants.h" #include "chrome/grit/generated_resources.h"
diff --git a/chrome/browser/google/google_update_win_unittest.cc b/chrome/browser/google/google_update_win_unittest.cc index 7bce75e..54c641cc 100644 --- a/chrome/browser/google/google_update_win_unittest.cc +++ b/chrome/browser/google/google_update_win_unittest.cc
@@ -5,8 +5,7 @@ #include "chrome/browser/google/google_update_win.h" #include <windows.h> -#include <atlbase.h> -#include <atlcom.h> + #include <wrl/client.h> #include <memory> @@ -24,6 +23,7 @@ #include "base/test/test_simple_task_runner.h" #include "base/threading/thread_task_runner_handle.h" #include "base/version.h" +#include "base/win/atl.h" #include "base/win/registry.h" #include "chrome/common/chrome_version.h" #include "chrome/install_static/test/scoped_install_details.h"
diff --git a/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_browsertest.cc b/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_browsertest.cc new file mode 100644 index 0000000..1281cfba --- /dev/null +++ b/chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_browsertest.cc
@@ -0,0 +1,323 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/run_loop.h" +#include "base/test/test_timeouts.h" +#include "base/threading/thread_task_runner_handle.h" +#include "build/build_config.h" +#include "chrome/browser/extensions/extension_apitest.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/test/base/ui_test_utils.h" +#include "components/guest_view/browser/guest_view_manager.cc" +#include "components/guest_view/browser/test_guest_view_manager.h" +#include "content/public/browser/render_view_host.h" +#include "content/public/browser/render_widget_host_view.h" +#include "content/public/browser/web_contents.h" +#include "content/public/common/content_switches.h" +#include "content/public/test/browser_test_utils.h" +#include "content/public/test/test_renderer_host.h" +#include "extensions/browser/api/extensions_api_client.h" +#include "extensions/browser/guest_view/mime_handler_view/test_mime_handler_view_guest.h" +#include "extensions/test/extension_test_message_listener.h" +#include "extensions/test/result_catcher.h" +#include "net/test/embedded_test_server/embedded_test_server.h" +#include "ui/views/accessibility/view_accessibility.h" +#include "ui/views/controls/webview/webview.h" +#include "ui/views/view.h" +#include "ui/views/widget/widget.h" +#if defined(USE_AURA) +#include "ui/aura/window.h" +#endif + +using extensions::ExtensionsAPIClient; +using extensions::MimeHandlerViewGuest; +using extensions::TestMimeHandlerViewGuest; +using guest_view::GuestViewManager; +using guest_view::TestGuestViewManager; +using guest_view::TestGuestViewManagerFactory; + +// Note: This file contains several old WebViewGuest tests which were for +// certain BrowserPlugin features and no longer made sense for the new +// WebViewGuest which is based on cross-process frames. Since +// MimeHandlerViewGuest is the only guest which still uses BrowserPlugin, the +// test were moved, with adaptation, to this file. Eventually this file might +// contain new tests for MimeHandlerViewGuest but ideally they should all be +// tests which are a) based on cross-process frame version of MHVG, and b) tests +// that need chrome layer API. Anything else should go to the extension layer +// version of the tests. Most of the legacy tests will probably be removed when +// MimeHandlerViewGuest starts using cross-process frames (see +// https://crbug.com/659750). + +// A class of tests which were originally designed as WebViewGuest tests which +// were testing some aspects of BrowserPlugin. Since all GuestViews except for +// MimeHandlerViewGuest have now moved on to using cross-process frames these +// tests were modified to using MimeHandlerViewGuest instead. They also could +// not be moved to extensions/browser/guest_view/mime_handler_view due to chrome +// layer dependencies. +class ChromeMimeHandlerViewBrowserPluginTest + : public extensions::ExtensionApiTest { + public: + ChromeMimeHandlerViewBrowserPluginTest() { + GuestViewManager::set_factory_for_testing(&factory_); + } + + ~ChromeMimeHandlerViewBrowserPluginTest() override {} + + void SetUpOnMainThread() override { + extensions::ExtensionApiTest::SetUpOnMainThread(); + + embedded_test_server()->ServeFilesFromDirectory( + test_data_dir_.AppendASCII("mime_handler_view")); + ASSERT_TRUE(StartEmbeddedTestServer()); + } + + protected: + TestGuestViewManager* GetGuestViewManager() { + TestGuestViewManager* manager = static_cast<TestGuestViewManager*>( + TestGuestViewManager::FromBrowserContext(browser()->profile())); + // TestGuestViewManager::WaitForSingleGuestCreated can and will get called + // before a guest is created. Since GuestViewManager is usually not created + // until the first guest is created, this means that |manager| will be + // nullptr if trying to use the manager to wait for the first guest. Because + // of this, the manager must be created here if it does not already exist. + if (!manager) { + manager = static_cast<TestGuestViewManager*>( + GuestViewManager::CreateWithDelegate( + browser()->profile(), + ExtensionsAPIClient::Get()->CreateGuestViewManagerDelegate( + browser()->profile()))); + } + return manager; + } + + void InitializeTestPage(const GURL& url) { + // Use the testing subclass of MimeHandlerViewGuest. + GetGuestViewManager()->RegisterTestGuestViewType<MimeHandlerViewGuest>( + base::BindRepeating(&TestMimeHandlerViewGuest::Create)); + + const extensions::Extension* extension = + LoadExtension(test_data_dir_.AppendASCII("mime_handler_view")); + ASSERT_TRUE(extension); + const char kTestExtensionId[] = "oickdpebdnfbgkcaoklfcdhjniefkcji"; + CHECK_EQ(kTestExtensionId, extension->id()); + + extensions::ResultCatcher catcher; + ui_test_utils::NavigateToURL(browser(), url); + + if (!catcher.GetNextResult()) + FAIL() << catcher.message(); + + guest_web_contents_ = GetGuestViewManager()->WaitForSingleGuestCreated(); + embedder_web_contents_ = browser()->tab_strip_model()->GetWebContentsAt(0); + ASSERT_TRUE(guest_web_contents_); + ASSERT_TRUE(embedder_web_contents_); + } + + content::WebContents* guest_web_contents() const { + return guest_web_contents_; + } + content::WebContents* embedder_web_contents() const { + return embedder_web_contents_; + } + + private: + TestGuestViewManagerFactory factory_; + content::WebContents* guest_web_contents_; + content::WebContents* embedder_web_contents_; + + DISALLOW_COPY_AND_ASSIGN(ChromeMimeHandlerViewBrowserPluginTest); +}; + +// Flaky under MSan: https://crbug.com/837757 +#if defined(MEMORY_SANITIZER) +#define MAYBE_BP_AutoResizeMessages DISABLED_AutoResizeMessages +#else +#define MAYBE_BP_AutoResizeMessages AutoResizeMessages +#endif +IN_PROC_BROWSER_TEST_F(ChromeMimeHandlerViewBrowserPluginTest, + MAYBE_BP_AutoResizeMessages) { + InitializeTestPage(embedded_test_server()->GetURL("/testBasic.csv")); + + // Helper function as this test requires inspecting a number of content:: + // internal objects. + EXPECT_TRUE(content::TestChildOrGuestAutoresize( + true, + embedder_web_contents() + ->GetRenderWidgetHostView() + ->GetRenderWidgetHost() + ->GetProcess(), + guest_web_contents()->GetRenderWidgetHostView()->GetRenderWidgetHost())); +} + +#if defined(USE_AURA) +// Flaky on Linux. See: https://crbug.com/870604. +#if defined(OS_LINUX) +#define MAYBE_TouchFocusesEmbedder DISABLED_TouchFocusesEmbedder +#else +#define MAYBE_TouchFocusesEmbedder TouchFocusesEmbedder +#endif +IN_PROC_BROWSER_TEST_F(ChromeMimeHandlerViewBrowserPluginTest, + MAYBE_TouchFocusesEmbedder) { + InitializeTestPage(embedded_test_server()->GetURL("/testBasic.csv")); + + content::RenderViewHost* embedder_rvh = + embedder_web_contents()->GetRenderViewHost(); + content::RenderFrameSubmissionObserver frame_observer( + embedder_web_contents()); + + bool embedder_has_touch_handler = + content::RenderViewHostTester::HasTouchEventHandler(embedder_rvh); + ASSERT_FALSE(embedder_has_touch_handler); + + ASSERT_TRUE(ExecuteScript( + guest_web_contents(), + "document.addEventListener('touchstart', dummyTouchStartHandler);")); + // Wait until embedder has touch handlers. + while (!content::RenderViewHostTester::HasTouchEventHandler(embedder_rvh)) { + base::RunLoop run_loop; + base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( + FROM_HERE, run_loop.QuitClosure(), TestTimeouts::tiny_timeout()); + run_loop.Run(); + } + + auto* top_level_window = + embedder_web_contents()->GetNativeView()->GetToplevelWindow(); + ASSERT_TRUE(top_level_window); + auto* widget = views::Widget::GetWidgetForNativeWindow(top_level_window); + ASSERT_TRUE(widget); + ASSERT_TRUE(widget->GetRootView()); + + // Find WebView corresponding to embedder_web_contents(). + views::View* aura_webview = nullptr; + base::queue<views::View*> queue; + queue.push(widget->GetRootView()); + while (!queue.empty()) { + views::View* current = queue.front(); + queue.pop(); + if (std::string(current->GetClassName()).find("WebView") != + std::string::npos && + static_cast<views::WebView*>(current)->GetWebContents() == + embedder_web_contents()) { + aura_webview = current; + break; + } + for (int i = 0; i < current->child_count(); ++i) + queue.push(current->child_at(i)); + } + ASSERT_TRUE(aura_webview); + gfx::Rect bounds(aura_webview->bounds()); + EXPECT_TRUE(aura_webview->IsFocusable()); + + views::View* other_focusable_view = new views::View(); + other_focusable_view->SetBounds(bounds.x() + bounds.width(), bounds.y(), 100, + 100); + other_focusable_view->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); + // Focusable views require an accessible name to pass accessibility checks. + other_focusable_view->GetViewAccessibility().OverrideName("Any name"); + aura_webview->parent()->AddChildView(other_focusable_view); + other_focusable_view->SetPosition(gfx::Point(bounds.x() + bounds.width(), 0)); + + // Sync changes to compositor. + while (!RequestFrame(embedder_web_contents())) { + // RequestFrame failed because we were waiting on an ack ... wait a short + // time and retry. + base::RunLoop run_loop; + base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( + FROM_HERE, run_loop.QuitClosure(), + base::TimeDelta::FromMilliseconds(10)); + run_loop.Run(); + } + frame_observer.WaitForAnyFrameSubmission(); + + aura_webview->RequestFocus(); + // Verify that other_focusable_view can steal focus from aura_webview. + EXPECT_TRUE(aura_webview->HasFocus()); + other_focusable_view->RequestFocus(); + EXPECT_TRUE(other_focusable_view->HasFocus()); + EXPECT_FALSE(aura_webview->HasFocus()); + + // Compute location of guest within embedder so we can more accurately + // target our touch event. + gfx::Rect guest_rect = guest_web_contents()->GetContainerBounds(); + gfx::Point embedder_origin = + embedder_web_contents()->GetContainerBounds().origin(); + guest_rect.Offset(-embedder_origin.x(), -embedder_origin.y()); + + // Generate and send synthetic touch event. + content::InputEventAckWaiter waiter( + guest_web_contents()->GetRenderWidgetHostView()->GetRenderWidgetHost(), + blink::WebInputEvent::kTouchStart); + content::SimulateTouchPressAt(embedder_web_contents(), + guest_rect.CenterPoint()); + waiter.Wait(); + EXPECT_TRUE(aura_webview->HasFocus()); +} +#endif // USE_AURA + +class ChromeMimeHandlerViewBrowserPluginScrollTest + : public ChromeMimeHandlerViewBrowserPluginTest { + public: + void SetUpCommandLine(base::CommandLine* command_line) override { + ChromeMimeHandlerViewBrowserPluginTest::SetUpCommandLine(command_line); + + command_line->AppendSwitchASCII( + switches::kTouchEventFeatureDetection, + switches::kTouchEventFeatureDetectionEnabled); + } +}; + +#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) +#define MAYBE_ScrollGuestContent DISABLED_ScrollGuestContent +#else +#define MAYBE_ScrollGuestContent ScrollGuestContent +#endif +IN_PROC_BROWSER_TEST_F(ChromeMimeHandlerViewBrowserPluginScrollTest, + MAYBE_ScrollGuestContent) { + InitializeTestPage(embedded_test_server()->GetURL("/test_embedded.html")); + + ASSERT_TRUE(ExecuteScript(guest_web_contents(), "ensurePageIsScrollable();")); + + content::RenderFrameSubmissionObserver embedder_frame_observer( + embedder_web_contents()); + content::RenderFrameSubmissionObserver guest_frame_observer( + guest_web_contents()); + + gfx::Rect embedder_rect = embedder_web_contents()->GetContainerBounds(); + gfx::Rect guest_rect = guest_web_contents()->GetContainerBounds(); + guest_rect.set_x(guest_rect.x() - embedder_rect.x()); + guest_rect.set_y(guest_rect.y() - embedder_rect.y()); + + gfx::Vector2dF default_offset; + guest_frame_observer.WaitForScrollOffset(default_offset); + embedder_frame_observer.WaitForScrollOffset(default_offset); + + gfx::Point guest_scroll_location(guest_rect.width() / 2, + guest_rect.height() / 2); + float gesture_distance = 15.f; + { + gfx::Vector2dF expected_offset(0.f, gesture_distance); + + content::SimulateGestureScrollSequence( + guest_web_contents(), guest_scroll_location, + gfx::Vector2dF(0, -gesture_distance)); + + guest_frame_observer.WaitForScrollOffset(expected_offset); + } + + embedder_frame_observer.WaitForScrollOffset(default_offset); + + // Use fling gesture to scroll back, velocity should be big enough to scroll + // content back. + float fling_velocity = 300.f; + { + content::SimulateGestureFlingSequence(guest_web_contents(), + guest_scroll_location, + gfx::Vector2dF(0, fling_velocity)); + + guest_frame_observer.WaitForScrollOffset(default_offset); + } + + embedder_frame_observer.WaitForScrollOffset(default_offset); +}
diff --git a/chrome/browser/importer/ie_importer_browsertest_win.cc b/chrome/browser/importer/ie_importer_browsertest_win.cc index 154a7f6..950381ef 100644 --- a/chrome/browser/importer/ie_importer_browsertest_win.cc +++ b/chrome/browser/importer/ie_importer_browsertest_win.cc
@@ -7,7 +7,6 @@ #include <unknwn.h> #include <intshcut.h> #include <objbase.h> -#include <propvarutil.h> #include <shlguid.h> #include <shlobj.h> #include <stddef.h> @@ -28,6 +27,7 @@ #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/threading/thread_restrictions.h" +#include "base/win/propvarutil.h" #include "base/win/registry.h" #include "base/win/scoped_propvariant.h" #include "base/win/windows_version.h"
diff --git a/chrome/browser/media/public_session_media_access_handler.cc b/chrome/browser/media/public_session_media_access_handler.cc index 260a940..75c66a38 100644 --- a/chrome/browser/media/public_session_media_access_handler.cc +++ b/chrome/browser/media/public_session_media_access_handler.cc
@@ -46,7 +46,8 @@ const extensions::Extension* extension) { // This class handles requests for Public Sessions only, outside of them just // pass the request through to the original class. - if (!profiles::IsPublicSession() || !extension->is_platform_app()) { + if (!profiles::ArePublicSessionRestrictionsEnabled() || + !extension->is_platform_app()) { return extension_media_access_handler_.HandleRequest( web_contents, request, std::move(callback), extension); }
diff --git a/chrome/browser/media/public_session_tab_capture_access_handler.cc b/chrome/browser/media/public_session_tab_capture_access_handler.cc index 09918f0..a2d4a4f 100644 --- a/chrome/browser/media/public_session_tab_capture_access_handler.cc +++ b/chrome/browser/media/public_session_tab_capture_access_handler.cc
@@ -45,7 +45,7 @@ const extensions::Extension* extension) { // This class handles requests for Public Sessions only, outside of them just // pass the request through to the original class. - if (!profiles::IsPublicSession() || !extension || + if (!profiles::ArePublicSessionRestrictionsEnabled() || !extension || (request.audio_type != content::MEDIA_GUM_TAB_AUDIO_CAPTURE && request.video_type != content::MEDIA_GUM_TAB_VIDEO_CAPTURE)) { return tab_capture_access_handler_.HandleRequest(
diff --git a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service.cc b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service.cc index f0efddc..55b1460 100644 --- a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service.cc +++ b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service.cc
@@ -104,7 +104,7 @@ void CastMediaSinkService::OnUserGesture() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (dns_sd_registry_) - dns_sd_registry_->ForceDiscovery(); + dns_sd_registry_->ResetAndDiscover(); DVLOG(2) << "OnUserGesture: open channel now for " << cast_sinks_.size() << " devices discovered in latest round of mDNS";
diff --git a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_unittest.cc b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_unittest.cc index ec0c72d..4afa439 100644 --- a/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_unittest.cc +++ b/chrome/browser/media/router/discovery/mdns/cast_media_sink_service_unittest.cc
@@ -166,7 +166,7 @@ }; TEST_F(CastMediaSinkServiceTest, OnUserGesture) { - EXPECT_CALL(test_dns_sd_registry_, ForceDiscovery()); + EXPECT_CALL(test_dns_sd_registry_, ResetAndDiscover()); media_sink_service_->OnUserGesture(); }
diff --git a/chrome/browser/media/router/discovery/mdns/dns_sd_device_lister.cc b/chrome/browser/media/router/discovery/mdns/dns_sd_device_lister.cc index 8bb618e..717d5bd6 100644 --- a/chrome/browser/media/router/discovery/mdns/dns_sd_device_lister.cc +++ b/chrome/browser/media/router/discovery/mdns/dns_sd_device_lister.cc
@@ -31,18 +31,16 @@ DnsSdDelegate* delegate, const std::string& service_type) : delegate_(delegate), - device_lister_(local_discovery::ServiceDiscoveryDeviceLister::Create( - this, - service_discovery_client, - service_type)), - started_(false) {} + service_discovery_client_(service_discovery_client), + service_type_(service_type) {} DnsSdDeviceLister::~DnsSdDeviceLister() {} void DnsSdDeviceLister::Discover() { - if (!started_) { + if (!device_lister_) { + device_lister_ = local_discovery::ServiceDiscoveryDeviceLister::Create( + this, service_discovery_client_, service_type_); device_lister_->Start(); - started_ = true; VLOG(1) << "Started device lister for service type " << device_lister_->service_type(); } @@ -51,6 +49,10 @@ << device_lister_->service_type(); } +void DnsSdDeviceLister::Reset() { + device_lister_.reset(); +} + void DnsSdDeviceLister::OnDeviceChanged( const std::string& service_type, bool added,
diff --git a/chrome/browser/media/router/discovery/mdns/dns_sd_device_lister.h b/chrome/browser/media/router/discovery/mdns/dns_sd_device_lister.h index b9e54e2..43d814a3 100644 --- a/chrome/browser/media/router/discovery/mdns/dns_sd_device_lister.h +++ b/chrome/browser/media/router/discovery/mdns/dns_sd_device_lister.h
@@ -31,6 +31,9 @@ virtual void Discover(); + // Resets |device_lister_|. + void Reset(); + protected: void OnDeviceChanged( const std::string& service_type, @@ -43,8 +46,13 @@ private: // The delegate to notify of changes to services. DnsSdDelegate* const delegate_; + + // Created when |Discover()| is called. std::unique_ptr<local_discovery::ServiceDiscoveryDeviceLister> device_lister_; - bool started_; + + // The client and service type used to create |device_lister_|. + local_discovery::ServiceDiscoveryClient* const service_discovery_client_; + std::string service_type_; DISALLOW_COPY_AND_ASSIGN(DnsSdDeviceLister); };
diff --git a/chrome/browser/media/router/discovery/mdns/dns_sd_registry.cc b/chrome/browser/media/router/discovery/mdns/dns_sd_registry.cc index 54a394c..ad78d54 100644 --- a/chrome/browser/media/router/discovery/mdns/dns_sd_registry.cc +++ b/chrome/browser/media/router/discovery/mdns/dns_sd_registry.cc
@@ -85,8 +85,9 @@ return false; } -void DnsSdRegistry::ServiceTypeData::ForceDiscovery() { - lister_->Discover(); +void DnsSdRegistry::ServiceTypeData::ResetAndDiscover() { + lister_->Reset(); + ClearServices(); } bool DnsSdRegistry::ServiceTypeData::ClearServices() { @@ -146,10 +147,10 @@ DispatchApiEvent(service_type); } -void DnsSdRegistry::ForceDiscovery() { +void DnsSdRegistry::ResetAndDiscover() { DCHECK(thread_checker_.CalledOnValidThread()); for (const auto& next_service : service_data_map_) { - next_service.second->ForceDiscovery(); + next_service.second->ResetAndDiscover(); } }
diff --git a/chrome/browser/media/router/discovery/mdns/dns_sd_registry.h b/chrome/browser/media/router/discovery/mdns/dns_sd_registry.h index 89cdce1..0adf245 100644 --- a/chrome/browser/media/router/discovery/mdns/dns_sd_registry.h +++ b/chrome/browser/media/router/discovery/mdns/dns_sd_registry.h
@@ -46,9 +46,9 @@ // whose event filter matches the service type. virtual void Publish(const std::string& service_type); - // Immediately issues a multicast DNS query for all service types of the - // calling extension. - virtual void ForceDiscovery(); + // Immediately issues a multicast DNS query for all registered service types. + // Also resets the local cache from previous rounds of discovery. + virtual void ResetAndDiscover(); // Observer registration for parties interested in discovery events. virtual void AddObserver(DnsSdObserver* observer); @@ -73,14 +73,15 @@ int GetListenerCount(); // Immediately issues a multicast DNS query for the service type owned by - // |this|. - void ForceDiscovery(); + // |this|. Also resets the cache from previous rounds of discovery. + void ResetAndDiscover(); // Methods for adding, updating or removing services for this service type. bool UpdateService(bool added, const DnsSdService& service); bool RemoveService(const std::string& service_name); - // Called when the discovery service was restarted. - // Clear the local cache and initiate rediscovery. + + // Called when services are flushed. Clears |service_list_| and requests + // |lister_| to discover and return new services. bool ClearServices(); const DnsSdRegistry::DnsSdServiceList& GetServiceList();
diff --git a/chrome/browser/media/router/discovery/mdns/dns_sd_registry_unittest.cc b/chrome/browser/media/router/discovery/mdns/dns_sd_registry_unittest.cc index 3c473ac9c..a249b6c 100644 --- a/chrome/browser/media/router/discovery/mdns/dns_sd_registry_unittest.cc +++ b/chrome/browser/media/router/discovery/mdns/dns_sd_registry_unittest.cc
@@ -120,7 +120,7 @@ EXPECT_CALL(*registry_->GetLister(service_type1), Discover()); EXPECT_CALL(*registry_->GetLister(service_type2), Discover()); - registry_->ForceDiscovery(); + registry_->ResetAndDiscover(); } // Tests registering a listener and receiving an added and updated event.
diff --git a/chrome/browser/media/router/test/mock_dns_sd_registry.h b/chrome/browser/media/router/test/mock_dns_sd_registry.h index 8999612..c39489f 100644 --- a/chrome/browser/media/router/test/mock_dns_sd_registry.h +++ b/chrome/browser/media/router/test/mock_dns_sd_registry.h
@@ -20,7 +20,7 @@ MOCK_METHOD1(RegisterDnsSdListener, void(const std::string& service_type)); MOCK_METHOD1(UnregisterDnsSdListener, void(const std::string& service_type)); MOCK_METHOD1(Publish, void(const std::string&)); - MOCK_METHOD0(ForceDiscovery, void(void)); + MOCK_METHOD0(ResetAndDiscover, void(void)); void DispatchMDnsEvent(const std::string& service_type, const DnsSdServiceList& services);
diff --git a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc index e7305716..09550a2 100644 --- a/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc +++ b/chrome/browser/media/webrtc/webrtc_event_log_uploader.cc
@@ -39,8 +39,6 @@ #error Platform not supported. #endif -// TODO(crbug.com/775415): Update comment to reflect new policy when discarding -// the command line flag. constexpr net::NetworkTrafficAnnotationTag kWebrtcEventLogUploaderTrafficAnnotation = net::DefineNetworkTrafficAnnotation("webrtc_event_log_uploader", R"( @@ -51,10 +49,10 @@ "will not contain private information. They will be used to " "improve WebRTC (fix bugs, tune performance, etc.)." trigger: - "A privileged JS application (Hangouts/Meet) has requested a peer " - "connection to be logged, and the resulting event log to be " - "uploaded at a time deemed to cause the least interference to the " - "user (i.e., when the user is not busy making other VoIP calls)." + "A Google service (e.g. Hangouts/Meet) has requested a peer " + "connection to be logged, and the resulting event log to be uploaded " + "at a time deemed to cause the least interference to the user (i.e., " + "when the user is not busy making other VoIP calls)." data: "WebRTC events such as the timing of audio playout (but not the " "content), timing and size of RTP packets sent/received, etc." @@ -62,11 +60,13 @@ } policy { cookies_allowed: NO - setting: "This feature is only enabled if the user launches Chrome " - "with a specific command line flag: " - "--enable-features=WebRtcRemoteEventLog" - policy_exception_justification: - "Not applicable." + setting: "Feature controlled only through Chrome policy; " + "no user-facing control surface." + chrome_policy { + WebRtcEventLogCollectionAllowed { + WebRtcEventLogCollectionAllowed: false + } + } })"); void AddFileContents(const char* filename,
diff --git a/chrome/browser/memory_details.cc b/chrome/browser/memory_details.cc index e4cfd5b0..660cfdb 100644 --- a/chrome/browser/memory_details.cc +++ b/chrome/browser/memory_details.cc
@@ -299,10 +299,6 @@ // The rest of this block will happen only once per WebContents. GURL page_url = contents->GetLastCommittedURL(); - SiteData& site_data = - chrome_browser->site_data[contents->GetBrowserContext()]; - SiteDetails::CollectSiteInfo(contents, &site_data); - bool is_webui = rvh->GetMainFrame()->GetEnabledBindings() & content::BINDINGS_POLICY_WEB_UI;
diff --git a/chrome/browser/memory_details.h b/chrome/browser/memory_details.h index 00c7de2..261a92ea 100644 --- a/chrome/browser/memory_details.h +++ b/chrome/browser/memory_details.h
@@ -16,7 +16,6 @@ #include "base/strings/string16.h" #include "base/time/time.h" #include "build/build_config.h" -#include "chrome/browser/site_details.h" #include "content/public/common/process_type.h" namespace memory_instrumentation { @@ -85,10 +84,6 @@ base::string16 name; base::string16 process_name; ProcessMemoryInformationList processes; - - // Track site data for predicting process counts with out-of-process iframes. - // See site_details.h. - BrowserContextSiteDataMap site_data; }; // MemoryDetails fetches memory details about current running browsers.
diff --git a/chrome/browser/memory_details_win.cc b/chrome/browser/memory_details_win.cc index 050620d..246ab788 100644 --- a/chrome/browser/memory_details_win.cc +++ b/chrome/browser/memory_details_win.cc
@@ -2,12 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/memory_details.h" +// Windows headers must come first. +#include <windows.h> #include <psapi.h> #include <stddef.h> #include <TlHelp32.h> +#include "chrome/browser/memory_details.h" + #include <memory> #include "base/bind.h"
diff --git a/chrome/browser/metrics/metrics_memory_details.cc b/chrome/browser/metrics/metrics_memory_details.cc index 0625f76..413cab1 100644 --- a/chrome/browser/metrics/metrics_memory_details.cc +++ b/chrome/browser/metrics/metrics_memory_details.cc
@@ -14,24 +14,27 @@ #include "base/strings/utf_string_conversions.h" #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" +#include "chrome/browser/site_details.h" #include "components/nacl/common/nacl_process_type.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/render_process_host.h" +#include "content/public/browser/render_view_host.h" +#include "content/public/browser/render_widget_host.h" +#include "content/public/browser/render_widget_host_iterator.h" +#include "content/public/browser/web_contents.h" #include "content/public/common/content_constants.h" #include "content/public/common/process_type.h" #include "ppapi/buildflags/buildflags.h" #include "third_party/leveldatabase/leveldb_chrome.h" -MetricsMemoryDetails::MetricsMemoryDetails( - const base::Closure& callback) - : callback_(callback), - generate_histograms_(true) {} +MetricsMemoryDetails::MetricsMemoryDetails(const base::Closure& callback) + : callback_(callback) {} MetricsMemoryDetails::~MetricsMemoryDetails() { } void MetricsMemoryDetails::OnDetailsAvailable() { - if (generate_histograms_) - UpdateHistograms(); + UpdateHistograms(); base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback_); } @@ -154,8 +157,7 @@ int all_renderer_count = renderer_count + chrome_count + extension_count; int non_renderer_count = browser.processes.size() - all_renderer_count; DCHECK_GE(non_renderer_count, 1); - SiteDetails::UpdateHistograms(browser.site_data, all_renderer_count, - non_renderer_count); + UpdateSiteIsolationMetrics(all_renderer_count, non_renderer_count); UMA_HISTOGRAM_COUNTS_100("Memory.ProcessCount", static_cast<int>(browser.processes.size())); @@ -164,3 +166,42 @@ leveldb_chrome::UpdateHistograms(); } + +void MetricsMemoryDetails::UpdateSiteIsolationMetrics(int all_renderer_count, + int non_renderer_count) { + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); + + // Track site data for predicting process counts with out-of-process iframes. + // See site_details.h. + BrowserContextSiteDataMap site_data_map; + + // First pass, collate the widgets by process ID. + std::unique_ptr<content::RenderWidgetHostIterator> widget_it( + content::RenderWidgetHost::GetRenderWidgetHosts()); + while (content::RenderWidgetHost* widget = widget_it->GetNextHost()) { + // Ignore processes that don't have a connection, such as crashed tabs, + // or processes that are still launching. + if (!widget->GetProcess()->IsReady()) + continue; + + content::RenderViewHost* rvh = content::RenderViewHost::From(widget); + if (!rvh) + continue; + + content::WebContents* contents = + content::WebContents::FromRenderViewHost(rvh); + if (!contents) + continue; + + // If this is a RVH for a subframe; skip it to avoid double-counting the + // WebContents. + if (rvh != contents->GetRenderViewHost()) + continue; + + // The rest of this block will happen only once per WebContents. + SiteData& site_data = site_data_map[contents->GetBrowserContext()]; + SiteDetails::CollectSiteInfo(contents, &site_data); + } + SiteDetails::UpdateHistograms(site_data_map, all_renderer_count, + non_renderer_count); +}
diff --git a/chrome/browser/metrics/metrics_memory_details.h b/chrome/browser/metrics/metrics_memory_details.h index b938d685..e210e94 100644 --- a/chrome/browser/metrics/metrics_memory_details.h +++ b/chrome/browser/metrics/metrics_memory_details.h
@@ -19,10 +19,6 @@ public: explicit MetricsMemoryDetails(const base::Closure& callback); - void set_generate_histograms(bool generate_histograms) { - generate_histograms_ = generate_histograms; - } - protected: ~MetricsMemoryDetails() override; @@ -33,11 +29,10 @@ // Updates the global histograms for tracking memory usage. void UpdateHistograms(); - base::Closure callback_; + void UpdateSiteIsolationMetrics(int all_renderer_count, + int non_renderer_count); - // A flag indicating if histogram data should be generated. True on default. - // If false, then only MemoryGrowthTracker gets notified about memory usage. - bool generate_histograms_; + base::Closure callback_; DISALLOW_COPY_AND_ASSIGN(MetricsMemoryDetails); };
diff --git a/chrome/browser/metrics/startup_metrics_browsertest.cc b/chrome/browser/metrics/startup_metrics_browsertest.cc index 1e5e999..42e0590 100644 --- a/chrome/browser/metrics/startup_metrics_browsertest.cc +++ b/chrome/browser/metrics/startup_metrics_browsertest.cc
@@ -7,7 +7,10 @@ #include "base/metrics/histogram_samples.h" #include "base/metrics/statistics_recorder.h" #include "base/run_loop.h" +#include "build/build_config.h" +#include "chrome/browser/browser_process.h" #include "chrome/test/base/in_process_browser_test.h" +#include "components/startup_metric_utils/browser/startup_metric_utils.h" using StartupMetricsTest = InProcessBrowserTest; @@ -15,6 +18,8 @@ constexpr const char* kStartupMetrics[] = { "Startup.BrowserMainToRendererMain", + "Startup.BrowserMessageLoopStartTime", + "Startup.BrowserMessageLoopStartTimeFromMainEntry3", "Startup.BrowserOpenTabs", "Startup.BrowserWindow.FirstPaint", "Startup.BrowserWindow.FirstPaint.CompositingEnded", @@ -24,24 +29,31 @@ "Startup.FirstWebContents.MainNavigationStart", "Startup.FirstWebContents.NonEmptyPaint2", "Startup.FirstWebContents.RenderProcessHostInit.ToNonEmptyPaint", + "Startup.LoadTime.ExeMainToDllMain2", + "Startup.LoadTime.ProcessCreateToDllMain2", + "Startup.LoadTime.ProcessCreateToExeMain2", + "Startup.SystemUptime", - // The following histograms depend on normal browser startup through - // BrowserMain and are as such not caught by this browser test. - // "Startup.BrowserMessageLoopStartHardFaultCount", - // "Startup.BrowserMessageLoopStartTime", - // "Startup.BrowserMessageLoopStartTimeFromMainEntry2", - // "Startup.BrowserMessageLoopStartTimeFromMainEntry3", - // "Startup.LoadTime.ExeMainToDllMain2", - // "Startup.LoadTime.ProcessCreateToDllMain2", - // "Startup.LoadTime.ProcessCreateToExeMain2", - // "Startup.SystemUptime", - // "Startup.Temperature", +#if defined(OS_WIN) + "Startup.BrowserMessageLoopStartHardFaultCount", + "Startup.Temperature", +#endif }; } // namespace // Verify that startup histograms are logged on browser startup. IN_PROC_BROWSER_TEST_F(StartupMetricsTest, ReportsValues) { + // This is usually done from the constructor of ChromeMainDelegate. + startup_metric_utils::RecordExeMainEntryPointTicks(base::TimeTicks::Now()); + + // This is usually done from ChromeBrowserMainParts::MainMessageLoopRun(). + startup_metric_utils::RecordBrowserMainMessageLoopStart( + base::TimeTicks::Now(), false /* is_first_run */, + g_browser_process->local_state()); + + // Wait for all histograms to be recorded. The test will hang if an histogram + // is not recorded. for (auto* const histogram : kStartupMetrics) { while (!base::StatisticsRecorder::FindHistogram(histogram)) base::RunLoop().RunUntilIdle();
diff --git a/chrome/browser/net/chrome_url_request_context_getter.cc b/chrome/browser/net/chrome_url_request_context_getter.cc index 8c4b7be..c83d7ff 100644 --- a/chrome/browser/net/chrome_url_request_context_getter.cc +++ b/chrome/browser/net/chrome_url_request_context_getter.cc
@@ -167,37 +167,50 @@ // ChromeURLRequestContextGetter // ---------------------------------------------------------------------------- -ChromeURLRequestContextGetter::ChromeURLRequestContextGetter( - ChromeURLRequestContextFactory* factory) - : factory_(factory), - url_request_context_(nullptr) { - DCHECK(factory); -} +ChromeURLRequestContextGetter::ChromeURLRequestContextGetter() + : url_request_context_(nullptr) {} ChromeURLRequestContextGetter::~ChromeURLRequestContextGetter() { // NotifyContextShuttingDown() must have been called. - DCHECK(!factory_.get()); DCHECK(!url_request_context_); } +scoped_refptr<ChromeURLRequestContextGetter> +ChromeURLRequestContextGetter::CreateAndInit( + std::unique_ptr<ChromeURLRequestContextFactory> factory) { + scoped_refptr<ChromeURLRequestContextGetter> url_request_context_getter( + new ChromeURLRequestContextGetter()); + // This can't be done in the constructor because it's possible for the task to + // run and complete before the constructor returns, which would reduce the + // reference count from 1 to 0 on completion, and delete the object + // immediately. + content::BrowserThread::PostTask( + content::BrowserThread::IO, FROM_HERE, + base::BindOnce(&ChromeURLRequestContextGetter::Init, + url_request_context_getter, + base::Passed(std::move(factory)))); + return url_request_context_getter; +} + +void ChromeURLRequestContextGetter::Init( + std::unique_ptr<ChromeURLRequestContextFactory> factory) { + DCHECK(factory); + DCHECK(!url_request_context_); + + url_request_context_ = factory->Create(); +} + // Lazily create a URLRequestContext using our factory. net::URLRequestContext* ChromeURLRequestContextGetter::GetURLRequestContext() { DCHECK_CURRENTLY_ON(BrowserThread::IO); - if (factory_.get()) { - DCHECK(!url_request_context_); - url_request_context_ = factory_->Create(); - factory_.reset(); - } - return url_request_context_; } void ChromeURLRequestContextGetter::NotifyContextShuttingDown() { DCHECK_CURRENTLY_ON(BrowserThread::IO); - factory_.reset(); url_request_context_ = nullptr; URLRequestContextGetter::NotifyContextShuttingDown(); } @@ -208,33 +221,37 @@ } // static -ChromeURLRequestContextGetter* ChromeURLRequestContextGetter::Create( +scoped_refptr<ChromeURLRequestContextGetter> +ChromeURLRequestContextGetter::Create( Profile* profile, const ProfileIOData* profile_io_data, content::ProtocolHandlerMap* protocol_handlers, content::URLRequestInterceptorScopedVector request_interceptors) { - return new ChromeURLRequestContextGetter(new FactoryForMain( - profile_io_data, protocol_handlers, std::move(request_interceptors))); + return ChromeURLRequestContextGetter::CreateAndInit( + std::make_unique<FactoryForMain>(profile_io_data, protocol_handlers, + std::move(request_interceptors))); } // static -ChromeURLRequestContextGetter* +scoped_refptr<ChromeURLRequestContextGetter> ChromeURLRequestContextGetter::CreateForMedia( - Profile* profile, const ProfileIOData* profile_io_data) { - return new ChromeURLRequestContextGetter( - new FactoryForMedia(profile_io_data)); + Profile* profile, + const ProfileIOData* profile_io_data) { + return ChromeURLRequestContextGetter::CreateAndInit( + std::make_unique<FactoryForMedia>(profile_io_data)); } // static -ChromeURLRequestContextGetter* +scoped_refptr<ChromeURLRequestContextGetter> ChromeURLRequestContextGetter::CreateForExtensions( - Profile* profile, const ProfileIOData* profile_io_data) { - return new ChromeURLRequestContextGetter( - new FactoryForExtensions(profile_io_data)); + Profile* profile, + const ProfileIOData* profile_io_data) { + return ChromeURLRequestContextGetter::CreateAndInit( + std::make_unique<FactoryForExtensions>(profile_io_data)); } // static -ChromeURLRequestContextGetter* +scoped_refptr<ChromeURLRequestContextGetter> ChromeURLRequestContextGetter::CreateForIsolatedApp( Profile* profile, const ProfileIOData* profile_io_data, @@ -245,20 +262,21 @@ content::URLRequestInterceptorScopedVector request_interceptors) { ChromeURLRequestContextGetter* main_context = static_cast<ChromeURLRequestContextGetter*>(profile->GetRequestContext()); - return new ChromeURLRequestContextGetter(new FactoryForIsolatedApp( - profile_io_data, partition_descriptor, main_context, - std::move(protocol_handler_interceptor), protocol_handlers, - std::move(request_interceptors))); + return ChromeURLRequestContextGetter::CreateAndInit( + std::make_unique<FactoryForIsolatedApp>( + profile_io_data, partition_descriptor, main_context, + std::move(protocol_handler_interceptor), protocol_handlers, + std::move(request_interceptors))); } // static -ChromeURLRequestContextGetter* +scoped_refptr<ChromeURLRequestContextGetter> ChromeURLRequestContextGetter::CreateForIsolatedMedia( Profile* profile, ChromeURLRequestContextGetter* app_context, const ProfileIOData* profile_io_data, const StoragePartitionDescriptor& partition_descriptor) { - return new ChromeURLRequestContextGetter( - new FactoryForIsolatedMedia( + return ChromeURLRequestContextGetter::CreateAndInit( + std::make_unique<FactoryForIsolatedMedia>( profile_io_data, partition_descriptor, app_context)); }
diff --git a/chrome/browser/net/chrome_url_request_context_getter.h b/chrome/browser/net/chrome_url_request_context_getter.h index ebf21bb..34827dab 100644 --- a/chrome/browser/net/chrome_url_request_context_getter.h +++ b/chrome/browser/net/chrome_url_request_context_getter.h
@@ -28,11 +28,6 @@ // the destructor and GetURLRequestContext(). class ChromeURLRequestContextGetter : public net::URLRequestContextGetter { public: - // Constructs a ChromeURLRequestContextGetter that will use |factory| to - // create the URLRequestContext. - explicit ChromeURLRequestContextGetter( - ChromeURLRequestContextFactory* factory); - // Note that GetURLRequestContext() can only be called from the IO // thread (it will assert otherwise). // GetIOTaskRunner however can be called from any thread. @@ -44,7 +39,7 @@ // Create an instance for use with an 'original' (non-OTR) profile. This is // expected to get called on the UI thread. - static ChromeURLRequestContextGetter* Create( + static scoped_refptr<ChromeURLRequestContextGetter> Create( Profile* profile, const ProfileIOData* profile_io_data, content::ProtocolHandlerMap* protocol_handlers, @@ -53,17 +48,19 @@ // Create an instance for an original profile for media. This is expected to // get called on UI thread. This method takes a profile and reuses the // 'original' net::URLRequestContext for common files. - static ChromeURLRequestContextGetter* CreateForMedia( - Profile* profile, const ProfileIOData* profile_io_data); + static scoped_refptr<ChromeURLRequestContextGetter> CreateForMedia( + Profile* profile, + const ProfileIOData* profile_io_data); // Create an instance for an original profile for extensions. This is expected // to get called on UI thread. - static ChromeURLRequestContextGetter* CreateForExtensions( - Profile* profile, const ProfileIOData* profile_io_data); + static scoped_refptr<ChromeURLRequestContextGetter> CreateForExtensions( + Profile* profile, + const ProfileIOData* profile_io_data); // Create an instance for an original profile for an app with isolated // storage. This is expected to get called on UI thread. - static ChromeURLRequestContextGetter* CreateForIsolatedApp( + static scoped_refptr<ChromeURLRequestContextGetter> CreateForIsolatedApp( Profile* profile, const ProfileIOData* profile_io_data, const StoragePartitionDescriptor& partition_descriptor, @@ -74,7 +71,7 @@ // Create an instance for an original profile for media with isolated // storage. This is expected to get called on UI thread. - static ChromeURLRequestContextGetter* CreateForIsolatedMedia( + static scoped_refptr<ChromeURLRequestContextGetter> CreateForIsolatedMedia( Profile* profile, ChromeURLRequestContextGetter* app_context, const ProfileIOData* profile_io_data, @@ -85,15 +82,21 @@ void NotifyContextShuttingDown(); private: + ChromeURLRequestContextGetter(); ~ChromeURLRequestContextGetter() override; - // Deferred logic for creating a URLRequestContext. - // Access only from the IO thread. - std::unique_ptr<ChromeURLRequestContextFactory> factory_; + // Called on IO thread. Calls |factory's| Create method and populates + // |url_request_context_|, which is actually owned by the ProfileIOData. + void Init(std::unique_ptr<ChromeURLRequestContextFactory> factory); + + // Should be used instead of constructor. Both creates object and triggers + // initialization on the IO thread. + static scoped_refptr<ChromeURLRequestContextGetter> CreateAndInit( + std::unique_ptr<ChromeURLRequestContextFactory> factory); // NULL before initialization and after invalidation. - // Otherwise, it is the URLRequestContext instance that - // was lazily created by GetURLRequestContext(). + // Otherwise, it is the URLRequestContext instance that was created by the + // |factory| used by Init(). The object is owned by the ProfileIOData. // Access only from the IO thread. net::URLRequestContext* url_request_context_;
diff --git a/chrome/browser/net/default_network_context_params.cc b/chrome/browser/net/default_network_context_params.cc index ef61720b..0d6bdccd50 100644 --- a/chrome/browser/net/default_network_context_params.cc +++ b/chrome/browser/net/default_network_context_params.cc
@@ -49,7 +49,8 @@ quic_user_agent_id.append( version_info::GetProductNameAndVersionForUserAgent()); quic_user_agent_id.push_back(' '); - quic_user_agent_id.append(content::BuildOSCpuInfo()); + quic_user_agent_id.append( + content::BuildOSCpuInfo(false /* include_android_build_number */)); network_context_params->quic_user_agent_id = quic_user_agent_id; const base::CommandLine& command_line =
diff --git a/chrome/browser/password_manager/password_manager_browsertest.cc b/chrome/browser/password_manager/password_manager_browsertest.cc index fd162610..5e45e3e1 100644 --- a/chrome/browser/password_manager/password_manager_browsertest.cc +++ b/chrome/browser/password_manager/password_manager_browsertest.cc
@@ -845,8 +845,16 @@ EXPECT_TRUE(prompt_observer->IsSavePromptShownAutomatically()); } +// Flaky on chromeos: http://crbug.com/870372 +#if defined(OS_CHROMEOS) +#define MAYBE_PromptForFetchSubmitWithoutNavigation_SignupForm \ + DISABLED_PromptForFetchSubmitWithoutNavigation_SignupForm +#else +#define MAYBE_PromptForFetchSubmitWithoutNavigation_SignupForm \ + PromptForFetchSubmitWithoutNavigation_SignupForm +#endif IN_PROC_BROWSER_TEST_P(PasswordManagerBrowserTestWithViewsFeature, - PromptForFetchSubmitWithoutNavigation_SignupForm) { + MAYBE_PromptForFetchSubmitWithoutNavigation_SignupForm) { NavigateToFile("/password/password_fetch_submit.html"); // Need to pay attention for a message that Fetch has finished since there
diff --git a/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc b/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc index c6a1ae03..a668fe0 100644 --- a/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc +++ b/chrome/browser/picture_in_picture/picture_in_picture_window_controller_browsertest.cc
@@ -4,14 +4,18 @@ #include "content/public/browser/picture_in_picture_window_controller.h" +#include "base/path_service.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "chrome/browser/picture_in_picture/picture_in_picture_window_manager.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/ui/views/overlay/overlay_window_views.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" +#include "components/viz/common/frame_sinks/copy_output_request.h" +#include "components/viz/common/frame_sinks/copy_output_result.h" #include "components/viz/common/surfaces/surface_id.h" #include "content/public/browser/overlay_window.h" #include "content/public/browser/render_frame_host.h" @@ -20,8 +24,11 @@ #include "content/public/test/browser_test_utils.h" #include "content/public/test/test_navigation_observer.h" #include "net/dns/mock_host_resolver.h" +#include "skia/ext/image_operations.h" #include "testing/gmock/include/gmock/gmock.h" #include "third_party/blink/public/common/picture_in_picture/picture_in_picture_control_info.h" +#include "ui/aura/window.h" +#include "ui/gfx/codec/png_codec.h" #if !defined(OS_ANDROID) #include "chrome/browser/ui/views/overlay/overlay_window_views.h" @@ -175,6 +182,138 @@ EXPECT_TRUE(window_controller()->GetWindowForTesting()->IsVisible()); } +#if defined(OS_LINUX) && !defined(OS_CHROMEOS) +class PictureInPicturePixelComparisonBrowserTest + : public PictureInPictureWindowControllerBrowserTest { + public: + base::FilePath GetFilePath(base::FilePath::StringPieceType relative_path) { + base::FilePath base_dir; + CHECK(base::PathService::Get(base::DIR_SOURCE_ROOT, &base_dir)); + // The path relative to <chromium src> for pixel test data. + const base::FilePath::StringPieceType kTestDataPath = + FILE_PATH_LITERAL("chrome/test/data/media/picture-in-picture/"); + base::FilePath full_path = + base_dir.Append(kTestDataPath).Append(relative_path); + return full_path; + } + + void ReadbackResult(base::RepeatingClosure quit_run_loop, + std::unique_ptr<viz::CopyOutputResult> result) { + ASSERT_FALSE(result->IsEmpty()); + EXPECT_EQ(viz::CopyOutputResult::Format::RGBA_BITMAP, result->format()); + result_bitmap_ = std::make_unique<SkBitmap>(result->AsSkBitmap()); + EXPECT_TRUE(result_bitmap_->readyToDraw()); + quit_run_loop.Run(); + } + + bool SaveBitmap(base::FilePath& file_path, SkBitmap& bitmap) { + base::File file(file_path, + base::File::FLAG_OPEN | base::File::FLAG_OPEN_ALWAYS); + CHECK(file.IsValid()); + std::vector<unsigned char> png_data; + CHECK(gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, false, &png_data)); + char* data = reinterpret_cast<char*>(&png_data[0]); + int size = static_cast<int>(png_data.size()); + return base::WriteFile(file_path, data, size) == size; + } + + void TakeOverlayWindowScreenshot(OverlayWindowViews* overlay_window_views) { + base::RunLoop run_loop; + std::unique_ptr<viz::CopyOutputRequest> request = + std::make_unique<viz::CopyOutputRequest>( + viz::CopyOutputRequest::ResultFormat::RGBA_BITMAP, + base::BindOnce( + &PictureInPicturePixelComparisonBrowserTest::ReadbackResult, + base::Unretained(this), run_loop.QuitClosure())); + overlay_window_views->GetNativeWindow()->layer()->RequestCopyOfOutput( + std::move(request)); + run_loop.Run(); + } + + bool CompareImages(const SkBitmap& actual_bmp) { + // Number of pixels with an error + int error_pixels_count = 0; + gfx::Rect error_bounding_rect; + + for (int x = 0; x < actual_bmp.width(); ++x) { + for (int y = 0; y < actual_bmp.height(); ++y) { + SkColor actual_color = actual_bmp.getColor(x, y); + // Check color is Yellow. The difference is caused by video conversion. + // TODO(cliffordcheng): Compare with an expected image instead of just + // checking pixel RGB color. + if (SkColorGetR(actual_color) != 254 && + SkColorGetG(actual_color) != 253 && + SkColorGetB(actual_color) != 0) { + ++error_pixels_count; + error_bounding_rect.Union(gfx::Rect(x, y, 1, 1)); + } + } + } + if (error_pixels_count != 0) { + LOG(ERROR) << "Number of pixel with an error: " << error_pixels_count; + LOG(ERROR) << "Error Bounding Box : " << error_bounding_rect.ToString(); + return false; + } + return true; + } + + SkBitmap& GetResultBitmap() { return *result_bitmap_; } + + private: + std::unique_ptr<SkBitmap> result_bitmap_; +}; + +// TODO(cliffordcheng): enable this tests on other platforms when +// Windows and Mac capture screen problem is solved. +// Plays a video and then trigger Picture-in-Picture. Grabs a screenshot of +// Picture-in-Picture window and verifies it's as expected. +IN_PROC_BROWSER_TEST_F(PictureInPicturePixelComparisonBrowserTest, VideoPlay) { + base::ScopedAllowBlockingForTesting allow_blocking; + GURL test_page_url = ui_test_utils::GetTestUrl( + base::FilePath(base::FilePath::kCurrentDirectory), + base::FilePath( + FILE_PATH_LITERAL("media/picture-in-picture/pixel_test.html"))); + ui_test_utils::NavigateToURL(browser(), test_page_url); + + content::WebContents* active_web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + ASSERT_NE(nullptr, active_web_contents); + + EXPECT_TRUE(content::ExecuteScript(active_web_contents, "video.play();")); + SetUpWindowController(active_web_contents); + ASSERT_NE(nullptr, window_controller()); + + ASSERT_NE(nullptr, window_controller()->GetWindowForTesting()); + ASSERT_FALSE(window_controller()->GetWindowForTesting()->IsVisible()); + + bool result = false; + ASSERT_TRUE(content::ExecuteScriptAndExtractBool( + active_web_contents, "enterPictureInPicture();", &result)); + EXPECT_TRUE(result); + + bool in_picture_in_picture = false; + ASSERT_TRUE(ExecuteScriptAndExtractBool( + active_web_contents, "isInPictureInPicture();", &in_picture_in_picture)); + EXPECT_TRUE(in_picture_in_picture); + + EXPECT_TRUE(window_controller()->GetWindowForTesting()->IsVisible()); + + OverlayWindowViews* overlay_window_views = static_cast<OverlayWindowViews*>( + window_controller()->GetWindowForTesting()); + overlay_window_views->SetSize(gfx::Size(600, 400)); + base::string16 expected_title = base::ASCIIToUTF16("resized"); + EXPECT_EQ(expected_title, + content::TitleWatcher(active_web_contents, expected_title) + .WaitAndGetTitle()); + TakeOverlayWindowScreenshot(overlay_window_views); + + std::string test_image = "pixel_test_actual_0.png"; + base::FilePath test_image_path = GetFilePath(test_image); + ASSERT_TRUE(SaveBitmap(test_image_path, GetResultBitmap())); + EXPECT_TRUE(CompareImages(GetResultBitmap())); +} +#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS) + // Tests that when an active WebContents accurately tracks whether a video // is in Picture-in-Picture. IN_PROC_BROWSER_TEST_F(PictureInPictureWindowControllerBrowserTest,
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc index c3b6f992..4a2d38d 100644 --- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc +++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -840,6 +840,9 @@ { key::kTabLifecyclesEnabled, prefs::kTabLifecyclesEnabled, base::Value::Type::BOOLEAN }, + { key::kCoalesceH2ConnectionsWithClientCertificatesForHosts, + prefs::kH2ClientCertCoalescingHosts, + base::Value::Type::LIST }, }; // clang-format on
diff --git a/chrome/browser/prefs/pref_service_incognito_whitelist.cc b/chrome/browser/prefs/pref_service_incognito_whitelist.cc index 4da7559..6fea4b1 100644 --- a/chrome/browser/prefs/pref_service_incognito_whitelist.cc +++ b/chrome/browser/prefs/pref_service_incognito_whitelist.cc
@@ -137,6 +137,12 @@ metrics::prefs::kUninstallMetricsUptimeSec, metrics::prefs::kUkmCellDataUse, metrics::prefs::kUmaCellDataUse, metrics::prefs::kUserCellDataUse, + // Although UKMs are not collected in incognito, theses preferences may be + // changed by UMA/Sync/Unity consent, and need to be the same between + // incognito and regular modes. + ukm::prefs::kUkmClientId, ukm::prefs::kUkmPersistedLogs, + ukm::prefs::kUkmSessionId, + // Variations preferences maybe changed from incognito mode and should be // kept in sync between incognito and regular modes. variations::prefs::kVariationsCompressedSeed, @@ -819,10 +825,6 @@ suggestions::prefs::kSuggestionsBlacklist, suggestions::prefs::kSuggestionsData, - // components/ukm/ukm_pref_names.h - ukm::prefs::kUkmClientId, ukm::prefs::kUkmPersistedLogs, - ukm::prefs::kUkmSessionId, - // components/unified_consent/pref_names.h unified_consent::prefs::kUnifiedConsentGiven, unified_consent::prefs::kUnifiedConsentMigrationState,
diff --git a/chrome/browser/previews/previews_browsertest.cc b/chrome/browser/previews/previews_browsertest.cc index b3a033f..194d1726 100644 --- a/chrome/browser/previews/previews_browsertest.cc +++ b/chrome/browser/previews/previews_browsertest.cc
@@ -2,7 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <map> +#include <string> + #include "base/command_line.h" +#include "base/metrics/field_trial_param_associator.h" +#include "base/metrics/field_trial_params.h" #include "base/run_loop.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" @@ -61,6 +66,7 @@ void SetUpOnMainThread() override { noscript_css_requested_ = false; noscript_js_requested_ = false; + https_url_count_ = 0; // Set up https server with resource monitor. https_server_.reset( @@ -80,20 +86,28 @@ // Set up http server with resource monitor and redirect handler. http_server_.reset( new net::EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTP)); - http_server_->ServeFilesFromSourceDirectory("chrome/test/data/previews"); + http_server_->ServeFilesFromSourceDirectory("chrome/test/data"); http_server_->RegisterRequestMonitor(base::BindRepeating( &PreviewsBrowserTest::MonitorResourceRequest, base::Unretained(this))); http_server_->RegisterRequestHandler(base::BindRepeating( &PreviewsBrowserTest::HandleRedirectRequest, base::Unretained(this))); ASSERT_TRUE(http_server_->Start()); - http_url_ = http_server_->GetURL("/noscript_test.html"); + http_url_ = http_server_->GetURL("/previews/noscript_test.html"); ASSERT_TRUE(http_url_.SchemeIs(url::kHttpScheme)); - redirect_url_ = http_server_->GetURL("/redirect.html"); + subframe_url_ = http_server_->GetURL("/iframe_blank.html"); + ASSERT_TRUE(subframe_url_.SchemeIs(url::kHttpScheme)); + + redirect_url_ = http_server_->GetURL("/previews/redirect.html"); ASSERT_TRUE(redirect_url_.SchemeIs(url::kHttpScheme)); } + void ExecuteScript(const std::string& script) { + EXPECT_TRUE(content::ExecuteScript( + browser()->tab_strip_model()->GetActiveWebContents(), script)); + } + void SetUpCommandLine(base::CommandLine* cmd) override { cmd->AppendSwitch("enable-spdy-proxy-auth"); cmd->AppendSwitchASCII("force-effective-connection-type", "Slow-2G"); @@ -103,12 +117,15 @@ const GURL& https_no_transform_url() const { return https_no_transform_url_; } const GURL& http_url() const { return http_url_; } const GURL& redirect_url() const { return redirect_url_; } + const GURL& subframe_url() const { return subframe_url_; } bool noscript_css_requested() const { return noscript_css_requested_; } bool noscript_js_requested() const { return noscript_js_requested_; } + int https_url_count() const { return https_url_count_; } private: // Called by |https_server_|. void MonitorResourceRequest(const net::test_server::HttpRequest& request) { + https_url_count_++; if (request.GetURL().spec().find("noscript_test.css") != std::string::npos) { noscript_css_requested_ = true; @@ -135,8 +152,10 @@ GURL https_no_transform_url_; GURL http_url_; GURL redirect_url_; + GURL subframe_url_; bool noscript_css_requested_; bool noscript_js_requested_; + int https_url_count_; }; // Loads a webpage that has both script and noscript tags and also requests @@ -329,6 +348,8 @@ EXPECT_FALSE(noscript_css_requested()); } +static const std::string kTestPreviewsServer = "https://litepages.test.com/"; + // This test class enables LitePageServerPreviews. class PreviewsLitePageServerBrowserTest : public PreviewsBrowserTest { public: @@ -337,28 +358,113 @@ ~PreviewsLitePageServerBrowserTest() override {} void SetUp() override { - scoped_feature_list_.InitWithFeatures( - {previews::features::kPreviews, - previews::features::kLitePageServerPreviews}, - {}); + std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); + { + // The trial and group names are dummy values. + scoped_refptr<base::FieldTrial> trial = + base::FieldTrialList::CreateFieldTrial("TrialName1", "GroupName1"); + std::map<std::string, std::string> feature_parameters = { + {"previews_host", kTestPreviewsServer}}; + ASSERT_TRUE(base::FieldTrialParamAssociator::GetInstance() + ->AssociateFieldTrialParams("TrialName1", "GroupName1", + feature_parameters)); + + feature_list->RegisterFieldTrialOverride( + previews::features::kLitePageServerPreviews.name, + base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial.get()); + } + { + // The trial and group names are dummy values. + scoped_refptr<base::FieldTrial> trial = + base::FieldTrialList::CreateFieldTrial("TrialName3", "GroupName3"); + feature_list->RegisterFieldTrialOverride( + previews::features::kPreviews.name, + base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial.get()); + } + scoped_feature_list_.InitWithFeatureList(std::move(feature_list)); + PreviewsBrowserTest::SetUp(); } + GURL NavigatedURL() { + return browser()->tab_strip_model()->GetActiveWebContents()->GetURL(); + } + + void VerifyPreviewLoaded() { + EXPECT_TRUE(NavigatedURL().DomainIs(GURL(kTestPreviewsServer).host())); + } + + void VerifyPreviewNotLoaded() { + EXPECT_FALSE(NavigatedURL().DomainIs(GURL(kTestPreviewsServer).host())); + } + private: base::test::ScopedFeatureList scoped_feature_list_; }; -// Previews InfoBar (which these tests triggers) does not work on Mac. +// Previews InfoBar (which these tests trigger) does not work on Mac. // See crbug.com/782322 for detail. // Also occasional flakes on win7 (crbug.com/789542). #if defined(OS_ANDROID) || defined(OS_LINUX) -#define MAYBE_LitePagePreviewsEnabled LitePagePreviewsEnabled +#define MAYBE_LitePagePreviewsTriggering LitePagePreviewsTriggering #else -#define MAYBE_LitePagePreviewsEnabled DISABLED_LitePagePreviewsEnabled +#define MAYBE_LitePagePreviewsTriggering DISABLED_LitePagePreviewsTriggering #endif -// Makes sure that nothing crashes. IN_PROC_BROWSER_TEST_F(PreviewsLitePageServerBrowserTest, - MAYBE_LitePagePreviewsEnabled) { + MAYBE_LitePagePreviewsTriggering) { + // Verify the preview is not triggered on HTTP pageloads. + ui_test_utils::NavigateToURL(browser(), http_url()); + VerifyPreviewNotLoaded(); + + // Verify the preview is triggered on HTTPS pageloads. ui_test_utils::NavigateToURL(browser(), https_url()); + VerifyPreviewLoaded(); + + // Verify the preview is triggered when an HTTP page redirects to HTTPS. + ui_test_utils::NavigateToURL(browser(), redirect_url()); + VerifyPreviewLoaded(); + + // Verify the preview is not triggered for POST navigations. + std::string post_data = "helloworld"; + NavigateParams params(browser(), https_url(), ui::PAGE_TRANSITION_LINK); + params.window_action = NavigateParams::SHOW_WINDOW; + params.disposition = WindowOpenDisposition::NEW_FOREGROUND_TAB; + params.is_renderer_initiated = false; + params.uses_post = true; + params.post_data = network::ResourceRequestBody::CreateFromBytes( + post_data.data(), post_data.size()); + ui_test_utils::NavigateToURL(¶ms); + VerifyPreviewNotLoaded(); + + // Verify the preview is not triggered when navigating to the previews server. + ui_test_utils::NavigateToURL(browser(), GURL(kTestPreviewsServer)); + EXPECT_EQ(NavigatedURL(), GURL(kTestPreviewsServer)); + + // Verify a subframe navigation does not trigger a preview. + const int starting_https_url_count = https_url_count(); + ui_test_utils::NavigateToURL(browser(), subframe_url()); + ExecuteScript("window.open(\"" + https_url().spec() + "\", \"subframe\")"); + EXPECT_EQ(https_url_count(), starting_https_url_count + 1); +} + +class PreviewsLitePageServerDataSaverBrowserTest + : public PreviewsLitePageServerBrowserTest { + public: + PreviewsLitePageServerDataSaverBrowserTest() = default; + + ~PreviewsLitePageServerDataSaverBrowserTest() override = default; + + // Overrides the cmd line in PreviewsBrowserTest and leave out the flag to + // enable DataSaver. + void SetUpCommandLine(base::CommandLine* cmd) override { + cmd->AppendSwitchASCII("force-effective-connection-type", "Slow-2G"); + } +}; + +IN_PROC_BROWSER_TEST_F(PreviewsLitePageServerDataSaverBrowserTest, + MAYBE_LitePagePreviewsTriggering) { + // Verify the preview is not triggered on HTTPS pageloads without DataSaver. + ui_test_utils::NavigateToURL(browser(), https_url()); + VerifyPreviewNotLoaded(); }
diff --git a/chrome/browser/previews/previews_lite_page_decider.cc b/chrome/browser/previews/previews_lite_page_decider.cc index cc9370ec..2221c75 100644 --- a/chrome/browser/previews/previews_lite_page_decider.cc +++ b/chrome/browser/previews/previews_lite_page_decider.cc
@@ -48,17 +48,12 @@ previews::params::IsLitePageServerPreviewsEnabled(); if (drp_enabled && preview_enabled) { - return PreviewsLitePageNavigationThrottle::MaybeCreateThrottleFor(handle); + return std::make_unique<PreviewsLitePageNavigationThrottle>(handle, + decider); } return nullptr; } -void PreviewsLitePageDecider::SetRetryAt(base::TimeTicks retry_at) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (retry_at > retry_at_) - retry_at_ = retry_at; -} - bool PreviewsLitePageDecider::IsDataSaverEnabled( content::NavigationHandle* handle) const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -73,6 +68,13 @@ return drp_settings->IsDataReductionProxyEnabled(); } +void PreviewsLitePageDecider::SetServerUnavailableUntil( + base::TimeTicks retry_at) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (!retry_at_.has_value() || retry_at > retry_at_) + retry_at_ = retry_at; +} + bool PreviewsLitePageDecider::IsServerUnavailable(base::TimeTicks now) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!retry_at_.has_value())
diff --git a/chrome/browser/previews/previews_lite_page_decider.h b/chrome/browser/previews/previews_lite_page_decider.h index ec92037..656898b 100644 --- a/chrome/browser/previews/previews_lite_page_decider.h +++ b/chrome/browser/previews/previews_lite_page_decider.h
@@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_PREVIEWS_PREVIEWS_LITE_PAGE_DECIDER_H_ #define CHROME_BROWSER_PREVIEWS_PREVIEWS_LITE_PAGE_DECIDER_H_ +#include <map> #include <memory> #include "base/gtest_prod_util.h" @@ -12,17 +13,18 @@ #include "base/optional.h" #include "base/sequence_checker.h" #include "base/time/time.h" +#include "chrome/browser/previews/previews_lite_page_navigation_throttle_manager.h" namespace content { class NavigationHandle; class NavigationThrottle; } // namespace content -// This class manages the state for triggering the Lite Page Server Preview. // This class ensures that the feature is enabled and the // current Profile is not incognito before handing off the real legwork of the // triggering decision to |PreviewsLitePageNavigationThrottle|. -class PreviewsLitePageDecider { +class PreviewsLitePageDecider + : public PreviewsLitePageNavigationThrottleManager { public: PreviewsLitePageDecider(); virtual ~PreviewsLitePageDecider(); @@ -33,10 +35,6 @@ static std::unique_ptr<content::NavigationThrottle> MaybeCreateThrottleFor( content::NavigationHandle* handle); - // Used to notify that the Previews Server should not be sent anymore requests - // until after the given time. - void SetRetryAt(base::TimeTicks retry_at); - protected: // Virtual for testing. virtual bool IsDataSaverEnabled(content::NavigationHandle* handle) const; @@ -44,9 +42,9 @@ private: FRIEND_TEST_ALL_PREFIXES(PreviewsLitePageDeciderTest, TestServerUnavailable); - // Returns true if a Preview should not be triggered because the server is - // unavailable. - bool IsServerUnavailable(base::TimeTicks now); + // PreviewsLitePageNavigationThrottleManager: + void SetServerUnavailableUntil(base::TimeTicks retry_at) override; + bool IsServerUnavailable(base::TimeTicks now) override; // The time after which it is ok to send the server more preview requests. base::Optional<base::TimeTicks> retry_at_;
diff --git a/chrome/browser/previews/previews_lite_page_decider_unittest.cc b/chrome/browser/previews/previews_lite_page_decider_unittest.cc index ae6b142..c9a79fc 100644 --- a/chrome/browser/previews/previews_lite_page_decider_unittest.cc +++ b/chrome/browser/previews/previews_lite_page_decider_unittest.cc
@@ -38,7 +38,7 @@ for (const TestCase& test_case : kTestCases) { std::unique_ptr<PreviewsLitePageDecider> decider = std::make_unique<PreviewsLitePageDecider>(); - decider->SetRetryAt(test_case.retry_at); + decider->SetServerUnavailableUntil(test_case.retry_at); EXPECT_EQ(decider->IsServerUnavailable(test_case.now), test_case.want_is_unavailable); }
diff --git a/chrome/browser/previews/previews_lite_page_navigation_throttle.cc b/chrome/browser/previews/previews_lite_page_navigation_throttle.cc index 36368f42..c164e80 100644 --- a/chrome/browser/previews/previews_lite_page_navigation_throttle.cc +++ b/chrome/browser/previews/previews_lite_page_navigation_throttle.cc
@@ -4,31 +4,144 @@ #include "chrome/browser/previews/previews_lite_page_navigation_throttle.h" +#include "base/memory/weak_ptr.h" +#include "base/strings/string_number_conversions.h" +#include "components/base32/base32.h" +#include "components/previews/core/previews_experiments.h" +#include "content/public/browser/browser_thread.h" +#include "content/public/browser/navigation_handle.h" +#include "content/public/browser/page_navigator.h" +#include "content/public/browser/web_contents.h" +#include "content/public/browser/web_contents_user_data.h" +#include "content/public/common/referrer.h" +#include "crypto/sha2.h" +#include "net/base/escape.h" +#include "url/gurl.h" + +namespace { + +bool IsPreviewsDomain(const GURL& url) { + GURL previews_host = previews::params::GetLitePagePreviewsDomainURL(); + return url.DomainIs(previews_host.host()) && + url.EffectiveIntPort() == previews_host.EffectiveIntPort(); +} + +} // namespace + +class WebContentsLifetimeHelper + : public content::WebContentsUserData<WebContentsLifetimeHelper> { + public: + explicit WebContentsLifetimeHelper(content::WebContents* web_contents) + : web_contents_(web_contents), weak_factory_(this) {} + + base::WeakPtr<WebContentsLifetimeHelper> GetWeakPtr() { + return weak_factory_.GetWeakPtr(); + } + + void PostNewNavigation(const content::OpenURLParams& url_params) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + DCHECK(url_params.url.is_valid()); + DCHECK(url_params.url.SchemeIs(url::kHttpsScheme)); + web_contents_->OpenURL(url_params); + } + + private: + content::WebContents* web_contents_; + base::WeakPtrFactory<WebContentsLifetimeHelper> weak_factory_; +}; + PreviewsLitePageNavigationThrottle::PreviewsLitePageNavigationThrottle( - content::NavigationHandle* handle) - : content::NavigationThrottle(handle) { + content::NavigationHandle* handle, + PreviewsLitePageNavigationThrottleManager* manager) + : content::NavigationThrottle(handle), manager_(manager) { + DCHECK(manager_); DCHECK(handle); + DCHECK(handle->GetWebContents()); + DCHECK(handle->GetWebContents()->GetBrowserContext()); } PreviewsLitePageNavigationThrottle::~PreviewsLitePageNavigationThrottle() = default; -// static -std::unique_ptr<content::NavigationThrottle> -PreviewsLitePageNavigationThrottle::MaybeCreateThrottleFor( - content::NavigationHandle* handle) { - DCHECK(handle); - return nullptr; +bool PreviewsLitePageNavigationThrottle::IsEligibleForPreview() const { + if (!navigation_handle()->GetURL().SchemeIs(url::kHttpsScheme)) + return false; + + if (navigation_handle()->IsPost()) + return false; + + if (!navigation_handle()->IsInMainFrame()) + return false; + + if (IsPreviewsDomain(navigation_handle()->GetURL())) + return false; + + return true; +} + +GURL PreviewsLitePageNavigationThrottle::GetPreviewsURL() const { + GURL original_url = navigation_handle()->GetURL(); + DCHECK(original_url.is_valid()); + DCHECK(!IsPreviewsDomain(original_url)); + + std::string origin_hash = base::ToLowerASCII(base32::Base32Encode( + crypto::SHA256HashString( + original_url.scheme() + "://" + original_url.host() + ":" + + base::IntToString(original_url.EffectiveIntPort())), + base32::Base32EncodePolicy::OMIT_PADDING)); + GURL previews_host = previews::params::GetLitePagePreviewsDomainURL(); + GURL previews_url = GURL( + previews_host.scheme() + "://" + origin_hash + "." + + previews_host.host() + + (previews_host.has_port() ? (":" + previews_host.port()) : "") + "/p?u=" + + net::EscapeQueryParamValue(original_url.spec(), true /* use_plus */)); + DCHECK(previews_url.is_valid()); + DCHECK(previews_url.SchemeIs(url::kHttpsScheme)); + return previews_url; +} + +content::NavigationThrottle::ThrottleCheckResult +PreviewsLitePageNavigationThrottle::MaybeNavigateToPreview() const { + if (!IsEligibleForPreview()) { + return content::NavigationThrottle::PROCEED; + } + + content::OpenURLParams url_params(GetPreviewsURL(), + navigation_handle()->GetReferrer(), + WindowOpenDisposition::CURRENT_TAB, + navigation_handle()->GetPageTransition(), + navigation_handle()->IsRendererInitiated()); + // TODO(crbug.com/864652): Add chrome-proxy headers. + url_params.redirect_chain = navigation_handle()->GetRedirectChain(); + url_params.frame_tree_node_id = navigation_handle()->GetFrameTreeNodeId(); + url_params.user_gesture = navigation_handle()->HasUserGesture(); + url_params.started_from_context_menu = + navigation_handle()->WasStartedFromContextMenu(); + + // The helper class and its weak pointer protect against the WebContents + // dying in-between the PostTask and its execution, resulting in a use after + // free bug. Since the helper is a WebContentsUserData, it will be + // destroyed when the WebContents is and the task will not be executed. + content::WebContents* web_contents = navigation_handle()->GetWebContents(); + WebContentsLifetimeHelper::CreateForWebContents(web_contents); + WebContentsLifetimeHelper* helper = + WebContentsLifetimeHelper::FromWebContents(web_contents); + content::BrowserThread::PostTask( + content::BrowserThread::UI, FROM_HERE, + base::BindOnce(&WebContentsLifetimeHelper::PostNewNavigation, + helper->GetWeakPtr(), url_params)); + + return content::NavigationThrottle::CANCEL; } content::NavigationThrottle::ThrottleCheckResult PreviewsLitePageNavigationThrottle::WillStartRequest() { - return content::NavigationThrottle::PROCEED; + return MaybeNavigateToPreview(); } content::NavigationThrottle::ThrottleCheckResult PreviewsLitePageNavigationThrottle::WillRedirectRequest() { - return content::NavigationThrottle::PROCEED; + return MaybeNavigateToPreview(); } content::NavigationThrottle::ThrottleCheckResult
diff --git a/chrome/browser/previews/previews_lite_page_navigation_throttle.h b/chrome/browser/previews/previews_lite_page_navigation_throttle.h index 48af4f8..3cc8c858 100644 --- a/chrome/browser/previews/previews_lite_page_navigation_throttle.h +++ b/chrome/browser/previews/previews_lite_page_navigation_throttle.h
@@ -5,6 +5,8 @@ #ifndef CHROME_BROWSER_PREVIEWS_PREVIEWS_LITE_PAGE_NAVIGATION_THROTTLE_H_ #define CHROME_BROWSER_PREVIEWS_PREVIEWS_LITE_PAGE_NAVIGATION_THROTTLE_H_ +#include "base/gtest_prod_util.h" +#include "chrome/browser/previews/previews_lite_page_navigation_throttle_manager.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/navigation_throttle.h" @@ -14,17 +16,34 @@ // new one to the Previews Server. class PreviewsLitePageNavigationThrottle : public content::NavigationThrottle { public: - explicit PreviewsLitePageNavigationThrottle( - content::NavigationHandle* handle); + PreviewsLitePageNavigationThrottle( + content::NavigationHandle* handle, + PreviewsLitePageNavigationThrottleManager* manager); ~PreviewsLitePageNavigationThrottle() override; - // If a Preview is triggered, this method returns an instance of |this|. - // Otherwise it will return a nullptr. - static std::unique_ptr<content::NavigationThrottle> MaybeCreateThrottleFor( - content::NavigationHandle* handle); - private: + FRIEND_TEST_ALL_PREFIXES(PreviewsLitePageNavigationThrottleTest, + TestGetPreviewsURL); + + // The current effective connection type; + net::EffectiveConnectionType GetECT() const; + + // Returns true if the current URL is eligible for the preview. Does not check + // any blacklisting or single bypass. + bool IsEligibleForPreview() const; + + // Returns the URL for a preview of the current URL given by the navigation + // handle. + GURL GetPreviewsURL() const; + + // This method is called on every request and redirect. It checks all + // eligibility and blacklisting criteria for the current URL and will return + // CANCEL when the preview is triggered and post a new navigation, or will + // return PROCEED if the preview is not triggered. + content::NavigationThrottle::ThrottleCheckResult MaybeNavigateToPreview() + const; + // content::NavigationThrottle implementation: content::NavigationThrottle::ThrottleCheckResult WillStartRequest() override; content::NavigationThrottle::ThrottleCheckResult WillRedirectRequest() @@ -34,6 +53,10 @@ override; const char* GetNameForLogging() override; + // The manager class to report state changes to and get state from. Outlives + // |this|. + PreviewsLitePageNavigationThrottleManager* manager_; + DISALLOW_COPY_AND_ASSIGN(PreviewsLitePageNavigationThrottle); };
diff --git a/chrome/browser/previews/previews_lite_page_navigation_throttle_manager.h b/chrome/browser/previews/previews_lite_page_navigation_throttle_manager.h new file mode 100644 index 0000000..152abdda --- /dev/null +++ b/chrome/browser/previews/previews_lite_page_navigation_throttle_manager.h
@@ -0,0 +1,26 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_PREVIEWS_PREVIEWS_LITE_PAGE_NAVIGATION_THROTTLE_MANAGER_H_ +#define CHROME_BROWSER_PREVIEWS_PREVIEWS_LITE_PAGE_NAVIGATION_THROTTLE_MANAGER_H_ + +#include "base/time/time.h" + +// This interface specifies the interaction that a +// |PreviewsLitePageNavigationThrottle| has with it's state manager. This class +// tracks the state of the Navigation Throttle since a single instance of the +// navigation throttle can be very short lived, and therefore is not aware of +// any actions taken by its predecessor. +class PreviewsLitePageNavigationThrottleManager { + public: + // Used to notify that the Previews Server should not be sent anymore requests + // until after the given time. + virtual void SetServerUnavailableUntil(base::TimeTicks retry_at) = 0; + + // Returns true if a Preview should not be triggered because the server is + // unavailable. + virtual bool IsServerUnavailable(base::TimeTicks now) = 0; +}; + +#endif // CHROME_BROWSER_PREVIEWS_PREVIEWS_LITE_PAGE_NAVIGATION_THROTTLE_MANAGER_H_
diff --git a/chrome/browser/previews/previews_lite_page_navigation_throttle_unittest.cc b/chrome/browser/previews/previews_lite_page_navigation_throttle_unittest.cc new file mode 100644 index 0000000..da2cf073 --- /dev/null +++ b/chrome/browser/previews/previews_lite_page_navigation_throttle_unittest.cc
@@ -0,0 +1,137 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/previews/previews_lite_page_navigation_throttle.h" + +#include <memory> + +#include "base/memory/ptr_util.h" +#include "base/metrics/field_trial.h" +#include "base/metrics/field_trial_params.h" +#include "base/test/scoped_feature_list.h" +#include "base/test/scoped_task_environment.h" +#include "chrome/browser/previews/previews_lite_page_decider.h" +#include "chrome/test/base/chrome_render_view_host_test_harness.h" +#include "components/previews/core/previews_features.h" +#include "content/public/browser/navigation_handle.h" +#include "net/http/http_util.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "url/gurl.h" + +namespace { +const char kTestUrl[] = "https://www.test.com/"; +} + +class PreviewsLitePageNavigationThrottleTest + : public ChromeRenderViewHostTestHarness { + protected: + PreviewsLitePageNavigationThrottleTest() = default; + + void SetUp() override { + ChromeRenderViewHostTestHarness::SetUp(); + test_handle_ = content::NavigationHandle::CreateNavigationHandleForTesting( + GURL(kTestUrl), main_rfh()); + + content::RenderFrameHostTester::For(main_rfh()) + ->InitializeRenderFrameIfNeeded(); + } + + void SimulateCommit() { + test_handle_->CallDidCommitNavigationForTesting(test_handle_->GetURL()); + } + + void SimulateWillProcessResponse() { + std::string headers("HTTP/1.1 200 OK\n\n"); + test_handle_->CallWillProcessResponseForTesting( + main_rfh(), + net::HttpUtil::AssembleRawHeaders(headers.c_str(), headers.size())); + SimulateCommit(); + } + + void CallDidFinishNavigation() { test_handle_.reset(); } + + content::NavigationHandle* handle() { return test_handle_.get(); } + + content::NavigationHandle* handle_with_url(std::string url) { + test_handle_ = content::NavigationHandle::CreateNavigationHandleForTesting( + GURL(url), main_rfh()); + return test_handle_.get(); + } + + private: + std::unique_ptr<content::NavigationHandle> test_handle_; +}; + +TEST_F(PreviewsLitePageNavigationThrottleTest, TestGetPreviewsURL) { + struct TestCase { + std::string previews_host; + std::string original_url; + std::string previews_url; + }; + const TestCase kTestCases[]{ + // Use https://play.golang.org/p/HUM2HxmUTOW to compute |previews_url|. + { + "https://previews.host.com", + "https://original.host.com/path/path/path?query=yes", + "https://shta44dh4bi7rc6fnpjnkrtytwlabygjhk53v2trlot2wddylwua." + "previews.host.com/p?u=" + "https%3A%2F%2Foriginal.host.com%2Fpath%2Fpath%2Fpath%3Fquery%3Dyes", + }, + { + "https://previews.host.com", + "http://original.host.com/path/path/path?query=yes", + "https://6p7dar4ju6r4ynz7x3pucmlcltuqsf7z5auhvckzln7voglkt56q." + "previews.host.com/p?u=" + "http%3A%2F%2Foriginal.host.com%2Fpath%2Fpath%2Fpath%3Fquery%3Dyes", + }, + { + "https://previews.host.com", + "https://original.host.com:1443/path/path/path?query=yes", + "https://mil6oxtqb4zpsbmutm4d7wrx5nlr6tzlxjp7y44u55zqhzsdzjpq." + "previews.host.com/p?u=https%3A%2F%2Foriginal.host.com%3A1443" + "%2Fpath%2Fpath%2Fpath%3Fquery%3Dyes", + }, + { + "https://previews.host.com:1443", + "http://original.host.com/path/path/path?query=yes", + "https://6p7dar4ju6r4ynz7x3pucmlcltuqsf7z5auhvckzln7voglkt56q." + "previews.host.com:1443/p?u=" + "http%3A%2F%2Foriginal.host.com%2Fpath%2Fpath%2Fpath%3Fquery%3Dyes", + }, + { + "https://previews.host.com:1443", + "https://original.host.com:1443/path/path/path?query=yes", + "https://mil6oxtqb4zpsbmutm4d7wrx5nlr6tzlxjp7y44u55zqhzsdzjpq." + "previews.host.com:1443/p?u=https%3A%2F%2Foriginal.host.com%3A1443" + "%2Fpath%2Fpath%2Fpath%3Fquery%3Dyes", + }, + { + "https://previews.host.com", + "https://original.host.com/path/path/path?query=yes#fragment", + "https://shta44dh4bi7rc6fnpjnkrtytwlabygjhk53v2trlot2wddylwua." + "previews.host.com/p?u=" + "https%3A%2F%2Foriginal.host.com%2Fpath%2Fpath%2Fpath%3Fquery%3Dyes" + "%23fragment", + }, + }; + + for (const TestCase& test_case : kTestCases) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitAndEnableFeatureWithParameters( + previews::features::kLitePageServerPreviews, + {{"previews_host", test_case.previews_host}}); + + std::unique_ptr<PreviewsLitePageDecider> decider = + std::make_unique<PreviewsLitePageDecider>(); + std::unique_ptr<PreviewsLitePageNavigationThrottle> throttle = + std::make_unique<PreviewsLitePageNavigationThrottle>( + handle_with_url(test_case.original_url), decider.get()); + + EXPECT_EQ(throttle->GetPreviewsURL(), test_case.previews_url); + } + + // Boilerplate navigation to keep the test harness happy. + SimulateWillProcessResponse(); + CallDidFinishNavigation(); +}
diff --git a/chrome/browser/profiles/off_the_record_profile_io_data.cc b/chrome/browser/profiles/off_the_record_profile_io_data.cc index de61d909..dc1aea2 100644 --- a/chrome/browser/profiles/off_the_record_profile_io_data.cc +++ b/chrome/browser/profiles/off_the_record_profile_io_data.cc
@@ -145,7 +145,7 @@ protocol_handler_interceptor( ProtocolHandlerRegistryFactory::GetForBrowserContext(profile_) ->CreateJobInterceptorFactory()); - ChromeURLRequestContextGetter* context = + scoped_refptr<ChromeURLRequestContextGetter> context = ChromeURLRequestContextGetter::CreateForIsolatedApp( profile_, io_data_, descriptor, std::move(protocol_handler_interceptor), protocol_handlers,
diff --git a/chrome/browser/profiles/profile_impl_io_data.cc b/chrome/browser/profiles/profile_impl_io_data.cc index bf70099..734703e 100644 --- a/chrome/browser/profiles/profile_impl_io_data.cc +++ b/chrome/browser/profiles/profile_impl_io_data.cc
@@ -324,14 +324,14 @@ protocol_handler_interceptor( ProtocolHandlerRegistryFactory::GetForBrowserContext(profile_) ->CreateJobInterceptorFactory()); - ChromeURLRequestContextGetter* context = + scoped_refptr<ChromeURLRequestContextGetter> context = ChromeURLRequestContextGetter::CreateForIsolatedApp( profile_, io_data_, descriptor, std::move(protocol_handler_interceptor), protocol_handlers, std::move(request_interceptors)); app_request_context_getter_map_[descriptor] = context; - return context; + return context.get(); } scoped_refptr<ChromeURLRequestContextGetter> @@ -357,7 +357,7 @@ app_request_context_getter_map_.find(descriptor); DCHECK(app_iter != app_request_context_getter_map_.end()); ChromeURLRequestContextGetter* app_context = app_iter->second.get(); - ChromeURLRequestContextGetter* context = + scoped_refptr<ChromeURLRequestContextGetter> context = ChromeURLRequestContextGetter::CreateForIsolatedMedia( profile_, app_context, io_data_, descriptor); isolated_media_request_context_getter_map_[descriptor] = context;
diff --git a/chrome/browser/profiles/profiles_state.cc b/chrome/browser/profiles/profiles_state.cc index 40d7b4d9..31daf61 100644 --- a/chrome/browser/profiles/profiles_state.cc +++ b/chrome/browser/profiles/profiles_state.cc
@@ -288,6 +288,15 @@ #endif return false; } + +bool ArePublicSessionRestrictionsEnabled() { +#if defined(OS_CHROMEOS) + if (chromeos::LoginState::IsInitialized()) { + return chromeos::LoginState::Get()->ArePublicSessionRestrictionsEnabled(); + } +#endif + return false; +} #endif // !defined(OS_ANDROID) } // namespace profiles
diff --git a/chrome/browser/profiles/profiles_state.h b/chrome/browser/profiles/profiles_state.h index 4e9d425f..b0be81cb 100644 --- a/chrome/browser/profiles/profiles_state.h +++ b/chrome/browser/profiles/profiles_state.h
@@ -121,6 +121,9 @@ // Returns whether a public session is being run currently. bool IsPublicSession(); + +// Returns whether public session restrictions are enabled. +bool ArePublicSessionRestrictionsEnabled(); #endif // !defined(OS_ANDROID) } // namespace profiles
diff --git a/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos.cc b/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos.cc index 8fa8c17..e4c45e6 100644 --- a/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos.cc +++ b/chrome/browser/resource_coordinator/tab_manager_delegate_chromeos.cc
@@ -18,6 +18,7 @@ #include "base/files/file_util.h" #include "base/memory/memory_pressure_monitor_chromeos.h" #include "base/metrics/histogram_macros.h" +#include "base/process/memory.h" #include "base/process/process_handle.h" // kNullProcessHandle. #include "base/process/process_metrics.h" #include "base/strings/string16.h" @@ -380,10 +381,10 @@ // Sets OOM score. VLOG(3) << "Set OOM score " << chrome::kLowestRendererOomScore << " for focused tab " << pid; - std::map<int, int> dict; - dict[pid] = chrome::kLowestRendererOomScore; - DCHECK(GetDebugDaemonClient()); - GetDebugDaemonClient()->SetOomScoreAdj(dict, base::Bind(&OnSetOomScoreAdj)); + if (!base::AdjustOOMScore(pid, chrome::kLowestRendererOomScore)) + LOG(ERROR) << "Failed to set oom_score_adj to " + << chrome::kLowestRendererOomScore + << " for focused tab, pid: " << pid; } void TabManagerDelegate::AdjustFocusedTabScore(base::ProcessHandle pid) { @@ -760,7 +761,13 @@ // current cached score. if (oom_score_map_[pid] != score) { VLOG(3) << "Update OOM score " << score << " for " << *cur; - oom_scores_to_change[pid] = static_cast<int32_t>(score); + if (cur->app()) { + oom_scores_to_change[pid] = static_cast<int32_t>(score); + } else { + if (!base::AdjustOOMScore(pid, score)) + LOG(ERROR) << "Failed to set oom_score_adj to " << score + << " for process " << pid; + } } priority += priority_increment; }
diff --git a/chrome/browser/resources/chromeos/chromevox/BUILD.gn b/chrome/browser/resources/chromeos/chromevox/BUILD.gn index 448b3c66..ca12acf 100644 --- a/chrome/browser/resources/chromeos/chromevox/BUILD.gn +++ b/chrome/browser/resources/chromeos/chromevox/BUILD.gn
@@ -7,6 +7,7 @@ import("//components/nacl/features.gni") import("//testing/test.gni") import("//chrome/test/base/js2gtest.gni") +import("//third_party/closure_compiler/compile_js.gni") import("run_jsbundler.gni") assert(is_chromeos) @@ -643,3 +644,36 @@ ] defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] } + +js_library("tree_walker") { + sources = [ + "cvox2/background/tree_walker.js", + ] + deps = [ + ":automation_predicate", + ":constants", + ] + externs_list = [ + "$externs_path/automation.js", + "$externs_path/chrome_extensions.js", + ] +} + +js_library("automation_predicate") { + sources = [ + "cvox2/background/automation_predicate.js", + ] + deps = [ + ":constants", + ] + externs_list = [ + "$externs_path/automation.js", + "$externs_path/chrome_extensions.js", + ] +} + +js_library("constants") { + sources = [ + "cvox2/background/constants.js", + ] +}
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs index 79e1648..0118b572 100644 --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/background_test.extjs
@@ -408,7 +408,7 @@ }.bind(this)); }); -// Flaky, see http://crbug.com/643902. +// Flaky, see https://crbug.com/622387. TEST_F('BackgroundTest', 'DISABLED_UseEditableState', function() { this.runWithLoadedTree( function() {/*! @@ -498,7 +498,7 @@ Background.globsToRegExp_(['url1*', 'u?l2', '*url3']).toString()); }); -// Flaky, see http://crbug.com/635032 +// Flaky, see https://crbug.com/622387. TEST_F('BackgroundTest', 'DISABLED_ActiveOrInactive', function() { var mockFeedback = this.createMockFeedback(); this.runWithLoadedTree(function() {/*! @@ -1167,7 +1167,7 @@ }); }); -// Flaky, see crbug.com/693928. +// Flaky, see https://crbug.com/622387. TEST_F('BackgroundTest', 'DISABLED_EditableNavigation', function() { var mockFeedback = this.createMockFeedback(); this.runWithLoadedTree(function(root) {/*! @@ -1185,7 +1185,8 @@ }); }); -TEST_F('BackgroundTest', 'NavigationMovesFocus', function() { +// Flaky, see https://crbug.com/622387. +TEST_F('BackgroundTest', 'DISABLED_NavigationMovesFocus', function() { this.runWithLoadedTree(function(root) {/*! <p>start</p> <input type="text"></input> @@ -1440,7 +1441,7 @@ }); }); -// Flaky, see http://crbug.com/825429. +// Flaky, see https://crbug.com/622387. TEST_F('BackgroundTest', 'DISABLED_ActiveDescendantUpdates', function() { var mockFeedback = this.createMockFeedback(); this.runWithLoadedTree(function(root) {/*!
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb index 0f8ce85..a4b8495 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_es-419.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="es-419"> <translation id="100812568230599391">Cambia el estilo de la pantalla a intercalar.</translation> +<translation id="1011903154582639569">Busca una llave y, luego, activa el teclado para escribir</translation> <translation id="1012173283529841972">Elemento de lista</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">¿Estás usando los comentarios por voz de ChromeVox por primera vez? En este instructivo rápido se explican los aspectos básicos para comenzar a usar ChromeVox.</translation> @@ -163,6 +164,7 @@ <translation id="2553108862507765288">grammatical mistake</translation> <translation id="257674075312929031">Grupo</translation> <translation id="2582407057977008361">Lateral</translation> +<translation id="2592212930811759050">Presiona dos veces para comenzar a editar</translation> <translation id="2606210917827248971">con {COUNT,plural, =1{# elemento}other{# elementos}}</translation> <translation id="2614981083756825552">Diseño de MathML</translation> <translation id="2624431853467395961">Abrir el modo de aprendizaje</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fi.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fi.xtb index 162f3b4..cef1b11 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fi.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fi.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="fi"> <translation id="100812568230599391">Vaihda näyttötyyliksi lomittainen.</translation> +<translation id="1011903154582639569">Valitse haluamasi merkki ja kirjoita se sitten nostamalla sormesi</translation> <translation id="1012173283529841972">Luettelokohde</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">Käytätkö ChromeVoxin äänipalautetta ensimmäistä kertaa? Tämän ohjeen avulla voit tutustua ChromeVoxin perusteisiin nopeasti.</translation> @@ -163,6 +164,7 @@ <translation id="2553108862507765288">kielioppivirhe</translation> <translation id="257674075312929031">Ryhmä</translation> <translation id="2582407057977008361">Aside-tunniste</translation> +<translation id="2592212930811759050">Aloita muokkaus kaksoisnapauttamalla</translation> <translation id="2606210917827248971">jossa on {COUNT,plural, =1{# kohde}other{# kohdetta}}</translation> <translation id="2614981083756825552">Math ML -asettelu</translation> <translation id="2624431853467395961">Avaa opettelutila</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb index e9f45fa3..b7de74b 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fil.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="fil"> <translation id="100812568230599391">Palitan ang istilo ng display upang i-interleave.</translation> +<translation id="1011903154582639569">Maghanap ng key, pagkatapos ay iangat para mag-type</translation> <translation id="1012173283529841972">Item sa listahan</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">Unang beses mo bang gagamitin ang pasalitang feedback ng ChromeVox? Ipinapaliwanag sa maikling tutorial na ito ang mga kinakailangan para sa pagsisimula sa ChromeVox.</translation> @@ -163,6 +164,7 @@ <translation id="2553108862507765288">pagkakamali sa grammar</translation> <translation id="257674075312929031">Pangkat</translation> <translation id="2582407057977008361">Kaugnay</translation> +<translation id="2592212930811759050">I-double tap para simulan ang pag-edit</translation> <translation id="2606210917827248971">may {COUNT,plural, =1{# item}one{# item}other{# na item}}</translation> <translation id="2614981083756825552">Math ML Layout</translation> <translation id="2624431853467395961">Buksan ang learn mode</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_gu.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_gu.xtb index 9e0a0a9..21b87aa1 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_gu.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_gu.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="gu"> <translation id="100812568230599391">વર્તમાન પ્રદર્શન શૈલીને ઇન્ટરલીવ પર બદલો.</translation> +<translation id="1011903154582639569">કી શોધો, પછી ટાઇપ કરવા માટે ઊંચકો</translation> <translation id="1012173283529841972">સૂચિ આઇટમ</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">શું તમે ChromeVoxના બોલાયેલ પ્રતિસાદનો પહેલી વાર ઉપયોગ કરી રહ્યા છો? આ ઝડપી ટ્યૂટૉરિઅલ ChromeVox શરૂ કરવા માટેની જરૂરી બાબતો સમજાવે છે.</translation> @@ -163,6 +164,7 @@ <translation id="2553108862507765288">વ્યાકરણની ભૂલ</translation> <translation id="257674075312929031">જૂથ</translation> <translation id="2582407057977008361">એક તરફ</translation> +<translation id="2592212930811759050">ફેરફાર શરૂ કરવા માટે બે વાર ટૅપ કરો</translation> <translation id="2606210917827248971">આ સાથેની {COUNT,plural, =1{# આઇટમ}one{# આઇટમ}other{# આઇટમ}}</translation> <translation id="2614981083756825552">ગણિત ML લેઆઉટ</translation> <translation id="2624431853467395961">જાણો મોડ ખોલો</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hu.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hu.xtb index efbac30..4e45ca4 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hu.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_hu.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="hu"> <translation id="100812568230599391">A megjelenítési mód módosítása beékeltre.</translation> +<translation id="1011903154582639569">Keressen egy billentyűt, majd emelje fel az ujját a gépeléshez</translation> <translation id="1012173283529841972">Listaelem</translation> <translation id="1013742170491673792">keresés</translation> <translation id="1022586497894531524">Először használja a ChromeVox hangos visszajelzését? Ez a rövid útmutató elmagyarázza a ChromeVox legfontosabb kezdő lépéseit.</translation> @@ -163,6 +164,7 @@ <translation id="2553108862507765288">nyelvtani hiba</translation> <translation id="257674075312929031">Csoport</translation> <translation id="2582407057977008361">Oldaltartalom</translation> +<translation id="2592212930811759050">Koppintson duplán a szerkesztés megkezdéséhez</translation> <translation id="2606210917827248971">{COUNT,plural, =1{# elemmel}other{# elemmel}}</translation> <translation id="2614981083756825552">Matematikai „ML” elrendezés</translation> <translation id="2624431853467395961">Tanuló mód megnyitása</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb index 09ba896..d45c164d 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ja.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ja"> <translation id="100812568230599391">表示スタイルを交互に変更する。</translation> +<translation id="1011903154582639569">キーを探し、見つかったら指を離して入力します</translation> <translation id="1012173283529841972">リスト項目</translation> <translation id="1013742170491673792">検索用語を編集</translation> <translation id="1022586497894531524">ChromeVox の音声フィードバックを初めてご利用になる場合は、このクイック チュートリアルで、ChromeVox の利用を開始するための基本事項をご確認ください。</translation> @@ -163,6 +164,7 @@ <translation id="2553108862507765288">文法上の誤り</translation> <translation id="257674075312929031">グループ</translation> <translation id="2582407057977008361">補足</translation> +<translation id="2592212930811759050">編集を開始するにはダブルタップします</translation> <translation id="2606210917827248971">に {COUNT,plural, =1{# 件の項目}other{# 件の項目}}</translation> <translation id="2614981083756825552">MathML レイアウト</translation> <translation id="2624431853467395961">学習モードを開く</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb index f2c43b7..09a93f2 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_kn.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="kn"> <translation id="100812568230599391">ಶೈಲಿ ಪ್ರದರ್ಶನವನ್ನು ನಡುಪುಟಕ್ಕೆ ಬದಲಾಯಿಸಿ.</translation> +<translation id="1011903154582639569">ಕೀ ಅನ್ನು ಹುಡುಕಿ, ನಂತರ ಟೈಪ್ ಮಾಡಲು ಲಿಫ್ಟ್ ಮಾಡಿ</translation> <translation id="1012173283529841972">ಪಟ್ಟಿಯ ಐಟಂ</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">ನೀವು ಮೊದಲ ಬಾರಿಗೆ ChromeVox ಮಾತಿನ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಬಳಸುತ್ತಿರುವಿರಾ? ChromeVox ಪ್ರಾರಂಭಿಸುವ ಮೂಲಭೂತ ಅಂಶಗಳ ಕುರಿತು ಈ ತ್ವರಿತ ಟ್ಯುಟೋರಿಯಲ್ ವಿವರಿಸುತ್ತದೆ.</translation> @@ -163,6 +164,7 @@ <translation id="2553108862507765288">ವ್ಯಾಕರಣ ದೋಷ</translation> <translation id="257674075312929031">ಗುಂಪು</translation> <translation id="2582407057977008361">ಹೊರತಾಗಿ</translation> +<translation id="2592212930811759050">ಎಡಿಟಿಂಗ್ ಪ್ರಾರಂಭಿಸಲು ಡಬಲ್ ಟ್ಯಾಪ್ ಮಾಡಿ</translation> <translation id="2606210917827248971">ಜೊತೆ {COUNT,plural, =1{# ಐಟಂ}one{# ಐಟಂಗಳು}other{# ಐಟಂಗಳು}}</translation> <translation id="2614981083756825552">ಗಣಿತ ML ಲೇಔಟ್</translation> <translation id="2624431853467395961">ಕಲಿಕೆ ಮೋಡ್ ತೆರೆಯಿರಿ</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ko.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ko.xtb index 9144509..9caba057 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ko.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ko.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ko"> <translation id="100812568230599391">디스플레이 스타일을 인터리브로 변경</translation> +<translation id="1011903154582639569">키를 찾은 다음 손가락을 떼서 입력하세요.</translation> <translation id="1012173283529841972">목록 항목</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">ChromeVox 음성 피드백을 처음 사용하시나요? 이 빠른 가이드에서 ChromeVox를 시작하기 위한 기본사항을 알아볼 수 있습니다.</translation> @@ -163,6 +164,7 @@ <translation id="2553108862507765288">grammatical mistake</translation> <translation id="257674075312929031">그룹</translation> <translation id="2582407057977008361">사이드 바</translation> +<translation id="2592212930811759050">수정하려면 두 번 탭하세요.</translation> <translation id="2606210917827248971">에{COUNT,plural, =1{항목 #개 포함}other{항목 #개 포함}}</translation> <translation id="2614981083756825552">Math ML 레이아웃</translation> <translation id="2624431853467395961">학습 모드 열기</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lt.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lt.xtb index 1e32afcf..1d03f1c 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lt.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_lt.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="lt"> <translation id="100812568230599391">Keisti vaizdo stilių į įterptąjį.</translation> +<translation id="1011903154582639569">Radę klavišą pakelkite, kad įvestumėte</translation> <translation id="1012173283529841972">Sąrašo elementas</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">Ar „ChromeVox“ ekrano skaitymo balsu funkciją naudojate pirmą kartą? Šioje trumpoje mokymo programoje pateikiama pagrindinė informacija, kaip pradėti naudoti „ChromeVox“.</translation> @@ -163,6 +164,7 @@ <translation id="2553108862507765288">grammatical mistake</translation> <translation id="257674075312929031">Grupė</translation> <translation id="2582407057977008361">Šalia</translation> +<translation id="2592212930811759050">Norėdami pradėti redaguoti palieskite dukart</translation> <translation id="2606210917827248971">su {COUNT,plural, =1{# elementu}one{# elementu}few{# elementais}many{# elemento}other{# elementų}}</translation> <translation id="2614981083756825552">Matematikos žymėjimo kalbos išdėstymas</translation> <translation id="2624431853467395961">Atidarykite mokomąjį režimą</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ml.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ml.xtb index deee2bb..874f7b2 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ml.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ml.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ml"> <translation id="100812568230599391">ഡിസ്പ്ലേ ശൈലിയെ ഇടകലർത്തിയുള്ള രീതിയിലേക്ക് മാറ്റുക.</translation> +<translation id="1011903154582639569">ഒരു കീ കണ്ടെത്തുക, തുടർന്ന് ടൈപ്പ് ചെയ്യാൻ ഉയർത്തുക</translation> <translation id="1012173283529841972">ലിസ്റ്റ് ഇനം</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">നിങ്ങൾ ആദ്യമായാണോ ChromeVox സംഭാഷണ ഫീഡ്ബാക്ക് ഉപയോഗിക്കുന്നത്? ChromeVox ആരംഭിക്കാൻ ആവശ്യമായ കാര്യങ്ങളെ കുറിച്ച് ഈ ട്യൂട്ടോറിയലിൽ വിവരിക്കുന്നു.</translation> @@ -162,6 +163,7 @@ <translation id="2553108862507765288">വ്യാകരണ പിശക്</translation> <translation id="257674075312929031">ഗ്രൂപ്പ്</translation> <translation id="2582407057977008361">അരികിൽ</translation> +<translation id="2592212930811759050">എഡിറ്റിംഗ് ആരംഭിക്കാൻ രണ്ടുതവണ ടാപ്പ് ചെയ്യുക</translation> <translation id="2606210917827248971">ഇവ ഉൾപ്പെടുന്നു {COUNT,plural, =1{# ഇനം}other{# ഇനങ്ങൾ}}</translation> <translation id="2614981083756825552">മാത്ത് ML ലേഔട്ട്</translation> <translation id="2624431853467395961">"അറിയുക" മോഡ് തുറക്കുക</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb index 442d4bc9..1a9002b 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="mr"> <translation id="100812568230599391">प्रदर्शन शैली इंटरलीववर बदला.</translation> +<translation id="1011903154582639569">की शोधा, नंतर टाइप करण्यासाठी उचला</translation> <translation id="1012173283529841972">सूची आयटम</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">तुम्ही ChromeVox वाचिक फीडबॅक पहिल्या वेळी वापरत आहात का? हे जलद ट्युटोरियल ChromeVox सोबत सुरुवात करण्यासाठी आवश्यक गोष्टी समजावून सांगते.</translation> @@ -162,6 +163,7 @@ <translation id="2553108862507765288">grammatical mistake</translation> <translation id="257674075312929031">गट</translation> <translation id="2582407057977008361">बाजूचा</translation> +<translation id="2592212930811759050">संपादन सुरू करण्यासाठी दोनदा टॅप करा</translation> <translation id="2606210917827248971">यासह {COUNT,plural, =1{# आयटम}one{# आयटम}other{# आयटम}}</translation> <translation id="2614981083756825552">Math ML लेआउट</translation> <translation id="2624431853467395961">जाणून घ्या मोड उघडा</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.xtb index 68e5c83..d30829e 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ru.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ru"> <translation id="100812568230599391">Изменить стиль дисплея на чередующийся</translation> +<translation id="1011903154582639569">Найдите клавишу, затем проведите по экрану вверх, чтобы начать печатать</translation> <translation id="1012173283529841972">Пункт списка</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">Впервые используете ChromeVox для озвучивания текста на экране? Благодаря нашему руководству вы быстро научитесь работать с этим сервисом.</translation> @@ -163,6 +164,7 @@ <translation id="2553108862507765288">grammatical mistake</translation> <translation id="257674075312929031">Группа.</translation> <translation id="2582407057977008361">Боковой блок.</translation> +<translation id="2592212930811759050">Нажмите дважды, чтобы начать редактировать</translation> <translation id="2606210917827248971">из {COUNT,plural, =1{# пункта}one{# пункта}few{# пунктов}many{# пунктов}other{# пункта}}</translation> <translation id="2614981083756825552">Схема MathML.</translation> <translation id="2624431853467395961">Перейти в режим обучения</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ta.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ta.xtb index 390f4f8e..81d9317 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ta.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ta.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ta"> <translation id="100812568230599391">தற்போதைய காட்சி நடை: ஒன்றின் மேல் ஒன்று.</translation> +<translation id="1011903154582639569">தட்டச்சு செய்ய, ஒரு விசையைக் கண்டறிந்து, அதை அழுத்தவும்</translation> <translation id="1012173283529841972">பட்டியல் உருப்படி</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">ChromeVox பேச்சு வடிவக் கருத்தை முதல் முறையாகப் பயன்படுத்துகிறீர்களா? இந்த விரைவான பயிற்சியில், ChromeVoxஐப் பயன்படுத்தத் தொடங்குவதற்குத் தேவைப்படும் முக்கியமான விஷயங்களைத் தெரிந்துகொள்வீர்கள்.</translation> @@ -163,6 +164,7 @@ <translation id="2553108862507765288">இலக்கணப் பிழை</translation> <translation id="257674075312929031">குழு</translation> <translation id="2582407057977008361">Aside</translation> +<translation id="2592212930811759050">திருத்துவதற்கு, இருமுறை தட்டவும்</translation> <translation id="2606210917827248971">பட்டியலில் {COUNT,plural, =1{# உருப்படி}other{# உருப்படிகள்}}</translation> <translation id="2614981083756825552">கணித ML தளவமைப்பு</translation> <translation id="2624431853467395961">கற்றல் பயன்முறையைத் திறக்கவும்</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb index bd351c7..d5dfa653 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_th.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="th"> <translation id="100812568230599391">เปลี่ยนรูปแบบการแสดงผลเป็นข้อความแทรก</translation> +<translation id="1011903154582639569">หาแป้นแล้วยกขึ้นเพื่อพิมพ์</translation> <translation id="1012173283529841972">รายการ</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">หากคุณใช้การอธิบายและอ่านออกเสียงของ ChromeVox เป็นครั้งแรก บทแนะนำฉบับย่อนี้ที่จะอธิบายสิ่งที่ควรทราบในการเริ่มต้นใช้งาน ChromeVox</translation> @@ -162,6 +163,7 @@ <translation id="2553108862507765288">ข้อผิดพลาดทางไวยากรณ์</translation> <translation id="257674075312929031">กลุ่ม</translation> <translation id="2582407057977008361">ส่วนที่ไม่เกี่ยวข้อง</translation> +<translation id="2592212930811759050">แตะสองครั้งเพื่อเริ่มแก้ไข</translation> <translation id="2606210917827248971">ที่มี {COUNT,plural, =1{# รายการ}other{# รายการ}}</translation> <translation id="2614981083756825552">รูปแบบ ML คณิตศาสตร์</translation> <translation id="2624431853467395961">เปิดโหมดการเรียนรู้</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_tr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_tr.xtb index 0d745625..9cd3499 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_tr.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_tr.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="tr"> <translation id="100812568230599391">Görüntüleme stilini üst üste (interleave) olarak değiştirin.</translation> +<translation id="1011903154582639569">Bir tuşu bulun ve yazmak için elinizi o tuştan kaldırın</translation> <translation id="1012173283529841972">Liste öğesi</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">ChromeVox sözlü geri bildirimini ilk kez mi kullanıyorsunuz? Bu hızlı eğiticide, ChromeVox'ı kullanmaya başlamak için gereken temel bilgiler açıklanmaktadır.</translation> @@ -162,6 +163,7 @@ <translation id="2553108862507765288">grammatical mistake</translation> <translation id="257674075312929031">Grup</translation> <translation id="2582407057977008361">Kenar</translation> +<translation id="2592212930811759050">Düzenlemeye başlamak için iki kez dokunun</translation> <translation id="2606210917827248971">{COUNT,plural, =1{# öğeyle}other{# öğeyle}}</translation> <translation id="2614981083756825552">Matematik ML Düzeni</translation> <translation id="2624431853467395961">Öğrenme modunu açar</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb index ee2189a19..1f6fa6f 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="vi"> <translation id="100812568230599391">Thay đổi kiểu hiển thị thành đan xen.</translation> +<translation id="1011903154582639569">Tìm phím rồi nhấc tay lên để nhập</translation> <translation id="1012173283529841972">Mục danh sách</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">Đây là lần đầu tiên bạn sử dụng tính năng phản hồi bằng giọng nói của ChromeVox? Hướng dẫn nhanh này sẽ giải thích các thông tin cơ bản để bắt đầu với ChromeVox.</translation> @@ -163,6 +164,7 @@ <translation id="2553108862507765288">lỗi ngữ pháp</translation> <translation id="257674075312929031">Nhóm</translation> <translation id="2582407057977008361">Loại trừ</translation> +<translation id="2592212930811759050">Nhấn đúp để bắt đầu chỉnh sửa</translation> <translation id="2606210917827248971">với {COUNT,plural, =1{# mục}other{# mục}}</translation> <translation id="2614981083756825552">Bố cục toán học ML</translation> <translation id="2624431853467395961">Mở chế độ học</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-CN.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-CN.xtb index 061c517b..6ced38c 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-CN.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-CN.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="zh-CN"> <translation id="100812568230599391">将显示样式更改为交错。</translation> +<translation id="1011903154582639569">找到需要的键后,移开手指即可输入</translation> <translation id="1012173283529841972">列表项</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">您是初次使用 ChromeVox 语音反馈功能吗?此教程将提供基本的操作说明,协助您开始使用 ChromeVox。</translation> @@ -162,6 +163,7 @@ <translation id="2553108862507765288">grammatical mistake</translation> <translation id="257674075312929031">群组</translation> <translation id="2582407057977008361">边栏内容</translation> +<translation id="2592212930811759050">点按两次即可开始修改</translation> <translation id="2606210917827248971">包含 {COUNT,plural, =1{# 项内容}other{# 项内容}}</translation> <translation id="2614981083756825552">数学标记语言布局</translation> <translation id="2624431853467395961">打开学习模式</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-TW.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-TW.xtb index cbbab816..3e2388fc 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-TW.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_zh-TW.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="zh-TW"> <translation id="100812568230599391">將顯示樣式變更為交錯。</translation> +<translation id="1011903154582639569">找到需要的鍵後,放開手指即可輸入</translation> <translation id="1012173283529841972">清單項目</translation> <translation id="1013742170491673792">srched</translation> <translation id="1022586497894531524">你是第一次使用 ChromeVox 互動朗讀嗎?本教學課程提供了簡要的基本操作說明,可協助你開始使用 ChromeVox。</translation> @@ -163,6 +164,7 @@ <translation id="2553108862507765288">grammatical mistake</translation> <translation id="257674075312929031">群組</translation> <translation id="2582407057977008361">獨立元素</translation> +<translation id="2592212930811759050">輕觸兩下即可開始編輯</translation> <translation id="2606210917827248971">內含 {COUNT,plural, =1{# 個項目}other{# 個項目}}</translation> <translation id="2614981083756825552">MathML 版面配置</translation> <translation id="2624431853467395961">開啟學習模式</translation>
diff --git a/chrome/browser/resources/chromeos/login/oobe_buttons.html b/chrome/browser/resources/chromeos/login/oobe_buttons.html index 237cc07..55da0747 100644 --- a/chrome/browser/resources/chromeos/login/oobe_buttons.html +++ b/chrome/browser/resources/chromeos/login/oobe_buttons.html
@@ -14,9 +14,8 @@ <iron-iconset-svg name="oobe-buttons-20" size="20"> <svg> <defs> - <g id="arrow-forward" fill="none" fill-rule="evenodd"> - <path d="M0 0h20v20H0z"></path> - <path fill="#FFF" fill-rule="nonzero" d="M7 13.825L11.327 10 7 6.175 8.332 5 14 10l-5.668 5z"> + <g id="arrow-forward" fill-rule="nonzero"> + <path d="M7 13.825L11.327 10 7 6.175 8.332 5 14 10l-5.668 5z"> </path> </g> </defs> @@ -26,9 +25,8 @@ <iron-iconset-svg name="oobe-buttons-40" size="40"> <svg> <defs> - <g id="arrow-forward" fill="none" fill-rule="evenodd"> - <path d="M0 0h40v40H0z"></path> - <path fill="#FFF" fill-rule="nonzero" d="M14 27.65L22.653 20 14 12.35 16.664 10 28 20 16.664 30z"> + <g id="arrow-forward" fill-rule="nonzero"> + <path d="M14 27.65L22.653 20 14 12.35 16.664 10 28 20 16.664 30z"> </path> </g> </defs> @@ -56,6 +54,7 @@ <template> <style include="iron-flex iron-flex-alignment iron-positioning"></style> <style include="paper-button-style cr-icons cr-shared-style"></style> + <link rel="stylesheet" href="oobe_fonts.css"> <link rel="stylesheet" href="oobe_text_buttons.css"> <paper-button id="textButton" on-tap="onClick_" disabled="[[disabled]]" inverse$="[[inverse]]" aria-label$="[[labelForAria]]" @@ -90,8 +89,9 @@ <template> <style include="iron-flex iron-flex-alignment iron-positioning"></style> <style include="paper-button-style cr-icons cr-shared-style"></style> - <link rel="stylesheet" href="oobe_back_button.css"> + <link rel="stylesheet" href="oobe_fonts.css"> <link rel="stylesheet" href="oobe_text_buttons.css"> + <link rel="stylesheet" href="oobe_back_button.css"> <paper-button id="button" on-tap="onClick_" disabled="[[disabled]]" aria-label$="[[labelForAria]]" class="action-button"> <div class="flex horizontal layout start center"> @@ -111,8 +111,9 @@ <template> <style include="iron-flex iron-flex-alignment iron-positioning"></style> <style include="paper-button-style cr-icons cr-shared-style"></style> - <link rel="stylesheet" href="oobe_next_button.css"> + <link rel="stylesheet" href="oobe_fonts.css"> <link rel="stylesheet" href="oobe_text_buttons.css"> + <link rel="stylesheet" href="oobe_next_button.css"> <paper-button id="button" on-tap="onClick_" disabled="[[disabled]]" class="action-button"> <div class="flex horizontal layout start center"> @@ -146,6 +147,7 @@ <template> <style include="iron-flex iron-flex-alignment iron-positioning"></style> <style include="paper-button-style cr-icons cr-shared-style"></style> + <link rel="stylesheet" href="oobe_fonts.css"> <link rel="stylesheet" href="oobe_text_buttons.css"> <link rel="stylesheet" href="oobe_welcome_secondary_button.css"> <paper-button id="button" aria-label$="[[labelForAria]]">
diff --git a/chrome/browser/resources/chromeos/login/oobe_dialog.css b/chrome/browser/resources/chromeos/login/oobe_dialog.css index fde8d37..2dd5681 100644 --- a/chrome/browser/resources/chromeos/login/oobe_dialog.css +++ b/chrome/browser/resources/chromeos/login/oobe_dialog.css
@@ -25,6 +25,7 @@ #oobe-title ::slotted(h1) { color: var(--google-grey-900); + font-family: var(--oobe-title-font-family); font-size: var(--title-font-size); font-weight: normal; margin: 0; @@ -84,5 +85,5 @@ #oobe-icon-div ::slotted(iron-icon) { --iron-icon-height: 32px; --iron-icon-width: 32px; - --iron-icon-fill-color: var(--google-blue-500); + --iron-icon-fill-color: var(--google-blue-600); }
diff --git a/chrome/browser/resources/chromeos/login/oobe_dialog.html b/chrome/browser/resources/chromeos/login/oobe_dialog.html index 90941109..8644d9cf 100644 --- a/chrome/browser/resources/chromeos/login/oobe_dialog.html +++ b/chrome/browser/resources/chromeos/login/oobe_dialog.html
@@ -52,6 +52,7 @@ --> <dom-module id="oobe-dialog"> <template> + <link rel="stylesheet" href="oobe_fonts.css"> <link rel="stylesheet" href="oobe_dialog_host.css"> <link rel="stylesheet" href="oobe_dialog.css"> <link rel="stylesheet" href="oobe_flex_layout.css">
diff --git a/chrome/browser/resources/chromeos/login/oobe_dialog.js b/chrome/browser/resources/chromeos/login/oobe_dialog.js index 5d25f70..f5b385e 100644 --- a/chrome/browser/resources/chromeos/login/oobe_dialog.js +++ b/chrome/browser/resources/chromeos/login/oobe_dialog.js
@@ -65,7 +65,9 @@ }, onBeforeShow: function() { - if (document.documentElement.getAttribute('full-screen-dialog')) + var isOobe = Oobe && Oobe.getInstance() && + Oobe.getInstance().displayType == DISPLAY_TYPE.OOBE; + if (isOobe || document.documentElement.getAttribute('full-screen-dialog')) this.fullScreenDialog = true; },
diff --git a/chrome/browser/resources/chromeos/login/oobe_fonts.css b/chrome/browser/resources/chromeos/login/oobe_fonts.css new file mode 100644 index 0000000..1b59396 --- /dev/null +++ b/chrome/browser/resources/chromeos/login/oobe_fonts.css
@@ -0,0 +1,8 @@ +/* Copyright 2018 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. */ + +:root { + --oobe-button-font-family: "Google Sans", Roboto, sans-serif; + --oobe-title-font-family: "Google Sans", Roboto, sans-serif; +}
diff --git a/chrome/browser/resources/chromeos/login/oobe_reset_confirmation_overlay.css b/chrome/browser/resources/chromeos/login/oobe_reset_confirmation_overlay.css index 5a9862a..0534b7a 100644 --- a/chrome/browser/resources/chromeos/login/oobe_reset_confirmation_overlay.css +++ b/chrome/browser/resources/chromeos/login/oobe_reset_confirmation_overlay.css
@@ -20,7 +20,8 @@ .reset-popup h1 { color: var(--google-grey-900); - font: 15px Roboto, sans-serif; + font-family: var(--oobe-button-font-family); + font-size: 15px; margin-bottom: 0; margin-top: 0; padding: 16px 20px;
diff --git a/chrome/browser/resources/chromeos/login/oobe_screen.css b/chrome/browser/resources/chromeos/login/oobe_screen.css index 4bc5047b..b1d2d40 100644 --- a/chrome/browser/resources/chromeos/login/oobe_screen.css +++ b/chrome/browser/resources/chromeos/login/oobe_screen.css
@@ -5,8 +5,6 @@ * This contains common styling for all the OOBE screens. */ :root { - --oobe-roboto-medium: 500 12px Roboto; - --oobe-roboto-bold: 700 12px Roboto; --oobe-text-button-focused-border-color: rgba(66, 133, 244, 0.4); /* #4284f4 */ }
diff --git a/chrome/browser/resources/chromeos/login/oobe_text_buttons.css b/chrome/browser/resources/chromeos/login/oobe_text_buttons.css index 6f257bbc..28e91ef 100644 --- a/chrome/browser/resources/chromeos/login/oobe_text_buttons.css +++ b/chrome/browser/resources/chromeos/login/oobe_text_buttons.css
@@ -11,5 +11,6 @@ */ :host ::slotted(*), #text { + font-family: var(--oobe-button-font-family); font-size: 12px; }
diff --git a/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.css b/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.css index 0baa812..4defa91 100644 --- a/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.css +++ b/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.css
@@ -17,6 +17,7 @@ #title { color: var(--google-grey-900); + font-family: var(--oobe-button-font-family); font-size: 28px; font-weight: 400; /* regular */ margin: 0;
diff --git a/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.html b/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.html index b6b7e07..2f90f61 100644 --- a/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.html +++ b/chrome/browser/resources/chromeos/login/oobe_welcome_dialog.html
@@ -56,6 +56,7 @@ <dom-module id="oobe-welcome-dialog"> <template> + <link rel="stylesheet" href="oobe_fonts.css"> <link rel="stylesheet" href="oobe_dialog_host.css"> <link rel="stylesheet" href="oobe_flex_layout.css"> <link rel="stylesheet" href="oobe_welcome_dialog.css">
diff --git a/chrome/browser/resources/chromeos/login/sync_consent.html b/chrome/browser/resources/chromeos/login/sync_consent.html index becd6ce2..9cc6ebfb 100644 --- a/chrome/browser/resources/chromeos/login/sync_consent.html +++ b/chrome/browser/resources/chromeos/login/sync_consent.html
@@ -45,10 +45,12 @@ <div class="overview-list-item-text flex layout vertical center-justified"> <div class="overview-list-item-title" consent-description> - [[i18nDynamic(locale, 'syncConsentScreenPersonalizeGoogleServicesName')]] + [[i18nDynamic(locale, + 'syncConsentScreenPersonalizeGoogleServicesName')]] </div> <div class="overview-list-item-description" consent-description> - [[i18nDynamic(locale, 'syncConsentScreenPersonalizeGoogleServicesDescription')]] + [[i18nDynamic(locale, + 'syncConsentScreenPersonalizeGoogleServicesDescription')]] </div> </div> </div> @@ -66,14 +68,15 @@ </div> </oobe-dialog> <oobe-dialog id="syncConsentNewDialog" role="dialog" - aria-label$="[[i18nDynamic(locale, 'syncConsentNewScreenTitle')]]" + aria-label$="[[i18nRecursive(locale, 'syncConsentNewScreenTitle', + 'productName')]]" has-buttons no-footer-padding hidden> <img srcset="chrome://oobe/logo_24px-1x.svg 1x, chrome://oobe/logo_24px-2x.svg 2x" slot="oobe-icon"> </img> <h1 slot="title" consent-description> - [[i18nDynamic(locale, 'syncConsentNewScreenTitle')]] + [[i18nRecursive(locale, 'syncConsentNewScreenTitle', 'productName')]] </h1> <div slot="footer" class="layout vertical"> <div class="sync-feature-item flex layout horizontal center"> @@ -102,7 +105,8 @@ </hd-iron-icon> <div class="sync-feature-item-text flex layout vertical center-justified" consent-description> - [[i18nDynamic(locale, 'syncConsentNewImproveChrome')]] + [[i18nRecursive(locale, 'syncConsentNewImproveChrome', + 'productName')]] </div> </div> <div id="syncFeaturesDesc" @@ -113,7 +117,8 @@ </hd-iron-icon> <div class="sync-feature-item-text flex layout vertical center-justified" consent-description> - [[i18nDynamic(locale, 'syncConsentNewGoogleMayUse')]] + [[i18nRecursive(locale, 'syncConsentNewGoogleMayUse', + 'productName')]] </div> </div> @@ -121,7 +126,8 @@ <div slot="bottom-buttons" class="layout horizontal end-justified"> <oobe-welcome-secondary-button id="moreOptionsButton" on-tap="onMoreOptionsButton_" - label-for-aria$="[[i18nDynamic(locale, 'syncConsentNewMoreOptions')]]"> + label-for-aria$="[[i18nDynamic(locale, + 'syncConsentNewMoreOptions')]]"> <div consent-description> [[i18nDynamic(locale, 'syncConsentNewMoreOptions')]] </div> @@ -146,7 +152,8 @@ </h1> <div slot="subtitle"> <div consent-description> - [[i18nDynamic(locale, 'syncConsentNewSyncOptionsSubtitle')]] + [[i18nRecursive(locale, 'syncConsentNewSyncOptionsSubtitle', + 'productName')]] </div> <div consent-description> [[i18nDynamic(locale, 'syncConsentNewChooseOption')]] @@ -177,7 +184,8 @@ [[i18nDynamic(locale, 'syncConsentNewOptionJustSync')]] </div> <div class="sync-option-subtitle" consent-description> - [[i18nDynamic(locale, 'syncConsentNewOptionJustSyncDsc')]] + [[i18nRecursive(locale, 'syncConsentNewOptionJustSyncDsc', + 'productName')]] </div> </div> </paper-radio-button> @@ -187,10 +195,12 @@ <div class="options-list-item-text flex layout vertical center-justified"> <div class="sync-option-title" consent-description> - [[i18nDynamic(locale, 'syncConsentNewOptionSyncAndPersonalization')]] + [[i18nDynamic(locale, + 'syncConsentNewOptionSyncAndPersonalization')]] </div> <div class="sync-option-subtitle" consent-description> - [[i18nDynamic(locale, 'syncConsentNewOptionSyncAndPersonalizationDsc')]] + [[i18nDynamic(locale, + 'syncConsentNewOptionSyncAndPersonalizationDsc')]] </div> </div> </paper-radio-button>
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bn.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bn.xtb index 0c52b01..d533a20 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bn.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bn.xtb
@@ -1,10 +1,10 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="bn"> -<translation id="111880247472081232">আপনার নির্বাচন-টু-স্পিক টেক্সট-টু-স্পিচ সেটিংস গ্লোবাল টেক্সট-টু-স্পিচ সেটিংসে স্থানান্তরিত হয়েছে।</translation> +<translation id="111880247472081232">আপনার বাছুন ও শুনুন টেক্সট-টু-স্পিচ সেটিংস গ্লোবাল টেক্সট-টু-স্পিচ সেটিংসে স্থানান্তরিত হয়েছে।</translation> <translation id="1197088940767939838">কমলা</translation> <translation id="1273314450961659276">টেক্সট টু স্পিচ সেটিংস</translation> -<translation id="1498542103351704084">নির্বাচন-টু-স্পিক স্পিচ সেটিংস আপডেট করা হয়েছে</translation> +<translation id="1498542103351704084">বাছুন ও শুনুন স্পিচ সেটিংস আপডেট করা হয়েছে</translation> <translation id="1555130319947370107">নীল</translation> <translation id="1666326070478924810">'বাছুন ও শুনুন'-এর সেটিংস</translation> <translation id="1966649499058910679">প্রতিটি শব্দ যেভাবে উচ্চারণ করা হয় সেইভাবে হাইলাইট করুন</translation> @@ -12,7 +12,7 @@ <translation id="2714180132046334502">গাঢ় ব্যাকগ্রাউন্ড</translation> <translation id="27349076983469322">হালকা ব্যাকগ্রাউন্ড</translation> <translation id="335581015389089642">স্পিচ</translation> -<translation id="3784184786832188702">নির্বাচন-টু-স্পিক এখন গ্লোবাল টেক্সট টু স্পিচ সেটিংস ব্যবহার করে।</translation> +<translation id="3784184786832188702">বাছুন ও শুনুন এখন গ্লোবাল টেক্সট টু স্পিচ সেটিংস ব্যবহার করে।</translation> <translation id="5901630391730855834">হলুদ</translation> <translation id="6017514345406065928">সবুজ</translation> <translation id="6475604559827479857">শব্দ হাইলাইট করার জন্য রং:</translation>
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fa.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fa.xtb index efe8076..06ed98d 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fa.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_fa.xtb
@@ -6,7 +6,7 @@ <translation id="1273314450961659276">تنظیمات نوشتار به گفتار</translation> <translation id="1498542103351704084">تنظیمات گفتار «انتخاب برای شنیدن» بهروزرسانی شد</translation> <translation id="1555130319947370107">آبی</translation> -<translation id="1666326070478924810">تنظیمات «انتخاب کنید تا بتوانید صحبت کنید»</translation> +<translation id="1666326070478924810">تنظیمات «انتخاب برای شنیدن»</translation> <translation id="1966649499058910679">وقتی کلمهای گفته میشود، برجسته شود</translation> <translation id="2089387485033699258">fa</translation> <translation id="2714180132046334502">پسزمینه تیره</translation> @@ -18,7 +18,7 @@ <translation id="6475604559827479857">رنگ برای برجسته کردن کلمه:</translation> <translation id="6837853484260746864">انتخاب صدا:</translation> <translation id="7261612856573623172">صدای سیستم نوشتار به گفتار</translation> -<translation id="7768784765476638775">انتخاب برای صحبت کردن</translation> +<translation id="7768784765476638775">انتخاب برای شنیدن</translation> <translation id="7914870167134465181">برجسته کردن</translation> <translation id="8324974933005349667">شخصی کردن تنظیمات «نوشتار به گفتار»</translation> <translation id="992256792861109788">صورتی</translation>
diff --git a/chrome/browser/resources/chromeos/switch_access/BUILD.gn b/chrome/browser/resources/chromeos/switch_access/BUILD.gn index 96141a8..edff3b0 100644 --- a/chrome/browser/resources/chromeos/switch_access/BUILD.gn +++ b/chrome/browser/resources/chromeos/switch_access/BUILD.gn
@@ -26,9 +26,11 @@ mode = "copy" dest_dir = switch_access_dir sources = [ + "../chromevox/cvox2/background/constants.js", + "../chromevox/cvox2/background/tree_walker.js", + "../select_to_speak/closure_shim.js", "auto_scan_manager.js", "automation_manager.js", - "automation_predicate.js", "background.js", "commands.js", "keyboard_handler.js", @@ -37,11 +39,13 @@ "options.js", "prefs.js", "switch_access.js", - "tree_walker.js", + "switch_access_predicate.js", ] rewrite_rules = [ rebase_path(".", root_build_dir) + ":", rebase_path(closure_library_dir, root_build_dir) + ":closure", + rebase_path("../chromevox/cvox2/background", root_build_dir) + ":", + rebase_path("../select_to_speak", root_build_dir) + ":", ] } @@ -56,14 +60,12 @@ test_type = "webui" sources = [ "auto_scan_manager_unittest.gtestjs", - "automation_predicate_unittest.gtestjs", - "tree_walker_unittest.gtestjs", + "switch_access_predicate_unittest.gtestjs", ] extra_js_files = [ "auto_scan_manager.js", - "automation_predicate.js", + "switch_access_predicate.js", "test_support.js", - "tree_walker.js", ] defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] } @@ -113,16 +115,18 @@ deps = [ ":auto_scan_manager", ":automation_manager", - ":automation_predicate", ":background", ":commands", ":keyboard_handler", ":options", ":prefs", + ":switch_access_predicate", + "../chromevox:constants", + "../chromevox:tree_walker", + "../select_to_speak:closure_shim", # ":switch_access", ":switch_access_interface", - ":tree_walker", ] } @@ -134,8 +138,9 @@ js_library("automation_manager") { deps = [ - ":automation_predicate", - ":tree_walker", + ":switch_access_predicate", + "../chromevox:constants", + "../chromevox:tree_walker", ] externs_list = [ "$externs_path/accessibility_private.js", @@ -143,7 +148,7 @@ ] } -js_library("automation_predicate") { +js_library("switch_access_predicate") { externs_list = [ "$externs_path/automation.js" ] } @@ -198,7 +203,3 @@ js_library("switch_access_interface") { } - -js_library("tree_walker") { - externs_list = [ "$externs_path/automation.js" ] -}
diff --git a/chrome/browser/resources/chromeos/switch_access/automation_manager.js b/chrome/browser/resources/chromeos/switch_access/automation_manager.js index 13975dd8..c2e5a26 100644 --- a/chrome/browser/resources/chromeos/switch_access/automation_manager.js +++ b/chrome/browser/resources/chromeos/switch_access/automation_manager.js
@@ -40,13 +40,6 @@ */ this.scopeStack_ = []; - /** - * Moves to the appropriate node in the accessibility tree. - * - * @private {!AutomationTreeWalker} - */ - this.treeWalker_ = this.createTreeWalker_(desktop); - this.init_(); } @@ -102,10 +95,9 @@ // Move to focused node. this.node_ = event.target; - this.treeWalker_ = this.createTreeWalker_(this.scope_, this.node_); // In case the node that gained focus is not a subtreeLeaf. - if (AutomationPredicate.isSubtreeLeaf(this.node_, this.scope_)) { + if (SwitchAccessPredicate.isSubtreeLeaf(this.node_, this.scope_)) { this.printNode_(this.node_); this.updateFocusRing_(); } else @@ -135,7 +127,7 @@ let ancestor = ancestorList.pop(); if (ancestor.role === chrome.automation.RoleType.DESKTOP) continue; - if (AutomationPredicate.isGroup(ancestor, this.scope_)) { + if (SwitchAccessPredicate.isGroup(ancestor, this.scope_)) { this.scopeStack_.push(this.scope_); this.scope_ = ancestor; } @@ -189,12 +181,24 @@ // If node is invalid, set node to last valid scope. this.startAtValidNode_(); - let node = this.treeWalker_.moveToNode(doNext); - if (node) { - this.node_ = node; - this.printNode_(this.node_); - this.updateFocusRing_(); + let treeWalker = new AutomationTreeWalker( + this.node_, doNext ? constants.Dir.FORWARD : constants.Dir.BACKWARD, + SwitchAccessPredicate.restrictions(this.scope_)); + + let node = treeWalker.next().node; + + // If treeWalker returns undefined, that means we're at the end of the tree + // and we should start over. + if (!node) { + if (doNext) + node = this.scope_; + else + node = this.youngestDescendant_(this.scope_); } + + this.node_ = node; + this.printNode_(this.node_); + this.updateFocusRing_(); }, /** @@ -220,17 +224,15 @@ this.scope_ = this.scopeStack_.pop(); } while (!this.scope_.role && this.scopeStack_.length > 0); - this.treeWalker_ = this.createTreeWalker_(this.scope_, this.node_); this.updateFocusRing_(); console.log('Moved to previous scope'); this.printNode_(this.node_); return; } - if (AutomationPredicate.isGroup(this.node_, this.scope_)) { + if (SwitchAccessPredicate.isGroup(this.node_, this.scope_)) { this.scopeStack_.push(this.scope_); this.scope_ = this.node_; - this.treeWalker_ = this.createTreeWalker_(this.scope_); console.log('Entered scope'); this.moveToNode(true); return; @@ -250,7 +252,7 @@ let color; if (this.node_ === this.scope_) color = AutomationManager.Color.SCOPE; - else if (AutomationPredicate.isGroup(this.node_, this.scope_)) + else if (SwitchAccessPredicate.isGroup(this.node_, this.scope_)) color = AutomationManager.Color.GROUP; else color = AutomationManager.Color.LEAF; @@ -281,36 +283,6 @@ this.node_ = this.scopeStack_.pop(); this.scope_ = this.node_; } - this.treeWalker_ = this.createTreeWalker_(this.scope_); - }, - - /** - * Create an AutomationTreeWalker for the subtree with |scope| as its root. - * If |opt_start| is defined, the tree walker will start walking the tree - * from |opt_start|; otherwise, it will start from |scope|. - * - * @param {!chrome.automation.AutomationNode} scope - * @param {!chrome.automation.AutomationNode=} opt_start - * @private - * @return {!AutomationTreeWalker} - */ - createTreeWalker_: function(scope, opt_start) { - // If no explicit start node, start walking the tree from |scope|. - let start = opt_start || scope; - - let leafPred = function(node) { - return (node !== scope && - AutomationPredicate.isSubtreeLeaf(node, scope)) || - !AutomationPredicate.isInterestingSubtree(node); - }; - let visitPred = function(node) { - // Avoid visiting the top-level root node (i.e., the desktop node). - return node !== this.desktop_ && - AutomationPredicate.isSubtreeLeaf(node, scope); - }.bind(this); - - let restrictions = {leaf: leafPred, visit: visitPred}; - return new AutomationTreeWalker(start, scope, restrictions); }, // TODO(elichtenberg): Move print functions to a custom logger class. Only @@ -343,50 +315,19 @@ }, /** - * Move to the next sibling of this.node_ if it has one. + * Get the youngest descendant of |node|, if it has one within the current + * scope. + * + * @param {!chrome.automation.AutomationNode} node + * @return {!chrome.automation.AutomationNode} + * @private */ - debugMoveToNext: function() { - let next = this.treeWalker_.debugMoveToNext(this.node_); - if (next) { - this.node_ = next; - this.printNode_(this.node_); - chrome.accessibilityPrivate.setFocusRing([this.node_.location]); - } - }, + youngestDescendant_: function(node) { + let leaf = SwitchAccessPredicate.leaf(this.scope_); - /** - * Move to the previous sibling of this.node_ if it has one. - */ - debugMoveToPrevious: function() { - let prev = this.treeWalker_.debugMoveToPrevious(this.node_); - if (prev) { - this.node_ = prev; - this.printNode_(this.node_); - chrome.accessibilityPrivate.setFocusRing([this.node_.location]); - } - }, + while (node.lastChild && !leaf(node)) + node = node.lastChild; - /** - * Move to the first child of this.node_ if it has one. - */ - debugMoveToFirstChild: function() { - let child = this.treeWalker_.debugMoveToFirstChild(this.node_); - if (child) { - this.node_ = child; - this.printNode_(this.node_); - chrome.accessibilityPrivate.setFocusRing([this.node_.location]); - } - }, - - /** - * Move to the parent of this.node_ if it has one. - */ - debugMoveToParent: function() { - let parent = this.treeWalker_.debugMoveToParent(this.node_); - if (parent) { - this.node_ = parent; - this.printNode_(this.node_); - chrome.accessibilityPrivate.setFocusRing([this.node_.location]); - } + return node; } };
diff --git a/chrome/browser/resources/chromeos/switch_access/automation_predicate.js b/chrome/browser/resources/chromeos/switch_access/automation_predicate.js deleted file mode 100644 index 7b4bdf2..0000000 --- a/chrome/browser/resources/chromeos/switch_access/automation_predicate.js +++ /dev/null
@@ -1,125 +0,0 @@ -// Copyright 2017 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. - -/** - * Class containing predicates for the chrome automation API. Each predicate - * can be run on one or more AutomationNodes and returns a boolean value. - * - * @constructor - */ -function AutomationPredicate() {} - -/** - * Returns true if |node| is a subtreeLeaf, meaning that |node| is either - * interesting or a group (both defined below). - * - * @param {!chrome.automation.AutomationNode} node - * @param {!chrome.automation.AutomationNode} scope - * @return {boolean} - */ -AutomationPredicate.isSubtreeLeaf = function(node, scope) { - return AutomationPredicate.isActionable(node) || - AutomationPredicate.isGroup(node, scope); -}; - -/** - * Returns true if |node| is a group, meaning that the node has more than one - * interesting descendant, and that its interesting descendants exist in more - * than one subtree of its immediate children. - * - * Additionally, for |node| to be a group, it cannot have the same bounding - * box as its scope. - * - * @param {!chrome.automation.AutomationNode} node - * @param {!chrome.automation.AutomationNode} scope - * @return {boolean} - */ -AutomationPredicate.isGroup = function(node, scope) { - if (node !== scope && AutomationPredicate.hasSameLocation_(node, scope)) - return false; - - // Work around for client nested in client. No need to have user select both - // clients for a window. Once locations for outer client updates correctly, - // this won't be needed. - if (node.role === chrome.automation.RoleType.CLIENT && - node.role === scope.role && node !== scope) - return false; - - let interestingBranches = 0; - let children = node.children || []; - for (let child of children) { - if (AutomationPredicate.isInterestingSubtree(child)) - interestingBranches += 1; - if (interestingBranches > 1) - return true; - } - return false; -}; - -/** - * Returns true if the two nodes have the same location. - * - * @param {!chrome.automation.AutomationNode} node1 - * @param {!chrome.automation.AutomationNode} node2 - * @return {boolean} - */ -AutomationPredicate.hasSameLocation_ = function(node1, node2) { - let l1 = node1.location; - let l2 = node2.location; - return l1.left === l2.left && l1.top === l2.top && l1.width === l2.width && - l1.height === l2.height; -}; - -/** - * Returns true if there is an interesting node in the subtree containing - * |node| as its root (including |node| itself). - * - * @param {!chrome.automation.AutomationNode} node - * @return {boolean} - */ -AutomationPredicate.isInterestingSubtree = function(node) { - let children = node.children || []; - return AutomationPredicate.isActionable(node) || - children.some(AutomationPredicate.isInterestingSubtree); -}; - -/** - * Returns true if |node| is interesting, meaning that a user can perform some - * type of action on it. - * - * @param {!chrome.automation.AutomationNode} node - * @return {boolean} - */ -AutomationPredicate.isActionable = function(node) { - let loc = node.location; - let parent = node.parent; - let root = node.root; - let role = node.role; - let state = node.state; - - // TODO(elichtenberg): Define shorthand for chrome.automation.RoleType and - // StateType. - - // Skip things that are offscreen - if (state[chrome.automation.StateType.OFFSCREEN] || loc.top < 0 || - loc.left < 0) - return false; - - // Should just leave these as groups - if (role === chrome.automation.RoleType.WEB_VIEW || - role === chrome.automation.RoleType.ROOT_WEB_AREA) - return false; - - if (parent) { - // crbug.com/710559 - // Work around for browser tabs - if (role === chrome.automation.RoleType.TAB && - parent.role === chrome.automation.RoleType.TAB_LIST && - root.role === chrome.automation.RoleType.DESKTOP) - return true; - } - - // The general rule that applies to everything. - return state[chrome.automation.StateType.FOCUSABLE] === true; -};
diff --git a/chrome/browser/resources/chromeos/switch_access/automation_predicate_unittest.gtestjs b/chrome/browser/resources/chromeos/switch_access/automation_predicate_unittest.gtestjs deleted file mode 100644 index 891b55e4..0000000 --- a/chrome/browser/resources/chromeos/switch_access/automation_predicate_unittest.gtestjs +++ /dev/null
@@ -1,196 +0,0 @@ -// Copyright 2017 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. - -/** - * Test fixture for automation_predicate.js. - * @constructor - * @extends {testing.Test} - */ -function AutomationPredicateUnitTest () { - testing.Test.call(this); -}; - -AutomationPredicateUnitTest.prototype = { - __proto__: testing.Test.prototype, - - /** @override */ - extraLibraries: [ - 'automation_predicate.js', - 'test_support.js' - ], - - /** @override */ - browsePreload: DUMMY_URL, - - /** @override */ - setUp: function() { - chrome.automation = { - RoleType: { - CLIENT: 'client', DESKTOP: 'desktop', ROOT_WEB_AREA: 'rootWebArea', - TAB: 'tab', TAB_LIST: 'tabList', WEB_VIEW: 'webView' - }, - StateType: {FOCUSABLE: 'focusable', OFFSCREEN: 'offscreen'} - }; - }, - - fakeLoc: function(x) { - return {left: x, top: x, width: x, height: x}; - }, - - getSampleTree: function() { - // - = interesting, (g) = group - // root (g) - // upper1 (g) - // lower1 (g) - // leaf1 - - // leaf2 - // leaf3 - - // lower2 - // leaf4 - // leaf5 - - // upper2 - - // lower3 - // leaf6 - // leaf7 - let root = {location: this.fakeLoc(0), state: {}}; - let upper1 = {location: this.fakeLoc(1), state: {}}; - let upper2 = {location: this.fakeLoc(2), state: {focusable: true}}; - let lower1 = {location: this.fakeLoc(3), state: {}}; - let lower2 = {location: this.fakeLoc(4), state: {}}; - let lower3 = {location: this.fakeLoc(5), state: {}}; - let leaf1 = {location: this.fakeLoc(6), state: {focusable: true}}; - let leaf2 = {location: this.fakeLoc(7), state: {}}; - let leaf3 = {location: this.fakeLoc(8), state: {focusable: true}}; - let leaf4 = {location: this.fakeLoc(9), state: {}}; - let leaf5 = {location: this.fakeLoc(10), state: {focusable: true}}; - let leaf6 = {location: this.fakeLoc(11), state: {}}; - let leaf7 = {location: this.fakeLoc(12), state: {}}; - - let ts = new TestSupport(); - ts.setChildren(root, [upper1, upper2]); - ts.setChildren(upper1, [lower1, lower2]); - ts.setChildren(upper2, [lower3]); - ts.setChildren(lower1, [leaf1, leaf2, leaf3]); - ts.setChildren(lower2, [leaf4, leaf5]); - ts.setChildren(lower3, [leaf6, leaf7]); - - return { - root: root, - upper1: upper1, - upper2: upper2, - lower1: lower1, - lower2: lower2, - lower3: lower3, - leaf1: leaf1, - leaf2: leaf2, - leaf3: leaf3, - leaf4: leaf4, - leaf5: leaf5, - leaf6: leaf6, - leaf7: leaf7, - }; - }, -}; - -TEST_F('AutomationPredicateUnitTest', 'IsSubtreeLeaf', function() { - let t = this.getSampleTree(); - - // Make t.leaf6 and t.leaf7 interesting. t.lower3 becomes a group. - t.leaf6.state = {focusable: true}; - t.leaf7.state = {focusable: true}; - - assertTrue(AutomationPredicate.isSubtreeLeaf(t.root, t.root)); - assertTrue(AutomationPredicate.isSubtreeLeaf(t.upper1, t.root)); - assertTrue(AutomationPredicate.isSubtreeLeaf(t.upper2, t.root)); - assertTrue(AutomationPredicate.isSubtreeLeaf(t.lower1, t.upper1)); - assertFalse(AutomationPredicate.isSubtreeLeaf(t.lower2, t.upper1)); - assertTrue(AutomationPredicate.isSubtreeLeaf(t.lower3, t.root)); - assertTrue(AutomationPredicate.isSubtreeLeaf(t.leaf1, t.lower1)); - assertFalse(AutomationPredicate.isSubtreeLeaf(t.leaf2, t.lower1)); - assertTrue(AutomationPredicate.isSubtreeLeaf(t.leaf3, t.lower1)); - assertFalse(AutomationPredicate.isSubtreeLeaf(t.leaf4, t.upper1)); - assertTrue(AutomationPredicate.isSubtreeLeaf(t.leaf5, t.upper1)); - assertTrue(AutomationPredicate.isSubtreeLeaf(t.leaf6, t.lower3)); - assertTrue(AutomationPredicate.isSubtreeLeaf(t.leaf7, t.lower3)); -}); - -TEST_F('AutomationPredicateUnitTest', 'IsGroup', function() { - let t = this.getSampleTree(); - - // Make t.leaf6 and t.leaf7 interesting. t.lower3 becomes a group. - t.leaf6.state = {focusable: true}; - t.leaf7.state = {focusable: true}; - - assertTrue(AutomationPredicate.isGroup(t.root, t.root)); - assertTrue(AutomationPredicate.isGroup(t.upper1, t.root)); - assertFalse(AutomationPredicate.isGroup(t.upper2, t.root)); - assertTrue(AutomationPredicate.isGroup(t.lower1, t.upper1)); - assertFalse(AutomationPredicate.isGroup(t.lower2, t.upper1)); - assertTrue(AutomationPredicate.isGroup(t.lower3, t.root)); - assertFalse(AutomationPredicate.isGroup(t.leaf1, t.lower1)); - assertFalse(AutomationPredicate.isGroup(t.leaf2, t.lower1)); - assertFalse(AutomationPredicate.isGroup(t.leaf3, t.lower1)); - assertFalse(AutomationPredicate.isGroup(t.leaf4, t.upper1)); - assertFalse(AutomationPredicate.isGroup(t.leaf5, t.upper1)); - assertFalse(AutomationPredicate.isGroup(t.leaf6, t.lower3)); - assertFalse(AutomationPredicate.isGroup(t.leaf7, t.lower3)); - - // Set location of t.upper1 to equal location of t.root - t.upper1.location = this.fakeLoc(0); - assertFalse(AutomationPredicate.isGroup(t.upper1, t.root)); -}); - -TEST_F('AutomationPredicateUnitTest', 'IsInterestingSubtree', function() { - let t = this.getSampleTree(); - - assertTrue(AutomationPredicate.isInterestingSubtree(t.root)); - assertTrue(AutomationPredicate.isInterestingSubtree(t.upper1)); - assertTrue(AutomationPredicate.isInterestingSubtree(t.upper2)); - assertTrue(AutomationPredicate.isInterestingSubtree(t.lower1)); - assertTrue(AutomationPredicate.isInterestingSubtree(t.lower2)); - assertFalse(AutomationPredicate.isInterestingSubtree(t.lower3)); - assertTrue(AutomationPredicate.isInterestingSubtree(t.leaf1)); - assertFalse(AutomationPredicate.isInterestingSubtree(t.leaf2)); - assertTrue(AutomationPredicate.isInterestingSubtree(t.leaf3)); - assertFalse(AutomationPredicate.isInterestingSubtree(t.leaf4)); - assertTrue(AutomationPredicate.isInterestingSubtree(t.leaf5)); - assertFalse(AutomationPredicate.isInterestingSubtree(t.leaf6)); - assertFalse(AutomationPredicate.isInterestingSubtree(t.leaf7)); -}); - -TEST_F('AutomationPredicateUnitTest', 'IsInteresting', function() { - // Testing focusable. - let loc1 = {left: 0, top: 0, width: 0, height: 0}; - let node1 = {location: loc1, state: {}}; - let node2 = {location: loc1, state: {focusable: false}}; - let node3 = {location: loc1, state: {focusable: true}}; - assertFalse(AutomationPredicate.isActionable(node1)); - assertFalse(AutomationPredicate.isActionable(node2)); - assertTrue(AutomationPredicate.isActionable(node3)); - - // Testing onscreen. - let loc2 = {left: -1, top: 0, width: 0, height: 0}; - let loc3 = {left: 0, top: -1, width: 0, height: 0}; - let node4 = {location: loc2, state: {focusable: true}}; - let node5 = {location: loc3, state: {focusable: true}}; - let node6 = {location: loc1, state: {focusable: true, offscreen: true}} - assertFalse(AutomationPredicate.isActionable(node4)); - assertFalse(AutomationPredicate.isActionable(node5)); - assertFalse(AutomationPredicate.isActionable(node6)); - - // Testing if tab. - let node7 = {location: loc1, role: 'desktop', state: {}}; - let node8 = {location: loc1, role: 'tabList', state: {}}; - let node9 = - {location: loc1, parent: node8, root: node7, role: 'tab', state: {}}; - assertFalse(AutomationPredicate.isActionable(node7)); - assertFalse(AutomationPredicate.isActionable(node8)); - assertTrue(AutomationPredicate.isActionable(node9)); - - // Testing if webView or rootWebArea. - let node10 = {location: loc1, role: 'webView', state: {focusable: true}}; - let node11 = {location: loc1, role: 'rootWebArea', state: {focusable: true}}; - assertFalse(AutomationPredicate.isActionable(node10)); - assertFalse(AutomationPredicate.isActionable(node11)); -});
diff --git a/chrome/browser/resources/chromeos/switch_access/commands.js b/chrome/browser/resources/chromeos/switch_access/commands.js index b8e2d617..1484db1 100644 --- a/chrome/browser/resources/chromeos/switch_access/commands.js +++ b/chrome/browser/resources/chromeos/switch_access/commands.js
@@ -78,24 +78,6 @@ 'options': { 'defaultKeyCode': 52, /* '4' key */ 'binding': this.switchAccess_.showOptionsPage.bind(this.switchAccess_) - }, - 'debugNext': { - 'defaultKeyCode': -1, /* unused key */ - 'binding': this.switchAccess_.debugMoveToNext.bind(this.switchAccess_) - }, - 'debugPrevious': { - 'defaultKeyCode': -1, /* unused key */ - 'binding': - this.switchAccess_.debugMoveToPrevious.bind(this.switchAccess_) - }, - 'debugChild': { - 'defaultKeyCode': -1, /* unused key */ - 'binding': - this.switchAccess_.debugMoveToFirstChild.bind(this.switchAccess_) - }, - 'debugParent': { - 'defaultKeyCode': -1, /* unused key */ - 'binding': this.switchAccess_.debugMoveToParent.bind(this.switchAccess_) } }; }
diff --git a/chrome/browser/resources/chromeos/switch_access/manifest.json.jinja2 b/chrome/browser/resources/chromeos/switch_access/manifest.json.jinja2 index 6c3c15b..c03ddfa 100644 --- a/chrome/browser/resources/chromeos/switch_access/manifest.json.jinja2 +++ b/chrome/browser/resources/chromeos/switch_access/manifest.json.jinja2
@@ -13,8 +13,10 @@ "scripts": [ "auto_scan_manager.js", "automation_manager.js", - "automation_predicate.js", + "switch_access_predicate.js", + "closure_shim.js", "commands.js", + "constants.js", "keyboard_handler.js", "prefs.js", "switch_access.js",
diff --git a/chrome/browser/resources/chromeos/switch_access/switch_access.js b/chrome/browser/resources/chromeos/switch_access/switch_access.js index c32af33..65c14a39 100644 --- a/chrome/browser/resources/chromeos/switch_access/switch_access.js +++ b/chrome/browser/resources/chromeos/switch_access/switch_access.js
@@ -224,45 +224,5 @@ */ keyCodeIsUsed: function(keyCode) { return this.switchAccessPrefs_.keyCodeIsUsed(keyCode); - }, - - /** - * Move to the next sibling of the current node if it has one. - * - * @override - */ - debugMoveToNext: function() { - if (this.automationManager_) - this.automationManager_.debugMoveToNext(); - }, - - /** - * Move to the previous sibling of the current node if it has one. - * - * @override - */ - debugMoveToPrevious: function() { - if (this.automationManager_) - this.automationManager_.debugMoveToPrevious(); - }, - - /** - * Move to the first child of the current node if it has one. - * - * @override - */ - debugMoveToFirstChild: function() { - if (this.automationManager_) - this.automationManager_.debugMoveToFirstChild(); - }, - - /** - * Move to the parent of the current node if it has one. - * - * @override - */ - debugMoveToParent: function() { - if (this.automationManager_) - this.automationManager_.debugMoveToParent(); } };
diff --git a/chrome/browser/resources/chromeos/switch_access/switch_access_interface.js b/chrome/browser/resources/chromeos/switch_access/switch_access_interface.js index 27413ed..558d393 100644 --- a/chrome/browser/resources/chromeos/switch_access/switch_access_interface.js +++ b/chrome/browser/resources/chromeos/switch_access/switch_access_interface.js
@@ -99,25 +99,5 @@ * @param {number} keyCode * @return {boolean} */ - keyCodeIsUsed: function(keyCode) {}, - - /** - * Move to the next sibling of the current node if it has one. - */ - debugMoveToNext: function() {}, - - /** - * Move to the previous sibling of the current node if it has one. - */ - debugMoveToPrevious: function() {}, - - /** - * Move to the first child of the current node if it has one. - */ - debugMoveToFirstChild: function() {}, - - /** - * Move to the parent of the current node if it has one. - */ - debugMoveToParent: function() {} + keyCodeIsUsed: function(keyCode) {} };
diff --git a/chrome/browser/resources/chromeos/switch_access/switch_access_predicate.js b/chrome/browser/resources/chromeos/switch_access/switch_access_predicate.js new file mode 100644 index 0000000..319a2a8 --- /dev/null +++ b/chrome/browser/resources/chromeos/switch_access/switch_access_predicate.js
@@ -0,0 +1,181 @@ +// Copyright 2017 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. + +/** + * Class containing predicates for the chrome automation API. Each predicate + * can be run on one or more AutomationNodes and returns a boolean value. + * + * @constructor + */ +function SwitchAccessPredicate() {} + +/** + * Returns a Restrictions object ready to be passed to AutomationTreeWalker. + * + * @param {!chrome.automation.AutomationNode} scope + * @return {!AutomationTreeWalkerRestriction} + */ +SwitchAccessPredicate.restrictions = function(scope) { + return { + leaf: SwitchAccessPredicate.leaf(scope), + root: SwitchAccessPredicate.root(scope), + visit: SwitchAccessPredicate.visit(scope) + }; +}; + +/** + * Creates a function that confirms if |node| is a terminal leaf node of a + * SwitchAccess scope tree when |scope| is the root. + * + * @param {!chrome.automation.AutomationNode} scope + * @return {function(!chrome.automation.AutomationNode): boolean} + */ +SwitchAccessPredicate.leaf = function(scope) { + return function(node) { + return (node !== scope && + SwitchAccessPredicate.isSubtreeLeaf(node, scope)) || + !SwitchAccessPredicate.isInterestingSubtree(node); + }.bind(scope); +}; + +/** + * Creates a function that confirms if |node| is the root of a SwitchAccess + * scope tree when |scope| is the root. + * + * @param {!chrome.automation.AutomationNode} scope + * @return {function(!chrome.automation.AutomationNode): boolean} + */ +SwitchAccessPredicate.root = function(scope) { + return function(node) { + return node === scope; + }.bind(scope); +}; + +/** + * Creates a function that determines whether |node| is to be visited in the + * SwitchAccess scope tree with |scope| as the root. + * + * @param {!chrome.automation.AutomationNode} scope + * @return {function(!chrome.automation.AutomationNode): boolean} + */ +SwitchAccessPredicate.visit = function(scope) { + return function(node) { + return node.role !== chrome.automation.RoleType.DESKTOP && + SwitchAccessPredicate.isSubtreeLeaf(node, scope); + }.bind(scope); +}; + +/** + * Returns true if |node| is a subtreeLeaf, meaning that |node| + * is either interesting or a group (both defined below). + * + * @param {!chrome.automation.AutomationNode} node + * @param {!chrome.automation.AutomationNode} scope + * @return {boolean} + */ +SwitchAccessPredicate.isSubtreeLeaf = function(node, scope) { + return SwitchAccessPredicate.isActionable(node) || + SwitchAccessPredicate.isGroup(node, scope); +}; + +/** + * Returns true if |node| is a group, meaning that the node has more than one + * interesting descendant, and that its interesting descendants exist in more + * than one subtree of its immediate children. + * + * Additionally, for |node| to be a group, it cannot have the same bounding + * box as its scope. + * + * @param {!chrome.automation.AutomationNode} node + * @param {!chrome.automation.AutomationNode} scope + * @return {boolean} + */ +SwitchAccessPredicate.isGroup = function(node, scope) { + if (node !== scope && SwitchAccessPredicate.hasSameLocation_(node, scope)) + return false; + + // Work around for client nested in client. No need to have user select both + // clients for a window. Once locations for outer client updates correctly, + // this won't be needed. + if (node.role === chrome.automation.RoleType.CLIENT && + node.role === scope.role && node !== scope) + return false; + + let interestingBranches = 0; + let children = node.children || []; + for (let child of children) { + if (SwitchAccessPredicate.isInterestingSubtree(child)) + interestingBranches += 1; + if (interestingBranches > 1) + return true; + } + return false; +}; + +/** + * Returns true if the two nodes have the same location. + * + * @param {!chrome.automation.AutomationNode} node1 + * @param {!chrome.automation.AutomationNode} node2 + * @return {boolean} + */ +SwitchAccessPredicate.hasSameLocation_ = function(node1, node2) { + let l1 = node1.location; + let l2 = node2.location; + return l1.left === l2.left && l1.top === l2.top && l1.width === l2.width && + l1.height === l2.height; +}; + +/** + * Returns true if there is an interesting node in the subtree containing + * |node| as its root (including |node| itself). + * + * @param {!chrome.automation.AutomationNode} node + * @return {boolean} + */ +SwitchAccessPredicate.isInterestingSubtree = function(node) { + let children = node.children || []; + return SwitchAccessPredicate.isActionable(node) || + children.some(SwitchAccessPredicate.isInterestingSubtree); +}; + +/** + * Returns true if |node| is interesting, meaning that a user can perform some + * type of action on it. + * + * @param {!chrome.automation.AutomationNode} node + * @return {boolean} + */ +SwitchAccessPredicate.isActionable = function(node) { + let loc = node.location; + let parent = node.parent; + let root = node.root; + let role = node.role; + let state = node.state; + + // TODO(elichtenberg): Define shorthand for chrome.automation.RoleType and + // StateType. + + // Skip things that are offscreen + if (state[chrome.automation.StateType.OFFSCREEN] || loc.top < 0 || + loc.left < 0) + return false; + + // Should just leave these as groups + if (role === chrome.automation.RoleType.WEB_VIEW || + role === chrome.automation.RoleType.ROOT_WEB_AREA) + return false; + + if (parent) { + // crbug.com/710559 + // Work around for browser tabs + if (role === chrome.automation.RoleType.TAB && + parent.role === chrome.automation.RoleType.TAB_LIST && + root.role === chrome.automation.RoleType.DESKTOP) + return true; + } + + // The general rule that applies to everything. + return state[chrome.automation.StateType.FOCUSABLE] === true; +};
diff --git a/chrome/browser/resources/chromeos/switch_access/switch_access_predicate_unittest.gtestjs b/chrome/browser/resources/chromeos/switch_access/switch_access_predicate_unittest.gtestjs new file mode 100644 index 0000000..9c0d19b --- /dev/null +++ b/chrome/browser/resources/chromeos/switch_access/switch_access_predicate_unittest.gtestjs
@@ -0,0 +1,282 @@ +// Copyright 2017 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. + +/** + * Test fixture for switch_access_predicate.js. + * @constructor + * @extends {testing.Test} + */ +function SwitchAccessPredicateUnitTest () { + testing.Test.call(this); +}; + +SwitchAccessPredicateUnitTest.prototype = { + __proto__: testing.Test.prototype, + + /** @override */ + extraLibraries: [ + 'switch_access_predicate.js', + 'test_support.js' + ], + + /** @override */ + browsePreload: DUMMY_URL, + + /** @override */ + setUp: function() { + chrome.automation = { + RoleType: { + CLIENT: 'client', DESKTOP: 'desktop', ROOT_WEB_AREA: 'rootWebArea', + TAB: 'tab', TAB_LIST: 'tabList', WEB_VIEW: 'webView' + }, + StateType: {FOCUSABLE: 'focusable', OFFSCREEN: 'offscreen'} + }; + }, + + fakeLoc: function(x) { + return {left: x, top: x, width: x, height: x}; + }, + + getSampleTree: function() { + // - = interesting, (g) = group + // root (g) + // upper1 (g) + // lower1 (g) + // leaf1 - + // leaf2 + // leaf3 - + // lower2 + // leaf4 + // leaf5 - + // upper2 - + // lower3 + // leaf6 + // leaf7 + let root = {location: this.fakeLoc(0), state: {}}; + let upper1 = {location: this.fakeLoc(1), state: {}}; + let upper2 = {location: this.fakeLoc(2), state: {focusable: true}}; + let lower1 = {location: this.fakeLoc(3), state: {}}; + let lower2 = {location: this.fakeLoc(4), state: {}}; + let lower3 = {location: this.fakeLoc(5), state: {}}; + let leaf1 = {location: this.fakeLoc(6), state: {focusable: true}}; + let leaf2 = {location: this.fakeLoc(7), state: {}}; + let leaf3 = {location: this.fakeLoc(8), state: {focusable: true}}; + let leaf4 = {location: this.fakeLoc(9), state: {}}; + let leaf5 = {location: this.fakeLoc(10), state: {focusable: true}}; + let leaf6 = {location: this.fakeLoc(11), state: {}}; + let leaf7 = {location: this.fakeLoc(12), state: {}}; + + let ts = new TestSupport(); + ts.setChildren(root, [upper1, upper2]); + ts.setChildren(upper1, [lower1, lower2]); + ts.setChildren(upper2, [lower3]); + ts.setChildren(lower1, [leaf1, leaf2, leaf3]); + ts.setChildren(lower2, [leaf4, leaf5]); + ts.setChildren(lower3, [leaf6, leaf7]); + + return { + root: root, + upper1: upper1, + upper2: upper2, + lower1: lower1, + lower2: lower2, + lower3: lower3, + leaf1: leaf1, + leaf2: leaf2, + leaf3: leaf3, + leaf4: leaf4, + leaf5: leaf5, + leaf6: leaf6, + leaf7: leaf7, + }; + }, +}; + +TEST_F('SwitchAccessPredicateUnitTest', 'IsSubtreeLeaf', function() { + let t = this.getSampleTree(); + + // Make t.leaf6 and t.leaf7 interesting. t.lower3 becomes a group. + t.leaf6.state = {focusable: true}; + t.leaf7.state = {focusable: true}; + + assertTrue(SwitchAccessPredicate.isSubtreeLeaf(t.root, t.root)); + assertTrue(SwitchAccessPredicate.isSubtreeLeaf(t.upper1, t.root)); + assertTrue(SwitchAccessPredicate.isSubtreeLeaf(t.upper2, t.root)); + assertTrue(SwitchAccessPredicate.isSubtreeLeaf(t.lower1, t.upper1)); + assertFalse(SwitchAccessPredicate.isSubtreeLeaf(t.lower2, t.upper1)); + assertTrue(SwitchAccessPredicate.isSubtreeLeaf(t.lower3, t.root)); + assertTrue(SwitchAccessPredicate.isSubtreeLeaf(t.leaf1, t.lower1)); + assertFalse(SwitchAccessPredicate.isSubtreeLeaf(t.leaf2, t.lower1)); + assertTrue(SwitchAccessPredicate.isSubtreeLeaf(t.leaf3, t.lower1)); + assertFalse(SwitchAccessPredicate.isSubtreeLeaf(t.leaf4, t.upper1)); + assertTrue(SwitchAccessPredicate.isSubtreeLeaf(t.leaf5, t.upper1)); + assertTrue(SwitchAccessPredicate.isSubtreeLeaf(t.leaf6, t.lower3)); + assertTrue(SwitchAccessPredicate.isSubtreeLeaf(t.leaf7, t.lower3)); +}); + +TEST_F('SwitchAccessPredicateUnitTest', 'IsGroup', function() { + let t = this.getSampleTree(); + + // Make t.leaf6 and t.leaf7 interesting. t.lower3 becomes a group. + t.leaf6.state = {focusable: true}; + t.leaf7.state = {focusable: true}; + + assertTrue(SwitchAccessPredicate.isGroup(t.root, t.root)); + assertTrue(SwitchAccessPredicate.isGroup(t.upper1, t.root)); + assertFalse(SwitchAccessPredicate.isGroup(t.upper2, t.root)); + assertTrue(SwitchAccessPredicate.isGroup(t.lower1, t.upper1)); + assertFalse(SwitchAccessPredicate.isGroup(t.lower2, t.upper1)); + assertTrue(SwitchAccessPredicate.isGroup(t.lower3, t.root)); + assertFalse(SwitchAccessPredicate.isGroup(t.leaf1, t.lower1)); + assertFalse(SwitchAccessPredicate.isGroup(t.leaf2, t.lower1)); + assertFalse(SwitchAccessPredicate.isGroup(t.leaf3, t.lower1)); + assertFalse(SwitchAccessPredicate.isGroup(t.leaf4, t.upper1)); + assertFalse(SwitchAccessPredicate.isGroup(t.leaf5, t.upper1)); + assertFalse(SwitchAccessPredicate.isGroup(t.leaf6, t.lower3)); + assertFalse(SwitchAccessPredicate.isGroup(t.leaf7, t.lower3)); + + // Set location of t.upper1 to equal location of t.root + t.upper1.location = this.fakeLoc(0); + assertFalse(SwitchAccessPredicate.isGroup(t.upper1, t.root)); +}); + +TEST_F('SwitchAccessPredicateUnitTest', 'IsInterestingSubtree', function() { + let t = this.getSampleTree(); + + assertTrue(SwitchAccessPredicate.isInterestingSubtree(t.root)); + assertTrue(SwitchAccessPredicate.isInterestingSubtree(t.upper1)); + assertTrue(SwitchAccessPredicate.isInterestingSubtree(t.upper2)); + assertTrue(SwitchAccessPredicate.isInterestingSubtree(t.lower1)); + assertTrue(SwitchAccessPredicate.isInterestingSubtree(t.lower2)); + assertFalse(SwitchAccessPredicate.isInterestingSubtree(t.lower3)); + assertTrue(SwitchAccessPredicate.isInterestingSubtree(t.leaf1)); + assertFalse(SwitchAccessPredicate.isInterestingSubtree(t.leaf2)); + assertTrue(SwitchAccessPredicate.isInterestingSubtree(t.leaf3)); + assertFalse(SwitchAccessPredicate.isInterestingSubtree(t.leaf4)); + assertTrue(SwitchAccessPredicate.isInterestingSubtree(t.leaf5)); + assertFalse(SwitchAccessPredicate.isInterestingSubtree(t.leaf6)); + assertFalse(SwitchAccessPredicate.isInterestingSubtree(t.leaf7)); +}); + +TEST_F('SwitchAccessPredicateUnitTest', 'IsInteresting', function() { + // Testing focusable. + let loc1 = {left: 0, top: 0, width: 0, height: 0}; + let node1 = {location: loc1, state: {}}; + let node2 = {location: loc1, state: {focusable: false}}; + let node3 = {location: loc1, state: {focusable: true}}; + assertFalse(SwitchAccessPredicate.isActionable(node1)); + assertFalse(SwitchAccessPredicate.isActionable(node2)); + assertTrue(SwitchAccessPredicate.isActionable(node3)); + + // Testing onscreen. + let loc2 = {left: -1, top: 0, width: 0, height: 0}; + let loc3 = {left: 0, top: -1, width: 0, height: 0}; + let node4 = {location: loc2, state: {focusable: true}}; + let node5 = {location: loc3, state: {focusable: true}}; + let node6 = {location: loc1, state: {focusable: true, offscreen: true}} + assertFalse(SwitchAccessPredicate.isActionable(node4)); + assertFalse(SwitchAccessPredicate.isActionable(node5)); + assertFalse(SwitchAccessPredicate.isActionable(node6)); + + // Testing if tab. + let node7 = {location: loc1, role: 'desktop', state: {}}; + let node8 = {location: loc1, role: 'tabList', state: {}}; + let node9 = + {location: loc1, parent: node8, root: node7, role: 'tab', state: {}}; + assertFalse(SwitchAccessPredicate.isActionable(node7)); + assertFalse(SwitchAccessPredicate.isActionable(node8)); + assertTrue(SwitchAccessPredicate.isActionable(node9)); + + // Testing if webView or rootWebArea. + let node10 = {location: loc1, role: 'webView', state: {focusable: true}}; + let node11 = {location: loc1, role: 'rootWebArea', state: {focusable: true}}; + assertFalse(SwitchAccessPredicate.isActionable(node10)); + assertFalse(SwitchAccessPredicate.isActionable(node11)); +}); + +TEST_F('SwitchAccessPredicateUnitTest', 'LeafPredicate', function() { + let t = this.getSampleTree(); + + // Start with root as scope + let leaf = SwitchAccessPredicate.leaf(t.root); + + assertFalse(leaf(t.root)); + assertTrue(leaf(t.upper1)); + assertTrue(leaf(t.upper2)); + + // upper 1 as scope + leaf = SwitchAccessPredicate.leaf(t.upper1); + + assertFalse(leaf(t.upper1)); + assertTrue(leaf(t.lower1)); + assertTrue(leaf(t.leaf4)); + assertTrue(leaf(t.leaf5)); + + // lower 1 as scope + leaf = SwitchAccessPredicate.leaf(t.lower1); + + assertFalse(leaf(t.lower1)); + assertTrue(leaf(t.leaf1)); + assertTrue(leaf(t.leaf2)); + assertTrue(leaf(t.leaf3)); +}); + +TEST_F('SwitchAccessPredicateUnitTest', 'RootPredicate', function() { + let t = this.getSampleTree(); + + // Start with root as scope + let root = SwitchAccessPredicate.root(t.root); + + assertTrue(root(t.root)); + assertFalse(root(t.upper1)); + assertFalse(root(t.upper2)); + + // upper 1 as scope + root = SwitchAccessPredicate.root(t.upper1); + + assertTrue(root(t.upper1)); + assertFalse(root(t.lower1)); + assertFalse(root(t.lower2)); + + // lower 1 as scope + root = SwitchAccessPredicate.root(t.lower1); + + assertTrue(root(t.lower1)); + assertFalse(root(t.leaf1)); + assertFalse(root(t.leaf2)); + assertFalse(root(t.leaf3)); +}); + +TEST_F('SwitchAccessPredicateUnitTest', 'VisitPredicate', function() { + let t = this.getSampleTree(); + + // root as scope + let visit = SwitchAccessPredicate.visit(t.root); + + assertTrue(visit(t.root)); + assertTrue(visit(t.upper1)); + assertTrue(visit(t.upper2)); + + // upper1 as scope + visit = SwitchAccessPredicate.visit(t.upper1); + + assertTrue(visit(t.upper1)); + assertTrue(visit(t.lower1)); + assertFalse(visit(t.lower2)); + assertFalse(visit(t.leaf4)); + assertTrue(visit(t.leaf5)); + + // lower1 as scope + visit = SwitchAccessPredicate.visit(t.lower1); + + assertTrue(visit(t.lower1)); + assertTrue(visit(t.leaf1)); + assertFalse(visit(t.leaf2)); + assertTrue(visit(t.leaf3)); + + // An uninteresting subtree should return false, regardless of scope + assertFalse(visit(t.lower3)); + assertFalse(visit(t.leaf6)); + assertFalse(visit(t.leaf7)); +});
diff --git a/chrome/browser/resources/chromeos/switch_access/tree_walker.js b/chrome/browser/resources/chromeos/switch_access/tree_walker.js deleted file mode 100644 index fa991308..0000000 --- a/chrome/browser/resources/chromeos/switch_access/tree_walker.js +++ /dev/null
@@ -1,252 +0,0 @@ -// Copyright 2017 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. - -/** - * Class to move to the appropriate node in the accessibility tree. Stays in a - * subtree determined by restrictions passed to it. - * - * @constructor - * @param {!chrome.automation.AutomationNode} start - * @param {!chrome.automation.AutomationNode} scope - * @param {!AutomationTreeWalker.Restriction} restrictions - */ -function AutomationTreeWalker(start, scope, restrictions) { - /** - * Currently highlighted node. - * - * @private {!chrome.automation.AutomationNode} - */ - this.node_ = start; - - /** - * The root of the subtree that the user is navigating through. - * - * @private {!chrome.automation.AutomationNode} - */ - this.scope_ = scope; - - /** - * Function that returns true for a node that is a leaf of the current - * subtree. - * - * @private {!AutomationTreeWalker.Unary} - */ - this.leafPred_ = restrictions.leaf; - - /** - * Function that returns true for a node in the current subtree that should - * be visited. - * - * @private {!AutomationTreeWalker.Unary} - */ - this.visitPred_ = restrictions.visit; -} - -/** - * @typedef {{leaf: AutomationTreeWalker.Unary, - * visit: AutomationTreeWalker.Unary}} - */ -AutomationTreeWalker.Restriction; - -/** - * @typedef {function(!chrome.automation.AutomationNode) : boolean} - */ -AutomationTreeWalker.Unary; - -AutomationTreeWalker.prototype = { - /** - * Set this.node_ to the next/previous interesting node within the current - * scope and return it. If no interesting node is found, return the - * first/last interesting node. If |doNext| is true, will search for next - * node. Otherwise, will search for previous node. - * - * @param {boolean} doNext - * @return {chrome.automation.AutomationNode} - */ - moveToNode: function(doNext) { - let node = this.node_; - do { - node = doNext ? this.getNextNode_(node) : this.getPreviousNode_(node); - } while (node && !this.visitPred_(node)); - if (node) { - this.node_ = node; - return node; - } - - console.log('Restarting search for node at ' + (doNext ? 'first' : 'last')); - node = doNext ? this.scope_ : this.getYoungestDescendant_(this.scope_); - while (node && !this.visitPred_(node)) - node = doNext ? this.getNextNode_(node) : this.getPreviousNode_(node); - if (node) { - this.node_ = node; - return node; - } - - console.log('Found no interesting nodes to visit.'); - return null; - }, - - - /** - * Given a flat list of nodes in pre-order, get the node that comes after - * |node| within the current scope. - * - * @param {!chrome.automation.AutomationNode} node - * @return {!chrome.automation.AutomationNode|undefined} - * @private - */ - getNextNode_: function(node) { - // Check for child. - let child = node.firstChild; - if (child && !this.leafPred_(node)) - return child; - - // Has no children, and if node is root of subtree, don't check siblings - // or parent. - if (node === this.scope_) - return undefined; - - // No child. Check for right-sibling. - let sibling = node.nextSibling; - if (sibling) - return sibling; - - // No right-sibling. Get right-sibling of closest ancestor. - let ancestor = node.parent; - while (ancestor && ancestor !== this.scope_) { - let aunt = ancestor.nextSibling; - if (aunt) - return aunt; - ancestor = ancestor.parent; - } - - // No node found after |node|, so return undefined. - return undefined; - }, - - /** - * Given a flat list of nodes in pre-order, get the node that comes before - * |node| within the current scope. - * - * @param {!chrome.automation.AutomationNode} node - * @return {!chrome.automation.AutomationNode|undefined} - * @private - */ - getPreviousNode_: function(node) { - // If node is root of subtree, there is no previous node. - if (node === this.scope_) - return undefined; - - // Check for left-sibling. If a left-sibling exists, return its youngest - // descendant if it has one, or otherwise return the sibling. - let sibling = node.previousSibling; - if (sibling) - return this.getYoungestDescendant_(sibling) || sibling; - - // No left-sibling. Return parent if it exists; otherwise return undefined. - let parent = node.parent; - if (parent) - return parent; - - return undefined; - }, - - /** - * Get the youngest descendant of |node|, if it has one, within the current - * scope. - * - * @param {!chrome.automation.AutomationNode} node - * @return {!chrome.automation.AutomationNode|undefined} - * @private - */ - getYoungestDescendant_: function(node) { - if (!node.lastChild || this.leafPred_(node)) - return undefined; - - while (node.lastChild && !this.leafPred_(node)) - node = node.lastChild; - - return node; - }, - - /** - * Return the next sibling of |node| if it has one. - * - * @param {chrome.automation.AutomationNode} node - * @return {chrome.automation.AutomationNode} - */ - debugMoveToNext: function(node) { - if (!node) - return null; - - let next = node.nextSibling; - if (next) { - return next; - } else { - console.log('Node is last of siblings'); - console.log('\n'); - return null; - } - }, - - /** - * Return the previous sibling of |node| if it has one. - * - * @param {chrome.automation.AutomationNode} node - * @return {chrome.automation.AutomationNode} - */ - debugMoveToPrevious: function(node) { - if (!node) - return null; - - let prev = node.previousSibling; - if (prev) { - return prev; - } else { - console.log('Node is first of siblings'); - console.log('\n'); - return null; - } - }, - - /** - * Return the first child of |node| if it has one. - * - * @param {chrome.automation.AutomationNode} node - * @return {chrome.automation.AutomationNode} - */ - debugMoveToFirstChild: function(node) { - if (!node) - return null; - - let child = node.firstChild; - if (child) { - return child; - } else { - console.log('Node has no children'); - console.log('\n'); - return null; - } - }, - - /** - * Return the parent of |node| if it has one. - * - * @param {chrome.automation.AutomationNode} node - * @return {chrome.automation.AutomationNode} - */ - debugMoveToParent: function(node) { - if (!node) - return null; - - let parent = node.parent; - if (parent) { - return parent; - } else { - console.log('Node has no parent'); - console.log('\n'); - return null; - } - } -};
diff --git a/chrome/browser/resources/chromeos/switch_access/tree_walker_unittest.gtestjs b/chrome/browser/resources/chromeos/switch_access/tree_walker_unittest.gtestjs deleted file mode 100644 index 492f8d5..0000000 --- a/chrome/browser/resources/chromeos/switch_access/tree_walker_unittest.gtestjs +++ /dev/null
@@ -1,239 +0,0 @@ -// Copyright 2017 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. - -/** - * Test fixture for tree_walker.js. - * @constructor - * @extends {testing.Test} - */ -function AutomationTreeWalkerUnitTest() { - testing.Test.call(this); -}; - -AutomationTreeWalkerUnitTest.prototype = { - __proto__: testing.Test.prototype, - - /** @override */ - extraLibraries: [ - 'test_support.js', - 'tree_walker.js', - ], - - /** @override */ - browsePreload: DUMMY_URL, - - getSampleTree: function() { - let loc = {left: 0, top: 0, width: 0, height: 0}; - // root - // upper1 - // middle1 - // lower1 - // leaf1 - // leaf2 - // leaf3 - // lower2 - // leaf4 - // leaf5 - // middle2 - // lower3 - // leaf6 - // leaf7 - // upper2 - // leaf8 - let root = {location: loc, state: {}}; - let upper1 = {location: loc, state: {}}; - let upper2 = {location: loc, state: {}}; - let middle1 = {location: loc, state: {}}; - let middle2 = {location: loc, state: {}}; - let lower1 = {location: loc, state: {}}; - let lower2 = {location: loc, state: {}}; - let lower3 = {location: loc, state: {}}; - let leaf1 = {location: loc, state: {}}; - let leaf2 = {location: loc, state: {}}; - let leaf3 = {location: loc, state: {}}; - let leaf4 = {location: loc, state: {}}; - let leaf5 = {location: loc, state: {}}; - let leaf6 = {location: loc, state: {}}; - let leaf7 = {location: loc, state: {}}; - let leaf8 = {location: loc, state: {}}; - - let ts = new TestSupport(); - ts.setChildren(root, [upper1, upper2]); - ts.setChildren(upper1, [middle1, middle2]); - ts.setChildren(upper2, [leaf8]); - ts.setChildren(middle1, [lower1, lower2]); - ts.setChildren(middle2, [lower3]); - ts.setChildren(lower1, [leaf1, leaf2, leaf3]); - ts.setChildren(lower2, [leaf4, leaf5]); - ts.setChildren(lower3, [leaf6, leaf7]); - - return { - root: root, - upper1: upper1, - upper2: upper2, - middle1: middle1, - middle2: middle2, - lower1: lower1, - lower2: lower2, - lower3: lower3, - leaf1: leaf1, - leaf2: leaf2, - leaf3: leaf3, - leaf4: leaf4, - leaf5: leaf5, - leaf6: leaf6, - leaf7: leaf7, - leaf8: leaf8 - }; - }, - - getDefaultRestrictions: function() { - return { - leaf: function(node) { - return false; - }, - visit: function(node) { - return node.state.focusable === true; - }, - } - }, - - getSubtreeRestrictions: function() { - return { - leaf: function(node) { - return node.state.leaf === true; - }, - visit: function(node) { - return node.state.focusable === true; - }, - } - } -}; - -TEST_F('AutomationTreeWalkerUnitTest', 'MoveToNodeWholeTree', function() { - let t = this.getSampleTree(); - let treeWalker = new AutomationTreeWalker( - t.root, t.root, this.getDefaultRestrictions()); - - t.root.state['focusable'] = true; - t.middle1.state['focusable'] = true; - t.leaf1.state['focusable'] = true; - t.leaf2.state['focusable'] = true; - t.leaf5.state['focusable'] = true; - t.lower3.state['focusable'] = true; - t.leaf6.state['focusable'] = true; - t.upper2.state['focusable'] = true; - t.leaf8.state['focusable'] = true; - - // Move to next node. - assertEquals(t.middle1, treeWalker.moveToNode(true)); - assertEquals(t.leaf1, treeWalker.moveToNode(true)); - assertEquals(t.leaf2, treeWalker.moveToNode(true)); - assertEquals(t.leaf5, treeWalker.moveToNode(true)); - assertEquals(t.lower3, treeWalker.moveToNode(true)); - assertEquals(t.leaf6, treeWalker.moveToNode(true)); - assertEquals(t.upper2, treeWalker.moveToNode(true)); - assertEquals(t.leaf8, treeWalker.moveToNode(true)); - assertEquals(t.root, treeWalker.moveToNode(true)); - assertEquals(t.middle1, treeWalker.moveToNode(true)); - - // Move to previous node. - assertEquals(t.root, treeWalker.moveToNode(false)); - assertEquals(t.leaf8, treeWalker.moveToNode(false)); - assertEquals(t.upper2, treeWalker.moveToNode(false)); - assertEquals(t.leaf6, treeWalker.moveToNode(false)); - assertEquals(t.lower3, treeWalker.moveToNode(false)); - assertEquals(t.leaf5, treeWalker.moveToNode(false)); - assertEquals(t.leaf2, treeWalker.moveToNode(false)); - assertEquals(t.leaf1, treeWalker.moveToNode(false)); - assertEquals(t.middle1, treeWalker.moveToNode(false)); -}); - -TEST_F('AutomationTreeWalkerUnitTest', 'MoveToNodeInSubtree', function() { - let t = this.getSampleTree(); - let treeWalker = new AutomationTreeWalker( - t.upper1, t.upper1, this.getSubtreeRestrictions()); - - t.lower2.state['leaf'] = true; - t.lower3.state['leaf'] = true; - - t.root.state['focusable'] = true; - t.middle1.state['focusable'] = true; - t.leaf1.state['focusable'] = true; - t.leaf2.state['focusable'] = true; - t.leaf5.state['focusable'] = true; - t.lower3.state['focusable'] = true; - t.leaf6.state['focusable'] = true; - t.upper2.state['focusable'] = true; - t.leaf8.state['focusable'] = true; - - // Move to next node. - assertEquals(t.middle1, treeWalker.moveToNode(true)); - assertEquals(t.leaf1, treeWalker.moveToNode(true)); - assertEquals(t.leaf2, treeWalker.moveToNode(true)); - assertEquals(t.lower3, treeWalker.moveToNode(true)); - assertEquals(t.middle1, treeWalker.moveToNode(true)); - - // Move to previous node. - assertEquals(t.lower3, treeWalker.moveToNode(false)); - assertEquals(t.leaf2, treeWalker.moveToNode(false)); - assertEquals(t.leaf1, treeWalker.moveToNode(false)); - assertEquals(t.middle1, treeWalker.moveToNode(false)); - assertEquals(t.lower3, treeWalker.moveToNode(false)); -}); - -TEST_F('AutomationTreeWalkerUnitTest', 'GetNextNode', function() { - let t = this.getSampleTree(); - let treeWalker = new AutomationTreeWalker( - t.middle1, t.middle1, this.getDefaultRestrictions()); - - let order = - [t.middle1, t.lower1, t.leaf1, t.leaf2, t.leaf3, - t.lower2, t.leaf4, t.leaf5]; - let node = t.middle1; - for (let i = 0; i < order.length; i++) { - assertEquals(order[i], node); - node = treeWalker.getNextNode_(node); - } - assertEquals(undefined, node); -}); - -TEST_F('AutomationTreeWalkerUnitTest', 'GetPreviousNode', function() { - let t = this.getSampleTree(); - let treeWalker = new AutomationTreeWalker( - t.leaf5, t.middle1, this.getDefaultRestrictions()); - - let order = - [t.leaf5, t.leaf4, t.lower2, t.leaf3, t.leaf2, - t.leaf1, t.lower1, t.middle1]; - let node = t.leaf5; - for (let i = 0; i < order.length; i++) { - assertEquals(order[i], node); - node = treeWalker.getPreviousNode_(node); - } - assertEquals(undefined, node); -}); - -TEST_F('AutomationTreeWalkerUnitTest', 'GetYoungestDescendant', function() { - let t = this.getSampleTree(); - let treeWalker = new AutomationTreeWalker( - t.root, t.root, this.getDefaultRestrictions()); - - assertEquals(t.leaf8, treeWalker.getYoungestDescendant_(t.root)); - assertEquals(t.leaf7, treeWalker.getYoungestDescendant_(t.upper1)); - assertEquals(t.leaf8, treeWalker.getYoungestDescendant_(t.upper2)); - assertEquals(t.leaf5, treeWalker.getYoungestDescendant_(t.middle1)); - assertEquals(t.leaf7, treeWalker.getYoungestDescendant_(t.middle2)); - assertEquals(t.leaf3, treeWalker.getYoungestDescendant_(t.lower1)); - assertEquals(t.leaf5, treeWalker.getYoungestDescendant_(t.lower2)); - assertEquals(t.leaf7, treeWalker.getYoungestDescendant_(t.lower3)); - assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf1)); - assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf2)); - assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf3)); - assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf4)); - assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf5)); - assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf6)); - assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf7)); - assertEquals(undefined, treeWalker.getYoungestDescendant_(t.leaf8)); -});
diff --git a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js index bf89edc..08c7623 100644 --- a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js +++ b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js
@@ -1548,10 +1548,9 @@ * Handles changing of selectedItem in wallpaper manager. */ WallpaperManager.prototype.onSelectedItemChanged_ = function() { - this.setWallpaperAttribution(this.selectedItem_); - if (!this.selectedItem_ || this.selectedItem_.source == 'ADDNEW') return; + this.setWallpaperAttribution(this.selectedItem_); if (this.selectedItem_.baseURL && (this.useNewWallpaperPicker_ ||
diff --git a/chrome/browser/resources/chromeos/zip_archiver/cpp/request.h b/chrome/browser/resources/chromeos/zip_archiver/cpp/request.h index 48d3f8c..cc3f9d6 100644 --- a/chrome/browser/resources/chromeos/zip_archiver/cpp/request.h +++ b/chrome/browser/resources/chromeos/zip_archiver/cpp/request.h
@@ -9,11 +9,11 @@ #include "ppapi/cpp/var_dictionary.h" // Defines the protocol messsage used to communicate between JS and NaCL. -// This should be consistent with js/request.h. +// This must be consistent with the JS side js/request.js. namespace request { -// Defines requests keys. Every key should be unique and the same as the keys -// on the JS side. +// Defines request keys. The keys should be unique and must be the same as the +// keys defined on the JS side. namespace key { // Mandatory keys for all unpacking requests. @@ -60,9 +60,10 @@ const char kMessage[] = "message"; // Should be a string. } // namespace key -// Defines request operations. These operations should be the same as the -// operations on the JavaScript side. +// Defines request operations. These operations must be the same as the +// operations defined on the JS side (js/request.js). enum Operation { + // Unpack operations. READ_METADATA = 0, READ_METADATA_DONE = 1, READ_CHUNK = 2, @@ -80,6 +81,8 @@ READ_FILE_DONE = 14, CONSOLE_LOG = 15, CONSOLE_DEBUG = 16, + + // Pack operations. CREATE_ARCHIVE = 17, CREATE_ARCHIVE_DONE = 18, ADD_TO_ARCHIVE = 19, @@ -93,6 +96,8 @@ CANCEL_ARCHIVE = 27, CANCEL_ARCHIVE_DONE = 28, RELEASE_COMPRESSOR = 29, + + // Errors. FILE_SYSTEM_ERROR = -1, // Errors specific to a file system. COMPRESSOR_ERROR = -2 // Errors specific to a compressor. };
diff --git a/chrome/browser/resources/chromeos/zip_archiver/js/decompressor.js b/chrome/browser/resources/chromeos/zip_archiver/js/decompressor.js index 504c2ac..3aca206 100644 --- a/chrome/browser/resources/chromeos/zip_archiver/js/decompressor.js +++ b/chrome/browser/resources/chromeos/zip_archiver/js/decompressor.js
@@ -236,7 +236,9 @@ default: console.error('Invalid NaCl operation: ' + operation + '.'); requestInProgress.onError('FAILED'); + break; } + delete this.requestsInProgress[requestId]; };
diff --git a/chrome/browser/resources/chromeos/zip_archiver/js/request.js b/chrome/browser/resources/chromeos/zip_archiver/js/request.js index 87aa29b7..66c1e0f 100644 --- a/chrome/browser/resources/chromeos/zip_archiver/js/request.js +++ b/chrome/browser/resources/chromeos/zip_archiver/js/request.js
@@ -6,13 +6,13 @@ /** * Defines the protocol used to communicate between JS and NaCL. - * This should be consistent with cpp/request.h. + * This must be consistent with NaCL C++ side cpp/request.h. * @namespace */ unpacker.request = { /** - * Defines request ids. Every key should be unique and the same as the keys - * on the NaCL side. + * Defines request ids. The keys should be unique and must be the same as the + * keys defined on the NaCL C++ side. * @enum {string} */ Key: { @@ -59,14 +59,17 @@ }, /** - * Defines request operations. These operation should be the same as the - * operations on the NaCL side. FILE_SYSTEM_ID and REQUEST_ID are mandatory - * for all unpack requests, while COMPRESSOR_ID is required for all pack - * requests. All the values of unpacking operations must be smaller than any - * packing operation (except errors). + * Defines request |operation|. The operation values must be the same as the + * operation values defined on the NaCL C++ side (cpp/request.h). + * + * Also, the unpack operation values must be smaller than the pack operation + * values (see the isPackRequest() helper below). + * * @enum {number} */ Operation: { + // Unpack operations. + READ_METADATA: 0, READ_METADATA_DONE: 1, READ_CHUNK: 2, READ_CHUNK_DONE: 3, @@ -83,6 +86,8 @@ READ_FILE_DONE: 14, CONSOLE_LOG: 15, CONSOLE_DEBUG: 16, + + // Pack operations. CREATE_ARCHIVE: 17, CREATE_ARCHIVE_DONE: 18, ADD_TO_ARCHIVE: 19, @@ -96,8 +101,10 @@ CANCEL_ARCHIVE: 27, CANCEL_ARCHIVE_DONE: 28, RELEASE_COMPRESSOR: 29, - FILE_SYSTEM_ERROR: -1, - COMPRESSOR_ERROR: -2 + + // Errors. + FILE_SYSTEM_ERROR: -1, // Errors specific to a file system. + COMPRESSOR_ERROR: -2 // Errors specific to a compressor. }, /** @@ -126,6 +133,18 @@ * @return {!Object} A new request with mandatory fields. */ createBasic_: function(operation, fileSystemId, requestId) { + // Protect from ill-defined or invalid |operation|, crbug.com/867842 + if (Object.values(unpacker.request.Operation).indexOf(operation) === -1) + throwInvalidOperation(operation); + if (operation < unpacker.request.Operation.READ_METADATA) + throwInvalidOperation(operation); + if (operation > unpacker.request.Operation.CONSOLE_DEBUG) + throwInvalidOperation(operation); + + function throwInvalidOperation(operation) { + throw new Error('invalid operation: [' + operation + ']'); + } + var basicRequest = {}; basicRequest[unpacker.request.Key.OPERATION] = operation; basicRequest[unpacker.request.Key.FILE_SYSTEM_ID] = fileSystemId;
diff --git a/chrome/browser/resources/local_ntp/custom_backgrounds.js b/chrome/browser/resources/local_ntp/custom_backgrounds.js index b18d9b69..e8d8861 100644 --- a/chrome/browser/resources/local_ntp/custom_backgrounds.js +++ b/chrome/browser/resources/local_ntp/custom_backgrounds.js
@@ -144,8 +144,8 @@ customBackgrounds.MENU_ENTRIES = { CHROME_BACKGROUNDS: 0, UPLOAD_IMAGE: 1, - RESTORE_DEFAULT: 2, - CUSTOM_LINKS_RESTORE_DEFAULT: 3, + CUSTOM_LINKS_RESTORE_DEFAULT: 2, + RESTORE_DEFAULT: 3, }; customBackgrounds.CUSTOM_BACKGROUND_OVERLAY = @@ -645,10 +645,10 @@ let clickCount = event.detail; if (clickCount == 1) { tileInteraction(event); - } else if (clickCount == 2) { - customBackgrounds.setBackground( - this.dataset.url, this.dataset.attributionLine1, - this.dataset.attributionLine2, this.dataset.attributionActionUrl); + } else if (clickCount == 2 && customBackgrounds.selectedTile == this) { + customBackgrounds.setBackground(this.dataset.url, + this.dataset.attributionLine1, this.dataset.attributionLine2, + this.dataset.attributionActionUrl); } }; tile.onkeyup = function(event) { @@ -730,8 +730,8 @@ var entries = []; entries.push($(customBackgrounds.IDS.DEFAULT_WALLPAPERS)); entries.push($(customBackgrounds.IDS.UPLOAD_IMAGE)); - entries.push($(customBackgrounds.IDS.RESTORE_DEFAULT)); entries.push($(customBackgrounds.IDS.CUSTOM_LINKS_RESTORE_DEFAULT)); + entries.push($(customBackgrounds.IDS.RESTORE_DEFAULT)); var idx = current_index; do {
diff --git a/chrome/browser/resources/settings/passwords_and_forms_page/BUILD.gn b/chrome/browser/resources/settings/passwords_and_forms_page/BUILD.gn index d26773d..a8f8b60e 100644 --- a/chrome/browser/resources/settings/passwords_and_forms_page/BUILD.gn +++ b/chrome/browser/resources/settings/passwords_and_forms_page/BUILD.gn
@@ -50,9 +50,11 @@ js_library("payments_section") { deps = [ ":credit_card_edit_dialog", + "../people_page:sync_browser_proxy", "//ui/webui/resources/cr_elements/cr_action_menu:cr_action_menu", "//ui/webui/resources/js:assert", "//ui/webui/resources/js:load_time_data", + "//ui/webui/resources/js:web_ui_listener_behavior", "//ui/webui/resources/js/cr/ui:focus_without_ink", ] externs_list = [ "$externs_path/autofill_private.js" ]
diff --git a/chrome/browser/resources/settings/passwords_and_forms_page/payments_section.html b/chrome/browser/resources/settings/passwords_and_forms_page/payments_section.html index cf3d0ab..6be01b9 100644 --- a/chrome/browser/resources/settings/passwords_and_forms_page/payments_section.html +++ b/chrome/browser/resources/settings/passwords_and_forms_page/payments_section.html
@@ -4,11 +4,13 @@ <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html"> <link rel="import" href="chrome://resources/html/assert.html"> <link rel="import" href="chrome://resources/html/cr/ui/focus_without_ink.html"> +<link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html"> <link rel="import" href="../i18n_setup.html"> <link rel="import" href="../settings_shared_css.html"> <link rel="import" href="../controls/settings_toggle_button.html"> <link rel="import" href="../prefs/prefs.html"> +<link rel="import" href="../people_page/sync_browser_proxy.html"> <link rel="import" href="credit_card_edit_dialog.html"> <link rel="import" href="passwords_shared_css.html">
diff --git a/chrome/browser/resources/settings/passwords_and_forms_page/payments_section.js b/chrome/browser/resources/settings/passwords_and_forms_page/payments_section.js index 4a4a87e8..f3698dea 100644 --- a/chrome/browser/resources/settings/passwords_and_forms_page/payments_section.js +++ b/chrome/browser/resources/settings/passwords_and_forms_page/payments_section.js
@@ -90,6 +90,10 @@ Polymer({ is: 'settings-payments-section', + behaviors: [ + WebUIListenerBehavior, + ], + properties: { /** * An array of saved credit cards. @@ -105,6 +109,14 @@ /** @private */ showCreditCardDialog_: Boolean, + + /** + * The current sync status, supplied by SyncBrowserProxy. + * TODO(sujiezhu): Use this to check migration requirements when all + * information is ready. (https://crbug.com/852904). + * @type {?settings.SyncStatus} + */ + syncStatus: Object, }, listeners: { @@ -130,6 +142,9 @@ */ setCreditCardsListener_: null, + /** @private {?settings.SyncBrowserProxy} */ + syncBrowserProxy_: null, + /** @override */ attached: function() { // Create listener function. @@ -150,6 +165,12 @@ // Listen for changes. this.paymentsManager_.addCreditCardListChangedListener( setCreditCardsListener); + + this.syncBrowserProxy_ = settings.SyncBrowserProxyImpl.getInstance(); + this.syncBrowserProxy_.getSyncStatus().then( + this.handleSyncStatus_.bind(this)); + this.addWebUIListener( + 'sync-status-changed', this.handleSyncStatus_.bind(this)); }, /** @override */ @@ -302,5 +323,14 @@ saveCreditCard_: function(event) { this.paymentsManager_.saveCreditCard(event.detail); }, + + /** + * Handler for when the sync state is pushed from the browser. + * @param {?settings.SyncStatus} syncStatus + * @private + */ + handleSyncStatus_: function(syncStatus) { + this.syncStatus = syncStatus; + }, }); })();
diff --git a/chrome/browser/resources/settings/people_page/lock_screen.html b/chrome/browser/resources/settings/people_page/lock_screen.html index 422a43b..2b9fcf2 100644 --- a/chrome/browser/resources/settings/people_page/lock_screen.html +++ b/chrome/browser/resources/settings/people_page/lock_screen.html
@@ -126,6 +126,33 @@ </div> </template> + <template is="dom-if" if="[[lockScreenNotificationsEnabled_]]"> + <h2 class="settings-box"> + $i18n{lockScreenNotificationTitle} + </h2> + <div class="list-frame"> + <settings-radio-group + pref="{{prefs.ash.message_center.lock_screen_mode}}" + selectable="cr-radio-button"> + <template is="dom-if" + if="[[lockScreenHideSensitiveNotificationSupported_]]"> + <cr-radio-button name="hideSensitive" class="list-item underbar" + pref="[[prefs.ash.message_center.lock_screen_mode]]" + label="$i18n{lockScreenNotificationHideSensitive}"> + </cr-radio-button> + </template> + <cr-radio-button name="show" class="list-item underbar" + pref="[[prefs.ash.message_center.lock_screen_mode]]" + label="$i18n{lockScreenNotificationShow}"> + </cr-radio-button> + <cr-radio-button name="hide" class="list-item" + pref="[[prefs.ash.message_center.lock_screen_mode]]" + label="$i18n{lockScreenNotificationHide}"> + </cr-radio-button> + </settings-radio-group> + </div> + </template> + <template is="dom-if" if="[[fingerprintUnlockEnabled_]]"> <div id="fingerprintDiv"> <settings-toggle-button class="continuation"
diff --git a/chrome/browser/resources/settings/people_page/lock_screen.js b/chrome/browser/resources/settings/people_page/lock_screen.js index 9bc50d7..10f9ea4b1 100644 --- a/chrome/browser/resources/settings/people_page/lock_screen.js +++ b/chrome/browser/resources/settings/people_page/lock_screen.js
@@ -164,6 +164,32 @@ readOnly: true, }, + /** + * Whether notifications on the lock screen are enable by the feature flag. + * @private + */ + lockScreenNotificationsEnabled_: { + type: Boolean, + value: function() { + return loadTimeData.getBoolean('lockScreenNotificationsEnabled'); + }, + readOnly: true, + }, + + /** + * Whether the "hide sensitive notification" option on the lock screen can + * be enable by the feature flag. + * @private + */ + lockScreenHideSensitiveNotificationSupported_: { + type: Boolean, + value: function() { + return loadTimeData.getBoolean( + 'lockScreenHideSensitiveNotificationsSupported'); + }, + readOnly: true, + }, + /** @private */ showEasyUnlockTurnOffDialog_: { type: Boolean,
diff --git a/chrome/browser/resources/settings/people_page/sync_page.html b/chrome/browser/resources/settings/people_page/sync_page.html index 6af45d70..5bc202e 100644 --- a/chrome/browser/resources/settings/people_page/sync_page.html +++ b/chrome/browser/resources/settings/people_page/sync_page.html
@@ -14,6 +14,7 @@ <link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-radio-group/paper-radio-group.html"> <link rel="import" href="sync_browser_proxy.html"> +<link rel="import" href="../icons.html"> <link rel="import" href="../privacy_page/personalization_options.html"> <link rel="import" href="../route.html"> <link rel="import" href="../settings_shared_css.html">
diff --git a/chrome/browser/resources/settings/printing_page/BUILD.gn b/chrome/browser/resources/settings/printing_page/BUILD.gn index c609a9e..b4717d8 100644 --- a/chrome/browser/resources/settings/printing_page/BUILD.gn +++ b/chrome/browser/resources/settings/printing_page/BUILD.gn
@@ -37,13 +37,13 @@ js_library("cups_add_printer_dialog_util") { deps = [ ":cups_printers_browser_proxy", - "//ui/webui/resources/cr_elements:cr_scrollable_behavior", ] } js_library("cups_edit_printer_dialog") { deps = [ ":cups_set_manufacturer_model_behavior", + "//ui/webui/resources/cr_elements:cr_scrollable_behavior", ] }
diff --git a/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.html b/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.html index ea43b2a..8b9645c 100644 --- a/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.html +++ b/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.html
@@ -1,7 +1,6 @@ <link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/cr_elements/cr_dialog/cr_dialog.html"> -<link rel="import" href="chrome://resources/cr_elements/cr_scrollable_behavior.html"> <link rel="import" href="chrome://resources/cr_elements/icons.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> <link rel="import" href="cups_printer_shared_css.html"> @@ -47,7 +46,7 @@ <div slot="title"> <slot name="dialog-title"></slot> </div> - <div slot="body" scrollable> + <div slot="body"> <slot name="dialog-body"></slot> </div> <div slot="button-container">
diff --git a/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.js b/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.js index beba9cf..d27c65f5 100644 --- a/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.js +++ b/chrome/browser/resources/settings/printing_page/cups_add_printer_dialog_util.js
@@ -33,10 +33,6 @@ Polymer({ is: 'add-printer-dialog', - behaviors: [ - CrScrollableBehavior, - ], - /** @private */ attached: function() { this.$.dialog.showModal();
diff --git a/chrome/browser/resources/settings/printing_page/cups_edit_printer_dialog.html b/chrome/browser/resources/settings/printing_page/cups_edit_printer_dialog.html index 0852b6f..6ac1df6 100644 --- a/chrome/browser/resources/settings/printing_page/cups_edit_printer_dialog.html +++ b/chrome/browser/resources/settings/printing_page/cups_edit_printer_dialog.html
@@ -1,6 +1,7 @@ <link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/cr_elements/cr_input/cr_input.html"> +<link rel="import" href="chrome://resources/cr_elements/cr_scrollable_behavior.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> <link rel="import" href="cups_add_printer_dialog_util.html"> <link rel="import" href="cups_printer_shared_css.html"> @@ -20,7 +21,7 @@ </style> <add-printer-dialog> <div slot="dialog-title">$i18n{editPrinterDialogTitle}</div> - <div slot="dialog-body"> + <div slot="dialog-body" scrollable> <div class="settings-box first two-line"> <cr-input class="printer-name-input" autofocus value="{{activePrinter.printerName}}"
diff --git a/chrome/browser/resources/settings/printing_page/cups_edit_printer_dialog.js b/chrome/browser/resources/settings/printing_page/cups_edit_printer_dialog.js index 7b5543d..32ca08a 100644 --- a/chrome/browser/resources/settings/printing_page/cups_edit_printer_dialog.js +++ b/chrome/browser/resources/settings/printing_page/cups_edit_printer_dialog.js
@@ -11,6 +11,7 @@ is: 'settings-cups-edit-printer-dialog', behaviors: [ + CrScrollableBehavior, SetManufacturerModelBehavior, ],
diff --git a/chrome/browser/resources/settings/site_settings/site_data.js b/chrome/browser/resources/settings/site_settings/site_data.js index a1caa294..235ea12 100644 --- a/chrome/browser/resources/settings/site_settings/site_data.js +++ b/chrome/browser/resources/settings/site_settings/site_data.js
@@ -158,13 +158,7 @@ lastSelectedIndex : this.sites.length - 1; const index = indexFromId > -1 ? indexFromId : indexFallback; - const ironList = - /** @type {!IronListElement} */ (this.$$('iron-list')); - ironList.focusItem(index); - const siteToSelect = this.sites[index].site.replace(/[.]/g, '\\.'); - const button = - this.$$(`#siteItem_${siteToSelect}`).$$('.subpage-arrow button'); - cr.ui.focusWithoutInk(assert(button)); + this.focusOnSiteSelectButton_(index); }); this.focusConfig.set( settings.routes.SITE_SETTINGS_DATA_DETAILS.path, onNavigatedTo); @@ -172,6 +166,20 @@ }, /** + * @param {number} index + * @private + */ + focusOnSiteSelectButton_: function(index) { + const ironList = + /** @type {!IronListElement} */ (this.$$('iron-list')); + ironList.focusItem(index); + const siteToSelect = this.sites[index].site.replace(/[.]/g, '\\.'); + const button = + this.$$(`#siteItem_${siteToSelect}`).$$('.subpage-arrow button'); + cr.ui.focusWithoutInk(assert(button)); + }, + + /** * Gather all the site data. * @private */ @@ -239,6 +247,10 @@ * @private */ onSiteClick_: function(event) { + // If any delete button is selected, the focus will be in a bad state when + // returning to this page. To avoid this, the site select button is given + // focus. See https://crbug.com/872197. + this.focusOnSiteSelectButton_(event.model.index); settings.navigateTo( settings.routes.SITE_SETTINGS_DATA_DETAILS, new URLSearchParams('site=' + event.model.item.site));
diff --git a/chrome/browser/resources/settings/site_settings/site_list.html b/chrome/browser/resources/settings/site_settings/site_list.html index 99ca3a5e..efbfbed 100644 --- a/chrome/browser/resources/settings/site_settings/site_list.html +++ b/chrome/browser/resources/settings/site_settings/site_list.html
@@ -57,7 +57,7 @@ <div class="list-item secondary">$i18n{noSitesAdded}</div> </div> <div class="list-frame menu-content vertical-list" id="listContainer"> - <iron-list items="[[sites]]" preserve-focus risk-selection> + <iron-list id="list" items="[[sites]]" preserve-focus risk-selection> <template> <site-list-entry model="[[item]]" read-only-list="[[readOnlyList]]" on-show-action-menu="onShowActionMenu_" tabindex$="[[tabIndex]]"
diff --git a/chrome/browser/resources/settings/site_settings/site_list.js b/chrome/browser/resources/settings/site_settings/site_list.js index d9e16017..dc04411 100644 --- a/chrome/browser/resources/settings/site_settings/site_list.js +++ b/chrome/browser/resources/settings/site_settings/site_list.js
@@ -224,7 +224,14 @@ site => site.setting != settings.ContentSetting.DEFAULT && site.setting == this.categorySubtype) .map(site => this.expandSiteException(site)); + // iron-list needs to have display set to 'block' in order to render + // correctly. However, display also needs to be set to 'contents' so that + // the paper-tooltip in cr-policy-pref-indicator is not cutoff. + this.$.list.style.display = 'block'; this.updateList('sites', x => x.origin, sites); + this.async(() => { + this.$.list.style.display = 'contents'; + }); }, /**
diff --git a/chrome/browser/safe_browsing/url_checker_delegate_impl.cc b/chrome/browser/safe_browsing/url_checker_delegate_impl.cc index 6aa6339..cfad34a 100644 --- a/chrome/browser/safe_browsing/url_checker_delegate_impl.cc +++ b/chrome/browser/safe_browsing/url_checker_delegate_impl.cc
@@ -64,7 +64,8 @@ threat_types_(CreateSBThreatTypeSet({ // TODO(crbug.com/835961): Enable on Android when list is available. #if defined(SAFE_BROWSING_DB_LOCAL) - safe_browsing::SB_THREAT_TYPE_SUSPICIOUS_SITE, + safe_browsing::SB_THREAT_TYPE_BILLING, + safe_browsing::SB_THREAT_TYPE_SUSPICIOUS_SITE, #endif safe_browsing::SB_THREAT_TYPE_URL_MALWARE, safe_browsing::SB_THREAT_TYPE_URL_PHISHING,
diff --git a/chrome/browser/shell_integration_win.cc b/chrome/browser/shell_integration_win.cc index d021d755..6c3cf5cf 100644 --- a/chrome/browser/shell_integration_win.cc +++ b/chrome/browser/shell_integration_win.cc
@@ -6,7 +6,6 @@ #include <windows.h> #include <objbase.h> -#include <shlwapi.h> #include <shobjidl.h> #include <propkey.h> // Needs to come after shobjidl.h. #include <stddef.h> @@ -36,6 +35,7 @@ #include "base/timer/timer.h" #include "base/win/registry.h" #include "base/win/scoped_propvariant.h" +#include "base/win/shlwapi.h" #include "base/win/shortcut.h" #include "base/win/windows_version.h" #include "chrome/browser/policy/policy_path_parser.h"
diff --git a/chrome/browser/signin/dice_tab_helper_unittest.cc b/chrome/browser/signin/dice_tab_helper_unittest.cc index 5158ce9..172ed2d 100644 --- a/chrome/browser/signin/dice_tab_helper_unittest.cc +++ b/chrome/browser/signin/dice_tab_helper_unittest.cc
@@ -127,7 +127,8 @@ dice_tab_helper->InitializeSigninFlow( signin_url_, signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS, signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT, - signin_metrics::PromoAction::PROMO_ACTION_NEW_ACCOUNT); + signin_metrics::PromoAction:: + PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT); EXPECT_EQ(1, ua_tester.GetActionCount("Signin_Signin_FromSettings")); EXPECT_EQ(1, ua_tester.GetActionCount("Signin_SigninPage_Loading")); EXPECT_EQ(0, ua_tester.GetActionCount("Signin_SigninPage_Shown")); @@ -135,7 +136,7 @@ "Signin.SigninStartedAccessPoint", signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS, 1); h_tester.ExpectUniqueSample( - "Signin.SigninStartedAccessPoint.NewAccount", + "Signin.SigninStartedAccessPoint.NewAccountNoExistingAccount", signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS, 1); // First call to did finish load does logs any Signin_SigninPage_Shown user
diff --git a/chrome/browser/signin/signin_ui_util_unittest.cc b/chrome/browser/signin/signin_ui_util_unittest.cc index 45e90f4e..8f37c2c 100644 --- a/chrome/browser/signin/signin_ui_util_unittest.cc +++ b/chrome/browser/signin/signin_ui_util_unittest.cc
@@ -83,8 +83,7 @@ public: DiceSigninUiUtilTest() : BrowserWithTestWindowTest( - content::TestBrowserThreadBundle::IO_MAINLOOP), - scoped_account_consistency_(signin::AccountConsistencyMethod::kDice) {} + content::TestBrowserThreadBundle::IO_MAINLOOP) {} ~DiceSigninUiUtilTest() override = default; struct CreateDiceTurnSyncOnHelperParams { @@ -170,7 +169,11 @@ histogram_tester.ExpectTotalCount( "Signin.SigninStartedAccessPoint.NotDefault", 0); histogram_tester.ExpectTotalCount( - "Signin.SigninStartedAccessPoint.NewAccount", 0); + "Signin.SigninStartedAccessPoint.NewAccountPreDice", 0); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountNoExistingAccount", 0); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountExistingAccount", 0); } void ExpectOneSigninStartedHistograms( @@ -181,40 +184,85 @@ switch (expected_promo_action) { case signin_metrics::PromoAction::PROMO_ACTION_NO_SIGNIN_PROMO: histogram_tester.ExpectTotalCount( - "Signin.SigninStartedAccessPoint.NewAccount", 0); - histogram_tester.ExpectTotalCount( "Signin.SigninStartedAccessPoint.NotDefault", 0); histogram_tester.ExpectTotalCount( "Signin.SigninStartedAccessPoint.WithDefault", 0); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountPreDice", 0); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountNoExistingAccount", 0); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountExistingAccount", 0); break; case signin_metrics::PromoAction::PROMO_ACTION_WITH_DEFAULT: histogram_tester.ExpectTotalCount( - "Signin.SigninStartedAccessPoint.NewAccount", 0); - histogram_tester.ExpectTotalCount( "Signin.SigninStartedAccessPoint.NotDefault", 0); histogram_tester.ExpectUniqueSample( "Signin.SigninStartedAccessPoint.WithDefault", access_point_, 1); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountPreDice", 0); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountNoExistingAccount", 0); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountExistingAccount", 0); break; case signin_metrics::PromoAction::PROMO_ACTION_NOT_DEFAULT: histogram_tester.ExpectTotalCount( - "Signin.SigninStartedAccessPoint.NewAccount", 0); - histogram_tester.ExpectTotalCount( "Signin.SigninStartedAccessPoint.WithDefault", 0); histogram_tester.ExpectUniqueSample( "Signin.SigninStartedAccessPoint.NotDefault", access_point_, 1); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountPreDice", 0); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountNoExistingAccount", 0); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountExistingAccount", 0); break; - case signin_metrics::PromoAction::PROMO_ACTION_NEW_ACCOUNT: + case signin_metrics::PromoAction::PROMO_ACTION_NEW_ACCOUNT_PRE_DICE: histogram_tester.ExpectTotalCount( "Signin.SigninStartedAccessPoint.WithDefault", 0); histogram_tester.ExpectTotalCount( "Signin.SigninStartedAccessPoint.NotDefault", 0); histogram_tester.ExpectUniqueSample( - "Signin.SigninStartedAccessPoint.NewAccount", access_point_, 1); + "Signin.SigninStartedAccessPoint.NewAccountPreDice", access_point_, + 1); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountNoExistingAccount", 0); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountExistingAccount", 0); + break; + case signin_metrics::PromoAction:: + PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT: + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.WithDefault", 0); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NotDefault", 0); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountPreDice", 0); + histogram_tester.ExpectUniqueSample( + "Signin.SigninStartedAccessPoint.NewAccountNoExistingAccount", + access_point_, 1); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountExistingAccount", 0); + break; + case signin_metrics::PromoAction:: + PROMO_ACTION_NEW_ACCOUNT_EXISTING_ACCOUNT: + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.WithDefault", 0); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NotDefault", 0); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountPreDice", 0); + histogram_tester.ExpectTotalCount( + "Signin.SigninStartedAccessPoint.NewAccountNoExistingAccount", 0); + histogram_tester.ExpectUniqueSample( + "Signin.SigninStartedAccessPoint.NewAccountExistingAccount", + access_point_, 1); break; } } - const ScopedAccountConsistency scoped_account_consistency_; + const ScopedAccountConsistencyDice scoped_account_consistency_; signin_metrics::AccessPoint access_point_ = signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_BUBBLE; @@ -330,11 +378,13 @@ ASSERT_FALSE(create_dice_turn_sync_on_helper_called_); ExpectOneSigninStartedHistograms( - histogram_tester, signin_metrics::PromoAction::PROMO_ACTION_NEW_ACCOUNT); + histogram_tester, signin_metrics::PromoAction:: + PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT); EXPECT_EQ( 1, user_action_tester.GetActionCount("Signin_Signin_FromBookmarkBubble")); - EXPECT_EQ(1, user_action_tester.GetActionCount( - "Signin_SigninNewAccount_FromBookmarkBubble")); + EXPECT_EQ(1, + user_action_tester.GetActionCount( + "Signin_SigninNewAccountNoExistingAccount_FromBookmarkBubble")); // Verify that the active tab has the correct DICE sign-in URL. content::WebContents* active_contents = @@ -344,6 +394,32 @@ active_contents->GetVisibleURL()); } +TEST_F(DiceSigninUiUtilTest, EnableSyncForNewAccountWithNoTabWithExisting) { + base::HistogramTester histogram_tester; + base::UserActionTester user_action_tester; + + // Add an account. + std::string account_id = + GetAccountTrackerService()->SeedAccountInfo(kMainEmail, kMainGaiaID); + GetTokenService()->UpdateCredentials(account_id, "token"); + + ExpectNoSigninStartedHistograms(histogram_tester); + EXPECT_EQ( + 0, user_action_tester.GetActionCount("Signin_Signin_FromBookmarkBubble")); + + EnableSync(AccountInfo(), false /* is_default_promo_account (not used)*/); + ASSERT_FALSE(create_dice_turn_sync_on_helper_called_); + + ExpectOneSigninStartedHistograms( + histogram_tester, + signin_metrics::PromoAction::PROMO_ACTION_NEW_ACCOUNT_EXISTING_ACCOUNT); + EXPECT_EQ( + 1, user_action_tester.GetActionCount("Signin_Signin_FromBookmarkBubble")); + EXPECT_EQ(1, + user_action_tester.GetActionCount( + "Signin_SigninNewAccountExistingAccount_FromBookmarkBubble")); +} + TEST_F(DiceSigninUiUtilTest, EnableSyncForNewAccountWithOneTab) { base::HistogramTester histogram_tester; base::UserActionTester user_action_tester; @@ -357,11 +433,13 @@ ASSERT_FALSE(create_dice_turn_sync_on_helper_called_); ExpectOneSigninStartedHistograms( - histogram_tester, signin_metrics::PromoAction::PROMO_ACTION_NEW_ACCOUNT); + histogram_tester, signin_metrics::PromoAction:: + PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT); EXPECT_EQ( 1, user_action_tester.GetActionCount("Signin_Signin_FromBookmarkBubble")); - EXPECT_EQ(1, user_action_tester.GetActionCount( - "Signin_SigninNewAccount_FromBookmarkBubble")); + EXPECT_EQ(1, + user_action_tester.GetActionCount( + "Signin_SigninNewAccountNoExistingAccount_FromBookmarkBubble")); // Verify that the active tab has the correct DICE sign-in URL. content::WebContents* active_contents =
diff --git a/chrome/browser/speech/tts_win.cc b/chrome/browser/speech/tts_win.cc index 06a8f47f..d9a97418 100644 --- a/chrome/browser/speech/tts_win.cc +++ b/chrome/browser/speech/tts_win.cc
@@ -5,7 +5,6 @@ #include <math.h> #include <objbase.h> #include <sapi.h> -#include <sphelper.h> #include <stdint.h> #include <wrl/client.h> @@ -16,6 +15,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "base/win/scoped_co_mem.h" +#include "base/win/sphelper.h" #include "chrome/browser/speech/tts_controller.h" #include "chrome/browser/speech/tts_platform.h"
diff --git a/chrome/browser/ssl/security_state_tab_helper.cc b/chrome/browser/ssl/security_state_tab_helper.cc index 90ec5ca..c88e272 100644 --- a/chrome/browser/ssl/security_state_tab_helper.cc +++ b/chrome/browser/ssl/security_state_tab_helper.cc
@@ -284,10 +284,6 @@ switch (threat_type) { case safe_browsing::SB_THREAT_TYPE_UNUSED: case safe_browsing::SB_THREAT_TYPE_SAFE: - // TODO(https://crbug.com/867518): Create a malicious billing enum and - // return it. - case safe_browsing::SB_THREAT_TYPE_BILLING: - break; case safe_browsing::SB_THREAT_TYPE_URL_PHISHING: case safe_browsing::SB_THREAT_TYPE_URL_CLIENT_SIDE_PHISHING: return security_state::MALICIOUS_CONTENT_STATUS_SOCIAL_ENGINEERING; @@ -324,6 +320,10 @@ // social engineering content status. return security_state::MALICIOUS_CONTENT_STATUS_SOCIAL_ENGINEERING; #endif + case safe_browsing::SB_THREAT_TYPE_BILLING: + return base::FeatureList::IsEnabled(safe_browsing::kBillingInterstitial) + ? security_state::MALICIOUS_CONTENT_STATUS_BILLING + : security_state::MALICIOUS_CONTENT_STATUS_NONE; case safe_browsing:: DEPRECATED_SB_THREAT_TYPE_URL_PASSWORD_PROTECTION_PHISHING: case safe_browsing::SB_THREAT_TYPE_URL_BINARY_MALWARE:
diff --git a/chrome/browser/ssl/ssl_config_service_manager_pref.cc b/chrome/browser/ssl/ssl_config_service_manager_pref.cc index de9e428..f95bd9dd 100644 --- a/chrome/browser/ssl/ssl_config_service_manager_pref.cc +++ b/chrome/browser/ssl/ssl_config_service_manager_pref.cc
@@ -26,6 +26,7 @@ #include "mojo/public/cpp/bindings/interface_ptr_set.h" #include "net/ssl/ssl_cipher_suite_names.h" #include "net/ssl/ssl_config_service.h" +#include "url/url_canon.h" namespace base { class SingleThreadTaskRunner; @@ -92,6 +93,27 @@ return false; } +// Given a vector of hostname patterns |patterns|, returns a vector containing +// the canonical form. Any entries which cannot be parsed are skipped. +std::vector<std::string> CanonicalizeHostnamePatterns( + const std::vector<std::string>& patterns) { + std::vector<std::string> out; + out.reserve(patterns.size()); + for (base::StringPiece pattern : patterns) { + std::string canon_pattern; + url::Component canon_component; + url::StdStringCanonOutput canon_output(&canon_pattern); + if (!url::CanonicalizeHost(pattern.data(), + url::Component(0, pattern.size()), &canon_output, + &canon_component)) { + continue; + } + canon_output.Complete(); + out.push_back(canon_pattern); + } + return out; +} + const char kTLS13VariantExperimentName[] = "TLS13Variant"; //////////////////////////////////////////////////////////////////////////////// @@ -136,6 +158,7 @@ StringPrefMember ssl_version_min_; StringPrefMember ssl_version_max_; StringPrefMember tls13_variant_; + StringListPrefMember h2_client_cert_coalescing_host_patterns_; // The cached list of disabled SSL cipher suites. std::vector<uint16_t> disabled_cipher_suites_; @@ -191,6 +214,8 @@ ssl_version_max_.Init(prefs::kSSLVersionMax, local_state, local_state_callback); tls13_variant_.Init(prefs::kTLS13Variant, local_state, local_state_callback); + h2_client_cert_coalescing_host_patterns_.Init( + prefs::kH2ClientCertCoalescingHosts, local_state, local_state_callback); local_state_change_registrar_.Init(local_state); local_state_change_registrar_.Add(prefs::kCipherSuiteBlacklist, @@ -215,6 +240,7 @@ registry->RegisterStringPref(prefs::kSSLVersionMax, std::string()); registry->RegisterStringPref(prefs::kTLS13Variant, std::string()); registry->RegisterListPref(prefs::kCipherSuiteBlacklist); + registry->RegisterListPref(prefs::kH2ClientCertCoalescingHosts); } void SSLConfigServiceManagerPref::AddToNetworkContextParams( @@ -287,6 +313,8 @@ } config->disabled_cipher_suites = disabled_cipher_suites_; + config->client_cert_pooling_policy = CanonicalizeHostnamePatterns( + h2_client_cert_coalescing_host_patterns_.GetValue()); return config; }
diff --git a/chrome/browser/ssl/ssl_config_service_manager_pref_unittest.cc b/chrome/browser/ssl/ssl_config_service_manager_pref_unittest.cc index 128babc..74cadbc2 100644 --- a/chrome/browser/ssl/ssl_config_service_manager_pref_unittest.cc +++ b/chrome/browser/ssl/ssl_config_service_manager_pref_unittest.cc
@@ -427,3 +427,39 @@ ASSERT_NO_FATAL_FAILURE(WaitForUpdate()); EXPECT_FALSE(observed_configs_[1]->symantec_enforcement_disabled); } + +TEST_F(SSLConfigServiceManagerPrefTest, H2ClientCertCoalescingPref) { + scoped_refptr<TestingPrefStore> local_state_store(new TestingPrefStore()); + + TestingPrefServiceSimple local_state; + SSLConfigServiceManager::RegisterPrefs(local_state.registry()); + + std::unique_ptr<SSLConfigServiceManager> config_manager = + SetUpConfigServiceManager(&local_state); + + auto patterns = std::make_unique<base::ListValue>(); + // Patterns expected to be canonicalized. + patterns->GetList().emplace_back(base::Value("canon.example")); + patterns->GetList().emplace_back(base::Value(".NonCanon.example")); + patterns->GetList().emplace_back(base::Value("Non-Canon.example")); + patterns->GetList().emplace_back(base::Value("127.0.0.1")); + patterns->GetList().emplace_back(base::Value("2147614986")); + // Patterns expected to be skipped. + patterns->GetList().emplace_back(base::Value("???")); + patterns->GetList().emplace_back(base::Value("example.com/")); + patterns->GetList().emplace_back(base::Value("xn--hellö.com")); + local_state.SetUserPref(prefs::kH2ClientCertCoalescingHosts, + std::move(patterns)); + + // Wait for the SSLConfigServiceManagerPref to be notified of the preferences + // being changed, and for it to notify the test fixture of the change. + ASSERT_NO_FATAL_FAILURE(WaitForUpdate()); + + auto observed_patterns = observed_configs_[0]->client_cert_pooling_policy; + ASSERT_EQ(5u, observed_patterns.size()); + EXPECT_EQ("canon.example", observed_patterns[0]); + EXPECT_EQ(".noncanon.example", observed_patterns[1]); + EXPECT_EQ("non-canon.example", observed_patterns[2]); + EXPECT_EQ("127.0.0.1", observed_patterns[3]); + EXPECT_EQ("128.2.1.10", observed_patterns[4]); +}
diff --git a/chrome/browser/sync/test/integration/autofill_helper.cc b/chrome/browser/sync/test/integration/autofill_helper.cc index 32172f5..b793ff2 100644 --- a/chrome/browser/sync/test/integration/autofill_helper.cc +++ b/chrome/browser/sync/test/integration/autofill_helper.cc
@@ -118,6 +118,14 @@ ->SetServerCreditCards(credit_cards); } +void SetServerProfilesOnDBSequence( + AutofillWebDataService* wds, + const std::vector<autofill::AutofillProfile>& profiles) { + DCHECK(wds->GetDBTaskRunner()->RunsTasksInCurrentSequence()); + AutofillTable::FromWebDatabase(wds->GetDatabase()) + ->SetServerProfiles(profiles); +} + bool ProfilesMatchImpl( int profile_a, const std::vector<AutofillProfile*>& autofill_profiles_a, @@ -302,6 +310,15 @@ WaitForCurrentTasksToComplete(wds->GetDBTaskRunner()); } +void SetServerProfiles(int profile, + const std::vector<autofill::AutofillProfile>& profiles) { + scoped_refptr<AutofillWebDataService> wds = GetProfileWebDataService(profile); + wds->GetDBTaskRunner()->PostTask( + FROM_HERE, base::BindOnce(&SetServerProfilesOnDBSequence, + base::Unretained(wds.get()), profiles)); + WaitForCurrentTasksToComplete(wds->GetDBTaskRunner()); +} + void AddProfile(int profile, const AutofillProfile& autofill_profile) { std::vector<AutofillProfile> autofill_profiles; for (AutofillProfile* profile : GetAllAutoFillProfiles(profile)) {
diff --git a/chrome/browser/sync/test/integration/autofill_helper.h b/chrome/browser/sync/test/integration/autofill_helper.h index 199977b0..ef1d76296 100644 --- a/chrome/browser/sync/test/integration/autofill_helper.h +++ b/chrome/browser/sync/test/integration/autofill_helper.h
@@ -79,6 +79,9 @@ int profile, const std::vector<autofill::CreditCard>& credit_cards); +void SetServerProfiles(int profile, + const std::vector<autofill::AutofillProfile>& profiles); + // Adds the autofill profile |autofill_profile| to sync profile |profile|. void AddProfile(int profile, const autofill::AutofillProfile& autofill_profile);
diff --git a/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc b/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc index 1fb1af2..e624001 100644 --- a/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_wallet_sync_test.cc
@@ -13,6 +13,7 @@ #include "chrome/browser/sync/test/integration/sync_datatype_helper.h" #include "chrome/browser/sync/test/integration/sync_test.h" #include "chrome/browser/web_data_service_factory.h" +#include "components/autofill/core/browser/autofill_data_util.h" #include "components/autofill/core/browser/credit_card.h" #include "components/autofill/core/browser/field_types.h" #include "components/autofill/core/browser/personal_data_manager.h" @@ -28,10 +29,13 @@ #include "content/public/browser/notification_service.h" #include "testing/gmock/include/gmock/gmock.h" +using autofill::AutofillProfile; using autofill::CreditCard; +using autofill::data_util::TruncateUTF8; using autofill_helper::GetPersonalDataManager; using autofill_helper::GetProfileWebDataService; using autofill_helper::GetAccountWebDataService; +using base::ASCIIToUTF16; namespace { @@ -39,14 +43,30 @@ loop->Quit(); } -const char kDefaultCardID[] = "wallet entity ID"; +// Constands for the credit card. +const char kDefaultCardID[] = "wallet card ID"; const int kDefaultCardExpMonth = 8; const int kDefaultCardExpYear = 2087; const char kDefaultCardLastFour[] = "1234"; const char kDefaultCardName[] = "Patrick Valenzuela"; -const char kDefaultBillingAddressId[] = "address entity ID"; +const char kDefaultBillingAddressId[] = "billing address entity ID"; const sync_pb::WalletMaskedCreditCard_WalletCardType kDefaultCardType = sync_pb::WalletMaskedCreditCard::AMEX; + +// Constants for the address. +const char kDefaultAddressID[] = "wallet address ID"; +const char kDefaultAddressName[] = "John S. Doe"; +const char kDefaultCompanyName[] = "The Company"; +const char kDefaultStreetAddress[] = "1234 Fake Street\nApp 2"; +const char kDefaultCity[] = "Cityville"; +const char kDefaultState[] = "Stateful"; +const char kDefaultCountry[] = "US"; +const char kDefaultZip[] = "90011"; +const char kDefaultPhone[] = "1.800.555.1234"; +const char kDefaultSortingCode[] = "CEDEX"; +const char kDefaultDependentLocality[] = "DepLoc"; +const char kDefaultLanguageCode[] = "en"; + const char kLocalGuidA[] = "EDC609ED-7EEE-4F27-B00C-423242A9C44A"; const char kDifferentBillingAddressId[] = "another address entity ID"; @@ -92,6 +112,15 @@ return std::move(consumer.result()); } +std::vector<std::unique_ptr<AutofillProfile>> GetServerProfiles( + scoped_refptr<autofill::AutofillWebDataService> service) { + AutofillWebDataServiceConsumer<std::vector<std::unique_ptr<AutofillProfile>>> + consumer; + service->GetServerProfiles(&consumer); + consumer.Wait(); + return std::move(consumer.result()); +} + void AddDefaultCard(fake_server::FakeServer* server) { sync_pb::EntitySpecifics specifics; sync_pb::AutofillWalletSpecifics* wallet_specifics = @@ -129,6 +158,97 @@ return card; } +void AddDefaultProfile(fake_server::FakeServer* server) { + sync_pb::EntitySpecifics specifics; + sync_pb::AutofillWalletSpecifics* wallet_specifics = + specifics.mutable_autofill_wallet(); + wallet_specifics->set_type(sync_pb::AutofillWalletSpecifics::POSTAL_ADDRESS); + + sync_pb::WalletPostalAddress* wallet_address = + wallet_specifics->mutable_address(); + wallet_address->set_id(kDefaultAddressID); + wallet_address->set_recipient_name(kDefaultAddressName); + wallet_address->set_company_name(kDefaultCompanyName); + wallet_address->add_street_address(kDefaultStreetAddress); + wallet_address->set_address_1(kDefaultState); + wallet_address->set_address_2(kDefaultCity); + wallet_address->set_address_3(kDefaultDependentLocality); + wallet_address->set_postal_code(kDefaultZip); + wallet_address->set_country_code(kDefaultCountry); + wallet_address->set_phone_number(kDefaultPhone); + wallet_address->set_sorting_code(kDefaultSortingCode); + wallet_address->set_language_code(kDefaultLanguageCode); + + server->InjectEntity( + syncer::PersistentUniqueClientEntity::CreateFromEntitySpecifics( + kDefaultAddressID, specifics, 12345, 12345)); +} + +// TODO(sebsg): Instead add a function to create a card, and one to inject in +// the server. Then compare the cards directly. +void ExpectDefaultCreditCardValues(const CreditCard& card) { + EXPECT_EQ(CreditCard::MASKED_SERVER_CARD, card.record_type()); + EXPECT_EQ(kDefaultCardID, card.server_id()); + EXPECT_EQ(base::UTF8ToUTF16(kDefaultCardLastFour), card.LastFourDigits()); + EXPECT_EQ(autofill::kAmericanExpressCard, card.network()); + EXPECT_EQ(kDefaultCardExpMonth, card.expiration_month()); + EXPECT_EQ(kDefaultCardExpYear, card.expiration_year()); + EXPECT_EQ(base::UTF8ToUTF16(kDefaultCardName), + card.GetRawInfo(autofill::ServerFieldType::CREDIT_CARD_NAME_FULL)); + EXPECT_EQ(kDefaultBillingAddressId, card.billing_address_id()); +} + +// TODO(sebsg): Instead add a function to create a profile, and one to inject in +// the server. Then compare the profiles directly. +void ExpectDefaultProfileValues(const AutofillProfile& profile) { + EXPECT_EQ(kDefaultLanguageCode, profile.language_code()); + EXPECT_EQ( + kDefaultAddressName, + TruncateUTF8(base::UTF16ToUTF8(profile.GetRawInfo(autofill::NAME_FULL)))); + EXPECT_EQ(kDefaultCompanyName, + TruncateUTF8( + base::UTF16ToUTF8(profile.GetRawInfo(autofill::COMPANY_NAME)))); + EXPECT_EQ(kDefaultStreetAddress, + TruncateUTF8(base::UTF16ToUTF8( + profile.GetRawInfo(autofill::ADDRESS_HOME_STREET_ADDRESS)))); + EXPECT_EQ(kDefaultCity, TruncateUTF8(base::UTF16ToUTF8(profile.GetRawInfo( + autofill::ADDRESS_HOME_CITY)))); + EXPECT_EQ(kDefaultState, TruncateUTF8(base::UTF16ToUTF8(profile.GetRawInfo( + autofill::ADDRESS_HOME_STATE)))); + EXPECT_EQ(kDefaultZip, TruncateUTF8(base::UTF16ToUTF8( + profile.GetRawInfo(autofill::ADDRESS_HOME_ZIP)))); + EXPECT_EQ(kDefaultCountry, TruncateUTF8(base::UTF16ToUTF8(profile.GetRawInfo( + autofill::ADDRESS_HOME_COUNTRY)))); + EXPECT_EQ(kDefaultPhone, TruncateUTF8(base::UTF16ToUTF8(profile.GetRawInfo( + autofill::PHONE_HOME_WHOLE_NUMBER)))); + EXPECT_EQ(kDefaultSortingCode, + TruncateUTF8(base::UTF16ToUTF8( + profile.GetRawInfo(autofill::ADDRESS_HOME_SORTING_CODE)))); + EXPECT_EQ(kDefaultDependentLocality, + TruncateUTF8(base::UTF16ToUTF8(profile.GetRawInfo( + autofill::ADDRESS_HOME_DEPENDENT_LOCALITY)))); +} + +// Class that enables or disables USS based on test parameter. Must be the first +// base class of the test fixture. +// TODO(jkrcal): When the new implementation fully launches, remove this class, +// convert all tests from *_P back to *_F and remove the instance at the end. +class UssSwitchToggler : public testing::WithParamInterface<bool> { + public: + UssSwitchToggler() { + if (GetParam()) { + override_features_.InitAndEnableFeature( + switches::kSyncUSSAutofillWalletData); + } else { + override_features_.InitAndDisableFeature( + switches::kSyncUSSAutofillWalletData); + } + } + + private: + base::test::ScopedFeatureList override_features_; +}; + } // namespace class SingleClientWalletSyncTest : public SyncTest { @@ -154,43 +274,20 @@ DISALLOW_COPY_AND_ASSIGN(SingleClientWalletSyncTest); }; -// Checker that will wait until an asynchronous Wallet datatype enable event -// happens, or times out. -class WalletEnabledChecker : public SingleClientStatusChangeChecker { +// TODO: Merge the two fixtures into one when all tests are passing for USS. +class SingleClientWalletSyncTestIncludingUssTests + : public UssSwitchToggler, + public SingleClientWalletSyncTest { public: - WalletEnabledChecker() - : SingleClientStatusChangeChecker( - sync_datatype_helper::test()->GetSyncService(0)) {} - ~WalletEnabledChecker() override {} + SingleClientWalletSyncTestIncludingUssTests(){}; + ~SingleClientWalletSyncTestIncludingUssTests() override {} - // SingleClientStatusChangeChecker overrides. - bool IsExitConditionSatisfied() override { - return service()->GetActiveDataTypes().Has(syncer::AUTOFILL_WALLET_DATA); - } - std::string GetDebugMessage() const override { - return "Waiting for wallet enable event."; - } + private: + DISALLOW_COPY_AND_ASSIGN(SingleClientWalletSyncTestIncludingUssTests); }; -// Checker that will wait until an asynchronous Wallet datatype disable event -// happens, or times out -class WalletDisabledChecker : public SingleClientStatusChangeChecker { - public: - WalletDisabledChecker() - : SingleClientStatusChangeChecker( - sync_datatype_helper::test()->GetSyncService(0)) {} - ~WalletDisabledChecker() override {} - - // SingleClientStatusChangeChecker overrides. - bool IsExitConditionSatisfied() override { - return !service()->GetActiveDataTypes().Has(syncer::AUTOFILL_WALLET_DATA); - } - std::string GetDebugMessage() const override { - return "Waiting for wallet disable event."; - } -}; - -IN_PROC_BROWSER_TEST_F(SingleClientWalletSyncTest, EnabledByDefault) { +IN_PROC_BROWSER_TEST_P(SingleClientWalletSyncTestIncludingUssTests, + EnabledByDefault) { ASSERT_TRUE(SetupSync()); ASSERT_TRUE(GetClient(0)->service()->GetActiveDataTypes().Has( syncer::AUTOFILL_WALLET_DATA)); @@ -207,6 +304,7 @@ {}, // Disabled. {autofill::features::kAutofillEnableAccountWalletStorage}); + AddDefaultProfile(GetFakeServer()); AddDefaultCard(GetFakeServer()); ASSERT_TRUE(SetupSync()); @@ -219,20 +317,16 @@ ASSERT_NE(nullptr, pdm); std::vector<CreditCard*> cards = pdm->GetCreditCards(); ASSERT_EQ(1uL, cards.size()); + std::vector<AutofillProfile*> profiles = pdm->GetServerProfiles(); + ASSERT_EQ(1uL, profiles.size()); - CreditCard* card = cards[0]; - EXPECT_EQ(CreditCard::MASKED_SERVER_CARD, card->record_type()); - EXPECT_EQ(kDefaultCardID, card->server_id()); - EXPECT_EQ(base::UTF8ToUTF16(kDefaultCardLastFour), card->LastFourDigits()); - EXPECT_EQ(autofill::kAmericanExpressCard, card->network()); - EXPECT_EQ(kDefaultCardExpMonth, card->expiration_month()); - EXPECT_EQ(kDefaultCardExpYear, card->expiration_year()); - EXPECT_EQ(base::UTF8ToUTF16(kDefaultCardName), - card->GetRawInfo(autofill::ServerFieldType::CREDIT_CARD_NAME_FULL)); - EXPECT_EQ(kDefaultBillingAddressId, card->billing_address_id()); + // Check that the data was set correctly. + ExpectDefaultCreditCardValues(*cards[0]); + ExpectDefaultProfileValues(*profiles[0]); - // Check that the card is stored in the profile storage. + // Check that the data is stored in the profile storage. EXPECT_EQ(1U, GetServerCards(GetProfileWebDataService(0)).size()); + EXPECT_EQ(1U, GetServerProfiles(GetProfileWebDataService(0)).size()); } // ChromeOS does not support late signin after profile creation, so the test @@ -241,7 +335,7 @@ // TODO(crbug.com/853688): Reenable once the USS implementation of // AUTOFILL_WALLET_DATA (AutofillWalletSyncBridge) has sufficient functionality. IN_PROC_BROWSER_TEST_F(SingleClientWalletSyncTest, - DISABLED_DownloadAccountStorage) { + DISABLED_DownloadAccountStorage_Card) { base::test::ScopedFeatureList feature_list; feature_list.InitWithFeatures( // Enabled. @@ -252,6 +346,7 @@ ASSERT_TRUE(SetupClients()); AddDefaultCard(GetFakeServer()); + AddDefaultProfile(GetFakeServer()); ASSERT_TRUE(GetClient(0)->SignIn()); ASSERT_TRUE(GetClient(0)->AwaitEngineInitialization( @@ -267,33 +362,30 @@ auto account_data = GetAccountWebDataService(0); ASSERT_NE(nullptr, account_data); - // Check that no card is stored in the profile storage. + // Check that no data is stored in the profile storage. EXPECT_EQ(0U, GetServerCards(profile_data).size()); + EXPECT_EQ(0U, GetServerProfiles(profile_data).size()); - // Check that one card is stored in the account storage. + // Check that one card and one profile are stored in the account storage. EXPECT_EQ(1U, GetServerCards(account_data).size()); + EXPECT_EQ(1U, GetServerProfiles(account_data).size()); autofill::PersonalDataManager* pdm = GetPersonalDataManager(0); ASSERT_NE(nullptr, pdm); std::vector<CreditCard*> cards = pdm->GetCreditCards(); ASSERT_EQ(1uL, cards.size()); + std::vector<AutofillProfile*> profiles = pdm->GetServerProfiles(); + ASSERT_EQ(1uL, profiles.size()); - CreditCard* card = cards[0]; - EXPECT_EQ(CreditCard::MASKED_SERVER_CARD, card->record_type()); - EXPECT_EQ(kDefaultCardID, card->server_id()); - EXPECT_EQ(base::UTF8ToUTF16(kDefaultCardLastFour), card->LastFourDigits()); - EXPECT_EQ(autofill::kAmericanExpressCard, card->network()); - EXPECT_EQ(kDefaultCardExpMonth, card->expiration_month()); - EXPECT_EQ(kDefaultCardExpYear, card->expiration_year()); - EXPECT_EQ(base::UTF8ToUTF16(kDefaultCardName), - card->GetRawInfo(autofill::ServerFieldType::CREDIT_CARD_NAME_FULL)); - EXPECT_EQ(kDefaultBillingAddressId, card->billing_address_id()); + ExpectDefaultCreditCardValues(*cards[0]); + ExpectDefaultProfileValues(*profiles[0]); } #endif // !defined(OS_CHROMEOS) // Wallet data should get cleared from the database when sync is disabled. IN_PROC_BROWSER_TEST_F(SingleClientWalletSyncTest, ClearOnDisableSync) { AddDefaultCard(GetFakeServer()); + AddDefaultProfile(GetFakeServer()); ASSERT_TRUE(SetupSync()); // Make sure the card is in the DB. @@ -312,6 +404,7 @@ // flag is disabled. IN_PROC_BROWSER_TEST_F(SingleClientWalletSyncTest, ClearOnDisableWalletSync) { AddDefaultCard(GetFakeServer()); + AddDefaultProfile(GetFakeServer()); ASSERT_TRUE(SetupSync()); // Make sure the card is in the DB. @@ -331,6 +424,7 @@ IN_PROC_BROWSER_TEST_F(SingleClientWalletSyncTest, ClearOnDisableWalletAutofill) { AddDefaultCard(GetFakeServer()); + AddDefaultProfile(GetFakeServer()); ASSERT_TRUE(SetupSync()); // Make sure the card is in the DB. @@ -350,7 +444,7 @@ // Wallet data present on the client should be cleared in favor of the new data // synced down form the server. IN_PROC_BROWSER_TEST_F(SingleClientWalletSyncTest, - NewWalletCardRemovesExistingCard) { + NewWalletCardRemovesExistingCardAndProfile) { ASSERT_TRUE(SetupClients()); autofill::PersonalDataManager* pdm = GetPersonalDataManager(0); ASSERT_NE(nullptr, pdm); @@ -360,6 +454,12 @@ std::vector<CreditCard> credit_cards = {credit_card}; autofill_helper::SetServerCreditCards(0, credit_cards); + // Add a server profile on the client. + AutofillProfile profile(AutofillProfile::SERVER_PROFILE, "a123"); + profile.SetRawInfo(autofill::COMPANY_NAME, ASCIIToUTF16("JustATest")); + std::vector<AutofillProfile> client_profiles = {profile}; + autofill_helper::SetServerProfiles(0, client_profiles); + // Refresh the pdm so that it gets cards from autofill table. RefreshAndWaitForOnPersonalDataChanged(pdm); @@ -368,6 +468,12 @@ ASSERT_EQ(1uL, cards.size()); EXPECT_EQ("a123", cards[0]->server_id()); + // Make sure the profile was added correctly. + std::vector<AutofillProfile*> profiles = pdm->GetServerProfiles(); + ASSERT_EQ(1uL, profiles.size()); + EXPECT_EQ("JustATest", TruncateUTF8(base::UTF16ToUTF8( + profiles[0]->GetRawInfo(autofill::COMPANY_NAME)))); + // Add a new card from the server and sync it down. AddDefaultCard(GetFakeServer()); ASSERT_TRUE(SetupSync()); @@ -376,6 +482,59 @@ cards = pdm->GetCreditCards(); ASSERT_EQ(1uL, cards.size()); EXPECT_EQ(kDefaultCardID, cards[0]->server_id()); + + // There should be no profile present. + profiles = pdm->GetServerProfiles(); + ASSERT_EQ(0uL, profiles.size()); +} + +// Wallet data present on the client should be cleared in favor of the new data +// synced down form the server. +IN_PROC_BROWSER_TEST_F(SingleClientWalletSyncTest, + NewWalletProfileRemovesExistingProfileAndCard) { + ASSERT_TRUE(SetupClients()); + autofill::PersonalDataManager* pdm = GetPersonalDataManager(0); + ASSERT_NE(nullptr, pdm); + + // Add a server profile on the client. + AutofillProfile profile(AutofillProfile::SERVER_PROFILE, "a123"); + profile.SetRawInfo(autofill::COMPANY_NAME, ASCIIToUTF16("JustATest")); + std::vector<AutofillProfile> client_profiles = {profile}; + autofill_helper::SetServerProfiles(0, client_profiles); + + // Add a server credit card on the client. + CreditCard credit_card(CreditCard::MASKED_SERVER_CARD, "a123"); + std::vector<CreditCard> credit_cards = {credit_card}; + autofill_helper::SetServerCreditCards(0, credit_cards); + + // Refresh the pdm so that it gets cards from autofill table. + RefreshAndWaitForOnPersonalDataChanged(pdm); + + // Make sure the profile was added correctly. + std::vector<AutofillProfile*> profiles = pdm->GetServerProfiles(); + ASSERT_EQ(1uL, profiles.size()); + EXPECT_EQ("JustATest", TruncateUTF8(base::UTF16ToUTF8( + profiles[0]->GetRawInfo(autofill::COMPANY_NAME)))); + + // Make sure the card was added correctly. + std::vector<CreditCard*> cards = pdm->GetCreditCards(); + ASSERT_EQ(1uL, cards.size()); + EXPECT_EQ("a123", cards[0]->server_id()); + + // Add a new profile from the server and sync it down. + AddDefaultProfile(GetFakeServer()); + ASSERT_TRUE(SetupSync()); + + // The only profile present on the client should be the one from the server. + profiles = pdm->GetServerProfiles(); + ASSERT_EQ(1uL, profiles.size()); + EXPECT_EQ(kDefaultCompanyName, + TruncateUTF8(base::UTF16ToUTF8( + profiles[0]->GetRawInfo(autofill::COMPANY_NAME)))); + + // There should be not card present. + cards = pdm->GetCreditCards(); + ASSERT_EQ(0uL, cards.size()); } // Tests that a local billing address id set on a card on the client should not @@ -447,3 +606,7 @@ EXPECT_EQ(kDefaultCardID, cards[0]->server_id()); EXPECT_EQ(kDefaultBillingAddressId, cards[0]->billing_address_id()); } + +INSTANTIATE_TEST_CASE_P(USS, + SingleClientWalletSyncTestIncludingUssTests, + ::testing::Values(false, true));
diff --git a/chrome/browser/sync/test/integration/two_client_printers_sync_test.cc b/chrome/browser/sync/test/integration/two_client_printers_sync_test.cc index ffb3bc9..e827dcd 100644 --- a/chrome/browser/sync/test/integration/two_client_printers_sync_test.cc +++ b/chrome/browser/sync/test/integration/two_client_printers_sync_test.cc
@@ -125,6 +125,12 @@ // Wait for a non-zero period (200ms). base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(200)); + // Run all tasks so the first description change is applied. + // TODO(crbug.com/810408): This is a temporary fix to prevent flakiness. Tasks + // shouldn't run between description changes, because it prevents a real + // conflict from happening. + content::RunAllTasksUntilIdle(); + ASSERT_TRUE( EditPrinterDescription(GetPrinterStore(0), 0, kLatestDescription));
diff --git a/chrome/browser/sync_file_system/local/syncable_file_system_operation.cc b/chrome/browser/sync_file_system/local/syncable_file_system_operation.cc index e61a8b37..d89215f4 100644 --- a/chrome/browser/sync_file_system/local/syncable_file_system_operation.cc +++ b/chrome/browser/sync_file_system/local/syncable_file_system_operation.cc
@@ -277,9 +277,9 @@ void SyncableFileSystemOperation::CreateSnapshotFile( const FileSystemURL& path, - const SnapshotFileCallback& callback) { + SnapshotFileCallback callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - impl_->CreateSnapshotFile(path, callback); + impl_->CreateSnapshotFile(path, std::move(callback)); } void SyncableFileSystemOperation::CopyInForeignFile(
diff --git a/chrome/browser/sync_file_system/local/syncable_file_system_operation.h b/chrome/browser/sync_file_system/local/syncable_file_system_operation.h index 9341b2894..2f284910 100644 --- a/chrome/browser/sync_file_system/local/syncable_file_system_operation.h +++ b/chrome/browser/sync_file_system/local/syncable_file_system_operation.h
@@ -77,7 +77,7 @@ const OpenFileCallback& callback) override; void Cancel(const StatusCallback& cancel_callback) override; void CreateSnapshotFile(const storage::FileSystemURL& path, - const SnapshotFileCallback& callback) override; + SnapshotFileCallback callback) override; void CopyInForeignFile(const base::FilePath& src_local_disk_path, const storage::FileSystemURL& dest_url, const StatusCallback& callback) override;
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 48509f7..25fd5eb2 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -1882,8 +1882,6 @@ "ash/session_controller_client.h", "ash/session_util.cc", "ash/session_util.h", - "ash/shell_state_client.cc", - "ash/shell_state_client.h", "ash/system_tray_client.cc", "ash/system_tray_client.h", "ash/tab_scrubber.cc", @@ -2807,6 +2805,11 @@ "autofill/local_card_migration_bubble.h", "autofill/local_card_migration_bubble_controller_impl.cc", "autofill/local_card_migration_bubble_controller_impl.h", + "autofill/local_card_migration_dialog.h", + "autofill/local_card_migration_dialog_controller_impl.cc", + "autofill/local_card_migration_dialog_controller_impl.h", + "autofill/local_card_migration_dialog_factory.h", + "autofill/local_card_migration_dialog_state.h", "autofill/save_card_bubble_controller_impl.cc", "autofill/save_card_bubble_controller_impl.h", "autofill/save_card_bubble_view.h", @@ -2845,6 +2848,8 @@ "views/autofill/card_unmask_prompt_views.h", "views/autofill/local_card_migration_bubble_views.cc", "views/autofill/local_card_migration_bubble_views.h", + "views/autofill/local_card_migration_dialog_view.cc", + "views/autofill/local_card_migration_dialog_view.h", "views/autofill/save_card_bubble_views.cc", "views/autofill/save_card_bubble_views.h", "views/autofill/save_card_manage_cards_bubble_views.cc", @@ -2936,6 +2941,8 @@ "views/login_handler_views.cc", "views/login_view.cc", "views/login_view.h", + "views/overlay/close_image_button.cc", + "views/overlay/close_image_button.h", "views/overlay/overlay_window_views.cc", "views/overlay/overlay_window_views.h", "views/page_info/chosen_object_view.cc", @@ -3333,7 +3340,6 @@ "views/tabs/tab_strip_controller.h", "views/tabs/tab_strip_layout.cc", "views/tabs/tab_strip_layout.h", - "views/tabs/window_finder.cc", "views/tabs/window_finder.h", "views/theme_copying_widget.cc", "views/theme_copying_widget.h", @@ -3402,6 +3408,7 @@ "views/profiles/forced_reauthentication_dialog_view.h", "views/sync/one_click_signin_dialog_view.cc", "views/sync/one_click_signin_dialog_view.h", + "views/tabs/window_finder.cc", ] }
diff --git a/chrome/browser/ui/ash/accessibility/ax_tree_source_aura_unittest.cc b/chrome/browser/ui/ash/accessibility/ax_tree_source_aura_unittest.cc index b981592..49fba81 100644 --- a/chrome/browser/ui/ash/accessibility/ax_tree_source_aura_unittest.cc +++ b/chrome/browser/ui/ash/accessibility/ax_tree_source_aura_unittest.cc
@@ -54,8 +54,12 @@ void SetUp() override { AshTestBase::SetUp(); + // This code is running outside of Ash. + SetRunningOutsideAsh(); + widget_ = new Widget(); Widget::InitParams init_params(Widget::InitParams::TYPE_WINDOW_FRAMELESS); + init_params.context = CurrentContext(); widget_->Init(init_params); content_ = new View();
diff --git a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc index 76483973..1138ed8a 100644 --- a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc +++ b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc
@@ -34,7 +34,6 @@ #include "chrome/browser/ui/ash/network/network_connect_delegate_chromeos.h" #include "chrome/browser/ui/ash/network/network_portal_notification_controller.h" #include "chrome/browser/ui/ash/session_controller_client.h" -#include "chrome/browser/ui/ash/shell_state_client.h" #include "chrome/browser/ui/ash/system_tray_client.h" #include "chrome/browser/ui/ash/tab_scrubber.h" #include "chrome/browser/ui/ash/tablet_mode_client.h" @@ -197,9 +196,6 @@ session_controller_client_ = std::make_unique<SessionControllerClient>(); session_controller_client_->Init(); - shell_state_client_ = std::make_unique<ShellStateClient>(); - shell_state_client_->Init(); - system_tray_client_ = std::make_unique<SystemTrayClient>(); // Makes mojo request to TabletModeController in ash. @@ -276,7 +272,6 @@ volume_controller_.reset(); system_tray_client_.reset(); - shell_state_client_.reset(); session_controller_client_.reset(); chrome_new_window_client_.reset(); network_portal_notification_controller_.reset();
diff --git a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.h b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.h index 15b6b1ad..d6e21a35 100644 --- a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.h +++ b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.h
@@ -37,7 +37,6 @@ class NetworkConnectDelegateChromeOS; class NightLightClient; class SessionControllerClient; -class ShellStateClient; class SystemTrayClient; class TabletModeClient; class VolumeController; @@ -91,7 +90,6 @@ std::unique_ptr<ChromeNewWindowClient> chrome_new_window_client_; std::unique_ptr<ImeControllerClient> ime_controller_client_; std::unique_ptr<SessionControllerClient> session_controller_client_; - std::unique_ptr<ShellStateClient> shell_state_client_; std::unique_ptr<SystemTrayClient> system_tray_client_; std::unique_ptr<TabletModeClient> tablet_mode_client_; std::unique_ptr<VolumeController> volume_controller_;
diff --git a/chrome/browser/ui/ash/ksv/DEPS b/chrome/browser/ui/ash/ksv/DEPS index da2a8da..f361719 100644 --- a/chrome/browser/ui/ash/ksv/DEPS +++ b/chrome/browser/ui/ash/ksv/DEPS
@@ -9,6 +9,7 @@ # mash-ok. https://crbug.com/841020 "keyboard_shortcut_viewer_util\.cc": [ "+ash/components/shortcut_viewer/views/keyboard_shortcut_view.h", + "+ash/shell.h", ], # Tests. "keyboard_shortcut_viewer_metadata_unittest\.cc": [
diff --git a/chrome/browser/ui/ash/ksv/keyboard_shortcut_viewer_util.cc b/chrome/browser/ui/ash/ksv/keyboard_shortcut_viewer_util.cc index 74e77e76..c74a63c 100644 --- a/chrome/browser/ui/ash/ksv/keyboard_shortcut_viewer_util.cc +++ b/chrome/browser/ui/ash/ksv/keyboard_shortcut_viewer_util.cc
@@ -7,9 +7,11 @@ #include "ash/components/shortcut_viewer/public/mojom/shortcut_viewer.mojom.h" #include "ash/components/shortcut_viewer/views/keyboard_shortcut_view.h" #include "ash/public/cpp/ash_features.h" +#include "ash/shell.h" #include "base/time/time.h" #include "content/public/common/service_manager_connection.h" #include "services/service_manager/public/cpp/connector.h" +#include "ui/base/ui_base_features.h" namespace keyboard_shortcut_viewer_util { @@ -23,7 +25,15 @@ &shortcut_viewer_ptr); shortcut_viewer_ptr->Toggle(user_gesture_time); } else { - keyboard_shortcut_viewer::KeyboardShortcutView::Toggle(user_gesture_time); + // A value of |null| while IsSingleProcessMash() results in the keyboard + // shortcut viewer using DesktopNativeWidgetAura, just as all other non-ash + // codes does in single-process-mash. + aura::Window* context = + features::IsSingleProcessMash() + ? nullptr + : ash::Shell::Get()->GetRootWindowForNewWindows(); + keyboard_shortcut_viewer::KeyboardShortcutView::Toggle(user_gesture_time, + context); } }
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc index 63baeb4a..e24c98a7 100644 --- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc +++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc
@@ -954,6 +954,7 @@ views::Widget* CreateArcWindow(const std::string& window_app_id) { views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); params.bounds = gfx::Rect(5, 5, 20, 20); + params.context = ash_test_helper()->CurrentContext(); views::Widget* widget = new views::Widget(); widget->Init(params); // Set ARC id before showing the window to be recognized in
diff --git a/chrome/browser/ui/ash/launcher/crostini_app_display.cc b/chrome/browser/ui/ash/launcher/crostini_app_display.cc index 18f321b..ed9ce2b 100644 --- a/chrome/browser/ui/ash/launcher/crostini_app_display.cc +++ b/chrome/browser/ui/ash/launcher/crostini_app_display.cc
@@ -1,9 +1,11 @@ // Copyright 2018 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. + #include "chrome/browser/ui/ash/launcher/crostini_app_display.h" -#include "chrome/browser/ui/ash/shell_state_client.h" +#include "ui/display/display.h" +#include "ui/display/screen.h" #include "ui/display/types/display_constants.h" CrostiniAppDisplay::CrostiniAppDisplay() = default; @@ -28,6 +30,6 @@ int64_t CrostiniAppDisplay::GetDisplayIdForAppId(const std::string& app_id) { auto it = app_id_to_display_id_.find(app_id); if (it == app_id_to_display_id_.end()) - return ShellStateClient::Get()->display_id_for_new_windows(); + return display::Screen::GetScreen()->GetDisplayForNewWindows().id(); return it->second; }
diff --git a/chrome/browser/ui/ash/launcher/extension_launcher_context_menu.cc b/chrome/browser/ui/ash/launcher/extension_launcher_context_menu.cc index be7e1d59..26a56d0 100644 --- a/chrome/browser/ui/ash/launcher/extension_launcher_context_menu.cc +++ b/chrome/browser/ui/ash/launcher/extension_launcher_context_menu.cc
@@ -16,13 +16,13 @@ #include "chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.h" #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller_util.h" -#include "chrome/browser/ui/ash/shell_state_client.h" #include "chrome/browser/ui/browser_commands.h" #include "chrome/common/extensions/extension_constants.h" #include "chrome/grit/generated_resources.h" #include "content/public/common/context_menu_params.h" #include "extensions/browser/extension_prefs.h" #include "ui/base/ui_base_features.h" +#include "ui/display/screen.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/views/controls/menu/menu_config.h" @@ -41,11 +41,11 @@ public: explicit ScopedDisplayIdForNewWindows(int64_t display_id) : old_display_id_(display_id) { - ShellStateClient::Get()->SetDisplayIdForNewWindows(display_id); + display::Screen::GetScreen()->SetDisplayForNewWindows(display_id); } ~ScopedDisplayIdForNewWindows() { - ShellStateClient::Get()->SetDisplayIdForNewWindows(old_display_id_); + display::Screen::GetScreen()->SetDisplayForNewWindows(old_display_id_); } private:
diff --git a/chrome/browser/ui/ash/launcher/launcher_context_menu_unittest.cc b/chrome/browser/ui/ash/launcher/launcher_context_menu_unittest.cc index af35871..bf04cf6 100644 --- a/chrome/browser/ui/ash/launcher/launcher_context_menu_unittest.cc +++ b/chrome/browser/ui/ash/launcher/launcher_context_menu_unittest.cc
@@ -93,6 +93,7 @@ views::Widget* CreateArcWindow(std::string& window_app_id) { views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); views::Widget* widget = new views::Widget(); + params.context = CurrentContext(); widget->Init(params); widget->Show(); widget->Activate();
diff --git a/chrome/browser/ui/ash/login_screen_client.cc b/chrome/browser/ui/ash/login_screen_client.cc index 86ae83a..7dbaba1 100644 --- a/chrome/browser/ui/ash/login_screen_client.cc +++ b/chrome/browser/ui/ash/login_screen_client.cc
@@ -7,6 +7,7 @@ #include <utility> #include "ash/public/interfaces/constants.mojom.h" +#include "chrome/browser/chromeos/login/help_app_launcher.h" #include "chrome/browser/chromeos/login/lock/screen_locker.h" #include "chrome/browser/chromeos/login/login_auth_recorder.h" #include "chrome/browser/chromeos/login/reauth_stats.h" @@ -181,7 +182,9 @@ } void LoginScreenClient::ShowAccountAccessHelpApp() { - chromeos::LoginDisplayHost::default_host()->ShowAccountAccessHelpApp(); + scoped_refptr<chromeos::HelpAppLauncher>( + new chromeos::HelpAppLauncher(nullptr)) + ->ShowHelpTopic(chromeos::HelpAppLauncher::HELP_CANT_ACCESS_ACCOUNT); } void LoginScreenClient::LoadWallpaper(const AccountId& account_id) {
diff --git a/chrome/browser/ui/ash/network/enrollment_dialog_view.cc b/chrome/browser/ui/ash/network/enrollment_dialog_view.cc index d3144a9..9c6ff62 100644 --- a/chrome/browser/ui/ash/network/enrollment_dialog_view.cc +++ b/chrome/browser/ui/ash/network/enrollment_dialog_view.cc
@@ -279,6 +279,7 @@ case LoginState::LOGGED_IN_USER_GUEST: return true; case LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT: + case LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT_MANAGED: return false; case LoginState::LOGGED_IN_USER_SUPERVISED: return true;
diff --git a/chrome/browser/ui/ash/shell_state_client.cc b/chrome/browser/ui/ash/shell_state_client.cc deleted file mode 100644 index 3a8bc757..0000000 --- a/chrome/browser/ui/ash/shell_state_client.cc +++ /dev/null
@@ -1,79 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/ash/shell_state_client.h" - -#include <utility> - -#include "ash/public/interfaces/constants.mojom.h" -#include "chrome/browser/ui/window_sizer/window_sizer.h" -#include "content/public/common/service_manager_connection.h" -#include "services/service_manager/public/cpp/connector.h" -#include "ui/display/display.h" -#include "ui/display/screen.h" -#include "ui/display/types/display_constants.h" - -namespace { - -ShellStateClient* g_shell_state_client = nullptr; - -} // namespace - -ShellStateClient::ShellStateClient() - : binding_(this), display_id_for_new_windows_(display::kInvalidDisplayId) { - DCHECK(!g_shell_state_client); - g_shell_state_client = this; -} - -ShellStateClient::~ShellStateClient() { - DCHECK_EQ(this, g_shell_state_client); - g_shell_state_client = nullptr; -} - -void ShellStateClient::Init() { - content::ServiceManagerConnection::GetForProcess() - ->GetConnector() - ->BindInterface(ash::mojom::kServiceName, &shell_state_ptr_); - BindAndAddClient(); -} - -void ShellStateClient::InitForTesting(ash::mojom::ShellStatePtr shell_state) { - shell_state_ptr_ = std::move(shell_state); - BindAndAddClient(); -} - -// static -ShellStateClient* ShellStateClient::Get() { - return g_shell_state_client; -} - -void ShellStateClient::SetDisplayIdForNewWindows(int64_t display_id) { - display_id_for_new_windows_ = display_id; -} - -void ShellStateClient::FlushForTesting() { - shell_state_ptr_.FlushForTesting(); -} - -void ShellStateClient::BindAndAddClient() { - ash::mojom::ShellStateClientPtr client_ptr; - binding_.Bind(mojo::MakeRequest(&client_ptr)); - shell_state_ptr_->AddClient(std::move(client_ptr)); -} - -// static -display::Display WindowSizer::GetDisplayForNewWindow(const gfx::Rect& bounds) { - display::Screen* screen = display::Screen::GetScreen(); - // May be null in unit tests. - if (g_shell_state_client) { - // Prefer the display where the user last activated any window. - const int64_t id = g_shell_state_client->display_id_for_new_windows(); - display::Display display; - if (screen->GetDisplayWithDisplayId(id, &display)) - return display; - } - - // Otherwise find the display that best matches the bounds. - return screen->GetDisplayMatching(bounds); -}
diff --git a/chrome/browser/ui/ash/shell_state_client.h b/chrome/browser/ui/ash/shell_state_client.h deleted file mode 100644 index a2e76a6f..0000000 --- a/chrome/browser/ui/ash/shell_state_client.h +++ /dev/null
@@ -1,56 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_UI_ASH_SHELL_STATE_CLIENT_H_ -#define CHROME_BROWSER_UI_ASH_SHELL_STATE_CLIENT_H_ - -#include <memory> - -#include "ash/public/interfaces/shell_state.mojom.h" -#include "base/macros.h" -#include "mojo/public/cpp/bindings/binding.h" - -// Caches ash::Shell state. The initial values are loaded asynchronously at -// startup because we don't want Chrome to block on startup waiting for Ash. -class ShellStateClient : public ash::mojom::ShellStateClient { - public: - ShellStateClient(); - ~ShellStateClient() override; - - // Initializes and connects to ash. - void Init(); - - // Tests can provide a mock mojo interface for the ash interface. - void InitForTesting(ash::mojom::ShellStatePtr shell_state_ptr); - - static ShellStateClient* Get(); - - int64_t display_id_for_new_windows() const { - return display_id_for_new_windows_; - } - - // ash::mojom::ShellStateClient: - void SetDisplayIdForNewWindows(int64_t display_id) override; - - // Flushes the mojo pipe to ash. - void FlushForTesting(); - - private: - friend class ScopedDisplayIdForNewWindows; - - // Binds this object to its mojo interface and registers it as an ash client. - void BindAndAddClient(); - - // The mojo interface in ash. - ash::mojom::ShellStatePtr shell_state_ptr_; - - // Binds to the observer interface from ash. - mojo::Binding<ash::mojom::ShellStateClient> binding_; - - int64_t display_id_for_new_windows_; - - DISALLOW_COPY_AND_ASSIGN(ShellStateClient); -}; - -#endif // CHROME_BROWSER_UI_ASH_SHELL_STATE_CLIENT_H_
diff --git a/chrome/browser/ui/ash/shell_state_client_unittest.cc b/chrome/browser/ui/ash/shell_state_client_unittest.cc deleted file mode 100644 index e483284..0000000 --- a/chrome/browser/ui/ash/shell_state_client_unittest.cc +++ /dev/null
@@ -1,54 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/ash/shell_state_client.h" - -#include "ash/public/interfaces/shell_state.mojom.h" -#include "base/macros.h" -#include "base/test/scoped_task_environment.h" -#include "mojo/public/cpp/bindings/binding.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace { - -class TestShellState : ash::mojom::ShellState { - public: - TestShellState() : binding_(this) {} - ~TestShellState() override = default; - - ash::mojom::ShellStatePtr CreateInterfacePtr() { - ash::mojom::ShellStatePtr ptr; - binding_.Bind(mojo::MakeRequest(&ptr)); - return ptr; - } - - // ash::mojom::ShellState: - void AddClient(ash::mojom::ShellStateClientPtr client) override { - ++add_client_count_; - } - - int add_client_count() const { return add_client_count_; } - - private: - mojo::Binding<ash::mojom::ShellState> binding_; - int add_client_count_ = 0; - - DISALLOW_COPY_AND_ASSIGN(TestShellState); -}; - -TEST(ShellStateClientTest, Basics) { - base::test::ScopedTaskEnvironment scoped_task_enviroment; - ShellStateClient client; - TestShellState ash_shell_state; - client.InitForTesting(ash_shell_state.CreateInterfacePtr()); - client.FlushForTesting(); - - // Client was added to ash. - EXPECT_TRUE(ash_shell_state.add_client_count()); - - client.SetDisplayIdForNewWindows(123); - EXPECT_EQ(123, client.display_id_for_new_windows()); -} - -} // namespace
diff --git a/chrome/browser/ui/autofill/local_card_migration_dialog.h b/chrome/browser/ui/autofill/local_card_migration_dialog.h new file mode 100644 index 0000000..0bdaa1e0 --- /dev/null +++ b/chrome/browser/ui/autofill/local_card_migration_dialog.h
@@ -0,0 +1,31 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_H_ +#define CHROME_BROWSER_UI_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_H_ + +#include "base/callback.h" +#include "base/macros.h" + +namespace autofill { + +// The cross-platform UI interface which displays all the local card migration +// dialogs. +class LocalCardMigrationDialog { + public: + virtual void ShowDialog( + base::OnceClosure user_accepted_migration_closure) = 0; + virtual void CloseDialog() = 0; + + protected: + LocalCardMigrationDialog() {} + virtual ~LocalCardMigrationDialog() {} + + private: + DISALLOW_COPY_AND_ASSIGN(LocalCardMigrationDialog); +}; + +} // namespace autofill + +#endif // CHROME_BROWSER_UI_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_H_ \ No newline at end of file
diff --git a/chrome/browser/ui/autofill/local_card_migration_dialog_controller_impl.cc b/chrome/browser/ui/autofill/local_card_migration_dialog_controller_impl.cc new file mode 100644 index 0000000..c229f99 --- /dev/null +++ b/chrome/browser/ui/autofill/local_card_migration_dialog_controller_impl.cc
@@ -0,0 +1,73 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/autofill/local_card_migration_dialog_controller_impl.h" + +#include <stddef.h> + +#include "base/bind.h" +#include "base/logging.h" +#include "base/strings/string_number_conversions.h" +#include "base/strings/string_util.h" +#include "base/strings/utf_string_conversions.h" +#include "base/time/time.h" +#include "build/build_config.h" +#include "chrome/browser/ui/autofill/local_card_migration_dialog.h" +#include "chrome/browser/ui/autofill/local_card_migration_dialog_state.h" +#include "components/autofill/core/browser/autofill_metrics.h" +#include "components/autofill/core/browser/local_card_migration_manager.h" +#include "components/autofill/core/browser/validation.h" +#include "components/autofill/core/common/autofill_clock.h" + +// TODO(crbug.com/867194): Add time counter for showing 'close' button if +// uploading takes too long. + +namespace autofill { + +LocalCardMigrationDialogControllerImpl::LocalCardMigrationDialogControllerImpl() + : local_card_migration_dialog_(nullptr) {} + +LocalCardMigrationDialogControllerImpl:: + ~LocalCardMigrationDialogControllerImpl() { + if (local_card_migration_dialog_) + local_card_migration_dialog_->CloseDialog(); +} + +void LocalCardMigrationDialogControllerImpl::ShowDialog( + LocalCardMigrationDialog* local_card_migration_dialog, + base::OnceClosure user_accepted_migration_closure) { + if (local_card_migration_dialog_) + local_card_migration_dialog_->CloseDialog(); + + local_card_migration_dialog_ = local_card_migration_dialog; + local_card_migration_dialog_->ShowDialog( + std::move(user_accepted_migration_closure)); +} + +LocalCardMigrationDialogState +LocalCardMigrationDialogControllerImpl::GetViewState() const { + return view_state_; +} + +void LocalCardMigrationDialogControllerImpl::SetViewState( + LocalCardMigrationDialogState view_state) { + view_state_ = view_state; +} + +std::vector<MigratableCreditCard>& +LocalCardMigrationDialogControllerImpl::GetCardList() { + return migratable_credit_cards_; +} + +void LocalCardMigrationDialogControllerImpl::SetCardList( + std::vector<MigratableCreditCard>& migratable_credit_cards) { + migratable_credit_cards_ = migratable_credit_cards; +} + +void LocalCardMigrationDialogControllerImpl::OnDialogClosed() { + if (local_card_migration_dialog_) + local_card_migration_dialog_ = nullptr; +} + +} // namespace autofill \ No newline at end of file
diff --git a/chrome/browser/ui/autofill/local_card_migration_dialog_controller_impl.h b/chrome/browser/ui/autofill/local_card_migration_dialog_controller_impl.h new file mode 100644 index 0000000..ebf49d78 --- /dev/null +++ b/chrome/browser/ui/autofill/local_card_migration_dialog_controller_impl.h
@@ -0,0 +1,56 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_CONTROLLER_IMPL_H_ +#define CHROME_BROWSER_UI_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_CONTROLLER_IMPL_H_ + +#include <memory> + +#include "base/macros.h" +#include "components/autofill/core/browser/ui/local_card_migration_dialog_controller.h" +#include "content/public/browser/web_contents_user_data.h" + +namespace autofill { + +class LocalCardMigrationDialog; + +// This per-tab controller is lazily initialized and owns a +// LocalCardMigrationDialog. It's also responsible for reshowing the original +// dialog that the migration dialog interrupted. +class LocalCardMigrationDialogControllerImpl + : public LocalCardMigrationDialogController, + public content::WebContentsUserData< + LocalCardMigrationDialogControllerImpl> { + public: + ~LocalCardMigrationDialogControllerImpl() override; + + void ShowDialog(LocalCardMigrationDialog* local_card_migration_Dialog, + base::OnceClosure user_accepted_migration_closure_); + + // LocalCardMigrationDialogController: + LocalCardMigrationDialogState GetViewState() const override; + void SetViewState(LocalCardMigrationDialogState view_state) override; + std::vector<MigratableCreditCard>& GetCardList() override; + void SetCardList(std::vector<MigratableCreditCard>& card_list) override; + void OnDialogClosed() override; + + protected: + explicit LocalCardMigrationDialogControllerImpl(); + + private: + friend class content::WebContentsUserData< + LocalCardMigrationDialogControllerImpl>; + + LocalCardMigrationDialog* local_card_migration_dialog_; + + LocalCardMigrationDialogState view_state_; + + std::vector<MigratableCreditCard> migratable_credit_cards_; + + DISALLOW_COPY_AND_ASSIGN(LocalCardMigrationDialogControllerImpl); +}; + +} // namespace autofill + +#endif // CHROME_BROWSER_UI_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_CONTROLLER_IMPL_H_ \ No newline at end of file
diff --git a/chrome/browser/ui/autofill/local_card_migration_dialog_factory.h b/chrome/browser/ui/autofill/local_card_migration_dialog_factory.h new file mode 100644 index 0000000..ad4ad63d --- /dev/null +++ b/chrome/browser/ui/autofill/local_card_migration_dialog_factory.h
@@ -0,0 +1,23 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_FACTORY_H_ +#define CHROME_BROWSER_UI_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_FACTORY_H_ + +namespace content { +class WebContents; +} + +namespace autofill { + +class LocalCardMigrationDialogController; +class LocalCardMigrationDialog; + +LocalCardMigrationDialog* CreateLocalCardMigrationDialogView( + LocalCardMigrationDialogController* controller, + content::WebContents* web_contents); + +} // namespace autofill + +#endif // CHROME_BROWSER_UI_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_FACTORY_H_
diff --git a/chrome/browser/ui/autofill/local_card_migration_dialog_state.h b/chrome/browser/ui/autofill/local_card_migration_dialog_state.h new file mode 100644 index 0000000..4bf9fa49 --- /dev/null +++ b/chrome/browser/ui/autofill/local_card_migration_dialog_state.h
@@ -0,0 +1,23 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_STATE_H_ +#define CHROME_BROWSER_UI_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_STATE_H_ + +namespace autofill { + +// The current state of the local card migration dialog. +enum class LocalCardMigrationDialogState { + // Dialog that offers users to migrate browser-saved local cards. + kOffered, + // Dialog that shows to users migration is done. + kFinished, + // Dialog that notifies users there are errors in the process of + // migration, and requires further actions from users. + kActionRequired, +}; + +} // namespace autofill + +#endif // CHROME_BROWSER_UI_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_STATE_H_ \ No newline at end of file
diff --git a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc index cb0f83a2..879bcd6 100644 --- a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc +++ b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc
@@ -123,7 +123,6 @@ } void SaveCardBubbleControllerImpl::ShowBubbleForSignInPromo() { - // TODO(crbug/855186): Implement metrics for sign-in promo. if (!ShouldShowSignInPromo()) return; @@ -158,7 +157,6 @@ is_reshow_ = true; - // TODO(crbug/855186): Implement metrics for sign-in promo. if (current_bubble_type_ == BubbleType::LOCAL_SAVE || current_bubble_type_ == BubbleType::UPLOAD_SAVE) { AutofillMetrics::LogSaveCardPromptMetric( @@ -292,7 +290,8 @@ local_save_card_callback_.Reset(); break; case BubbleType::MANAGE_CARDS: - // TODO(crbug/855186): Implement metrics for [Done] button. + AutofillMetrics::LogManageCardsPromptMetric( + AutofillMetrics::MANAGE_CARDS_DONE, is_upload_save_); return; case BubbleType::SIGN_IN_PROMO: case BubbleType::INACTIVE: @@ -361,7 +360,15 @@ } void SaveCardBubbleControllerImpl::OnManageCardsClicked() { - // TODO(crbug/855186): Implement metrics for sign-in promo. + DCHECK(current_bubble_type_ == BubbleType::MANAGE_CARDS); + + AutofillMetrics::LogManageCardsPromptMetric( + AutofillMetrics::MANAGE_CARDS_MANAGE_CARDS, is_upload_save_); + + ShowPaymentsSettingsPage(); +} + +void SaveCardBubbleControllerImpl::ShowPaymentsSettingsPage() { chrome::ShowSettingsSubPage( chrome::FindBrowserWithWebContents(web_contents()), chrome::kPaymentsSubPage); @@ -487,14 +494,24 @@ timer_.reset(new base::ElapsedTimer()); - if (current_bubble_type_ == BubbleType::LOCAL_SAVE || - current_bubble_type_ == BubbleType::UPLOAD_SAVE) { - AutofillMetrics::LogSaveCardPromptMetric( - AutofillMetrics::SAVE_CARD_PROMPT_SHOWN, is_upload_save_, is_reshow_, - should_request_name_from_user_, - pref_service_->GetInteger( - prefs::kAutofillAcceptSaveCreditCardPromptState), - GetSecurityLevel()); + switch (current_bubble_type_) { + case BubbleType::UPLOAD_SAVE: + case BubbleType::LOCAL_SAVE: + AutofillMetrics::LogSaveCardPromptMetric( + AutofillMetrics::SAVE_CARD_PROMPT_SHOWN, is_upload_save_, is_reshow_, + should_request_name_from_user_, + pref_service_->GetInteger( + prefs::kAutofillAcceptSaveCreditCardPromptState), + GetSecurityLevel()); + break; + case BubbleType::MANAGE_CARDS: + AutofillMetrics::LogManageCardsPromptMetric( + AutofillMetrics::MANAGE_CARDS_SHOWN, is_upload_save_); + break; + case BubbleType::SIGN_IN_PROMO: + break; + case BubbleType::INACTIVE: + NOTREACHED(); } }
diff --git a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.h b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.h index d58cf4a..fac019e 100644 --- a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.h +++ b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.h
@@ -101,6 +101,9 @@ protected: explicit SaveCardBubbleControllerImpl(content::WebContents* web_contents); + // Opens the Payments settings page. + virtual void ShowPaymentsSettingsPage(); + // Returns the time elapsed since |timer_| was initialized. // Exists for testing. virtual base::TimeDelta Elapsed() const;
diff --git a/chrome/browser/ui/autofill/save_card_bubble_controller_impl_unittest.cc b/chrome/browser/ui/autofill/save_card_bubble_controller_impl_unittest.cc index 5006473..eb030af2 100644 --- a/chrome/browser/ui/autofill/save_card_bubble_controller_impl_unittest.cc +++ b/chrome/browser/ui/autofill/save_card_bubble_controller_impl_unittest.cc
@@ -41,6 +41,9 @@ std::make_unique<TestSaveCardBubbleControllerImpl>(web_contents)); } + // Overriding because calling the original function causes unit test to crash. + void ShowPaymentsSettingsPage() override{}; + explicit TestSaveCardBubbleControllerImpl(content::WebContents* web_contents) : SaveCardBubbleControllerImpl(web_contents) {} @@ -940,6 +943,21 @@ EXPECT_EQ(nullptr, controller()->save_card_bubble_view()); } +TEST_F(SaveCardBubbleControllerImplTest, + Metrics_Local_FirstShow_SaveButton_NoBubble) { + scoped_feature_list_.InitAndDisableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + base::HistogramTester histogram_tester; + + ShowLocalBubble(); + controller()->OnSaveButton(); + + // No other bubbles should have popped up. + histogram_tester.ExpectTotalCount("Autofill.SignInPromo", 0); + histogram_tester.ExpectTotalCount("Autofill.ManageCardsPrompt.Local", 0); + histogram_tester.ExpectTotalCount("Autofill.ManageCardsPrompt.Upload", 0); +} + // Tests for Manage Cards. TEST_F(SaveCardBubbleControllerImplTest, @@ -957,6 +975,43 @@ EXPECT_NE(nullptr, controller()->save_card_bubble_view()); } +TEST_F( + SaveCardBubbleControllerImplTest, + Metrics_Local_FirstShow_SaveButton_SigninPromo_Close_Reshow_ManageCards) { + scoped_feature_list_.InitAndEnableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + base::HistogramTester histogram_tester; + + ShowLocalBubble(); + controller()->OnSaveButton(); + CloseAndReshowBubble(); + + // After closing the sign-in promo, clicking the icon should bring + // up the Manage cards bubble. + EXPECT_THAT( + histogram_tester.GetAllSamples("Autofill.ManageCardsPrompt.Local"), + ElementsAre(Bucket(AutofillMetrics::MANAGE_CARDS_SHOWN, 1))); +} + +TEST_F( + SaveCardBubbleControllerImplTest, + Metrics_Local_FirstShow_SaveButton_Close_Reshow_Close_Reshow_ManageCards) { + scoped_feature_list_.InitAndEnableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + base::HistogramTester histogram_tester; + + ShowLocalBubble(); + controller()->OnSaveButton(); + CloseAndReshowBubble(); + CloseAndReshowBubble(); + + // After closing the sign-in promo, clicking the icon should bring + // up the Manage cards bubble. + EXPECT_THAT( + histogram_tester.GetAllSamples("Autofill.ManageCardsPrompt.Local"), + ElementsAre(Bucket(AutofillMetrics::MANAGE_CARDS_SHOWN, 2))); +} + TEST_F(SaveCardBubbleControllerImplTest, Local_FirstShow_SaveButton_SigninPromo_Close_Reshow_Close_Navigate) { scoped_feature_list_.InitAndEnableFeature( @@ -976,6 +1031,78 @@ } TEST_F(SaveCardBubbleControllerImplTest, + Metrics_Local_FirstShow_SaveButton_SigninPromo_Close_Reshow_Navigate) { + scoped_feature_list_.InitAndEnableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + base::HistogramTester histogram_tester; + + ShowLocalBubble(); + controller()->OnSaveButton(); + CloseAndReshowBubble(); + + controller()->set_elapsed(base::TimeDelta::FromSeconds(6)); + controller()->SimulateNavigation(); + + EXPECT_THAT( + histogram_tester.GetAllSamples("Autofill.ManageCardsPrompt.Local"), + ElementsAre(Bucket(AutofillMetrics::MANAGE_CARDS_SHOWN, 1))); +} + +TEST_F( + SaveCardBubbleControllerImplTest, + Metrics_Local_FirstShow_SaveButton_SigninPromo_Close_Reshow_Close_Navigate) { + scoped_feature_list_.InitAndEnableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + base::HistogramTester histogram_tester; + + ShowLocalBubble(); + controller()->OnSaveButton(); + CloseAndReshowBubble(); + controller()->OnBubbleClosed(); + + controller()->set_elapsed(base::TimeDelta::FromSeconds(6)); + controller()->SimulateNavigation(); + + EXPECT_THAT( + histogram_tester.GetAllSamples("Autofill.ManageCardsPrompt.Local"), + ElementsAre(Bucket(AutofillMetrics::MANAGE_CARDS_SHOWN, 1))); +} + +TEST_F(SaveCardBubbleControllerImplTest, + Metrics_Local_ClickManageCardsDoneButton) { + scoped_feature_list_.InitAndEnableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + base::HistogramTester histogram_tester; + + ShowLocalBubble(); + controller()->OnSaveButton(); + CloseAndReshowBubble(); + controller()->OnSaveButton(); + + EXPECT_THAT( + histogram_tester.GetAllSamples("Autofill.ManageCardsPrompt.Local"), + ElementsAre(Bucket(AutofillMetrics::MANAGE_CARDS_SHOWN, 1), + Bucket(AutofillMetrics::MANAGE_CARDS_DONE, 1))); +} + +TEST_F(SaveCardBubbleControllerImplTest, + Metrics_Local_ClickManageCardsManageCardsButton) { + scoped_feature_list_.InitAndEnableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + base::HistogramTester histogram_tester; + + ShowLocalBubble(); + controller()->OnSaveButton(); + CloseAndReshowBubble(); + controller()->OnManageCardsClicked(); + + EXPECT_THAT( + histogram_tester.GetAllSamples("Autofill.ManageCardsPrompt.Local"), + ElementsAre(Bucket(AutofillMetrics::MANAGE_CARDS_SHOWN, 1), + Bucket(AutofillMetrics::MANAGE_CARDS_MANAGE_CARDS, 1))); +} + +TEST_F(SaveCardBubbleControllerImplTest, Upload_FirstShow_SaveButton_NoSigninPromo) { scoped_feature_list_.InitAndEnableFeature( features::kAutofillSaveCardSignInAfterLocalSave); @@ -989,4 +1116,35 @@ EXPECT_EQ(nullptr, controller()->save_card_bubble_view()); } +TEST_F(SaveCardBubbleControllerImplTest, + Metrics_Upload_FirstShow_SaveButton_NoSigninPromo) { + scoped_feature_list_.InitAndEnableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + base::HistogramTester histogram_tester; + + ShowUploadBubble(); + controller()->OnSaveButton(); + + // No other bubbles should have popped up. + histogram_tester.ExpectTotalCount("Autofill.SignInPromo", 0); + histogram_tester.ExpectTotalCount("Autofill.ManageCardsPrompt.Local", 0); + histogram_tester.ExpectTotalCount("Autofill.ManageCardsPrompt.Upload", 0); +} + +TEST_F(SaveCardBubbleControllerImplTest, Metrics_Upload_FirstShow_ManageCards) { + scoped_feature_list_.InitAndEnableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + base::HistogramTester histogram_tester; + + ShowUploadBubble(); + controller()->OnSaveButton(); + controller()->ShowBubbleForManageCardsForTesting( + autofill::test::GetCreditCard()); + + // Icon should disappear after an upload save, + // even when this flag is enabled. + histogram_tester.ExpectTotalCount("Autofill.ManageCardsPrompt.Local", 0); + histogram_tester.ExpectTotalCount("Autofill.ManageCardsPrompt.Upload", 1); +} + } // namespace autofill
diff --git a/chrome/browser/ui/omnibox/idn_navigation_observer.cc b/chrome/browser/ui/omnibox/idn_navigation_observer.cc index 217eecc..a4ce11c 100644 --- a/chrome/browser/ui/omnibox/idn_navigation_observer.cc +++ b/chrome/browser/ui/omnibox/idn_navigation_observer.cc
@@ -6,13 +6,17 @@ #include "base/bind.h" #include "base/metrics/histogram_macros.h" +#include "base/stl_util.h" #include "base/strings/utf_string_conversions.h" +#include "chrome/browser/engagement/site_engagement_service.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.h" #include "components/omnibox/browser/autocomplete_match.h" #include "components/url_formatter/idn_spoof_checker.h" #include "components/url_formatter/url_formatter.h" #include "content/public/browser/navigation_details.h" #include "content/public/browser/navigation_entry.h" +#include "net/base/registry_controlled_domains/registry_controlled_domain.h" namespace { @@ -20,6 +24,17 @@ UMA_HISTOGRAM_ENUMERATION(IdnNavigationObserver::kHistogramName, event); } +bool SkeletonsMatch(const url_formatter::Skeletons& skeletons1, + const url_formatter::Skeletons& skeletons2) { + DCHECK(!skeletons1.empty()); + DCHECK(!skeletons2.empty()); + for (const std::string& skeleton1 : skeletons1) { + if (base::ContainsKey(skeletons2, skeleton1)) + return true; + } + return false; +} + } // namespace // static @@ -35,22 +50,34 @@ const content::LoadCommittedDetails& load_details) { const GURL url = load_details.entry->GetVirtualURL(); const base::StringPiece host = url.host_piece(); - std::string matched_domain; url_formatter::IDNConversionResult result = url_formatter::IDNToUnicodeWithDetails(host); - if (!result.has_idn_component || result.matching_top_domain.empty()) + if (!result.has_idn_component) return; + std::string matched_domain; + if (result.matching_top_domain.empty()) { + matched_domain = GetMatchingSiteEngagementDomain(url); + if (matched_domain.empty()) + return; + RecordEvent(NavigationSuggestionEvent::kMatchSiteEngagement); + } else { + matched_domain = result.matching_top_domain; + RecordEvent(NavigationSuggestionEvent::kMatchTopSite); + } + + DCHECK(!matched_domain.empty()); + GURL::Replacements replace_host; - replace_host.SetHostStr(result.matching_top_domain); + replace_host.SetHostStr(matched_domain); const GURL suggested_url = url.ReplaceComponents(replace_host); RecordEvent(NavigationSuggestionEvent::kInfobarShown); AlternateNavInfoBarDelegate::CreateForIDNNavigation( - web_contents(), base::UTF8ToUTF16(result.matching_top_domain), - suggested_url, load_details.entry->GetVirtualURL(), + web_contents(), base::UTF8ToUTF16(matched_domain), suggested_url, + load_details.entry->GetVirtualURL(), base::BindOnce(RecordEvent, NavigationSuggestionEvent::kLinkClicked)); } @@ -63,3 +90,65 @@ UserDataKey(), std::make_unique<IdnNavigationObserver>(web_contents)); } } + +std::string IdnNavigationObserver::GetMatchingSiteEngagementDomain( + const GURL& url) { + Profile* profile = + Profile::FromBrowserContext(web_contents()->GetBrowserContext()); + SiteEngagementService* service = SiteEngagementService::Get(profile); + if (service->IsEngagementAtLeast(url, blink::mojom::EngagementLevel::LOW)) + return std::string(); + + // Compute skeletons using eTLD+1. + const std::string domain_and_registry = + net::registry_controlled_domains::GetDomainAndRegistry( + url, net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); + + url_formatter::IDNConversionResult result = + url_formatter::IDNToUnicodeWithDetails(domain_and_registry); + DCHECK(result.has_idn_component); + const url_formatter::Skeletons navigated_skeletons = + url_formatter::GetSkeletons(result.result); + + std::map<std::string, url_formatter::Skeletons> + domain_and_registry_to_skeleton; + std::vector<mojom::SiteEngagementDetails> engagement_details = + service->GetAllDetails(); + for (const auto& detail : engagement_details) { + // Ignore sites with an engagement score lower than LOW. + if (!service->IsEngagementAtLeast(detail.origin, + blink::mojom::EngagementLevel::LOW)) + continue; + + // If this is already an engaged site, don't suggest any alternatives. + const std::string engaged_domain_and_registry = + net::registry_controlled_domains::GetDomainAndRegistry( + detail.origin, + net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); + if (domain_and_registry == engaged_domain_and_registry) + return std::string(); + + // Multiple domains can map to the same eTLD+1, avoid skeleton generation + // when possible. + auto it = domain_and_registry_to_skeleton.find(engaged_domain_and_registry); + url_formatter::Skeletons skeletons; + if (it == domain_and_registry_to_skeleton.end()) { + // Engaged site can be IDN. Decode as unicode and compute the skeleton + // from that. At this point, top domain checks have already been done, so + // if the site is IDN, it'll always be decoded as unicode (i.e. IDN spoof + // checker will not find a matching top domain and fall back to punycode + // for it). + url_formatter::IDNConversionResult conversion_result = + url_formatter::IDNToUnicodeWithDetails(engaged_domain_and_registry); + + skeletons = url_formatter::GetSkeletons(conversion_result.result); + domain_and_registry_to_skeleton[engaged_domain_and_registry] = skeletons; + } else { + skeletons = it->second; + } + + if (SkeletonsMatch(navigated_skeletons, skeletons)) + return detail.origin.host(); + } + return std::string(); +}
diff --git a/chrome/browser/ui/omnibox/idn_navigation_observer.h b/chrome/browser/ui/omnibox/idn_navigation_observer.h index a40ecd1..60ffce8 100644 --- a/chrome/browser/ui/omnibox/idn_navigation_observer.h +++ b/chrome/browser/ui/omnibox/idn_navigation_observer.h
@@ -19,10 +19,12 @@ kNone = 0, kInfobarShown = 1, kLinkClicked = 2, + kMatchTopSite = 3, + kMatchSiteEngagement = 4, // Append new items to the end of the list above; do not modify or // replace existing values. Comment out obsolete items. - kMaxValue = kLinkClicked, + kMaxValue = kMatchSiteEngagement, }; static const char kHistogramName[]; @@ -35,6 +37,11 @@ // content::WebContentsObserver: void NavigationEntryCommitted( const content::LoadCommittedDetails& load_details) override; + + private: + // Returns a site that the user has used before that |url| may be attempting + // to spoof, based on skeleton comparison. + std::string GetMatchingSiteEngagementDomain(const GURL& url); }; #endif // CHROME_BROWSER_UI_OMNIBOX_IDN_NAVIGATION_OBSERVER_H_
diff --git a/chrome/browser/ui/omnibox/idn_navigation_observer_browsertest.cc b/chrome/browser/ui/omnibox/idn_navigation_observer_browsertest.cc index 4d355678..06670198 100644 --- a/chrome/browser/ui/omnibox/idn_navigation_observer_browsertest.cc +++ b/chrome/browser/ui/omnibox/idn_navigation_observer_browsertest.cc
@@ -3,6 +3,8 @@ // found in the LICENSE file. #include "base/test/metrics/histogram_tester.h" +#include "chrome/browser/engagement/site_engagement_score.h" +#include "chrome/browser/engagement/site_engagement_service.h" #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/history/history_test_utils.h" #include "chrome/browser/infobars/infobar_observer.h" @@ -27,7 +29,7 @@ public testing::WithParamInterface<bool> { protected: void SetUp() override { - if (GetParam()) + if (IsFeatureEnabled()) feature_list_.InitAndEnableFeature(features::kIdnNavigationSuggestions); InProcessBrowserTest::SetUp(); } @@ -37,6 +39,57 @@ ASSERT_TRUE(embedded_test_server()->Start()); } + // Sets the absolute Site Engagement |score| for the testing origin. + void SetSiteEngagementScore(const GURL& url, double score) { + SiteEngagementService::Get(browser()->profile()) + ->ResetBaseScoreForURL(url, score); + } + + void TestInfobarShown(const GURL& navigated_url, + const GURL& expected_suggested_url) { + // Sanity check navigated_url. + url_formatter::IDNConversionResult result = + url_formatter::IDNToUnicodeWithDetails(navigated_url.host_piece()); + ASSERT_TRUE(result.has_idn_component); + + history::HistoryService* const history_service = + HistoryServiceFactory::GetForProfile( + browser()->profile(), ServiceAccessType::EXPLICIT_ACCESS); + ui_test_utils::WaitForHistoryToLoad(history_service); + + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + InfoBarService* infobar_service = + InfoBarService::FromWebContents(web_contents); + InfoBarObserver infobar_added_observer( + infobar_service, InfoBarObserver::Type::kInfoBarAdded); + ui_test_utils::NavigateToURL(browser(), navigated_url); + infobar_added_observer.Wait(); + + infobars::InfoBar* infobar = infobar_service->infobar_at(0); + EXPECT_EQ(infobars::InfoBarDelegate::ALTERNATE_NAV_INFOBAR_DELEGATE, + infobar->delegate()->GetIdentifier()); + + // Clicking the link in the infobar should remove the infobar and navigate + // to the suggested URL. + InfoBarObserver infobar_removed_observer( + infobar_service, InfoBarObserver::Type::kInfoBarRemoved); + AlternateNavInfoBarDelegate* infobar_delegate = + static_cast<AlternateNavInfoBarDelegate*>(infobar->delegate()); + infobar_delegate->LinkClicked(WindowOpenDisposition::CURRENT_TAB); + infobar_removed_observer.Wait(); + + EXPECT_EQ(0u, infobar_service->infobar_count()); + EXPECT_EQ(expected_suggested_url, web_contents->GetURL()); + + // Clicking the link in the infobar should also remove the original URL from + // history. + ui_test_utils::HistoryEnumerator enumerator(browser()->profile()); + EXPECT_FALSE(base::ContainsValue(enumerator.urls(), navigated_url)); + } + + bool IsFeatureEnabled() const { return GetParam(); } + private: base::test::ScopedFeatureList feature_list_; }; @@ -76,58 +129,76 @@ // Navigating to a domain whose visual representation looks like a top domain // should show a "Did you mean to go to ..." infobar. IN_PROC_BROWSER_TEST_P(IdnNavigationObserverBrowserTest, TopDomainIdn_Infobar) { - if (!GetParam()) + if (!IsFeatureEnabled()) return; base::HistogramTester histograms; - history::HistoryService* const history_service = - HistoryServiceFactory::GetForProfile(browser()->profile(), - ServiceAccessType::EXPLICIT_ACCESS); - ui_test_utils::WaitForHistoryToLoad(history_service); + TestInfobarShown(embedded_test_server()->GetURL( + "googlé.com", "/title1.html") /* navigated */, + embedded_test_server()->GetURL( + "google.com", "/title1.html") /* suggested */); - const GURL kIdnUrl = - embedded_test_server()->GetURL("googlé.com", "/title1.html"); - const GURL kSuggestedUrl = - embedded_test_server()->GetURL("google.com", "/title1.html"); - - content::WebContents* web_contents = - browser()->tab_strip_model()->GetActiveWebContents(); - InfoBarService* infobar_service = - InfoBarService::FromWebContents(web_contents); - InfoBarObserver infobar_added_observer(infobar_service, - InfoBarObserver::Type::kInfoBarAdded); - ui_test_utils::NavigateToURL(browser(), kIdnUrl); - infobar_added_observer.Wait(); - - infobars::InfoBar* infobar = infobar_service->infobar_at(0); - EXPECT_EQ(infobars::InfoBarDelegate::ALTERNATE_NAV_INFOBAR_DELEGATE, - infobar->delegate()->GetIdentifier()); - - // Clicking the link in the infobar should remove the infobar and navigate to - // the suggested URL. - InfoBarObserver infobar_removed_observer( - infobar_service, InfoBarObserver::Type::kInfoBarRemoved); - AlternateNavInfoBarDelegate* infobar_delegate = - static_cast<AlternateNavInfoBarDelegate*>(infobar->delegate()); - infobar_delegate->LinkClicked(WindowOpenDisposition::CURRENT_TAB); - infobar_removed_observer.Wait(); - - EXPECT_EQ(0u, infobar_service->infobar_count()); - EXPECT_EQ(kSuggestedUrl, web_contents->GetURL()); - - // Clicking the link in the infobar should also remove the original URL from - // history. - ui_test_utils::HistoryEnumerator enumerator(browser()->profile()); - EXPECT_FALSE(base::ContainsValue(enumerator.urls(), kIdnUrl)); - - histograms.ExpectTotalCount(IdnNavigationObserver::kHistogramName, 2); + histograms.ExpectTotalCount(IdnNavigationObserver::kHistogramName, 3); histograms.ExpectBucketCount( IdnNavigationObserver::kHistogramName, IdnNavigationObserver::NavigationSuggestionEvent::kInfobarShown, 1); histograms.ExpectBucketCount( IdnNavigationObserver::kHistogramName, IdnNavigationObserver::NavigationSuggestionEvent::kLinkClicked, 1); + histograms.ExpectBucketCount( + IdnNavigationObserver::kHistogramName, + IdnNavigationObserver::NavigationSuggestionEvent::kMatchTopSite, 1); +} + +// Navigating to a domain whose visual representation looks like a domain with a +// site engagement score above a certain threshold should show a "Did you mean +// to go to ..." infobar. +IN_PROC_BROWSER_TEST_P(IdnNavigationObserverBrowserTest, + SiteEngagement_Infobar) { + if (!IsFeatureEnabled()) + return; + + SetSiteEngagementScore(GURL("http://site1.test"), 20); + SetSiteEngagementScore(GURL("http://www.site2.test"), 20); + SetSiteEngagementScore(GURL("http://sité3.test"), 20); + SetSiteEngagementScore(GURL("http://www.sité4.test"), 20); + + struct TestCase { + const char* const navigated; + const char* const suggested; + } kTestCases[] = { + {"sité1.test", "site1.test"}, + {"mail.www.sité1.test", "site1.test"}, + + // These should match since the comparison uses eTLD+1s. + {"sité2.test", "www.site2.test"}, + {"mail.sité2.test", "www.site2.test"}, + + {"síté3.test", "sité3.test"}, + {"mail.síté3.test", "sité3.test"}, + + {"síté4.test", "www.sité4.test"}, + {"mail.síté4.test", "www.sité4.test"}, + }; + + for (const auto& test_case : kTestCases) { + base::HistogramTester histograms; + TestInfobarShown( + embedded_test_server()->GetURL(test_case.navigated, "/title1.html"), + embedded_test_server()->GetURL(test_case.suggested, "/title1.html")); + histograms.ExpectTotalCount(IdnNavigationObserver::kHistogramName, 3); + histograms.ExpectBucketCount( + IdnNavigationObserver::kHistogramName, + IdnNavigationObserver::NavigationSuggestionEvent::kInfobarShown, 1); + histograms.ExpectBucketCount( + IdnNavigationObserver::kHistogramName, + IdnNavigationObserver::NavigationSuggestionEvent::kLinkClicked, 1); + histograms.ExpectBucketCount( + IdnNavigationObserver::kHistogramName, + IdnNavigationObserver::NavigationSuggestionEvent::kMatchSiteEngagement, + 1); + } } // The infobar shouldn't be shown when the feature is disabled.
diff --git a/chrome/browser/ui/page_info/page_info.cc b/chrome/browser/ui/page_info/page_info.cc index 5248f8f4..c6f7db41 100644 --- a/chrome/browser/ui/page_info/page_info.cc +++ b/chrome/browser/ui/page_info/page_info.cc
@@ -1052,5 +1052,11 @@ : base::string16(); #endif break; + case security_state::MALICIOUS_CONTENT_STATUS_BILLING: +#if defined(SAFE_BROWSING_DB_LOCAL) + *status = PageInfo::SITE_IDENTITY_STATUS_BILLING; + *details = l10n_util::GetStringUTF16(IDS_PAGE_INFO_BILLING_DETAILS); +#endif + break; } }
diff --git a/chrome/browser/ui/page_info/page_info.h b/chrome/browser/ui/page_info/page_info.h index 6d90185..4e1b5ad 100644 --- a/chrome/browser/ui/page_info/page_info.h +++ b/chrome/browser/ui/page_info/page_info.h
@@ -93,6 +93,7 @@ SITE_IDENTITY_STATUS_UNWANTED_SOFTWARE, SITE_IDENTITY_STATUS_SIGN_IN_PASSWORD_REUSE, SITE_IDENTITY_STATUS_ENTERPRISE_PASSWORD_REUSE, + SITE_IDENTITY_STATUS_BILLING, }; // Events for UMA. Do not reorder or change! Exposed in header so enum is
diff --git a/chrome/browser/ui/page_info/page_info_ui.cc b/chrome/browser/ui/page_info/page_info_ui.cc index 4e7c9d6..2e9f17a 100644 --- a/chrome/browser/ui/page_info/page_info_ui.cc +++ b/chrome/browser/ui/page_info/page_info_ui.cc
@@ -295,6 +295,12 @@ return CreateSecurityDescriptionForPasswordReuse( /*is_enterprise_password=*/true); #endif + case PageInfo::SITE_IDENTITY_STATUS_BILLING: +#if defined(SAFE_BROWSING_DB_LOCAL) + return CreateSecurityDescription(SecuritySummaryColor::RED, + IDS_PAGE_INFO_BILLING_SUMMARY, + IDS_PAGE_INFO_BILLING_DETAILS); +#endif case PageInfo::SITE_IDENTITY_STATUS_DEPRECATED_SIGNATURE_ALGORITHM: case PageInfo::SITE_IDENTITY_STATUS_UNKNOWN: case PageInfo::SITE_IDENTITY_STATUS_NO_CERT:
diff --git a/chrome/browser/ui/pdf/adobe_reader_info_win.cc b/chrome/browser/ui/pdf/adobe_reader_info_win.cc index 8b180af..f9db587 100644 --- a/chrome/browser/ui/pdf/adobe_reader_info_win.cc +++ b/chrome/browser/ui/pdf/adobe_reader_info_win.cc
@@ -4,7 +4,6 @@ #include "chrome/browser/ui/pdf/adobe_reader_info_win.h" -#include <shlwapi.h> #include <stddef.h> #include <algorithm> @@ -18,6 +17,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/version.h" #include "base/win/registry.h" +#include "base/win/shlwapi.h" #include "chrome/browser/browser_process.h" namespace {
diff --git a/chrome/browser/ui/signin_view_controller.cc b/chrome/browser/ui/signin_view_controller.cc index 4f16a83..88496f36 100644 --- a/chrome/browser/ui/signin_view_controller.cc +++ b/chrome/browser/ui/signin_view_controller.cc
@@ -9,6 +9,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/search/search.h" #include "chrome/browser/signin/account_consistency_mode_manager.h" +#include "chrome/browser/signin/account_tracker_service_factory.h" #include "chrome/browser/signin/dice_tab_helper.h" #include "chrome/browser/signin/signin_manager_factory.h" #include "chrome/browser/signin/signin_promo.h" @@ -77,6 +78,21 @@ } return -1; } + +// Returns the promo action to be used when signing with a new account. +signin_metrics::PromoAction GetPromoActionForNewAccount( + AccountTrackerService* account_tracker, + signin::AccountConsistencyMethod account_consistency) { + if (account_consistency != signin::AccountConsistencyMethod::kDice) + return signin_metrics::PromoAction::PROMO_ACTION_NEW_ACCOUNT_PRE_DICE; + + return account_tracker->GetAccounts().size() > 0 + ? signin_metrics::PromoAction:: + PROMO_ACTION_NEW_ACCOUNT_EXISTING_ACCOUNT + : signin_metrics::PromoAction:: + PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT; +} + #endif } // namespace @@ -105,8 +121,10 @@ ShowModalSigninDialog(mode, browser, access_point); #else // defined(OS_CHROMEOS) Profile* profile = browser->profile(); + signin::AccountConsistencyMethod account_consistency = + AccountConsistencyModeManager::GetMethodForProfile(profile); if (signin::DiceMethodGreaterOrEqual( - AccountConsistencyModeManager::GetMethodForProfile(profile), + account_consistency, signin::AccountConsistencyMethod::kDicePrepareMigration)) { std::string email; if (GetSigninReasonFromMode(mode) == @@ -114,9 +132,10 @@ SigninManagerBase* manager = SigninManagerFactory::GetForProfile(profile); email = manager->GetAuthenticatedAccountInfo().email; } - ShowDiceSigninTab(mode, browser, access_point, - signin_metrics::PromoAction::PROMO_ACTION_NEW_ACCOUNT, - email); + signin_metrics::PromoAction promo_action = GetPromoActionForNewAccount( + AccountTrackerServiceFactory::GetForProfile(profile), + account_consistency); + ShowDiceSigninTab(mode, browser, access_point, promo_action, email); } else { ShowModalSigninDialog(mode, browser, access_point); }
diff --git a/chrome/browser/ui/tabs/tab_strip_model.cc b/chrome/browser/ui/tabs/tab_strip_model.cc index 00caf563..31dced9 100644 --- a/chrome/browser/ui/tabs/tab_strip_model.cc +++ b/chrome/browser/ui/tabs/tab_strip_model.cc
@@ -303,12 +303,6 @@ bool pin = (add_types & ADD_PINNED) != 0; index = ConstrainInsertionIndex(index, pin); - // In tab dragging situations, if the last tab in the window was detached - // then the user aborted the drag, we will have the |closing_all_| member - // set (see DetachWebContentsAt) which will mess with our mojo here. We need - // to clear this bit. - closing_all_ = false; - // Have to get the active contents before we monkey with the contents // otherwise we run into problems when we try to change the active contents // since the old contents and the new contents will be the same... @@ -451,7 +445,6 @@ contents_data_.erase(contents_data_.begin() + index); if (empty()) { - closing_all_ = true; selection_model_.Clear(); } else { int old_active = active_index();
diff --git a/chrome/browser/ui/views/apps/DEPS b/chrome/browser/ui/views/apps/DEPS index 99009c9..6cd75ff 100644 --- a/chrome/browser/ui/views/apps/DEPS +++ b/chrome/browser/ui/views/apps/DEPS
@@ -5,7 +5,7 @@ specific_include_rules = { # TODO(mash): Fix. https://crbug.com/855096 "chrome_native_app_window_views_aura_ash\.cc": [ - "+ash/frame/custom_frame_view_ash.h", + "+ash/frame/non_client_frame_view_ash.h", "+ash/wm/window_properties.h", "+ash/wm/window_state.h", "+ash/wm/window_state_delegate.h",
diff --git a/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash.cc b/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash.cc index 7d25ff8c..4b403358 100644 --- a/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash.cc +++ b/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash.cc
@@ -7,7 +7,7 @@ #include <utility> #include "apps/ui/views/app_window_frame_view.h" -#include "ash/frame/custom_frame_view_ash.h" +#include "ash/frame/non_client_frame_view_ash.h" #include "ash/public/cpp/app_types.h" #include "ash/public/cpp/ash_constants.h" #include "ash/public/cpp/ash_switches.h" @@ -321,7 +321,7 @@ views::NonClientFrameView* ChromeNativeAppWindowViewsAuraAsh::CreateNonClientFrameView( views::Widget* widget) { - // Set the delegate now because CustomFrameViewAsh sets the + // Set the delegate now because NonClientFrameViewAsh sets the // WindowStateDelegate if one is not already set. auto delegate = std::make_unique<NativeAppWindowStateDelegate>(app_window(), this); @@ -334,8 +334,8 @@ if (!features::IsAshInBrowserProcess()) return nullptr; - ash::CustomFrameViewAsh* custom_frame_view = - new ash::CustomFrameViewAsh(widget); + ash::NonClientFrameViewAsh* custom_frame_view = + new ash::NonClientFrameViewAsh(widget); // Non-frameless app windows can be put into immersive fullscreen. immersive_fullscreen_controller_.reset( new ash::ImmersiveFullscreenController());
diff --git a/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash_browsertest.cc b/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash_browsertest.cc index 639e93b..0dfb746 100644 --- a/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash_browsertest.cc +++ b/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash_browsertest.cc
@@ -8,12 +8,12 @@ #include "chrome/browser/apps/platform_apps/app_browsertest_util.h" #include "chrome/browser/ui/ash/tablet_mode_client.h" #include "chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash.h" +#include "chromeos/login/login_state.h" +#include "chromeos/login/scoped_test_public_session_login_state.h" #include "extensions/browser/app_window/app_window.h" #include "ui/base/ui_base_types.h" #include "ui/wm/core/window_util.h" -#include "chromeos/login/login_state.h" - class ChromeNativeAppWindowViewsAuraAshBrowserTest : public extensions::PlatformAppBrowserTest { public: @@ -152,9 +152,7 @@ // immersive in fullscreen. IN_PROC_BROWSER_TEST_F(ChromeNativeAppWindowViewsAuraAshBrowserTest, PublicSessionImmersiveMode) { - chromeos::LoginState::Get()->SetLoggedInState( - chromeos::LoginState::LOGGED_IN_ACTIVE, - chromeos::LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT); + chromeos::ScopedTestPublicSessionLoginState login_state; extensions::AppWindow* app_window = CreateTestAppWindow("{}"); auto* window = static_cast<ChromeNativeAppWindowViewsAuraAsh*>(
diff --git a/chrome/browser/ui/views/autofill/card_unmask_prompt_views.cc b/chrome/browser/ui/views/autofill/card_unmask_prompt_views.cc index a86c731..c4c8d1c 100644 --- a/chrome/browser/ui/views/autofill/card_unmask_prompt_views.cc +++ b/chrome/browser/ui/views/autofill/card_unmask_prompt_views.cc
@@ -30,6 +30,7 @@ #include "ui/native_theme/native_theme.h" #include "ui/views/background.h" #include "ui/views/border.h" +#include "ui/views/bubble/bubble_frame_view.h" #include "ui/views/controls/button/checkbox.h" #include "ui/views/controls/combobox/combobox.h" #include "ui/views/controls/image_view.h" @@ -205,9 +206,7 @@ storage_checkbox_ = new views::Checkbox(l10n_util::GetStringUTF16( IDS_AUTOFILL_CARD_UNMASK_PROMPT_STORAGE_CHECKBOX)); - storage_checkbox_->SetBorder( - views::CreateEmptyBorder(ChromeLayoutProvider::Get()->GetInsetsMetric( - views::INSETS_DIALOG_SUBSECTION))); + storage_checkbox_->SetBorder(views::CreateEmptyBorder(gfx::Insets())); storage_checkbox_->SetChecked(controller_->GetStoreLocallyStartState()); storage_checkbox_->SetEnabledTextColors(views::style::GetColor( *storage_checkbox_, ChromeTextContext::CONTEXT_BODY_TEXT_SMALL, @@ -217,11 +216,20 @@ } gfx::Size CardUnmaskPromptViews::CalculatePreferredSize() const { + // If the margins width is not discounted here, the bubble border will be + // taken into consideration in the frame width size. Because of that, the + // dialog width will be snapped to a larger size when Harmony is enabled. const int width = ChromeLayoutProvider::Get()->GetDistanceMetric( - DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH); + DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH) - + margins().width(); return gfx::Size(width, GetHeightForWidth(width)); } +void CardUnmaskPromptViews::AddedToWidget() { + GetBubbleFrameView()->SetTitleView( + std::make_unique<TitleWithIconAndSeparatorView>(GetWindowTitle())); +} + void CardUnmaskPromptViews::OnNativeThemeChanged(const ui::NativeTheme* theme) { SkColor bg_color = theme->GetSystemColor(ui::NativeTheme::kColorId_DialogBackground); @@ -342,8 +350,8 @@ // fields). SetLayoutManager(std::make_unique<views::FillLayout>()); // Inset the whole main section. - SetBorder(views::CreateEmptyBorder( - provider->GetDialogInsetsForContentType(views::TEXT, views::CONTROL))); + set_margins(ChromeLayoutProvider::Get()->GetDialogInsetsForContentType( + views::TEXT, views::CONTROL)); controls_container_ = new views::View(); controls_container_->SetLayoutManager(std::make_unique<views::BoxLayout>(
diff --git a/chrome/browser/ui/views/autofill/card_unmask_prompt_views.h b/chrome/browser/ui/views/autofill/card_unmask_prompt_views.h index c86a7ff9..c9a92a7 100644 --- a/chrome/browser/ui/views/autofill/card_unmask_prompt_views.h +++ b/chrome/browser/ui/views/autofill/card_unmask_prompt_views.h
@@ -10,6 +10,7 @@ #include "base/macros.h" #include "chrome/browser/ui/autofill/autofill_dialog_models.h" #include "components/autofill/core/browser/ui/card_unmask_prompt_view.h" +#include "ui/views/bubble/bubble_dialog_delegate.h" #include "ui/views/controls/combobox/combobox_listener.h" #include "ui/views/controls/link_listener.h" #include "ui/views/controls/textfield/textfield_controller.h" @@ -34,7 +35,7 @@ class CardUnmaskPromptViews : public CardUnmaskPromptView, public views::ComboboxListener, - public views::DialogDelegateView, + public views::BubbleDialogDelegateView, public views::TextfieldController, public views::LinkListener { public: @@ -55,6 +56,7 @@ // views::View gfx::Size CalculatePreferredSize() const override; + void AddedToWidget() override; void OnNativeThemeChanged(const ui::NativeTheme* theme) override; ui::ModalType GetModalType() const override; base::string16 GetWindowTitle() const override;
diff --git a/chrome/browser/ui/views/autofill/local_card_migration_dialog_view.cc b/chrome/browser/ui/views/autofill/local_card_migration_dialog_view.cc new file mode 100644 index 0000000..2737ab9 --- /dev/null +++ b/chrome/browser/ui/views/autofill/local_card_migration_dialog_view.cc
@@ -0,0 +1,223 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/views/autofill/local_card_migration_dialog_view.h" + +#include "base/location.h" +#include "base/strings/utf_string_conversions.h" +#include "chrome/browser/ui/autofill/local_card_migration_dialog_factory.h" +#include "chrome/browser/ui/autofill/local_card_migration_dialog_state.h" +#include "chrome/browser/ui/browser_dialogs.h" +#include "chrome/browser/ui/views/autofill/view_util.h" +#include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" +#include "chrome/browser/ui/views/harmony/chrome_typography.h" +#include "components/autofill/core/browser/local_card_migration_manager.h" +#include "components/autofill/core/browser/ui/local_card_migration_dialog_controller.h" +#include "components/constrained_window/constrained_window_views.h" +#include "components/grit/components_scaled_resources.h" +#include "components/strings/grit/components_strings.h" +#include "components/web_modal/web_contents_modal_dialog_host.h" +#include "components/web_modal/web_contents_modal_dialog_manager.h" +#include "components/web_modal/web_contents_modal_dialog_manager_delegate.h" +#include "third_party/skia/include/core/SkColor.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/base/resource/resource_bundle.h" +#include "ui/gfx/color_palette.h" +#include "ui/gfx/geometry/insets.h" +#include "ui/gfx/geometry/safe_integer_conversions.h" +#include "ui/gfx/paint_vector_icon.h" +#include "ui/native_theme/native_theme.h" +#include "ui/views/background.h" +#include "ui/views/border.h" +#include "ui/views/controls/button/checkbox.h" +#include "ui/views/controls/combobox/combobox.h" +#include "ui/views/controls/image_view.h" +#include "ui/views/controls/label.h" +#include "ui/views/controls/link.h" +#include "ui/views/controls/textfield/textfield.h" +#include "ui/views/controls/throbber.h" +#include "ui/views/layout/box_layout.h" +#include "ui/views/layout/fill_layout.h" +#include "ui/views/layout/grid_layout.h" +#include "ui/views/style/typography.h" +#include "ui/views/widget/widget.h" + +namespace autofill { + +LocalCardMigrationDialogView::LocalCardMigrationDialogView( + LocalCardMigrationDialogController* controller, + content::WebContents* web_contents) + : controller_(controller), web_contents_(web_contents) { + ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); + ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); + SetLayoutManager(std::make_unique<views::FillLayout>()); + + // Set up main contents container. + views::View* main_container = new views::View(); + main_container->SetLayoutManager(std::make_unique<views::BoxLayout>( + views::BoxLayout::kVertical, gfx::Insets(), + provider->GetDistanceMetric(views::DISTANCE_UNRELATED_CONTROL_VERTICAL))); + AddChildView(main_container); + + views::ImageView* image = new views::ImageView(); + image->SetImage(rb.GetImageSkiaNamed(GetHeaderImageId())); + main_container->AddChildView(image); + + views::View* content_container = new views::View(); + content_container->SetLayoutManager(std::make_unique<views::BoxLayout>( + views::BoxLayout::kVertical, gfx::Insets(), + provider->GetDistanceMetric(views::DISTANCE_UNRELATED_CONTROL_VERTICAL))); + content_container->SetBorder(views::CreateEmptyBorder( + provider->GetDialogInsetsForContentType(views::TEXT, views::CONTROL))); + main_container->AddChildView(content_container); + + title_ = + new views::Label(GetDialogTitle(), views::style::CONTEXT_DIALOG_TITLE); + content_container->AddChildView(title_); + + explanation_text_ = + new views::Label(GetDialogInstruction(), CONTEXT_BODY_TEXT_LARGE, + ChromeTextStyle::STYLE_SECONDARY); + explanation_text_->SetMultiLine(true); + explanation_text_->SetHorizontalAlignment(gfx::ALIGN_LEFT); + content_container->AddChildView(explanation_text_); +} + +LocalCardMigrationDialogView::~LocalCardMigrationDialogView() {} + +void LocalCardMigrationDialogView::ShowDialog( + base::OnceClosure user_accepted_migration_closure) { + user_accepted_migration_closure_ = std::move(user_accepted_migration_closure); + constrained_window::ShowWebModalDialogViews(this, web_contents_); +} + +void LocalCardMigrationDialogView::CloseDialog() { + GetWidget()->Close(); +} + +gfx::Size LocalCardMigrationDialogView::CalculatePreferredSize() const { + const int width = ChromeLayoutProvider::Get()->GetDistanceMetric( + DISTANCE_LARGE_MODAL_DIALOG_PREFERRED_WIDTH) - + margins().width(); + return gfx::Size(width, GetHeightForWidth(width)); +} + +ui::ModalType LocalCardMigrationDialogView::GetModalType() const { + // This should be a modal dialog since we don't want users to lose progress + // in the migration workflow until they are done. + return ui::MODAL_TYPE_CHILD; +} + +void LocalCardMigrationDialogView::AddedToWidget() { + GetWidget()->AddObserver(this); +} + +bool LocalCardMigrationDialogView::ShouldShowCloseButton() const { + return false; +} + +base::string16 LocalCardMigrationDialogView::GetDialogButtonLabel( + ui::DialogButton button) const { + return button == ui::DIALOG_BUTTON_OK ? GetOkButtonLabel() + : GetCancelButtonLabel(); +} + +// TODO(crbug.com/867194): Add button logic for the kFinished dialog and +// the kActionRequired dialog. +bool LocalCardMigrationDialogView::Accept() { + OnSaveButtonClicked(); + // Dialog will not be closed if it is the migration offer dialog. + return false; +} + +// TODO(crbug.com/867194): Add button logic for the kFinished dialog and +// the kActionRequired dialog. +bool LocalCardMigrationDialogView::Cancel() { + OnCancelButtonClicked(); + // Dialog will be closed. + return true; +} + +void LocalCardMigrationDialogView::OnWidgetClosing(views::Widget* widget) { + controller_->OnDialogClosed(); + widget->RemoveObserver(this); +} + +base::string16 LocalCardMigrationDialogView::GetDialogTitle() const { + switch (controller_->GetViewState()) { + case LocalCardMigrationDialogState::kOffered: + return l10n_util::GetStringUTF16( + IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_TITLE_OFFER); + case LocalCardMigrationDialogState::kFinished: + return l10n_util::GetStringUTF16( + IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_TITLE_DONE); + case LocalCardMigrationDialogState::kActionRequired: + return l10n_util::GetStringUTF16( + IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_TITLE_FIX); + } +} + +base::string16 LocalCardMigrationDialogView::GetDialogInstruction() const { + switch (controller_->GetViewState()) { + case LocalCardMigrationDialogState::kOffered: + return l10n_util::GetPluralStringFUTF16( + IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_MESSAGE_OFFER, + controller_->GetCardList().size()); + case LocalCardMigrationDialogState::kFinished: + return l10n_util::GetPluralStringFUTF16( + IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_MESSAGE_DONE, + controller_->GetCardList().size()); + case LocalCardMigrationDialogState::kActionRequired: + return l10n_util::GetStringUTF16( + IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_MESSAGE_FIX); + } +} + +int LocalCardMigrationDialogView::GetHeaderImageId() const { + return IDR_AUTOFILL_MIGRATION_DIALOG_HEADER; +} + +base::string16 LocalCardMigrationDialogView::GetOkButtonLabel() const { + switch (controller_->GetViewState()) { + case LocalCardMigrationDialogState::kOffered: + return l10n_util::GetStringUTF16( + IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_BUTTON_LABEL_SAVE); + case LocalCardMigrationDialogState::kFinished: + return l10n_util::GetStringUTF16( + IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_BUTTON_LABEL_DONE); + case LocalCardMigrationDialogState::kActionRequired: + return l10n_util::GetStringUTF16( + IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_BUTTON_LABEL_DONE); + } +} + +base::string16 LocalCardMigrationDialogView::GetCancelButtonLabel() const { + switch (controller_->GetViewState()) { + case LocalCardMigrationDialogState::kOffered: + return l10n_util::GetStringUTF16( + IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_BUTTON_LABEL_CANCEL); + case LocalCardMigrationDialogState::kFinished: + return l10n_util::GetStringUTF16( + IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_BUTTON_LABEL_VIEW_CARDS); + case LocalCardMigrationDialogState::kActionRequired: + return l10n_util::GetStringUTF16( + IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_BUTTON_LABEL_VIEW_CARDS); + } +} + +void LocalCardMigrationDialogView::OnSaveButtonClicked() { + std::move(user_accepted_migration_closure_).Run(); +} + +void LocalCardMigrationDialogView::OnCancelButtonClicked() { + user_accepted_migration_closure_.Reset(); +} + +LocalCardMigrationDialog* CreateLocalCardMigrationDialogView( + LocalCardMigrationDialogController* controller, + content::WebContents* web_contents) { + return new LocalCardMigrationDialogView(controller, web_contents); +} + +} // namespace autofill \ No newline at end of file
diff --git a/chrome/browser/ui/views/autofill/local_card_migration_dialog_view.h b/chrome/browser/ui/views/autofill/local_card_migration_dialog_view.h new file mode 100644 index 0000000..4b18c93 --- /dev/null +++ b/chrome/browser/ui/views/autofill/local_card_migration_dialog_view.h
@@ -0,0 +1,74 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_VIEWS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_VIEWS_H_ +#define CHROME_BROWSER_UI_VIEWS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_VIEWS_H_ + +#include "base/macros.h" +#include "chrome/browser/ui/autofill/local_card_migration_dialog.h" +#include "ui/views/view.h" +#include "ui/views/widget/widget_observer.h" +#include "ui/views/window/dialog_delegate.h" + +namespace content { +class WebContents; +} // namespace content + +namespace views { +class Label; +} // namespace views + +namespace autofill { + +class LocalCardMigrationDialogController; + +class LocalCardMigrationDialogView : public LocalCardMigrationDialog, + public views::DialogDelegateView, + public views::WidgetObserver { + public: + LocalCardMigrationDialogView(LocalCardMigrationDialogController* controller, + content::WebContents* web_contents); + ~LocalCardMigrationDialogView() override; + + // LocalCardMigrationDialog + void ShowDialog(base::OnceClosure user_accepted_migration_closure) override; + void CloseDialog() override; + + // views::DialogDelegateView + gfx::Size CalculatePreferredSize() const override; + ui::ModalType GetModalType() const override; + void AddedToWidget() override; + bool ShouldShowCloseButton() const override; + base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; + bool Accept() override; + bool Cancel() override; + + // views::WidgetObserver + void OnWidgetClosing(views::Widget* widget) override; + + private: + base::string16 GetDialogTitle() const; + base::string16 GetDialogInstruction() const; + int GetHeaderImageId() const; + base::string16 GetOkButtonLabel() const; + base::string16 GetCancelButtonLabel() const; + void OnSaveButtonClicked(); + void OnCancelButtonClicked(); + + LocalCardMigrationDialogController* controller_; + + content::WebContents* web_contents_; + + views::Label* title_; + + views::Label* explanation_text_; + + base::OnceClosure user_accepted_migration_closure_; + + DISALLOW_COPY_AND_ASSIGN(LocalCardMigrationDialogView); +}; + +} // namespace autofill + +#endif // CHROME_BROWSER_UI_VIEWS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_VIEWS_H_ \ No newline at end of file
diff --git a/chrome/browser/ui/views/autofill/save_card_bubble_views.cc b/chrome/browser/ui/views/autofill/save_card_bubble_views.cc index 7a54a95..c2e55f44 100644 --- a/chrome/browser/ui/views/autofill/save_card_bubble_views.cc +++ b/chrome/browser/ui/views/autofill/save_card_bubble_views.cc
@@ -6,9 +6,9 @@ #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" -#include "chrome/app/vector_icons/vector_icons.h" #include "chrome/browser/ui/browser_dialogs.h" #include "chrome/browser/ui/views/autofill/dialog_view_ids.h" +#include "chrome/browser/ui/views/autofill/view_util.h" #include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" #include "chrome/browser/ui/views/harmony/chrome_typography.h" #include "components/autofill/core/browser/autofill_metrics.h" @@ -20,8 +20,6 @@ #include "ui/base/resource/resource_bundle.h" #include "ui/gfx/color_palette.h" #include "ui/gfx/geometry/insets.h" -#include "ui/gfx/image/image_skia_operations.h" -#include "ui/gfx/paint_vector_icon.h" #include "ui/views/border.h" #include "ui/views/bubble/bubble_border.h" #include "ui/views/bubble/bubble_frame_view.h" @@ -29,7 +27,6 @@ #include "ui/views/controls/button/blue_button.h" #include "ui/views/controls/button/label_button.h" #include "ui/views/controls/label.h" -#include "ui/views/controls/separator.h" #include "ui/views/controls/styled_label.h" #include "ui/views/controls/textfield/textfield.h" #include "ui/views/layout/box_layout.h" @@ -38,18 +35,6 @@ namespace autofill { -namespace { - -// Dimensions of the Google Pay logo. -const int kGooglePayLogoWidth = 40; -const int kGooglePayLogoHeight = 16; - -const int kGooglePayLogoSeparatorHeight = 12; - -const SkColor kTitleSeparatorColor = SkColorSetRGB(0x9E, 0x9E, 0x9E); - -} // namespace - SaveCardBubbleViews::SyncPromoDelegate::SyncPromoDelegate( SaveCardBubbleController* controller) : controller_(controller) { @@ -135,47 +120,9 @@ // view is guaranteed to exist. if (!controller_->IsUploadSave()) return; - ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); - auto title_container = std::make_unique<views::View>(); - // TODO(ftirelo): DISTANCE_RELATED_BUTTON_HORIZONTAL isn't the right choice - // here, but INSETS_DIALOG_TITLE gives too much padding. - // Make a new Harmony DistanceMetric? - title_container->SetLayoutManager(std::make_unique<views::BoxLayout>( - views::BoxLayout::kHorizontal, gfx::Insets(), - provider->GetDistanceMetric(views::DISTANCE_RELATED_BUTTON_HORIZONTAL))); - - // kGooglePayLogoIcon is square, and CreateTiledImage() will clip it whereas - // setting the icon size would rescale it incorrectly. - gfx::ImageSkia image = gfx::ImageSkiaOperations::CreateTiledImage( - gfx::CreateVectorIcon(kGooglePayLogoIcon, gfx::kPlaceholderColor), - /*x=*/0, /*y=*/0, kGooglePayLogoWidth, kGooglePayLogoHeight); - auto icon_view = std::make_unique<views::ImageView>(); - icon_view->SetImage(&image); - title_container->AddChildView(icon_view.release()); - - auto* separator = new views::Separator(); - separator->SetColor(kTitleSeparatorColor); - title_container->AddChildView(separator); - - auto title_label = std::make_unique<views::Label>( - GetWindowTitle(), views::style::CONTEXT_DIALOG_TITLE); - title_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); - title_label->SetMultiLine(true); - title_container->AddChildView(title_label.release()); - - GetBubbleFrameView()->SetTitleView(std::move(title_container)); - - // Add vertical padding to the separator doesn't expand to use all the - // available vertical space. This needs to be done after the title container - // is added to the bubble frame view, in order to use its preferred size. - const int separator_vertical_padding = - (GetBubbleFrameView()->title()->GetPreferredSize().height() - - kGooglePayLogoSeparatorHeight) / - 2; - separator->SetBorder(views::CreateEmptyBorder(gfx::Insets( - /*vertical=*/separator_vertical_padding, - /*horizontal=*/0))); + GetBubbleFrameView()->SetTitleView( + std::make_unique<TitleWithIconAndSeparatorView>(GetWindowTitle())); } bool SaveCardBubbleViews::ShouldShowCloseButton() const {
diff --git a/chrome/browser/ui/views/autofill/save_card_manage_cards_bubble_views.cc b/chrome/browser/ui/views/autofill/save_card_manage_cards_bubble_views.cc index 5ea0038..5d3c32ce 100644 --- a/chrome/browser/ui/views/autofill/save_card_manage_cards_bubble_views.cc +++ b/chrome/browser/ui/views/autofill/save_card_manage_cards_bubble_views.cc
@@ -50,14 +50,11 @@ NOTREACHED(); #endif } else { - bool is_signin_promo = controller()->GetAccountInfo().IsEmpty(); footnote_view_ = new BubbleSyncPromoView( sync_promo_delegate_.get(), signin_metrics::AccessPoint::ACCESS_POINT_SAVE_CARD_BUBBLE, - is_signin_promo ? IDS_AUTOFILL_SIGNIN_PROMO_LINK_DICE_DISABLED - : IDS_AUTOFILL_SYNC_PROMO_LINK_DICE_DISABLED, - is_signin_promo ? IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE_DICE_DISABLED - : IDS_AUTOFILL_SYNC_PROMO_MESSAGE_DICE_DISABLED); + IDS_AUTOFILL_SIGNIN_PROMO_LINK_DICE_DISABLED, + IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE_DICE_DISABLED); } SetFootnoteViewForTesting(footnote_view_);
diff --git a/chrome/browser/ui/views/autofill/save_card_sign_in_promo_bubble_views.cc b/chrome/browser/ui/views/autofill/save_card_sign_in_promo_bubble_views.cc index f0d13f6..ed5d516 100644 --- a/chrome/browser/ui/views/autofill/save_card_sign_in_promo_bubble_views.cc +++ b/chrome/browser/ui/views/autofill/save_card_sign_in_promo_bubble_views.cc
@@ -59,14 +59,11 @@ NOTREACHED(); #endif } else { - bool is_signin_promo = controller()->GetAccountInfo().IsEmpty(); view->AddChildView(new BubbleSyncPromoView( sync_promo_delegate_.get(), signin_metrics::AccessPoint::ACCESS_POINT_SAVE_CARD_BUBBLE, - is_signin_promo ? IDS_AUTOFILL_SIGNIN_PROMO_LINK_DICE_DISABLED - : IDS_AUTOFILL_SYNC_PROMO_LINK_DICE_DISABLED, - is_signin_promo ? IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE_DICE_DISABLED - : IDS_AUTOFILL_SYNC_PROMO_MESSAGE_DICE_DISABLED)); + IDS_AUTOFILL_SIGNIN_PROMO_LINK_DICE_DISABLED, + IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE_DICE_DISABLED)); } return view; }
diff --git a/chrome/browser/ui/views/autofill/view_util.cc b/chrome/browser/ui/views/autofill/view_util.cc index 9597830..720bb5c 100644 --- a/chrome/browser/ui/views/autofill/view_util.cc +++ b/chrome/browser/ui/views/autofill/view_util.cc
@@ -4,12 +4,105 @@ #include "chrome/browser/ui/views/autofill/view_util.h" +#include <memory> + +#include "chrome/app/vector_icons/vector_icons.h" +#include "chrome/browser/ui/views/harmony/chrome_layout_provider.h" #include "components/strings/grit/components_strings.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/gfx/color_palette.h" +#include "ui/gfx/geometry/size.h" +#include "ui/gfx/image/image_skia.h" +#include "ui/gfx/image/image_skia_operations.h" +#include "ui/gfx/paint_vector_icon.h" +#include "ui/gfx/text_constants.h" +#include "ui/views/border.h" +#include "ui/views/controls/image_view.h" +#include "ui/views/controls/label.h" +#include "ui/views/controls/separator.h" #include "ui/views/controls/textfield/textfield.h" +#include "ui/views/layout/grid_layout.h" +#include "ui/views/layout/layout_provider.h" +#include "ui/views/style/typography.h" namespace autofill { +namespace { + +// Dimensions of the Google Pay logo. +constexpr int kGooglePayLogoWidth = 40; +constexpr int kGooglePayLogoHeight = 16; + +constexpr int kGooglePayLogoSeparatorHeight = 12; + +constexpr SkColor kTitleSeparatorColor = SkColorSetRGB(0x9E, 0x9E, 0x9E); + +} // namespace + +TitleWithIconAndSeparatorView::TitleWithIconAndSeparatorView( + const base::string16& window_title) { + views::GridLayout* layout = + SetLayoutManager(std::make_unique<views::GridLayout>(this)); + views::ColumnSet* columns = layout->AddColumnSet(0); + + // Add columns for the Google Pay icon, the separator, and the title label. + columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::LEADING, + views::GridLayout::kFixedSize, views::GridLayout::USE_PREF, + 0, 0); + columns->AddColumn(views::GridLayout::LEADING, views::GridLayout::LEADING, + views::GridLayout::kFixedSize, views::GridLayout::USE_PREF, + 0, 0); + columns->AddColumn(views::GridLayout::FILL, views::GridLayout::LEADING, 1.f, + views::GridLayout::USE_PREF, 0, 0); + + layout->StartRow(views::GridLayout::kFixedSize, 0); + + // kGooglePayLogoIcon is square, and CreateTiledImage() will clip it whereas + // setting the icon size would rescale it incorrectly. + gfx::ImageSkia image = gfx::ImageSkiaOperations::CreateTiledImage( + gfx::CreateVectorIcon(kGooglePayLogoIcon, gfx::kPlaceholderColor), + /*x=*/0, /*y=*/0, kGooglePayLogoWidth, kGooglePayLogoHeight); + auto* icon_view = new views::ImageView(); + icon_view->SetImage(&image); + layout->AddView(icon_view); + + auto* separator = new views::Separator(); + separator->SetColor(kTitleSeparatorColor); + separator->SetPreferredHeight(kGooglePayLogoSeparatorHeight); + layout->AddView(separator); + + auto* title_label = + new views::Label(window_title, views::style::CONTEXT_DIALOG_TITLE); + title_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); + title_label->SetMultiLine(true); + layout->AddView(title_label); + + // Add vertical padding to the icon and the separator so they are aligned with + // the first line of title label. This needs to be done after we create the + // title label, so that we can use its preferred size. + const int title_label_height = title_label->GetPreferredSize().height(); + icon_view->SetBorder(views::CreateEmptyBorder( + /*top=*/(title_label_height - kGooglePayLogoHeight) / 2, + /*left=*/0, /*bottom=*/0, /*right=*/0)); + // TODO(crbug.com/873140): DISTANCE_RELATED_BUTTON_HORIZONTAL isn't the right + // choice here, but INSETS_DIALOG_TITLE gives too much + // padding. Create a new Harmony DistanceMetric? + const int separator_horizontal_padding = + ChromeLayoutProvider::Get()->GetDistanceMetric( + views::DISTANCE_RELATED_BUTTON_HORIZONTAL); + separator->SetBorder(views::CreateEmptyBorder( + /*top=*/(title_label_height - kGooglePayLogoSeparatorHeight) / 2, + /*left=*/separator_horizontal_padding, /*bottom=*/0, + /*right=*/separator_horizontal_padding)); +} + +gfx::Size TitleWithIconAndSeparatorView::GetMinimumSize() const { + // View::GetMinumumSize() defaults to GridLayout::GetPreferredSize(), but that + // gives a larger frame width, so the dialog will become wider than it should. + // To avoid that, just return 0x0. + return gfx::Size(0, 0); +} + views::Textfield* CreateCvcTextfield() { views::Textfield* textfield = new views::Textfield(); textfield->set_placeholder_text(
diff --git a/chrome/browser/ui/views/autofill/view_util.h b/chrome/browser/ui/views/autofill/view_util.h index 64c7abb..91d485f 100644 --- a/chrome/browser/ui/views/autofill/view_util.h +++ b/chrome/browser/ui/views/autofill/view_util.h
@@ -5,10 +5,28 @@ #ifndef CHROME_BROWSER_UI_VIEWS_AUTOFILL_VIEW_UTIL_H_ #define CHROME_BROWSER_UI_VIEWS_AUTOFILL_VIEW_UTIL_H_ -#include "ui/views/controls/textfield/textfield.h" +#include "base/strings/string16.h" +#include "ui/views/view.h" + +namespace views { +class Textfield; +} // namespace views namespace autofill { +// Defines a title view with an icon, a separator, and a label, to be used +// by dialogs that need to present the Google Pay logo with a separator and +// custom horizontal padding. +class TitleWithIconAndSeparatorView : public views::View { + public: + explicit TitleWithIconAndSeparatorView(const base::string16& window_title); + ~TitleWithIconAndSeparatorView() override = default; + + private: + // views::View: + gfx::Size GetMinimumSize() const override; +}; + // Creates and returns a small Textfield intended to be used for CVC entry. views::Textfield* CreateCvcTextfield();
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc index 9356ea0d..7632648 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc
@@ -87,7 +87,6 @@ #include "ui/gfx/vector_icon_types.h" #include "ui/views/focus/focus_manager.h" #include "ui/views/widget/widget.h" -#include "ui/wm/core/window_util.h" namespace { @@ -388,10 +387,13 @@ // Tests that FrameCaptionButtonContainer has been relaid out in response to // tablet mode being toggled. -// TODO(estade): Implement this behavior in OopAsh (test by checking the -// window's caption button bounds). IN_PROC_BROWSER_TEST_P(BrowserNonClientFrameViewAshTest, ToggleTabletModeRelayout) { + // For OopAsh, this test is covered by + // CustomFrameViewAshTest.ToggleTabletModeRelayout. + if (!features::IsAshInBrowserProcess()) + return; + BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); BrowserNonClientFrameViewAsh* frame_view = GetFrameViewAsh(browser_view); @@ -440,45 +442,6 @@ EXPECT_EQ(*min_window_size, frame_view->GetMinimumSize()); } -// Tests that when browser frame is minimized, toggling tablet mode doesn't -// trigger caption button update (https://crbug.com/822890). -IN_PROC_BROWSER_TEST_P(BrowserNonClientFrameViewAshTest, - ToggleTabletModeOnMinimizedWindow) { - BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser()); - Widget* widget = browser_view->GetWidget(); - BrowserNonClientFrameViewAsh* frame_view = GetFrameViewAsh(browser_view); - - ash::FrameCaptionButtonContainerView::TestApi test( - frame_view->caption_button_container_); - widget->Maximize(); - - // Restore icon for size button in maximized window state. Compare by name - // because the address may not be the same for different build targets in the - // component build. - EXPECT_STREQ(ash::kWindowControlRestoreIcon.name, - test.size_button()->icon_definition_for_test()->name); - widget->Minimize(); - - // When entering tablet mode in minimized window state, size button should not - // get updated. - ash::Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager( - true); - EXPECT_STREQ(ash::kWindowControlRestoreIcon.name, - test.size_button()->icon_definition_for_test()->name); - // When leaving tablet mode in minimized window state, size button should not - // get updated. - ash::Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager( - false); - EXPECT_STREQ(ash::kWindowControlRestoreIcon.name, - test.size_button()->icon_definition_for_test()->name); - - // When unminimizing in non-tablet mode, size button should match with - // maximized window state, which is restore icon. - ::wm::Unminimize(widget->GetNativeWindow()); - EXPECT_STREQ(ash::kWindowControlRestoreIcon.name, - test.size_button()->icon_definition_for_test()->name); -} - // This is a regression test that session restore minimized browser should // re-layout the header (https://crbug.com/827444). IN_PROC_BROWSER_TEST_P(BrowserNonClientFrameViewAshTest, @@ -1032,7 +995,7 @@ IN_PROC_BROWSER_TEST_P(HostedAppNonClientFrameViewAshTest, ActiveStateOfButtonMatchesWidget) { // The caption button part of this test is covered for OopAsh by - // CustomFrameViewAshTest::ActiveStateOfButtonMatchesWidget. + // NonClientFrameViewAshTest::ActiveStateOfButtonMatchesWidget. if (features::IsAshInBrowserProcess()) { ash::FrameCaptionButtonContainerView::TestApi test( GetFrameViewAsh(browser_view_)->caption_button_container_);
diff --git a/chrome/browser/ui/views/harmony/chrome_layout_provider.cc b/chrome/browser/ui/views/harmony/chrome_layout_provider.cc index e7b6c45..1e0ef0c 100644 --- a/chrome/browser/ui/views/harmony/chrome_layout_provider.cc +++ b/chrome/browser/ui/views/harmony/chrome_layout_provider.cc
@@ -89,6 +89,8 @@ return 12; case DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH: return 400; + case DISTANCE_LARGE_MODAL_DIALOG_PREFERRED_WIDTH: + return 512; case DISTANCE_BUBBLE_PREFERRED_WIDTH: return 320; default:
diff --git a/chrome/browser/ui/views/harmony/chrome_layout_provider.h b/chrome/browser/ui/views/harmony/chrome_layout_provider.h index f9c9e73..6a3c2ac1 100644 --- a/chrome/browser/ui/views/harmony/chrome_layout_provider.h +++ b/chrome/browser/ui/views/harmony/chrome_layout_provider.h
@@ -55,6 +55,8 @@ // Width of modal dialogs unless the content is too wide to make that // feasible. DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH, + // Width of larger modal dialogs that require extra width. + DISTANCE_LARGE_MODAL_DIALOG_PREFERRED_WIDTH, // Width of a bubble unless the content is too wide to make that // feasible. DISTANCE_BUBBLE_PREFERRED_WIDTH,
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc index ba7286e1..1379ec7 100644 --- a/chrome/browser/ui/views/location_bar/location_bar_view.cc +++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
@@ -979,8 +979,7 @@ } bool LocationBarView::ShouldShowKeywordBubble() const { - return !omnibox_view_->model()->keyword().empty() && - !omnibox_view_->model()->is_keyword_hint(); + return omnibox_view_->model()->is_keyword_selected(); } bool LocationBarView::ShouldShowLocationIconText() const {
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.h b/chrome/browser/ui/views/location_bar/location_bar_view.h index 8451046..d32fe4b 100644 --- a/chrome/browser/ui/views/location_bar/location_bar_view.h +++ b/chrome/browser/ui/views/location_bar/location_bar_view.h
@@ -317,6 +317,7 @@ // - For chrome:// URLs, returns the short product name (e.g. Chrome). base::string16 GetLocationIconText() const; + // Returns true if a keyword is selected in the model. bool ShouldShowKeywordBubble() const; // Returns true if any of the following is true:
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc index 1102576..5ab2343 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc
@@ -2,14 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// For WinDDK ATL compatibility, these ATL headers must come first. -#include "build/build_config.h" - -#if defined(OS_WIN) -#include <atlbase.h> // NOLINT -#include <atlwin.h> // NOLINT -#endif - #include "chrome/browser/ui/views/omnibox/omnibox_result_view.h" #include <limits.h> @@ -21,6 +13,7 @@ #include "base/macros.h" #include "base/metrics/field_trial_params.h" #include "base/strings/string_util.h" +#include "build/build_config.h" #include "chrome/browser/ui/layout_constants.h" #include "chrome/browser/ui/omnibox/omnibox_theme.h" #include "chrome/browser/ui/views/location_bar/background_with_1_px_border.h" @@ -43,6 +36,10 @@ #include "ui/events/event.h" #include "ui/gfx/paint_vector_icon.h" +#if defined(OS_WIN) +#include "base/win/atl.h" +#endif + namespace { // Creates a views::Background for the current result style.
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc index d789541..e4d50e9 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
@@ -1230,7 +1230,7 @@ OmniboxPopupModel::TAB_SWITCH) { popup_view_->OpenMatch(WindowOpenDisposition::SWITCH_TO_TAB); } else { - if (alt) { + if (alt || (shift && command)) { model()->AcceptInput(WindowOpenDisposition::NEW_FOREGROUND_TAB, false); } else if (command) {
diff --git a/chrome/browser/ui/views/overlay/close_image_button.cc b/chrome/browser/ui/views/overlay/close_image_button.cc new file mode 100644 index 0000000..c00ea51 --- /dev/null +++ b/chrome/browser/ui/views/overlay/close_image_button.cc
@@ -0,0 +1,79 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/views/overlay/close_image_button.h" + +#include "chrome/app/vector_icons/vector_icons.h" +#include "chrome/grit/generated_resources.h" +#include "third_party/skia/include/core/SkColor.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/display/display.h" +#include "ui/display/screen.h" +#include "ui/gfx/color_palette.h" +#include "ui/gfx/paint_vector_icon.h" +#include "ui/views/vector_icons.h" + +namespace { + +const int kCloseButtonMargin = 8; +const int kCloseButtonSize = 24; + +constexpr SkColor kCloseBgColor = gfx::kGoogleGrey700; +constexpr SkColor kCloseIconColor = SK_ColorWHITE; + +} // namespace + +namespace views { + +CloseImageButton::CloseImageButton(ButtonListener* listener) + : ImageButton(listener), + close_background_( + gfx::CreateVectorIcon(kPictureInPictureControlBackgroundIcon, + kCloseButtonSize, + kCloseBgColor)) { + SetImageAlignment(views::ImageButton::ALIGN_CENTER, + views::ImageButton::ALIGN_MIDDLE); + SetBackgroundImageAlignment(views::ImageButton::ALIGN_LEFT, + views::ImageButton::ALIGN_TOP); + SetSize(gfx::Size(kCloseButtonSize, kCloseButtonSize)); + SetImage(views::Button::STATE_NORMAL, + gfx::CreateVectorIcon(views::kIcCloseIcon, + std::round(kCloseButtonSize * 2.0 / 3.0), + kCloseIconColor)); + + // Accessibility. + SetFocusForPlatform(); + const base::string16 close_button_label( + l10n_util::GetStringUTF16(IDS_PICTURE_IN_PICTURE_CLOSE_CONTROL_TEXT)); + SetAccessibleName(close_button_label); + SetTooltipText(close_button_label); + SetInstallFocusRingOnFocus(true); +} + +void CloseImageButton::StateChanged(ButtonState old_state) { + ImageButton::StateChanged(old_state); + + if (state() == STATE_HOVERED || state() == STATE_PRESSED) + SetBackgroundImage(kCloseBgColor, &close_background_, &close_background_); + else + SetBackgroundImage(kCloseBgColor, nullptr, nullptr); +} + +void CloseImageButton::OnFocus() { + ImageButton::OnFocus(); + SetBackgroundImage(kCloseBgColor, &close_background_, &close_background_); +} + +void CloseImageButton::OnBlur() { + ImageButton::OnBlur(); + SetBackgroundImage(kCloseBgColor, nullptr, nullptr); +} + +void CloseImageButton::SetPosition(const gfx::Size& size) { + ImageButton::SetPosition( + gfx::Point(size.width() - kCloseButtonSize - kCloseButtonMargin, + kCloseButtonMargin)); +} + +} // namespace views
diff --git a/chrome/browser/ui/views/overlay/close_image_button.h b/chrome/browser/ui/views/overlay/close_image_button.h new file mode 100644 index 0000000..5f14ac8 --- /dev/null +++ b/chrome/browser/ui/views/overlay/close_image_button.h
@@ -0,0 +1,37 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_VIEWS_OVERLAY_CLOSE_IMAGE_BUTTON_H_ +#define CHROME_BROWSER_UI_VIEWS_OVERLAY_CLOSE_IMAGE_BUTTON_H_ + +#include "ui/views/controls/button/image_button.h" + +namespace views { + +// An image button representing a white close button. When the user interacts +// with the button, a grey circular background appears as an indicator. +class CloseImageButton : public views::ImageButton { + public: + explicit CloseImageButton(ButtonListener* listener); + ~CloseImageButton() override = default; + + // views::Button: + void StateChanged(ButtonState old_state) override; + + // views::View: + void OnFocus() override; + void OnBlur() override; + + // Sets the position of itself with an offset from the given window size. + void SetPosition(const gfx::Size& size); + + private: + const gfx::ImageSkia close_background_; + + DISALLOW_COPY_AND_ASSIGN(CloseImageButton); +}; + +} // namespace views + +#endif // CHROME_BROWSER_UI_VIEWS_OVERLAY_CLOSE_IMAGE_BUTTON_H_
diff --git a/chrome/browser/ui/views/overlay/overlay_window_views.cc b/chrome/browser/ui/views/overlay/overlay_window_views.cc index cb193a7..0b75d8461 100644 --- a/chrome/browser/ui/views/overlay/overlay_window_views.cc +++ b/chrome/browser/ui/views/overlay/overlay_window_views.cc
@@ -8,6 +8,7 @@ #include "base/memory/ptr_util.h" #include "chrome/app/vector_icons/vector_icons.h" +#include "chrome/browser/ui/views/overlay/close_image_button.h" #include "chrome/grit/generated_resources.h" #include "content/public/browser/picture_in_picture_window_controller.h" #include "content/public/browser/web_contents.h" @@ -40,9 +41,6 @@ // screen's width and height. const float kPlayPauseControlRatioToWindow = 0.3; -const int kCloseButtonMargin = 8; -const int kCloseButtonSize = 24; - const int kMinPlayPauseButtonSize = 48; // Colors for the control buttons. @@ -135,7 +133,7 @@ window_background_view_(new views::View()), video_view_(new views::View()), controls_background_view_(new views::View()), - close_controls_view_(new views::ImageButton(this)), + close_controls_view_(new views::CloseImageButton(this)), play_pause_controls_view_(new views::ToggleImageButton(this)) { views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; @@ -226,30 +224,6 @@ GetControlsBackgroundLayer()->SetColor(gfx::kGoogleGrey900); GetControlsBackgroundLayer()->SetOpacity(0.43f); - // views::View that closes the window. -------------------------------------- - close_controls_view_->SetImageAlignment(views::ImageButton::ALIGN_CENTER, - views::ImageButton::ALIGN_MIDDLE); - close_controls_view_->SetBackgroundImageAlignment( - views::ImageButton::ALIGN_LEFT, views::ImageButton::ALIGN_TOP); - close_controls_view_->SetSize(gfx::Size(kCloseButtonSize, kCloseButtonSize)); - close_controls_view_->SetImage( - views::Button::STATE_NORMAL, - gfx::CreateVectorIcon(views::kIcCloseIcon, - std::round(kCloseButtonSize * 2.0 / 3.0), - kControlIconColor)); - const gfx::ImageSkia close_background = gfx::CreateVectorIcon( - kPictureInPictureControlBackgroundIcon, kCloseButtonSize, kBgColor); - close_controls_view_->SetBackgroundImage(kBgColor, &close_background, - &close_background); - - // Accessibility. - close_controls_view_->SetFocusForPlatform(); // Make button focusable. - const base::string16 close_button_label( - l10n_util::GetStringUTF16(IDS_PICTURE_IN_PICTURE_CLOSE_CONTROL_TEXT)); - close_controls_view_->SetAccessibleName(close_button_label); - close_controls_view_->SetTooltipText(close_button_label); - close_controls_view_->SetInstallFocusRingOnFocus(true); - // views::View that toggles play/pause. ------------------------------------- play_pause_controls_view_->SetImageAlignment( views::ImageButton::ALIGN_CENTER, views::ImageButton::ALIGN_MIDDLE); @@ -327,9 +301,7 @@ controls_background_view_->SetBoundsRect( gfx::Rect(gfx::Point(0, 0), GetBounds().size())); - close_controls_view_->SetPosition(gfx::Point( - GetBounds().size().width() - kCloseButtonSize - kCloseButtonMargin, - kCloseButtonMargin)); + close_controls_view_->SetPosition(GetBounds().size()); play_pause_controls_view_->SetBoundsRect(gfx::Rect( gfx::Point(
diff --git a/chrome/browser/ui/views/overlay/overlay_window_views.h b/chrome/browser/ui/views/overlay/overlay_window_views.h index 0b2f00f..3a7f4f6b 100644 --- a/chrome/browser/ui/views/overlay/overlay_window_views.h +++ b/chrome/browser/ui/views/overlay/overlay_window_views.h
@@ -12,7 +12,7 @@ #include "ui/views/widget/widget.h" namespace views { -class ImageButton; +class CloseImageButton; class ToggleImageButton; } // namespace views @@ -144,7 +144,7 @@ std::unique_ptr<views::View> window_background_view_; std::unique_ptr<views::View> video_view_; std::unique_ptr<views::View> controls_background_view_; - std::unique_ptr<views::ImageButton> close_controls_view_; + std::unique_ptr<views::CloseImageButton> close_controls_view_; std::unique_ptr<views::ToggleImageButton> play_pause_controls_view_; DISALLOW_COPY_AND_ASSIGN(OverlayWindowViews);
diff --git a/chrome/browser/ui/views/tabs/DEPS b/chrome/browser/ui/views/tabs/DEPS index 04632bf..5c95fe2 100644 --- a/chrome/browser/ui/views/tabs/DEPS +++ b/chrome/browser/ui/views/tabs/DEPS
@@ -1,6 +1,6 @@ specific_include_rules = { # mash-ok "window_finder_chromeos\.cc": [ - "+ash/wm/root_window_finder.h", + "+ash/wm/window_finder.h", ], }
diff --git a/chrome/browser/ui/views/tabs/tab.cc b/chrome/browser/ui/views/tabs/tab.cc index 34b35c69..58759cc 100644 --- a/chrome/browser/ui/views/tabs/tab.cc +++ b/chrome/browser/ui/views/tabs/tab.cc
@@ -1379,17 +1379,23 @@ const float scale = canvas->UndoDeviceScaleFactor(); canvas->ClipPath(fill_path, true); + + // In the active case, always fill the tab with its bg color first in case the + // image is transparent. In the inactive case, the image is guaranteed to be + // opaque, so it's only necessary to fill the color when there's no image. + if (active || !fill_id) { + cc::PaintFlags flags; + flags.setAntiAlias(true); + flags.setColor(active ? active_color : inactive_color); + canvas->DrawRect(gfx::ScaleToEnclosingRect(GetLocalBounds(), scale), flags); + } + if (fill_id) { gfx::ScopedCanvas scale_scoper(canvas); canvas->sk_canvas()->scale(scale, scale); canvas->TileImageInt(*GetThemeProvider()->GetImageSkiaNamed(fill_id), GetMirroredX() + background_offset_, 0, 0, y_inset, width(), height()); - } else { - cc::PaintFlags flags; - flags.setAntiAlias(true); - flags.setColor(active ? active_color : inactive_color); - canvas->DrawRect(gfx::ScaleToEnclosingRect(GetLocalBounds(), scale), flags); } if (paint_hover_effect) {
diff --git a/chrome/browser/ui/views/tabs/tab_drag_controller.cc b/chrome/browser/ui/views/tabs/tab_drag_controller.cc index 9e6fb7c..eb19c78 100644 --- a/chrome/browser/ui/views/tabs/tab_drag_controller.cc +++ b/chrome/browser/ui/views/tabs/tab_drag_controller.cc
@@ -352,7 +352,6 @@ is_mutating_(false), attach_x_(-1), attach_index_(-1), - window_finder_(std::make_unique<WindowFinder>()), weak_factory_(this) { g_tab_drag_controller = this; } @@ -439,6 +438,8 @@ detach_behavior_ = NOT_DETACHABLE; } #endif + window_finder_ = WindowFinder::Create( + event_source, source_tabstrip->GetWidget()->GetNativeWindow()); } // static
diff --git a/chrome/browser/ui/views/tabs/window_finder.cc b/chrome/browser/ui/views/tabs/window_finder.cc index 7f95d12..a54636c 100644 --- a/chrome/browser/ui/views/tabs/window_finder.cc +++ b/chrome/browser/ui/views/tabs/window_finder.cc
@@ -4,5 +4,11 @@ #include "chrome/browser/ui/views/tabs/window_finder.h" -WindowFinder::WindowFinder() {} -WindowFinder::~WindowFinder() {} +#include "base/memory/ptr_util.h" + +// static +std::unique_ptr<WindowFinder> WindowFinder::Create( + TabDragController::EventSource source, + gfx::NativeWindow window) { + return base::WrapUnique(new WindowFinder()); +}
diff --git a/chrome/browser/ui/views/tabs/window_finder.h b/chrome/browser/ui/views/tabs/window_finder.h index ffef3c3..6d9ae96c 100644 --- a/chrome/browser/ui/views/tabs/window_finder.h +++ b/chrome/browser/ui/views/tabs/window_finder.h
@@ -5,8 +5,10 @@ #ifndef CHROME_BROWSER_UI_VIEWS_TABS_WINDOW_FINDER_H_ #define CHROME_BROWSER_UI_VIEWS_TABS_WINDOW_FINDER_H_ +#include <memory> #include <set> +#include "chrome/browser/ui/views/tabs/tab_drag_controller.h" #include "ui/gfx/native_widget_types.h" namespace gfx { @@ -16,8 +18,12 @@ // Class used by the tabstrip to find chrome windows that we can attach tabs to. class WindowFinder { public: - WindowFinder(); - virtual ~WindowFinder(); + virtual ~WindowFinder() = default; + + // Creates the default implementation of WindowFinder. + static std::unique_ptr<WindowFinder> Create( + TabDragController::EventSource source, + gfx::NativeWindow window); // Finds the topmost visible chrome window at |screen_point|. This should // return nullptr if |screen_point| is in another program's window which @@ -27,6 +33,9 @@ const gfx::Point& screen_point, const std::set<gfx::NativeWindow>& ignore); + protected: + WindowFinder() = default; + private: DISALLOW_COPY_AND_ASSIGN(WindowFinder); };
diff --git a/chrome/browser/ui/views/tabs/window_finder_chromeos.cc b/chrome/browser/ui/views/tabs/window_finder_chromeos.cc index d66dfac..e8ce4da 100644 --- a/chrome/browser/ui/views/tabs/window_finder_chromeos.cc +++ b/chrome/browser/ui/views/tabs/window_finder_chromeos.cc
@@ -4,9 +4,8 @@ #include "chrome/browser/ui/views/tabs/window_finder.h" -#include "ash/public/cpp/shell_window_ids.h" -#include "ash/wm/root_window_finder.h" // mash-ok -#include "ui/aura/client/screen_position_client.h" +#include "ash/wm/window_finder.h" // mash-ok +#include "ui/aura/mus/topmost_window_tracker.h" #include "ui/aura/mus/window_tree_client.h" #include "ui/aura/window.h" #include "ui/base/ui_base_features.h" @@ -14,77 +13,66 @@ namespace { -gfx::NativeWindow GetLocalProcessWindowAtPointAsh( - const gfx::Point& screen_point, - const std::set<gfx::NativeWindow>& ignore, - gfx::NativeWindow window) { - if (ignore.find(window) != ignore.end()) - return nullptr; +class WindowFinderClassic : public WindowFinder { + public: + WindowFinderClassic() {} - if (!window->IsVisible()) - return nullptr; - - if (window->id() == ash::kShellWindowId_PhantomWindow || - window->id() == ash::kShellWindowId_OverlayContainer || - window->id() == ash::kShellWindowId_MouseCursorContainer) - return nullptr; - - if (window->layer()->type() == ui::LAYER_TEXTURED) { - // Returns the window that has visible layer and can hit the - // |screen_point|, because we want to detach the tab as soon as - // the dragging mouse moved over to the window that can hide the - // moving tab. - aura::client::ScreenPositionClient* client = - aura::client::GetScreenPositionClient(window->GetRootWindow()); - gfx::Point local_point = screen_point; - client->ConvertPointFromScreen(window, &local_point); - return window->GetEventHandlerForPoint(local_point) ? window : nullptr; + gfx::NativeWindow GetLocalProcessWindowAtPoint( + const gfx::Point& screen_point, + const std::set<gfx::NativeWindow>& ignore) override { + return ash::wm::GetTopmostWindowAtPoint(screen_point, ignore, nullptr); } - for (aura::Window::Windows::const_reverse_iterator i = - window->children().rbegin(); - i != window->children().rend(); ++i) { - gfx::NativeWindow result = - GetLocalProcessWindowAtPointAsh(screen_point, ignore, *i); - if (result) - return result; - } - return nullptr; -} + private: + DISALLOW_COPY_AND_ASSIGN(WindowFinderClassic); +}; -gfx::NativeWindow GetLocalProcessWindowAtPointMus( - const gfx::Point& screen_point, - const std::set<gfx::NativeWindow>& ignore) { - std::set<aura::Window*> root_windows = - views::MusClient::Get()->window_tree_client()->GetRoots(); - // TODO(erg): Needs to deal with stacking order here. - - // For every mus window, look at the associated aura window and see if we're - // in that. - for (aura::Window* root : root_windows) { - views::Widget* widget = views::Widget::GetWidgetForNativeView(root); - if (widget && widget->GetWindowBoundsInScreen().Contains(screen_point)) { - aura::Window* content_window = widget->GetNativeWindow(); - - // If we were instructed to ignore this window, ignore it. - if (base::ContainsKey(ignore, content_window)) - continue; - - return content_window; - } +class WindowFinderMash : public WindowFinder { + public: + WindowFinderMash(TabDragController::EventSource event_source, + gfx::NativeWindow window) { + ui::mojom::MoveLoopSource source = + (event_source == TabDragController::EVENT_SOURCE_MOUSE) + ? ui::mojom::MoveLoopSource::MOUSE + : ui::mojom::MoveLoopSource::TOUCH; + tracker_ = views::MusClient::Get() + ->window_tree_client() + ->StartObservingTopmostWindow(source, window); } - return nullptr; -} + gfx::NativeWindow GetLocalProcessWindowAtPoint( + const gfx::Point& screen_point, + const std::set<gfx::NativeWindow>& ignore) override { + DCHECK_LE(ignore.size(), 1u); + aura::Window* window = + ignore.empty() ? tracker_->topmost() : tracker_->second_topmost(); + if (!window) + return nullptr; + views::Widget* widget = views::Widget::GetWidgetForNativeView(window); + if (!widget) + return nullptr; + return widget->GetNativeWindow(); + } + + private: + std::unique_ptr<aura::TopmostWindowTracker> tracker_; + + DISALLOW_COPY_AND_ASSIGN(WindowFinderMash); +}; } // namespace +std::unique_ptr<WindowFinder> WindowFinder::Create( + TabDragController::EventSource source, + gfx::NativeWindow window) { + if (features::IsAshInBrowserProcess()) + return std::make_unique<WindowFinderClassic>(); + return std::make_unique<WindowFinderMash>(source, window); +} + gfx::NativeWindow WindowFinder::GetLocalProcessWindowAtPoint( const gfx::Point& screen_point, const std::set<gfx::NativeWindow>& ignore) { - if (!features::IsAshInBrowserProcess()) - return GetLocalProcessWindowAtPointMus(screen_point, ignore); - - return GetLocalProcessWindowAtPointAsh( - screen_point, ignore, ash::wm::GetRootWindowAt(screen_point)); + NOTREACHED(); + return nullptr; }
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.cc b/chrome/browser/ui/views/toolbar/toolbar_view.cc index 49a7115..faa5ad8 100644 --- a/chrome/browser/ui/views/toolbar/toolbar_view.cc +++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc
@@ -601,6 +601,11 @@ const ui::ThemeProvider* tp = GetThemeProvider(); + // Always fill the toolbar with its bg color first in case the image is + // transparent. + canvas->FillRect(GetLocalBounds(), + tp->GetColor(ThemeProperties::COLOR_TOOLBAR)); + if (tp->HasCustomImage(IDR_THEME_TOOLBAR)) { const int x_offset = GetMirroredX() + browser_view_->GetMirroredX() + @@ -610,9 +615,6 @@ GetLayoutConstant(TABSTRIP_TOOLBAR_OVERLAP); canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR), x_offset, y_offset, 0, 0, width(), height()); - } else { - canvas->FillRect(GetLocalBounds(), - tp->GetColor(ThemeProperties::COLOR_TOOLBAR)); } // Toolbar/content separator.
diff --git a/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc index b1287f6..44870c148 100644 --- a/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc
@@ -1552,6 +1552,14 @@ IDS_SETTINGS_PEOPLE_LOCK_SCREEN_FINGERPRINT_SUBPAGE_TITLE}, {"lockScreenFingerprintWarning", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_FINGERPRINT_LESS_SECURE}, + {"lockScreenNotificationHide", + IDS_ASH_SETTINGS_LOCK_SCREEN_NOTIFICATION_HIDE}, + {"lockScreenNotificationHideSensitive", + IDS_ASH_SETTINGS_LOCK_SCREEN_NOTIFICATION_HIDE_SENSITIVE}, + {"lockScreenNotificationShow", + IDS_ASH_SETTINGS_LOCK_SCREEN_NOTIFICATION_SHOW}, + {"lockScreenNotificationTitle", + IDS_ASH_SETTINGS_LOCK_SCREEN_NOTIFICATION_TITLE}, {"lockScreenOptionsLock", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_OPTIONS_LOCK}, {"lockScreenOptionsLoginLock", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_OPTIONS_LOGIN_LOCK},
diff --git a/chrome/browser/ui/webui/settings/md_settings_ui.cc b/chrome/browser/ui/webui/settings/md_settings_ui.cc index 52afb34..609bb31 100644 --- a/chrome/browser/ui/webui/settings/md_settings_ui.cc +++ b/chrome/browser/ui/webui/settings/md_settings_ui.cc
@@ -11,6 +11,7 @@ #include <utility> #include <vector> +#include "ash/public/cpp/ash_features.h" #include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" #include "build/build_config.h" @@ -308,6 +309,11 @@ chromeos::quick_unlock::IsPinDisabledByPolicy(profile->GetPrefs())); html_source->AddBoolean("fingerprintUnlockEnabled", chromeos::quick_unlock::IsFingerprintEnabled()); + html_source->AddBoolean("lockScreenNotificationsEnabled", + ash::features::IsLockScreenNotificationsEnabled()); + html_source->AddBoolean( + "lockScreenHideSensitiveNotificationsSupported", + ash::features::IsLockScreenHideSensitiveNotificationsSupported()); html_source->AddBoolean("hasInternalStylus", ash::stylus_utils::HasInternalStylus());
diff --git a/chrome/browser/ui/window_sizer/window_sizer.cc b/chrome/browser/ui/window_sizer/window_sizer.cc index 93542b5..66cebbb 100644 --- a/chrome/browser/ui/window_sizer/window_sizer.cc +++ b/chrome/browser/ui/window_sizer/window_sizer.cc
@@ -366,10 +366,12 @@ return browser_->initial_show_state(); } -#if !defined(OS_CHROMEOS) -// Chrome OS has an implementation in //chrome/browser/ui/ash. // static display::Display WindowSizer::GetDisplayForNewWindow(const gfx::Rect& bounds) { +#if defined(OS_CHROMEOS) + // Prefer the display where the user last activated a window. + return display::Screen::GetScreen()->GetDisplayForNewWindows(); +#else return display::Screen::GetScreen()->GetDisplayMatching(bounds); -} #endif // defined(OS_CHROMEOS) +}
diff --git a/chrome/browser/ui/window_sizer/window_sizer_ash_unittest.cc b/chrome/browser/ui/window_sizer/window_sizer_ash_unittest.cc index 881a9da..a0eee6b 100644 --- a/chrome/browser/ui/window_sizer/window_sizer_ash_unittest.cc +++ b/chrome/browser/ui/window_sizer/window_sizer_ash_unittest.cc
@@ -6,7 +6,6 @@ #include "ash/shell.h" #include "ash/test/ash_test_base.h" #include "base/memory/ptr_util.h" -#include "chrome/browser/ui/ash/shell_state_client.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/window_sizer/window_sizer_common_unittest.h" #include "chrome/common/chrome_switches.h" @@ -44,7 +43,7 @@ auto state_provider = std::make_unique<TestStateProvider>(); state_provider->SetPersistentState(gfx::Rect(), gfx::Rect(), ui::SHOW_STATE_DEFAULT); - shell_state_client_.SetDisplayIdForNewWindows(display_id); + display::Screen::GetScreen()->SetDisplayForNewWindows(display_id); ui::WindowShowState ignored; WindowSizer sizer(std::move(state_provider), browser); @@ -94,7 +93,6 @@ protected: TestingProfile profile_; - ShellStateClient shell_state_client_; private: DISALLOW_COPY_AND_ASSIGN(WindowSizerAshTest); @@ -733,7 +731,7 @@ // When the second display is active new windows are placed there. aura::Window* second_root = ash::Shell::GetAllRootWindows()[1]; int64_t second_display_id = display_manager()->GetSecondaryDisplay().id(); - shell_state_client_.SetDisplayIdForNewWindows(second_display_id); + display::Screen::GetScreen()->SetDisplayForNewWindows(second_display_id); gfx::Rect bounds; ui::WindowShowState show_state; WindowSizer::GetBrowserWindowBoundsAndShowState(
diff --git a/chrome/browser/unified_consent/unified_consent_service_factory.cc b/chrome/browser/unified_consent/unified_consent_service_factory.cc index 2d8836f..c4c50fc 100644 --- a/chrome/browser/unified_consent/unified_consent_service_factory.cc +++ b/chrome/browser/unified_consent/unified_consent_service_factory.cc
@@ -46,14 +46,19 @@ KeyedService* UnifiedConsentServiceFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { Profile* profile = Profile::FromBrowserContext(context); + syncer::SyncService* sync_service = + ProfileSyncServiceFactory::GetSyncServiceForBrowserContext(profile); - if (!IsUnifiedConsentEnabled(profile)) + if (!IsUnifiedConsentEnabled(profile)) { + unified_consent::UnifiedConsentService::RollbackIfNeeded( + profile->GetPrefs(), sync_service); return nullptr; + } return new unified_consent::UnifiedConsentService( std::make_unique<ChromeUnifiedConsentServiceClient>(profile->GetPrefs()), profile->GetPrefs(), IdentityManagerFactory::GetForProfile(profile), - ProfileSyncServiceFactory::GetSyncServiceForBrowserContext(profile)); + sync_service); } bool UnifiedConsentServiceFactory::ServiceIsNULLWhileTesting() const {
diff --git a/chrome/browser/vr/elements/url_text_unittest.cc b/chrome/browser/vr/elements/url_text_unittest.cc index 4b02ff3..f2bc2c8 100644 --- a/chrome/browser/vr/elements/url_text_unittest.cc +++ b/chrome/browser/vr/elements/url_text_unittest.cc
@@ -10,10 +10,10 @@ namespace vr { -#if !defined(OS_LINUX) && !defined(OS_WIN) // TODO(crbug/731894): This test does not work on Linux. // TODO(crbug/770893): This test does not work on Windows. -TEST(UrlText, WillNotFailOnNonAsciiURLs) { +// TODO(crbug/731894): This test does not work on Android, either. +TEST(UrlText, DISABLED_WillNotFailOnNonAsciiURLs) { bool unhandled_code_point = false; auto url_text = std::make_unique<UrlText>( 0.010, base::BindRepeating([](bool* flag) { *flag = true; }, @@ -23,7 +23,6 @@ url_text->PrepareToDrawForTest(); EXPECT_EQ(false, unhandled_code_point); } -#endif TEST(UrlText, WillFailOnUnhandledCodePoint) { bool unhandled_code_point;
diff --git a/chrome/browser/web_applications/components/BUILD.gn b/chrome/browser/web_applications/components/BUILD.gn index 862cb14..5818e46 100644 --- a/chrome/browser/web_applications/components/BUILD.gn +++ b/chrome/browser/web_applications/components/BUILD.gn
@@ -8,6 +8,8 @@ "pending_app_manager.h", "web_app_helpers.cc", "web_app_helpers.h", + "web_app_icon_generator.cc", + "web_app_icon_generator.h", "web_app_shortcut.cc", "web_app_shortcut.h", "web_app_shortcut_chromeos.cc", @@ -49,6 +51,7 @@ sources = [ "web_app_helpers_unittest.cc", "web_app_icon_downloader_unittest.cc", + "web_app_icon_generator_unittest.cc", "web_app_shortcut_mac_unittest.mm", "web_app_shortcut_unittest.cc", ]
diff --git a/chrome/browser/web_applications/components/web_app_icon_generator.cc b/chrome/browser/web_applications/components/web_app_icon_generator.cc new file mode 100644 index 0000000..ff330a7b --- /dev/null +++ b/chrome/browser/web_applications/components/web_app_icon_generator.cc
@@ -0,0 +1,221 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/web_applications/components/web_app_icon_generator.h" + +#include <cctype> +#include <string> +#include <utility> + +#include "base/macros.h" +#include "build/build_config.h" +#include "chrome/grit/platform_locale_settings.h" +#include "net/base/registry_controlled_domains/registry_controlled_domain.h" +#include "skia/ext/image_operations.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/gfx/canvas.h" +#include "ui/gfx/color_analysis.h" +#include "ui/gfx/color_utils.h" +#include "ui/gfx/font.h" +#include "ui/gfx/font_list.h" +#include "ui/gfx/geometry/rect.h" +#include "ui/gfx/image/canvas_image_source.h" +#include "ui/gfx/image/image.h" + +namespace web_app { + +namespace { + +// Generates a square container icon of |output_size| by drawing the given +// |letter| into a rounded background of |color|. +class GeneratedIconImageSource : public gfx::CanvasImageSource { + public: + explicit GeneratedIconImageSource(char letter, SkColor color, int output_size) + : gfx::CanvasImageSource(gfx::Size(output_size, output_size), false), + letter_(letter), + color_(color), + output_size_(output_size) {} + ~GeneratedIconImageSource() override {} + + private: + // gfx::CanvasImageSource overrides: + void Draw(gfx::Canvas* canvas) override { + const uint8_t kLumaThreshold = 190; + const int icon_size = output_size_ * 3 / 4; + const int icon_inset = output_size_ / 8; + const size_t border_radius = output_size_ / 16; + const size_t font_size = output_size_ * 7 / 16; + + std::string font_name = + l10n_util::GetStringUTF8(IDS_SANS_SERIF_FONT_FAMILY); +#if defined(OS_CHROMEOS) + const std::string kChromeOSFontFamily = "Noto Sans"; + font_name = kChromeOSFontFamily; +#endif + + // Draw a rounded rect of the given |color|. + cc::PaintFlags background_flags; + background_flags.setAntiAlias(true); + background_flags.setColor(color_); + + gfx::Rect icon_rect(icon_inset, icon_inset, icon_size, icon_size); + canvas->DrawRoundRect(icon_rect, border_radius, background_flags); + + // The text rect's size needs to be odd to center the text correctly. + gfx::Rect text_rect(icon_inset, icon_inset, icon_size + 1, icon_size + 1); + // Draw the letter onto the rounded rect. The letter's color depends on the + // luma of |color|. + const uint8_t luma = color_utils::GetLuma(color_); + canvas->DrawStringRectWithFlags( + base::string16(1, std::toupper(letter_)), + gfx::FontList(gfx::Font(font_name, font_size)), + (luma > kLumaThreshold) ? SK_ColorBLACK : SK_ColorWHITE, text_rect, + gfx::Canvas::TEXT_ALIGN_CENTER); + } + + char letter_; + + SkColor color_; + + int output_size_; + + DISALLOW_COPY_AND_ASSIGN(GeneratedIconImageSource); +}; + +// Adds a square container icon of |output_size| and 2 * |output_size| pixels +// to |bitmaps| by drawing the given |letter| into a rounded background of +// |color|. For each size, if an icon of the requested size already exists in +// |bitmaps|, nothing will happen. +void GenerateIcon(std::map<int, BitmapAndSource>* bitmaps, + int output_size, + SkColor color, + char letter) { + // Do nothing if there is already an icon of |output_size|. + if (bitmaps->count(output_size)) + return; + + (*bitmaps)[output_size].bitmap = GenerateBitmap(output_size, color, letter); +} + +void GenerateIcons(std::set<int> generate_sizes, + const GURL& app_url, + SkColor generated_icon_color, + std::map<int, BitmapAndSource>* bitmap_map) { + // The letter that will be painted on the generated icon. + char icon_letter = ' '; + std::string domain_and_registry( + net::registry_controlled_domains::GetDomainAndRegistry( + app_url, + net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES)); + if (!domain_and_registry.empty()) { + icon_letter = domain_and_registry[0]; + } else if (app_url.has_host()) { + icon_letter = app_url.host_piece()[0]; + } + + // If no color has been specified, use a dark gray so it will stand out on the + // black shelf. + if (generated_icon_color == SK_ColorTRANSPARENT) + generated_icon_color = SK_ColorDKGRAY; + + for (int size : generate_sizes) { + GenerateIcon(bitmap_map, size, generated_icon_color, icon_letter); + } +} + +} // namespace + +BitmapAndSource::BitmapAndSource() {} + +BitmapAndSource::BitmapAndSource(const GURL& source_url_p, + const SkBitmap& bitmap_p) + : source_url(source_url_p), bitmap(bitmap_p) {} + +BitmapAndSource::~BitmapAndSource() {} + +std::map<int, BitmapAndSource> ConstrainBitmapsToSizes( + const std::vector<BitmapAndSource>& bitmaps, + const std::set<int>& sizes) { + std::map<int, BitmapAndSource> output_bitmaps; + std::map<int, BitmapAndSource> ordered_bitmaps; + for (const BitmapAndSource& bitmap_and_source : bitmaps) { + const SkBitmap& bitmap = bitmap_and_source.bitmap; + DCHECK(bitmap.width() == bitmap.height()); + ordered_bitmaps[bitmap.width()] = bitmap_and_source; + } + + if (ordered_bitmaps.size() > 0) { + for (const auto& size : sizes) { + // Find the closest not-smaller bitmap, or failing that use the largest + // icon available. + auto bitmaps_it = ordered_bitmaps.lower_bound(size); + if (bitmaps_it != ordered_bitmaps.end()) + output_bitmaps[size] = bitmaps_it->second; + else + output_bitmaps[size] = ordered_bitmaps.rbegin()->second; + + // Resize the bitmap if it does not exactly match the desired size. + if (output_bitmaps[size].bitmap.width() != size) { + output_bitmaps[size].bitmap = skia::ImageOperations::Resize( + output_bitmaps[size].bitmap, skia::ImageOperations::RESIZE_LANCZOS3, + size, size); + } + } + } + + return output_bitmaps; +} + +SkBitmap GenerateBitmap(int output_size, SkColor color, char letter) { + gfx::ImageSkia icon_image( + std::make_unique<GeneratedIconImageSource>(letter, color, output_size), + gfx::Size(output_size, output_size)); + SkBitmap dst; + if (dst.tryAllocPixels(icon_image.bitmap()->info())) { + icon_image.bitmap()->readPixels(dst.info(), dst.getPixels(), dst.rowBytes(), + 0, 0); + } + return dst; +} + +std::map<int, BitmapAndSource> ResizeIconsAndGenerateMissing( + const std::vector<BitmapAndSource>& icons, + const std::set<int>& sizes_to_generate, + const GURL& app_url, + SkColor* generated_icon_color) { + DCHECK(generated_icon_color); + + // Resize provided icons to make sure we have versions for each size in + // |sizes_to_generate|. + std::map<int, BitmapAndSource> resized_bitmaps( + ConstrainBitmapsToSizes(icons, sizes_to_generate)); + + // Also add all provided icon sizes. + for (const BitmapAndSource& icon : icons) { + if (resized_bitmaps.find(icon.bitmap.width()) == resized_bitmaps.end()) + resized_bitmaps.insert(std::make_pair(icon.bitmap.width(), icon)); + } + + // Determine the color that will be used for the icon's background. For this + // the dominant color of the first icon found is used. + if (resized_bitmaps.size()) { + color_utils::GridSampler sampler; + *generated_icon_color = color_utils::CalculateKMeanColorOfBitmap( + resized_bitmaps.begin()->second.bitmap); + } + + // Work out what icons we need to generate here. Icons are only generated if + // there is no icon in the required size. + std::set<int> generate_sizes; + for (int size : sizes_to_generate) { + if (resized_bitmaps.find(size) == resized_bitmaps.end()) + generate_sizes.insert(size); + } + GenerateIcons(generate_sizes, app_url, *generated_icon_color, + &resized_bitmaps); + + return resized_bitmaps; +} + +} // namespace web_app
diff --git a/chrome/browser/web_applications/components/web_app_icon_generator.h b/chrome/browser/web_applications/components/web_app_icon_generator.h new file mode 100644 index 0000000..11c8f72 --- /dev/null +++ b/chrome/browser/web_applications/components/web_app_icon_generator.h
@@ -0,0 +1,51 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_ICON_GENERATOR_H_ +#define CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_ICON_GENERATOR_H_ + +#include <map> +#include <set> +#include <vector> + +#include "third_party/skia/include/core/SkBitmap.h" +#include "third_party/skia/include/core/SkColor.h" +#include "url/gurl.h" + +namespace web_app { + +struct BitmapAndSource { + BitmapAndSource(); + BitmapAndSource(const GURL& source_url_p, const SkBitmap& bitmap_p); + ~BitmapAndSource(); + + GURL source_url; + SkBitmap bitmap; +}; + +// This finds the closest not-smaller bitmap in |bitmaps| for each size in +// |sizes| and resizes it to that size. This returns a map of sizes to bitmaps +// which contains only bitmaps of a size in |sizes| and at most one bitmap of +// each size. +std::map<int, BitmapAndSource> ConstrainBitmapsToSizes( + const std::vector<BitmapAndSource>& bitmaps, + const std::set<int>& sizes); + +// Generates a square container icon of |output_size| by drawing the given +// |letter| into a rounded background of |color|. +SkBitmap GenerateBitmap(int output_size, SkColor color, char letter); + +// Resize icons to the accepted sizes, and generate any that are missing. +// Note that |app_url| is the launch URL for the app. +// Output: |generated_icon_color| is the color to use if an icon needs to be +// generated for the web app. +std::map<int, BitmapAndSource> ResizeIconsAndGenerateMissing( + const std::vector<BitmapAndSource>& icons, + const std::set<int>& sizes_to_generate, + const GURL& app_url, + SkColor* generated_icon_color); + +} // namespace web_app + +#endif // CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_ICON_GENERATOR_H_
diff --git a/chrome/browser/web_applications/components/web_app_icon_generator_unittest.cc b/chrome/browser/web_applications/components/web_app_icon_generator_unittest.cc new file mode 100644 index 0000000..8f3fc40 --- /dev/null +++ b/chrome/browser/web_applications/components/web_app_icon_generator_unittest.cc
@@ -0,0 +1,422 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/web_applications/components/web_app_icon_generator.h" + +#include <vector> + +#include "base/stl_util.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace web_app { + +namespace { + +const char kAppIconURL1[] = "http://foo.com/1.png"; +const char kAppIconURL2[] = "http://foo.com/2.png"; +const char kAppIconURL3[] = "http://foo.com/3.png"; + +// These sizes match extension_misc::ExtensionIcons enum. +const int kIconSizeTiny = 16; +const int kIconSizeSmall = 32; +const int kIconSizeMedium = 48; +const int kIconSizeLarge = 128; +const int kIconSizeGigantor = 512; + +const int kIconSizeSmallBetweenMediumAndLarge = 63; +const int kIconSizeLargeBetweenMediumAndLarge = 96; + +SkBitmap CreateSquareBitmapWithColor(int size, SkColor color) { + SkBitmap bitmap; + bitmap.allocN32Pixels(size, size); + bitmap.eraseColor(color); + return bitmap; +} + +web_app::BitmapAndSource CreateSquareBitmapAndSourceWithColor(int size, + SkColor color) { + return web_app::BitmapAndSource(GURL(), + CreateSquareBitmapWithColor(size, color)); +} + +struct IconInfo { + IconInfo() : width(0), height(0) {} + ~IconInfo() = default; + + GURL url; + int width; + int height; + SkBitmap data; +}; + +IconInfo CreateIconInfoWithBitmap(int size, SkColor color) { + IconInfo icon_info; + icon_info.width = size; + icon_info.height = size; + icon_info.data = CreateSquareBitmapWithColor(size, color); + return icon_info; +} + +std::set<int> TestSizesToGenerate() { + const int kIconSizesToGenerate[] = { + kIconSizeSmall, kIconSizeMedium, kIconSizeLarge, + }; + return std::set<int>(kIconSizesToGenerate, + kIconSizesToGenerate + base::size(kIconSizesToGenerate)); +} + +void ValidateAllIconsWithURLsArePresent( + const std::vector<IconInfo>& icons_to_check, + const std::map<int, BitmapAndSource>& size_map) { + EXPECT_EQ(icons_to_check.size(), size_map.size()); + + // Check that every icon with URL has a mapped icon. + for (const auto& icon : icons_to_check) { + if (!icon.url.is_empty()) { + bool found = false; + if (base::ContainsKey(size_map, icon.width)) { + const BitmapAndSource& mapped_icon = size_map.at(icon.width); + if (mapped_icon.source_url == icon.url && + mapped_icon.bitmap.width() == icon.width) { + found = true; + } + } + EXPECT_TRUE(found); + } + } +} + +std::vector<web_app::BitmapAndSource>::const_iterator +FindLargestBitmapAndSourceVector( + const std::vector<web_app::BitmapAndSource>& bitmap_vector) { + auto result = bitmap_vector.end(); + int largest = -1; + for (std::vector<web_app::BitmapAndSource>::const_iterator it = + bitmap_vector.begin(); + it != bitmap_vector.end(); ++it) { + if (it->bitmap.width() > largest) { + result = it; + } + } + return result; +} + +std::vector<web_app::BitmapAndSource>::const_iterator +FindMatchingBitmapAndSourceVector( + const std::vector<web_app::BitmapAndSource>& bitmap_vector, + int size) { + for (std::vector<web_app::BitmapAndSource>::const_iterator it = + bitmap_vector.begin(); + it != bitmap_vector.end(); ++it) { + if (it->bitmap.width() == size) { + return it; + } + } + return bitmap_vector.end(); +} + +std::vector<web_app::BitmapAndSource>::const_iterator +FindEqualOrLargerBitmapAndSourceVector( + const std::vector<web_app::BitmapAndSource>& bitmap_vector, + int size) { + for (std::vector<web_app::BitmapAndSource>::const_iterator it = + bitmap_vector.begin(); + it != bitmap_vector.end(); ++it) { + if (it->bitmap.width() >= size) { + return it; + } + } + return bitmap_vector.end(); +} + +void ValidateIconsGeneratedAndResizedCorrectly( + std::vector<web_app::BitmapAndSource> downloaded, + std::map<int, web_app::BitmapAndSource> size_map, + std::set<int> sizes_to_generate, + int expected_generated, + int expected_resized) { + GURL empty_url(""); + int number_generated = 0; + int number_resized = 0; + + auto icon_largest = FindLargestBitmapAndSourceVector(downloaded); + for (const auto& size : sizes_to_generate) { + auto icon_downloaded = FindMatchingBitmapAndSourceVector(downloaded, size); + auto icon_larger = FindEqualOrLargerBitmapAndSourceVector(downloaded, size); + if (icon_downloaded == downloaded.end()) { + auto icon_resized = size_map.find(size); + if (icon_largest == downloaded.end()) { + // There are no downloaded icons. Expect an icon to be generated. + EXPECT_NE(size_map.end(), icon_resized); + EXPECT_EQ(size, icon_resized->second.bitmap.width()); + EXPECT_EQ(size, icon_resized->second.bitmap.height()); + EXPECT_EQ(size, icon_resized->second.bitmap.height()); + EXPECT_EQ(empty_url, icon_resized->second.source_url); + ++number_generated; + } else { + // If there is a larger downloaded icon, it should be resized. Otherwise + // the largest downloaded icon should be resized. + auto icon_to_resize = icon_largest; + if (icon_larger != downloaded.end()) + icon_to_resize = icon_larger; + EXPECT_NE(size_map.end(), icon_resized); + EXPECT_EQ(size, icon_resized->second.bitmap.width()); + EXPECT_EQ(size, icon_resized->second.bitmap.height()); + EXPECT_EQ(size, icon_resized->second.bitmap.height()); + EXPECT_EQ(icon_to_resize->source_url, icon_resized->second.source_url); + ++number_resized; + } + } else { + // There is an icon of exactly this size downloaded. Expect no icon to be + // generated, and the existing downloaded icon to be used. + auto icon_resized = size_map.find(size); + EXPECT_NE(size_map.end(), icon_resized); + EXPECT_EQ(size, icon_resized->second.bitmap.width()); + EXPECT_EQ(size, icon_resized->second.bitmap.height()); + EXPECT_EQ(size, icon_downloaded->bitmap.width()); + EXPECT_EQ(size, icon_downloaded->bitmap.height()); + EXPECT_EQ(icon_downloaded->source_url, icon_resized->second.source_url); + } + } + EXPECT_EQ(expected_generated, number_generated); + EXPECT_EQ(expected_resized, number_resized); +} + +void ValidateBitmapSizeAndColor(SkBitmap bitmap, int size, SkColor color) { + // Obtain pixel lock to access pixels. + EXPECT_EQ(color, bitmap.getColor(0, 0)); + EXPECT_EQ(size, bitmap.width()); + EXPECT_EQ(size, bitmap.height()); +} + +void TestIconGeneration(int icon_size, + int expected_generated, + int expected_resized) { + std::vector<BitmapAndSource> downloaded; + + // Add an icon with a URL and bitmap. 'Download' it. + IconInfo icon_info = CreateIconInfoWithBitmap(icon_size, SK_ColorRED); + icon_info.url = GURL(kAppIconURL1); + downloaded.push_back(BitmapAndSource(icon_info.url, icon_info.data)); + + // Now run the resizing/generation and validation. + SkColor generated_icon_color = SK_ColorTRANSPARENT; + std::map<int, web_app::BitmapAndSource> size_map = + ResizeIconsAndGenerateMissing(downloaded, TestSizesToGenerate(), GURL(), + &generated_icon_color); + + ValidateIconsGeneratedAndResizedCorrectly( + downloaded, size_map, TestSizesToGenerate(), expected_generated, + expected_resized); +} + +} // namespace + +TEST(WebAppIconGeneratorTest, ConstrainBitmapsToSizes) { + std::set<int> desired_sizes; + desired_sizes.insert(16); + desired_sizes.insert(32); + desired_sizes.insert(48); + desired_sizes.insert(96); + desired_sizes.insert(128); + desired_sizes.insert(256); + + { + std::vector<web_app::BitmapAndSource> bitmaps; + bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(16, SK_ColorRED)); + bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(32, SK_ColorGREEN)); + bitmaps.push_back( + CreateSquareBitmapAndSourceWithColor(144, SK_ColorYELLOW)); + + std::map<int, web_app::BitmapAndSource> results( + ConstrainBitmapsToSizes(bitmaps, desired_sizes)); + + EXPECT_EQ(6u, results.size()); + ValidateBitmapSizeAndColor(results[16].bitmap, 16, SK_ColorRED); + ValidateBitmapSizeAndColor(results[32].bitmap, 32, SK_ColorGREEN); + ValidateBitmapSizeAndColor(results[48].bitmap, 48, SK_ColorYELLOW); + ValidateBitmapSizeAndColor(results[96].bitmap, 96, SK_ColorYELLOW); + ValidateBitmapSizeAndColor(results[128].bitmap, 128, SK_ColorYELLOW); + ValidateBitmapSizeAndColor(results[256].bitmap, 256, SK_ColorYELLOW); + } + { + std::vector<web_app::BitmapAndSource> bitmaps; + bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(512, SK_ColorRED)); + bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(18, SK_ColorGREEN)); + bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(33, SK_ColorBLUE)); + bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(17, SK_ColorYELLOW)); + + std::map<int, web_app::BitmapAndSource> results( + ConstrainBitmapsToSizes(bitmaps, desired_sizes)); + + EXPECT_EQ(6u, results.size()); + ValidateBitmapSizeAndColor(results[16].bitmap, 16, SK_ColorYELLOW); + ValidateBitmapSizeAndColor(results[32].bitmap, 32, SK_ColorBLUE); + ValidateBitmapSizeAndColor(results[48].bitmap, 48, SK_ColorRED); + ValidateBitmapSizeAndColor(results[96].bitmap, 96, SK_ColorRED); + ValidateBitmapSizeAndColor(results[128].bitmap, 128, SK_ColorRED); + ValidateBitmapSizeAndColor(results[256].bitmap, 256, SK_ColorRED); + } +} + +TEST(WebAppIconGeneratorTest, LinkedAppIconsAreNotChanged) { + std::vector<IconInfo> icons_info; + + IconInfo icon_info; + icon_info.url = GURL(kAppIconURL3); + + icon_info.width = kIconSizeMedium; + icons_info.push_back(icon_info); + + icon_info.width = kIconSizeSmall; + icons_info.push_back(icon_info); + + icon_info.width = kIconSizeLarge; + icons_info.push_back(icon_info); + + // 'Download' one of the icons without a size or bitmap. + std::vector<BitmapAndSource> downloaded; + downloaded.push_back(BitmapAndSource( + GURL(kAppIconURL3), + CreateSquareBitmapWithColor(kIconSizeLarge, SK_ColorBLACK))); + + const auto& sizes = TestSizesToGenerate(); + + // Now run the resizing and generation into a new web icons info. + SkColor generated_icon_color = SK_ColorTRANSPARENT; + std::map<int, web_app::BitmapAndSource> size_map = + ResizeIconsAndGenerateMissing(downloaded, sizes, GURL(), + &generated_icon_color); + EXPECT_EQ(sizes.size(), size_map.size()); + + // Now check that the linked app icons (i.e. those with URLs) are matching. + ValidateAllIconsWithURLsArePresent(icons_info, size_map); +} + +TEST(WebAppIconGeneratorTest, IconsResizedFromOddSizes) { + std::vector<BitmapAndSource> downloaded; + + // Add three icons with a URL and bitmap. 'Download' each of them. + IconInfo icon_info = CreateIconInfoWithBitmap(kIconSizeSmall, SK_ColorRED); + icon_info.url = GURL(kAppIconURL1); + downloaded.push_back(web_app::BitmapAndSource(icon_info.url, icon_info.data)); + + icon_info = CreateIconInfoWithBitmap(kIconSizeSmallBetweenMediumAndLarge, + SK_ColorRED); + icon_info.url = GURL(kAppIconURL2); + downloaded.push_back(web_app::BitmapAndSource(icon_info.url, icon_info.data)); + + icon_info = CreateIconInfoWithBitmap(kIconSizeLargeBetweenMediumAndLarge, + SK_ColorRED); + icon_info.url = GURL(kAppIconURL3); + downloaded.push_back(web_app::BitmapAndSource(icon_info.url, icon_info.data)); + + // Now run the resizing and generation. + SkColor generated_icon_color = SK_ColorTRANSPARENT; + std::map<int, web_app::BitmapAndSource> size_map = + ResizeIconsAndGenerateMissing(downloaded, TestSizesToGenerate(), GURL(), + &generated_icon_color); + + // No icons should be generated. The LARGE and MEDIUM sizes should be resized. + ValidateIconsGeneratedAndResizedCorrectly(downloaded, size_map, + TestSizesToGenerate(), 0, 2); +} + +TEST(WebAppIconGeneratorTest, IconsResizedFromLarger) { + std::vector<web_app::BitmapAndSource> downloaded; + + // Add three icons with a URL and bitmap. 'Download' two of them and pretend + // the third failed to download. + IconInfo icon_info = CreateIconInfoWithBitmap(kIconSizeSmall, SK_ColorRED); + icon_info.url = GURL(kAppIconURL1); + downloaded.push_back(web_app::BitmapAndSource(icon_info.url, icon_info.data)); + + icon_info = CreateIconInfoWithBitmap(kIconSizeLarge, SK_ColorBLUE); + icon_info.url = GURL(kAppIconURL2); + + icon_info = CreateIconInfoWithBitmap(kIconSizeGigantor, SK_ColorBLACK); + icon_info.url = GURL(kAppIconURL3); + downloaded.push_back(web_app::BitmapAndSource(icon_info.url, icon_info.data)); + + // Now run the resizing and generation. + SkColor generated_icon_color = SK_ColorTRANSPARENT; + std::map<int, web_app::BitmapAndSource> size_map = + ResizeIconsAndGenerateMissing(downloaded, TestSizesToGenerate(), GURL(), + &generated_icon_color); + + // Expect icon for MEDIUM and LARGE to be resized from the gigantor icon + // as it was not downloaded. + ValidateIconsGeneratedAndResizedCorrectly(downloaded, size_map, + TestSizesToGenerate(), 0, 2); +} + +TEST(WebAppIconGeneratorTest, AllIconsGeneratedWhenNotDownloaded) { + std::vector<web_app::BitmapAndSource> downloaded; + + // Add three icons with a URL and bitmap. 'Download' none of them. + IconInfo icon_info = CreateIconInfoWithBitmap(kIconSizeSmall, SK_ColorRED); + icon_info.url = GURL(kAppIconURL1); + + icon_info = CreateIconInfoWithBitmap(kIconSizeLarge, SK_ColorBLUE); + icon_info.url = GURL(kAppIconURL2); + + icon_info = CreateIconInfoWithBitmap(kIconSizeGigantor, SK_ColorBLACK); + icon_info.url = GURL(kAppIconURL3); + + // Now run the resizing and generation. + SkColor generated_icon_color = SK_ColorTRANSPARENT; + std::map<int, web_app::BitmapAndSource> size_map = + ResizeIconsAndGenerateMissing(downloaded, TestSizesToGenerate(), GURL(), + &generated_icon_color); + + // Expect all icons to be generated. + ValidateIconsGeneratedAndResizedCorrectly(downloaded, size_map, + TestSizesToGenerate(), 3, 0); +} + +TEST(WebAppIconGeneratorTest, IconResizedFromLargerAndSmaller) { + std::vector<web_app::BitmapAndSource> downloaded; + + // Pretend the huge icon wasn't downloaded but two smaller ones were. + IconInfo icon_info = CreateIconInfoWithBitmap(kIconSizeTiny, SK_ColorRED); + icon_info.url = GURL(kAppIconURL1); + downloaded.push_back(web_app::BitmapAndSource(icon_info.url, icon_info.data)); + + icon_info = CreateIconInfoWithBitmap(kIconSizeMedium, SK_ColorBLUE); + icon_info.url = GURL(kAppIconURL2); + downloaded.push_back(web_app::BitmapAndSource(icon_info.url, icon_info.data)); + + icon_info = CreateIconInfoWithBitmap(kIconSizeGigantor, SK_ColorBLACK); + icon_info.url = GURL(kAppIconURL3); + + // Now run the resizing and generation. + SkColor generated_icon_color = SK_ColorTRANSPARENT; + std::map<int, web_app::BitmapAndSource> size_map = + ResizeIconsAndGenerateMissing(downloaded, TestSizesToGenerate(), GURL(), + &generated_icon_color); + + // Expect no icons to be generated, but the LARGE and SMALL icons to be + // resized from the MEDIUM icon. + ValidateIconsGeneratedAndResizedCorrectly(downloaded, size_map, + TestSizesToGenerate(), 0, 2); + + // Verify specifically that the LARGE icons was resized from the medium icon. + const auto it = size_map.find(kIconSizeLarge); + EXPECT_NE(size_map.end(), it); + EXPECT_EQ(GURL(kAppIconURL2), it->second.source_url); +} + +TEST(WebAppIconGeneratorTest, IconsResizedWhenOnlyATinyOneIsProvided) { + // When only a tiny icon is downloaded (smaller than the three desired + // sizes), 3 icons should be resized. + TestIconGeneration(kIconSizeTiny, 0, 3); +} + +TEST(WebAppIconGeneratorTest, IconsResizedWhenOnlyAGigantorOneIsProvided) { + // When an enormous icon is provided, each desired icon size should be resized + // from it, and no icons should be generated. + TestIconGeneration(kIconSizeGigantor, 0, 3); +} + +} // namespace web_app
diff --git a/chrome/browser/win/automation_controller.cc b/chrome/browser/win/automation_controller.cc index 43f0c2b..039a065e 100644 --- a/chrome/browser/win/automation_controller.cc +++ b/chrome/browser/win/automation_controller.cc
@@ -4,10 +4,6 @@ #include "chrome/browser/win/automation_controller.h" -// Needed for atlcom.h -#include <atlbase.h> - -#include <atlcom.h> #include <stdint.h> #include <wrl/client.h> @@ -20,6 +16,7 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/task/post_task.h" +#include "base/win/atl.h" #include "base/win/scoped_variant.h" #include "chrome/browser/win/ui_automation_util.h" #include "ui/base/win/atl_module.h"
diff --git a/chrome/chrome_cleaner/http/error_utils.cc b/chrome/chrome_cleaner/http/error_utils.cc index e7e7a06..891a94f 100644 --- a/chrome/chrome_cleaner/http/error_utils.cc +++ b/chrome/chrome_cleaner/http/error_utils.cc
@@ -4,13 +4,12 @@ #include "chrome/chrome_cleaner/http/error_utils.h" -#include <atlbase.h> -#include <shlwapi.h> - #include <string> #include "base/stl_util.h" #include "base/strings/string_util.h" +#include "base/win/atl.h" +#include "base/win/shlwapi.h" namespace common {
diff --git a/chrome/chrome_cleaner/logging/cleaner_logging_service_unittest.cc b/chrome/chrome_cleaner/logging/cleaner_logging_service_unittest.cc index a65f4e5a..7232959 100644 --- a/chrome/chrome_cleaner/logging/cleaner_logging_service_unittest.cc +++ b/chrome/chrome_cleaner/logging/cleaner_logging_service_unittest.cc
@@ -37,6 +37,7 @@ #include "chrome/chrome_cleaner/proto/shared_pup_enums.pb.h" #include "chrome/chrome_cleaner/pup_data/pup_data.h" #include "chrome/chrome_cleaner/test/test_file_util.h" +#include "chrome/chrome_cleaner/test/test_name_helper.h" #include "chrome/chrome_cleaner/test/test_settings_util.h" #include "chrome/chrome_cleaner/test/test_task_scheduler.h" #include "components/chrome_cleaner/public/constants/constants.h" @@ -1430,6 +1431,7 @@ INSTANTIATE_TEST_CASE_P(All, CleanerLoggingServiceTest, testing::Values(ExecutionMode::kScanning, - ExecutionMode::kCleanup)); + ExecutionMode::kCleanup), + GetParamNameForTest()); } // namespace chrome_cleaner
diff --git a/chrome/chrome_cleaner/settings/cleaner_settings_unittest.cc b/chrome/chrome_cleaner/settings/cleaner_settings_unittest.cc index 5741f15a..973ce34a 100644 --- a/chrome/chrome_cleaner/settings/cleaner_settings_unittest.cc +++ b/chrome/chrome_cleaner/settings/cleaner_settings_unittest.cc
@@ -9,6 +9,7 @@ #include "base/command_line.h" #include "base/strings/string_number_conversions.h" #include "chrome/chrome_cleaner/constants/chrome_cleaner_switches.h" +#include "chrome/chrome_cleaner/test/test_name_helper.h" #include "components/chrome_cleaner/public/constants/constants.h" #include "testing/gtest/include/gtest/gtest.h" @@ -77,6 +78,7 @@ ExecutionMode::kCleanup), /*with_scanning_mode_logs=*/::testing::Bool(), /*with_cleanup_mode_logs=*/::testing::Bool(), - /*uploading_blocked=*/::testing::Bool())); + /*uploading_blocked=*/::testing::Bool()), + GetParamNameForTest()); } // namespace chrome_cleaner
diff --git a/chrome/chrome_cleaner/test/BUILD.gn b/chrome/chrome_cleaner/test/BUILD.gn index f811aea..3a6894e1 100644 --- a/chrome/chrome_cleaner/test/BUILD.gn +++ b/chrome/chrome_cleaner/test/BUILD.gn
@@ -62,7 +62,6 @@ "test_file_util.h", "test_layered_service_provider.cc", "test_layered_service_provider.h", - "test_name_helper.cc", "test_name_helper.h", "test_registry_util.cc", "test_registry_util.h",
diff --git a/chrome/chrome_cleaner/test/test_name_helper.cc b/chrome/chrome_cleaner/test/test_name_helper.cc deleted file mode 100644 index 7f9c7c9..0000000 --- a/chrome/chrome_cleaner/test/test_name_helper.cc +++ /dev/null
@@ -1,27 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/chrome_cleaner/test/test_name_helper.h" -#include <ostream> - -namespace chrome_cleaner { - -std::ostream& operator<<(std::ostream& stream, ExecutionMode mode) { - switch (mode) { - case ExecutionMode::kNone: - stream << "kNone"; - break; - case ExecutionMode::kScanning: - stream << "kScanning"; - break; - case ExecutionMode::kCleanup: - stream << "kCleanup"; - break; - default: - stream << mode; - } - return stream; -} - -} // namespace chrome_cleaner
diff --git a/chrome/chrome_cleaner/test/test_name_helper.h b/chrome/chrome_cleaner/test/test_name_helper.h index ce7b08d..78700f8 100644 --- a/chrome/chrome_cleaner/test/test_name_helper.h +++ b/chrome/chrome_cleaner/test/test_name_helper.h
@@ -10,7 +10,6 @@ #include <string> #include "base/strings/string_util.h" -#include "components/chrome_cleaner/public/constants/constants.h" #include "testing/gtest/include/gtest/gtest.h" namespace chrome_cleaner { @@ -46,8 +45,6 @@ } }; -std::ostream& operator<<(std::ostream& stream, ExecutionMode mode); - } // namespace chrome_cleaner #endif // CHROME_CHROME_CLEANER_TEST_TEST_NAME_HELPER_H_
diff --git a/chrome/common/DEPS b/chrome/common/DEPS index fbbbe3c..4aa2abe 100644 --- a/chrome/common/DEPS +++ b/chrome/common/DEPS
@@ -57,6 +57,9 @@ "+third_party/blink/public/platform/web_client_hints_types.mojom.h", "+third_party/blink/public/platform/web_feature.mojom.h", + # Temporary dependency for thread_profiler.h. TODO(chengx): remove this dependency. + "+third_party/metrics_proto/sampled_profile.pb.h", + # FIXME - refactor code and remove these dependencies "+chrome/installer/util", ]
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index e91fc60..968214d5 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc
@@ -1723,6 +1723,15 @@ // "0x0004,0x0005"). const char kCipherSuiteBlacklist[] = "ssl.cipher_suites.blacklist"; +// List of strings specifying which hosts are allowed to have H2 connections +// coalesced when client certs are also used. This follows rules similar to +// the URLBlacklist format for hostnames: a pattern with a leading dot (e.g. +// ".example.net") matches exactly the hostname following the dot (i.e. only +// "example.net"), and a pattern with no leading dot (e.g. "example.com") +// matches that hostname and all subdomains. +const char kH2ClientCertCoalescingHosts[] = + "ssl.client_certs.h2_coalescing_hosts"; + // Boolean that specifies whether the built-in asynchronous DNS client is used. const char kBuiltInDnsClientEnabled[] = "async_dns.enabled";
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index 87fc43c..77c2961 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h
@@ -688,6 +688,7 @@ extern const char kSSLVersionMax[]; extern const char kTLS13Variant[]; extern const char kCipherSuiteBlacklist[]; +extern const char kH2ClientCertCoalescingHosts[]; extern const char kBuiltInDnsClientEnabled[]; extern const char kDnsOverHttpsServers[];
diff --git a/chrome/common/thread_profiler.cc b/chrome/common/thread_profiler.cc index a568282..3520bc4 100644 --- a/chrome/common/thread_profiler.cc +++ b/chrome/common/thread_profiler.cc
@@ -190,18 +190,16 @@ : owning_thread_task_runner_(owning_thread_task_runner), periodic_profile_params_(GetProcess(), thread, - CallStackProfileParams::PERIODIC_COLLECTION, - CallStackProfileParams::MAY_SHUFFLE), + CallStackProfileParams::PERIODIC_COLLECTION), weak_factory_(this) { if (!StackSamplingConfiguration::Get()->IsProfilerEnabledForCurrentProcess()) return; - auto profile_builder = - std::make_unique<CallStackProfileBuilder>(BindRepeating( - &ThreadProfiler::ReceiveStartupProfile, - GetReceiverCallback(CallStackProfileParams( - GetProcess(), thread, CallStackProfileParams::PROCESS_STARTUP, - CallStackProfileParams::MAY_SHUFFLE)))); + auto profile_builder = std::make_unique<CallStackProfileBuilder>( + BindRepeating(&ThreadProfiler::ReceiveStartupProfile, + GetReceiverCallback()), + CallStackProfileParams(GetProcess(), thread, + CallStackProfileParams::PROCESS_STARTUP)); startup_profiler_ = std::make_unique<StackSamplingProfiler>( base::PlatformThread::CurrentId(), kSamplingParams, @@ -225,8 +223,8 @@ ScheduleNextPeriodicCollection(); } -CallStackProfileBuilder::CompletedCallback ThreadProfiler::GetReceiverCallback( - const CallStackProfileParams& profile_params) { +CallStackProfileBuilder::CompletedCallback +ThreadProfiler::GetReceiverCallback() { // TODO(wittman): Simplify the approach to getting the profiler callback // across CallStackProfileMetricsProvider and // ChildCallStackProfileCollector. Ultimately both should expose functions @@ -242,17 +240,16 @@ base::TimeTicks profile_start_time = base::TimeTicks::Now(); if (GetProcess() == CallStackProfileParams::BROWSER_PROCESS) { return metrics::CallStackProfileMetricsProvider:: - GetProfilerCallbackForBrowserProcess(profile_params); + GetProfilerCallbackForBrowserProcess(); } return g_child_call_stack_profile_collector.Get() - .ChildCallStackProfileCollector::GetProfilerCallback(profile_params, - profile_start_time); + .ChildCallStackProfileCollector::GetProfilerCallback(profile_start_time); } // static void ThreadProfiler::ReceiveStartupProfile( const CallStackProfileBuilder::CompletedCallback& receiver_callback, - StackSamplingProfiler::CallStackProfile profile) { + metrics::SampledProfile profile) { receiver_callback.Run(std::move(profile)); } @@ -261,7 +258,7 @@ const CallStackProfileBuilder::CompletedCallback& receiver_callback, scoped_refptr<base::SingleThreadTaskRunner> owning_thread_task_runner, base::WeakPtr<ThreadProfiler> thread_profiler, - StackSamplingProfiler::CallStackProfile profile) { + metrics::SampledProfile profile) { receiver_callback.Run(std::move(profile)); owning_thread_task_runner->PostTask( FROM_HERE, base::BindOnce(&ThreadProfiler::ScheduleNextPeriodicCollection, @@ -282,8 +279,9 @@ // NB: Destroys the previous profiler as side effect. auto profile_builder = std::make_unique<CallStackProfileBuilder>( BindRepeating(&ThreadProfiler::ReceivePeriodicProfile, - GetReceiverCallback(periodic_profile_params_), - owning_thread_task_runner_, weak_factory_.GetWeakPtr())); + GetReceiverCallback(), owning_thread_task_runner_, + weak_factory_.GetWeakPtr()), + periodic_profile_params_); periodic_profiler_ = std::make_unique<StackSamplingProfiler>( base::PlatformThread::CurrentId(), kSamplingParams,
diff --git a/chrome/common/thread_profiler.h b/chrome/common/thread_profiler.h index c87c8f55..7d6f817 100644 --- a/chrome/common/thread_profiler.h +++ b/chrome/common/thread_profiler.h
@@ -17,6 +17,7 @@ #include "base/time/time.h" #include "components/metrics/call_stack_profile_builder.h" #include "components/metrics/call_stack_profile_params.h" +#include "third_party/metrics_proto/sampled_profile.pb.h" namespace service_manager { class Connector; @@ -93,8 +94,7 @@ scoped_refptr<base::SingleThreadTaskRunner>()); // Gets the completed callback for the ultimate receiver of the profile. - metrics::CallStackProfileBuilder::CompletedCallback GetReceiverCallback( - const metrics::CallStackProfileParams& profile_params); + metrics::CallStackProfileBuilder::CompletedCallback GetReceiverCallback(); // Receives |profile| from the metrics::CallStackProfileBuilder and forwards // it on to the original |receiver_callback|. Note that we must obtain and @@ -105,13 +105,13 @@ static void ReceiveStartupProfile( const metrics::CallStackProfileBuilder::CompletedCallback& receiver_callback, - base::StackSamplingProfiler::CallStackProfile profile); + metrics::SampledProfile profile); static void ReceivePeriodicProfile( const metrics::CallStackProfileBuilder::CompletedCallback& receiver_callback, scoped_refptr<base::SingleThreadTaskRunner> owning_thread_task_runner, base::WeakPtr<ThreadProfiler> thread_profiler, - base::StackSamplingProfiler::CallStackProfile profile); + metrics::SampledProfile profile); // Posts a delayed task to start the next periodic sampling collection. void ScheduleNextPeriodicCollection();
diff --git a/chrome/installer/util/copy_tree_work_item.cc b/chrome/installer/util/copy_tree_work_item.cc index eb9e342..4dd39a73 100644 --- a/chrome/installer/util/copy_tree_work_item.cc +++ b/chrome/installer/util/copy_tree_work_item.cc
@@ -4,10 +4,9 @@ #include "chrome/installer/util/copy_tree_work_item.h" -#include <shlwapi.h> - #include "base/files/file_util.h" #include "base/logging.h" +#include "base/win/shlwapi.h" #include "chrome/installer/util/logging_installer.h" CopyTreeWorkItem::~CopyTreeWorkItem() {
diff --git a/chrome/installer/util/create_reg_key_work_item.cc b/chrome/installer/util/create_reg_key_work_item.cc index dbf46b20..109de6be 100644 --- a/chrome/installer/util/create_reg_key_work_item.cc +++ b/chrome/installer/util/create_reg_key_work_item.cc
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include <shlwapi.h> #include <stddef.h> #include "base/files/file_path.h" #include "base/logging.h" #include "base/win/registry.h" +#include "base/win/shlwapi.h" #include "chrome/installer/util/create_reg_key_work_item.h" #include "chrome/installer/util/install_util.h" #include "chrome/installer/util/logging_installer.h"
diff --git a/chrome/installer/util/delete_reg_key_work_item.cc b/chrome/installer/util/delete_reg_key_work_item.cc index c0e13d9..f937efe 100644 --- a/chrome/installer/util/delete_reg_key_work_item.cc +++ b/chrome/installer/util/delete_reg_key_work_item.cc
@@ -4,10 +4,9 @@ #include "chrome/installer/util/delete_reg_key_work_item.h" -#include <shlwapi.h> - #include "base/logging.h" #include "base/win/registry.h" +#include "base/win/shlwapi.h" #include "chrome/installer/util/install_util.h" using base::win::RegKey;
diff --git a/chrome/installer/util/google_update_settings_unittest.cc b/chrome/installer/util/google_update_settings_unittest.cc index 96e7b1b..9df41c46 100644 --- a/chrome/installer/util/google_update_settings_unittest.cc +++ b/chrome/installer/util/google_update_settings_unittest.cc
@@ -5,7 +5,6 @@ #include "chrome/installer/util/google_update_settings.h" #include <windows.h> -#include <shlwapi.h> // For SHDeleteKey. #include <stddef.h> #include <memory> @@ -17,6 +16,7 @@ #include "base/test/scoped_path_override.h" #include "base/test/test_reg_util_win.h" #include "base/win/registry.h" +#include "base/win/shlwapi.h" // For SHDeleteKey. #include "base/win/win_util.h" #include "chrome/common/chrome_constants.h" #include "chrome/install_static/install_util.h"
diff --git a/chrome/installer/util/install_util.cc b/chrome/installer/util/install_util.cc index 60ea669..47c6e49e 100644 --- a/chrome/installer/util/install_util.cc +++ b/chrome/installer/util/install_util.cc
@@ -9,7 +9,6 @@ #include <shellapi.h> #include <shlobj.h> -#include <shlwapi.h> #include <algorithm> #include <iterator> @@ -27,6 +26,7 @@ #include "base/values.h" #include "base/version.h" #include "base/win/registry.h" +#include "base/win/shlwapi.h" #include "base/win/shortcut.h" #include "base/win/windows_version.h" #include "chrome/common/chrome_constants.h"
diff --git a/chrome/installer/util/l10n_string_util.cc b/chrome/installer/util/l10n_string_util.cc index 8765c36..f9d9c92 100644 --- a/chrome/installer/util/l10n_string_util.cc +++ b/chrome/installer/util/l10n_string_util.cc
@@ -6,7 +6,6 @@ #include "chrome/installer/util/l10n_string_util.h" -#include <atlbase.h> #include <stdint.h> #include <algorithm> @@ -16,6 +15,7 @@ #include "base/logging.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" +#include "base/win/atl.h" #include "chrome/install_static/install_details.h" #include "chrome/install_static/install_modes.h" #include "chrome/installer/util/installer_util_strings.h"
diff --git a/chrome/installer/util/move_tree_work_item.cc b/chrome/installer/util/move_tree_work_item.cc index fa9896e..f8cd0c0 100644 --- a/chrome/installer/util/move_tree_work_item.cc +++ b/chrome/installer/util/move_tree_work_item.cc
@@ -4,10 +4,9 @@ #include "chrome/installer/util/move_tree_work_item.h" -#include <shlwapi.h> - #include "base/files/file_util.h" #include "base/logging.h" +#include "base/win/shlwapi.h" #include "chrome/installer/util/duplicate_tree_detector.h" #include "chrome/installer/util/logging_installer.h"
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc index 5ca3cf84..1435cbf 100644 --- a/chrome/renderer/chrome_content_renderer_client.cc +++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -161,6 +161,7 @@ #include "chrome/renderer/extensions/chrome_extensions_renderer_client.h" #include "extensions/common/constants.h" #include "extensions/common/extension_urls.h" +#include "extensions/common/manifest_handlers/web_accessible_resources_info.h" #include "extensions/common/switches.h" #include "extensions/renderer/dispatcher.h" #include "extensions/renderer/renderer_extension_registry.h" @@ -1738,3 +1739,17 @@ return nullptr; #endif // BUILDFLAG(ENABLE_EXTENSIONS) } + +bool ChromeContentRendererClient::IsSafeRedirectTarget(const GURL& url) { +#if BUILDFLAG(ENABLE_EXTENSIONS) + if (url.SchemeIs(extensions::kExtensionScheme)) { + const extensions::Extension* extension = + extensions::RendererExtensionRegistry::Get()->GetByID(url.host()); + if (!extension) + return false; + return extensions::WebAccessibleResourcesInfo::IsResourceWebAccessible( + extension, url.path()); + } +#endif // BUILDFLAG(ENABLE_EXTENSIONS) + return true; +}
diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h index ad6046f..53785d89 100644 --- a/chrome/renderer/chrome_content_renderer_client.h +++ b/chrome/renderer/chrome_content_renderer_client.h
@@ -233,6 +233,7 @@ content::URLLoaderThrottleProviderType provider_type) override; blink::WebFrame* FindFrame(blink::WebLocalFrame* relative_to_frame, const std::string& name) override; + bool IsSafeRedirectTarget(const GURL& url) override; #if BUILDFLAG(ENABLE_PLUGINS) static chrome::mojom::PluginInfoHostAssociatedPtr& GetPluginInfoHost();
diff --git a/chrome/renderer/printing/chrome_print_render_frame_helper_delegate.cc b/chrome/renderer/printing/chrome_print_render_frame_helper_delegate.cc index 65e3827d..e512109 100644 --- a/chrome/renderer/printing/chrome_print_render_frame_helper_delegate.cc +++ b/chrome/renderer/printing/chrome_print_render_frame_helper_delegate.cc
@@ -22,7 +22,7 @@ #if BUILDFLAG(ENABLE_EXTENSIONS) #include "chrome/common/extensions/extension_constants.h" #include "extensions/common/constants.h" -#include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h" +#include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS) ChromePrintRenderFrameHelperDelegate::ChromePrintRenderFrameHelperDelegate() = @@ -75,8 +75,8 @@ if (!frame->GetDocument().IsPluginDocument()) return false; - std::vector<extensions::MimeHandlerViewContainer*> mime_handlers = - extensions::MimeHandlerViewContainer::FromRenderFrame( + std::vector<extensions::MimeHandlerViewContainerBase*> mime_handlers = + extensions::MimeHandlerViewContainerBase::FromRenderFrame( content::RenderFrame::FromWebFrame(frame)); if (!mime_handlers.empty()) { // This message is handled in chrome/browser/resources/pdf/pdf_viewer.js and
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index e5e3fa7..5d47920 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -205,6 +205,10 @@ "base/test_browser_window.cc", "base/test_browser_window.h", ] + if (enable_vr) { + # Add a dummy implementation of RegisterJni to satisfy the linker. + sources += [ "../browser/android/vr/register_jni_monochrome.cc" ] + } } else { public_deps += [ "//components/ukm:test_support", @@ -569,6 +573,7 @@ "../browser/favicon/content_favicon_driver_browsertest.cc", "../browser/first_run/first_run_browsertest.cc", "../browser/geolocation/geolocation_browsertest.cc", + "../browser/guest_view/mime_handler_view/chrome_mime_handler_view_browsertest.cc", "../browser/history/history_browsertest.cc", "../browser/history/redirect_browsertest.cc", "../browser/iframe_browsertest.cc", @@ -2616,6 +2621,7 @@ "../browser/previews/previews_infobar_delegate_unittest.cc", "../browser/previews/previews_infobar_tab_helper_unittest.cc", "../browser/previews/previews_lite_page_decider_unittest.cc", + "../browser/previews/previews_lite_page_navigation_throttle_unittest.cc", "../browser/previews/previews_service_unittest.cc", "../browser/process_singleton_win_unittest.cc", "../browser/profiles/gaia_info_update_service_unittest.cc", @@ -3398,7 +3404,6 @@ "../browser/ui/ash/network/network_state_notifier_unittest.cc", "../browser/ui/ash/network/tether_notification_presenter_unittest.cc", "../browser/ui/ash/session_controller_client_unittest.cc", - "../browser/ui/ash/shell_state_client_unittest.cc", "../browser/ui/ash/tablet_mode_client_unittest.cc", "../browser/ui/ash/wallpaper_controller_client_unittest.cc", "../browser/ui/window_sizer/window_sizer_ash_unittest.cc", @@ -5798,6 +5803,7 @@ ] data = [ + "//third_party/catapult/telemetry/telemetry/internal/bin/", "//tools/perf/run_telemetry_tests", # For isolate contract.
diff --git a/chrome/test/base/browser_with_test_window_test.cc b/chrome/test/base/browser_with_test_window_test.cc index 13b9dd43..81f0943 100644 --- a/chrome/test/base/browser_with_test_window_test.cc +++ b/chrome/test/base/browser_with_test_window_test.cc
@@ -32,6 +32,7 @@ #include "components/constrained_window/constrained_window_views.h" #if defined(OS_CHROMEOS) +#include "ash/test/ash_test_views_delegate.h" #include "chrome/test/base/ash_test_environment_chrome.h" #else #include "ui/views/test/test_views_delegate.h" @@ -80,6 +81,7 @@ testing::Test::SetUp(); #if defined(OS_CHROMEOS) ash_test_helper_->SetUp(true); + ash_test_helper_->SetRunningOutsideAsh(); #elif defined(TOOLKIT_VIEWS) views_test_helper_.reset(new views::ScopedViewsTestHelper()); #endif
diff --git a/chrome/test/chromedriver/archive.py b/chrome/test/chromedriver/archive.py index e0f3247af..0c33a00 100644 --- a/chrome/test/chromedriver/archive.py +++ b/chrome/test/chromedriver/archive.py
@@ -70,35 +70,21 @@ zip_path = os.path.join(dest_dir, 'chrome-%s.zip' % revision) if not os.path.exists(zip_path): - legacy = int(revision) < 579575 - url = site + '/%s/%s' % (_GetDownloadPlatform(legacy), GetZipName(revision)) + url = site + '/%s/%s' % (_GetDownloadPlatform(), GetZipName(revision)) print 'Downloading', url, '...' urllib.urlretrieve(url, zip_path) util.Unzip(zip_path, dest_dir) return os.path.join(dest_dir, GetDirName(), GetChromePathFromPackage()) -def _GetDownloadPlatform(legacy=False): - """Returns the name for this platform on the archive site. - - Args: - legacy: When True, return name used for builds before revision 579575. - TODO(johnchen@chromium.org): Remove when we stop supporting m69. - """ - if legacy: - if util.IsWindows(): - return 'Win' - elif util.IsMac(): - return 'Mac' - elif util.IsLinux(): - return 'Linux_x64' - +def _GetDownloadPlatform(): + """Returns the name for this platform on the archive site.""" if util.IsWindows(): - return 'win32_rel' + return 'Win' elif util.IsMac(): - return 'mac_rel' + return 'Mac' elif util.IsLinux(): - return 'linux_rel' + return 'Linux_x64' def GetLatestSnapshotPosition():
diff --git a/chrome/test/chromedriver/embed_version_in_cpp.py b/chrome/test/chromedriver/embed_version_in_cpp.py index e2c1d9e..5f1733e 100755 --- a/chrome/test/chromedriver/embed_version_in_cpp.py +++ b/chrome/test/chromedriver/embed_version_in_cpp.py
@@ -84,11 +84,12 @@ chromedriver_version = open( options.chromedriver_version_file, 'r').read().strip() - # Get a VersionInfo object corresponding to the Git commit we are at. + # Get a VersionInfo object corresponding to the Git commit we are at, + # using the same filter used by main function of build/util/lastchange.py. # On success, version_info.revision_id is a 40-digit Git hash, # and version_info.revision is a longer string with more information. # On failure, version_info is None. - version_info = lastchange.FetchGitRevision(None, None) + version_info = lastchange.FetchGitRevision(None, '^Change-Id:') if version_info: version = get_release_version(options.chrome_version_file, version_info)
diff --git a/chrome/test/chromedriver/test/run_py_tests.py b/chrome/test/chromedriver/test/run_py_tests.py index 7812cc1c..011ee67 100755 --- a/chrome/test/chromedriver/test/run_py_tests.py +++ b/chrome/test/chromedriver/test/run_py_tests.py
@@ -1000,8 +1000,8 @@ handle_prefix = "CDwindow-" handle = self._driver.GetCurrentWindowHandle() target = handle[len(handle_prefix):] - self._driver.SetWindowPosition(100, 200) self._driver.SetWindowSize(640, 400) + self._driver.SetWindowPosition(100, 200) rect = self._driver.MinimizeWindow() expected_rect = {u'y': 200, u'width': 640, u'height': 400, u'x': 100} @@ -1358,13 +1358,8 @@ def testTouchScrollElement(self): self._driver.Load(self.GetHttpUrlForFile( '/chromedriver/touch_action_tests.html')) - major_version = int(self._driver.capabilities['version'].split('.')[0]) - if major_version >= 61: - scroll_left = 'return document.documentElement.scrollLeft;' - scroll_top = 'return document.documentElement.scrollTop;' - else: - scroll_left = 'return document.body.scrollLeft;' - scroll_top = 'return document.body.scrollTop;' + scroll_left = 'return document.documentElement.scrollLeft;' + scroll_top = 'return document.documentElement.scrollTop;' self.assertEquals(0, self._driver.ExecuteScript(scroll_left)) self.assertEquals(0, self._driver.ExecuteScript(scroll_top)) target = self._driver.FindElement('id', 'target') @@ -2010,12 +2005,7 @@ original_url = driver.GetCurrentUrl() driver.Load(ChromeDriverTest.GetHttpUrlForFile('/abc.csv')) self.WaitForFileToDownload(os.path.join(download_dir, 'abc.csv')) - major_version = int(driver.capabilities['version'].split('.')[0]) - if major_version > 43: - # For some reason, the URL in M43 changes from 'data:,' to '', so we - # need to avoid doing this assertion unless we're on M44+. - # TODO(samuong): Assert unconditionally once we stop supporting M43. - self.assertEqual(original_url, driver.GetCurrentUrl()) + self.assertEqual(original_url, driver.GetCurrentUrl()) def testDownloadDirectoryOverridesExistingPreferences(self): user_data_dir = self.CreateTempDir()
diff --git a/chrome/test/data/autofill/captured_sites/amazon.test b/chrome/test/data/autofill/captured_sites/amazon.test index 995fe0d3..c2da8a6225 100644 --- a/chrome/test/data/autofill/captured_sites/amazon.test +++ b/chrome/test/data/autofill/captured_sites/amazon.test
@@ -5,66 +5,86 @@ { "selectorType": "xpath", "selector": "//*[@id=\"add-to-cart-button\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"hlb-ptc-btn-native\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"enterAddressFullName\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "autofill" }, { "selector": "//*[@id=\"enterAddressFullName\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "NAME_FULL", "expectedValue": "Milton C. Waddams", "type": "validateField" }, { "selector": "//*[@id=\"enterAddressAddressLine1\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_LINE1", "expectedValue": "4120 Freidrich Lane", "type": "validateField" }, { "selector": "//*[@id=\"enterAddressAddressLine2\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_LINE2", "expectedValue": "Apt 8", "type": "validateField" }, { "selector": "//*[@id=\"enterAddressCity\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_CITY", "expectedValue": "Austin", "type": "validateField" }, { "selector": "//*[@id=\"enterAddressStateOrRegion\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_STATE", "expectedValue": "Texas", "type": "validateField" }, { "selector": "//*[@id=\"enterAddressPostalCode\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_ZIP", "expectedValue": "78744", "type": "validateField" }, { "selector": "//*[@id=\"enterAddressPhoneNumber\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "PHONE_HOME_WHOLE_NUMBER", "expectedValue": "5125551234", "type": "validateField" @@ -72,45 +92,59 @@ { "selectorType": "xpath", "selector": "//input[@type='submit' and @value='Deliver to this address']", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"shippingOptionFormId\"]/div[1]/div[2]/div/span[contains(., '')]/span[contains(., '')]/input[@type='submit' and @value='Continue']", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"ccName\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "autofill" }, { "selector": "//*[@id=\"addCreditCardNumber\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "CREDIT_CARD_NUMBER", "expectedValue": "9621327911759602", "type": "validateField" }, { "selector": "//*[@id=\"ccName\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "CREDIT_CARD_NAME_FULL", "expectedValue": "Milton Waddams", "type": "validateField" }, { "selector": "//*[@id=\"ccMonth\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "CREDIT_CARD_EXP_MONTH", "expectedValue": "5", "type": "validateField" }, { "selector": "//*[@id=\"ccYear\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "CREDIT_CARD_EXP_4_DIGIT_YEAR", "expectedValue": "2027", "type": "validateField"
diff --git a/chrome/test/data/autofill/captured_sites/apple.test b/chrome/test/data/autofill/captured_sites/apple.test index 1576218..bbf8110 100644 --- a/chrome/test/data/autofill/captured_sites/apple.test +++ b/chrome/test/data/autofill/captured_sites/apple.test
@@ -5,100 +5,130 @@ { "selectorType": "xpath", "selector": "//*[@id=\"cart-actions-checkout\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"guest-checkout\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"cart-continue-button\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"shipping-user-lookup-options\"]", - "context": [], + "context": { + "isIframe": false + }, "index": 1, "type": "select" }, { "selectorType": "xpath", "selector": "//*[@id=\"shipping-user-firstName\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "autofill" }, { "selector": "//*[@id=\"shipping-user-firstName\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "NAME_FIRST", "expectedValue": "Milton", "type": "validateField" }, { "selector": "//*[@id=\"shipping-user-lastName\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "NAME_LAST", "expectedValue": "Waddams", "type": "validateField" }, { "selector": "//*[@id=\"shipping-user-companyName\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "COMPANY_NAME", "expectedValue": "Initech", "type": "validateField" }, { "selector": "//*[@id=\"shipping-user-street\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_LINE1", "expectedValue": "4120 Freidrich Lane", "type": "validateField" }, { "selector": "//*[@id=\"shipping-user-street2\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_LINE2", "expectedValue": "Apt 8", "type": "validateField" }, { "selector": "//*[@id=\"shipping-user-city\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_CITY", "expectedValue": "Austin", "type": "validateField" }, { "selector": "//*[@id=\"shipping-user-state\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_STATE", "expectedValue": "TX", "type": "validateField" }, { "selector": "//*[@id=\"shipping-user-emailAddress\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "EMAIL_ADDRESS", "expectedValue": "red.swingline@initech.com", "type": "validateField" }, { "selector": "//*[@id=\"shipping-user-daytimePhoneAreaCode\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "PHONE_HOME_CITY_CODE", "expectedValue": "512", "type": "validateField" }, { "selector": "//*[@id=\"shipping-user-daytimePhone\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "PHONE_HOME_NUMBER", "expectedValue": "5551234", "type": "validateField" @@ -106,87 +136,113 @@ { "selectorType": "xpath", "selector": "//*[@id=\"shipping-continue-button\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"address-verification-select-matched\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"payment-credit-user-address-firstName\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "autofill" }, { "selector": "//*[@id=\"payment-credit-user-address-firstName\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "NAME_FIRST", "expectedValue": "Milton", "type": "validateField" }, { "selector": "//*[@id=\"payment-credit-user-address-lastName\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "NAME_LAST", "expectedValue": "Waddams", "type": "validateField" }, { "selector": "//*[@id=\"payment-credit-user-address-companyName\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "COMPANY_NAME", "expectedValue": "Initech", "type": "validateField" }, { "selector": "//*[@id=\"payment-credit-user-address-street\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_LINE1", "expectedValue": "4120 Freidrich Lane", "type": "validateField" }, { "selector": "//*[@id=\"payment-credit-user-address-street2\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_LINE2", "expectedValue": "Apt 8", "type": "validateField" }, { "selector": "//*[@id=\"payment-credit-user-address-postalCode\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_ZIP", "expectedValue": "78744", "type": "validateField" }, { "selector": "//*[@id=\"payment-credit-user-country-selector-countryCode\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_COUNTRY", "expectedValue": "US", "type": "validateField" }, { "selector": "//*[@id=\"payment-credit-user-address-emailAddress\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "EMAIL_ADDRESS", "expectedValue": "red.swingline@initech.com", "type": "validateField" }, { "selector": "//*[@id=\"payment-credit-user-address-daytimePhoneAreaCode\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "PHONE_HOME_CITY_CODE", "expectedValue": "512", "type": "validateField" }, { "selector": "//*[@id=\"payment-credit-user-address-daytimePhone\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "PHONE_HOME_NUMBER", "expectedValue": "5551234", "type": "validateField" @@ -194,26 +250,34 @@ { "selectorType": "xpath", "selector": "//*[@id=\"payment-credit-method-cc0-cardNumber\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "autofill" }, { "selector": "//*[@id=\"payment-credit-method-cc0-cardNumber\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "CREDIT_CARD_NUMBER", "expectedValue": "9621327911759602", "type": "validateField" }, { "selector": "//*[@id=\"payment-credit-method-cc0-expirationMonth\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "CREDIT_CARD_EXP_MONTH", "expectedValue": "05", "type": "validateField" }, { "selector": "//*[@id=\"payment-credit-method-cc0-expirationYear\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "CREDIT_CARD_EXP_4_DIGIT_YEAR", "expectedValue": "2027", "type": "validateField"
diff --git a/chrome/test/data/autofill/captured_sites/ebay.test b/chrome/test/data/autofill/captured_sites/ebay.test index 94915951..c240f70 100644 --- a/chrome/test/data/autofill/captured_sites/ebay.test +++ b/chrome/test/data/autofill/captured_sites/ebay.test
@@ -5,87 +5,113 @@ { "selectorType": "xpath", "selector": "//*[@id=\"binBtn_btn\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"gtChk\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"af-first-name\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "autofill" }, { "selector": "//*[@id=\"af-first-name\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "HTML_TYPE_GIVEN_NAME", "expectedValue": "Milton", "type": "validateField" }, { "selector": "//*[@id=\"af-last-name\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "HTML_TYPE_FAMILY_NAME", "expectedValue": "Waddams", "type": "validateField" }, { "selector": "//*[@id=\"af-address1\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_LINE1", "expectedValue": "4120 Freidrich Lane", "type": "validateField" }, { "selector": "//*[@id=\"af-address2\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "HTML_TYPE_ADDRESS_LINE2", "expectedValue": "Apt 8", "type": "validateField" }, { "selector": "//*[@id=\"af-city\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "HTML_TYPE_ADDRESS_LEVEL2", "expectedValue": "Austin", "type": "validateField" }, { "selector": "//*[@id=\"af-state\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "HTML_TYPE_ADDRESS_LEVEL1", "expectedValue": "TX", "type": "validateField" }, { "selector": "//*[@id=\"af-zip\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "HTML_TYPE_POSTAL_CODE", "expectedValue": "78744", "type": "validateField" }, { "selector": "//*[@id=\"af-email\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "HTML_TYPE_EMAIL", "expectedValue": "red.swingline@initech.com", "type": "validateField" }, { "selector": "//*[@id=\"af-email-confirm\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "HTML_TYPE_EMAIL", "expectedValue": "red.swingline@initech.com", "type": "validateField" }, { "selector": "//span[contains(., 'Phone number')]/input[@type='tel']", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "HTML_TYPE_TEL", "expectedValue": "(512) 555-1234", "type": "validateField" @@ -93,31 +119,41 @@ { "selectorType": "xpath", "selector": "//*[@id=\"address-fields-ctr\"]/div[2]/div/button[contains(., 'Done')]", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"CC\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"cardNumber\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "autofill" }, { "selector": "//*[@id=\"cardNumber\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "HTML_TYPE_CREDIT_CARD_NUMBER", "expectedValue": "9621327911759602", "type": "validateField" }, { "selector": "//*[@id=\"cardExp\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "HTML_TYPE_CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR", "expectedValue": "05 / 27", "type": "validateField"
diff --git a/chrome/test/data/autofill/captured_sites/walmart.test b/chrome/test/data/autofill/captured_sites/walmart.test index 221b87c..5991f3a 100644 --- a/chrome/test/data/autofill/captured_sites/walmart.test +++ b/chrome/test/data/autofill/captured_sites/walmart.test
@@ -5,11 +5,15 @@ { "selectorType": "xpath", "selector": "//button[@data-automation-id='new-guest-continue-button']", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { - "context": [], + "context": { + "isIframe": false + }, "type": "waitFor", "assertions": [ "return automation_helper.isElementWithXpathReady(`//div[@aria-label='Select your shipping option']`);", @@ -21,19 +25,25 @@ { "selectorType": "xpath", "selector": "//button[@aria-label='Continue to Shipping Address']", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//input[@type='text' and @name='firstName']", - "context": [], + "context": { + "isIframe": false + }, "type": "autofill" }, { "selectorType": "xpath", "selector": "//input[@type='text' and @name='firstName']", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "NAME_FIRST", "expectedValue": "Milton", "type": "validateField" @@ -41,7 +51,9 @@ { "selectorType": "xpath", "selector": "//input[@type='text' and @name='lastName']", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "NAME_LAST", "expectedValue": "Waddams", "type": "validateField" @@ -49,7 +61,9 @@ { "selectorType": "xpath", "selector": "//input[@type='text' and @name='phone']", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "PHONE_HOME_WHOLE_NUMBER", "expectedValue": "5125551234", "type": "validateField" @@ -57,7 +71,9 @@ { "selectorType": "xpath", "selector": "//input[@type='text' and @name='email']", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "EMAIL_ADDRESS", "expectedValue": "red.swingline@initech.com", "type": "validateField" @@ -65,7 +81,9 @@ { "selectorType": "xpath", "selector": "//input[@type='text' and @name='addressLineOne']", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_LINE1", "expectedValue": "4120 Freidrich Lane", "type": "validateField" @@ -73,7 +91,9 @@ { "selectorType": "xpath", "selector": "//input[@type='text' and @name='addressLineTwo']", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_LINE2", "expectedValue": "Apt 8", "type": "validateField" @@ -81,7 +101,9 @@ { "selectorType": "xpath", "selector": "//input[@type='text' and @name='city']", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_CITY", "expectedValue": "Austin", "type": "validateField" @@ -89,7 +111,9 @@ { "selectorType": "xpath", "selector": "//*[@name='state']", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_STATE", "expectedValue": "TX", "type": "validateField" @@ -97,7 +121,9 @@ { "selectorType": "xpath", "selector": "//input[@type='text' and @name='postalCode']", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_ZIP", "expectedValue": "78744", "type": "validateField" @@ -105,25 +131,33 @@ { "selectorType": "xpath", "selector": "//button[contains(., 'Continue')]", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//button[contains(., 'Use Address Provided')]", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"creditCard\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "autofill" }, { "selectorType": "xpath", "selector": "//*[@id=\"creditCard\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "HTML_TYPE_CREDIT_CARD_NUMBER", "expectedValue": "9621327911759602", "type": "validateField" @@ -131,7 +165,9 @@ { "selectorType": "xpath", "selector": "//*[@id=\"month-chooser\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "HTML_TYPE_CREDIT_CARD_EXP_MONTH", "expectedValue": "05", "type": "validateField" @@ -139,7 +175,9 @@ { "selectorType": "xpath", "selector": "//*[@id=\"year-chooser\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "HTML_TYPE_CREDIT_CARD_EXP_YEAR", "expectedValue": "2027", "type": "validateField"
diff --git a/chrome/test/data/autofill/captured_sites/zappos.test b/chrome/test/data/autofill/captured_sites/zappos.test index 51ee0ed..b00eb70d 100644 --- a/chrome/test/data/autofill/captured_sites/zappos.test +++ b/chrome/test/data/autofill/captured_sites/zappos.test
@@ -5,66 +5,86 @@ { "selectorType": "xpath", "selector": "//*[@id=\"root\"]/div/div/main/div/div/div[2]/div[2]/div/div[2]/form/button[contains(., 'Proceed to CheckoutCart')]", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"address\"]/div[1]/div/div[2]/div[2]/div[2]/div/div/div/div/div/div[2]/div/span[contains(., 'Ship to a new address')]/div/div/div/img", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"AddressForm_NAME\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "autofill" }, { "selector": "//*[@id=\"AddressForm_NAME\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "NAME_FULL", "expectedValue": "Milton C. Waddams", "type": "validateField" }, { "selector": "//*[@id=\"AddressForm_ADDRESS_LINE_1\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_LINE1", "expectedValue": "4120 Freidrich Lane", "type": "validateField" }, { "selector": "//*[@id=\"AddressForm_ADDRESS_LINE_2\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_LINE2", "expectedValue": "Apt 8", "type": "validateField" }, { "selector": "//*[@id=\"AddressForm_CITY\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_CITY", "expectedValue": "Austin", "type": "validateField" }, { "selector": "//*[@id=\"AddressForm_STATE_OR_REGION\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_STATE", "expectedValue": "Texas", "type": "validateField" }, { "selector": "//*[@id=\"AddressForm_ZIP_CODE\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "ADDRESS_HOME_ZIP", "expectedValue": "78744", "type": "validateField" }, { "selector": "//*[@id=\"AddressForm_PHONE_NUMBER\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "PHONE_HOME_WHOLE_NUMBER", "expectedValue": "5125551234", "type": "validateField" @@ -72,39 +92,51 @@ { "selectorType": "xpath", "selector": "//*[@id=\"saveAndShipToThisAddress\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "click" }, { "selectorType": "xpath", "selector": "//*[@id=\"ccNumber\"]", - "context": [], + "context": { + "isIframe": false + }, "type": "autofill" }, { "selector": "//*[@id=\"ccNumber\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "CREDIT_CARD_NUMBER", "expectedValue": "9621327911759602", "type": "validateField" }, { "selector": "//*[@id=\"ccName\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "CREDIT_CARD_NAME_FULL", "expectedValue": "Milton Waddams", "type": "validateField" }, { "selector": "//*[@id=\"ccMonth\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "CREDIT_CARD_EXP_MONTH", "expectedValue": "5", "type": "validateField" }, { "selector": "//*[@id=\"ccYear\"]", - "context": [], + "context": { + "isIframe": false + }, "expectedAutofillType": "CREDIT_CARD_EXP_4_DIGIT_YEAR", "expectedValue": "2027", "type": "validateField"
diff --git a/chrome/test/data/extensions/api_test/mime_handler_view/index.js b/chrome/test/data/extensions/api_test/mime_handler_view/index.js index ec1f767..69d2ef8 100644 --- a/chrome/test/data/extensions/api_test/mime_handler_view/index.js +++ b/chrome/test/data/extensions/api_test/mime_handler_view/index.js
@@ -62,6 +62,14 @@ function dummyTouchStartHandler(e) { } +function ensurePageIsScrollable() { + document.body.style = " width: 100%; height: 100%; overflow: scroll;"; + let div = document.createElement("div"); + div.style = "width: 1000px; height: 500px; margin: 50%;"; + document.body.appendChild(div); + window.scrollTo(0, 0); +} + var tests = [ function testBasic() { checkStreamDetails('testBasic.csv', false);
diff --git a/chrome/test/data/extensions/api_test/webrequest/test_redirects.js b/chrome/test/data/extensions/api_test/webrequest/test_redirects.js index d37e55dd..cfea5a7 100644 --- a/chrome/test/data/extensions/api_test/webrequest/test_redirects.js +++ b/chrome/test/data/extensions/api_test/webrequest/test_redirects.js
@@ -14,7 +14,7 @@ function assertRedirectSucceeds(url, redirectURL, callback) { navigateAndWait(url, function(tab) { - callback && callback(); + if (callback) callback(); chrome.test.assertEq(redirectURL, tab.url); }); } @@ -67,6 +67,23 @@ }); }, + function redirectToUnallowedServerRedirectOnHeadersReceived() { + var url = getServerURL('echo'); + var redirectURL = getServerURL('server-redirect?' + + getURLNonWebAccessible()); + var listener = function(details) { + return {redirectUrl: redirectURL}; + }; + chrome.webRequest.onHeadersReceived.addListener(listener, + {urls: [url]}, ['blocking']); + + // The page should be redirected to redirectURL, but not to the non web + // accessible URL. + assertRedirectSucceeds(url, redirectURL, function() { + chrome.webRequest.onHeadersReceived.removeListener(listener); + }); + }, + function redirectToDataUrlOnBeforeRequest() { var url = getServerURL('echo'); var listener = function(details) { @@ -107,6 +124,23 @@ }); }, + function redirectToUnallowedServerRedirectOnBeforeRequest() { + var url = getServerURL('echo'); + var redirectURL = getServerURL('server-redirect?' + + getURLNonWebAccessible()); + var listener = function(details) { + return {redirectUrl: redirectURL}; + }; + chrome.webRequest.onBeforeRequest.addListener(listener, + {urls: [url]}, ['blocking']); + + // The page should be redirected to redirectURL, but not to the non web + // accessible URL. + assertRedirectSucceeds(url, redirectURL, function() { + chrome.webRequest.onBeforeRequest.removeListener(listener); + }); + }, + function redirectToDataUrlWithServerRedirect() { assertRedirectFails(getServerURL('server-redirect?' + dataURL)); },
diff --git a/chrome/test/data/extensions/api_test/webrequest/test_subresource_redirects.js b/chrome/test/data/extensions/api_test/webrequest/test_subresource_redirects.js index 893c080a..c3686c3 100644 --- a/chrome/test/data/extensions/api_test/webrequest/test_subresource_redirects.js +++ b/chrome/test/data/extensions/api_test/webrequest/test_subresource_redirects.js
@@ -15,30 +15,33 @@ function assertRedirectSucceeds(url, redirectURL, callback) { // Load a page to be sure webRequest listeners are set up. - navigateAndWait(getURL("simpleLoad/a.html"), function() { + navigateAndWait(getURL('simpleLoad/a.html'), function() { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.onload = pass(function() { - callback && callback(); + if (callback) callback(); chrome.test.assertEq(xhr.responseURL, redirectURL); }); xhr.onerror = function() { - callback && callback(); + if (callback) callback(); chrome.test.fail(); - } + }; xhr.send(); }); } -function assertRedirectFails(url) { +function assertRedirectFails(url, callback) { // Load a page to be sure webRequest listeners are set up. - navigateAndWait(getURL("simpleLoad/a.html"), function() { + navigateAndWait(getURL('simpleLoad/a.html'), function() { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.onload = function() { + if (callback) callback(); chrome.test.fail(); }; - xhr.onerror = pass(function() {}); + xhr.onerror = pass(function() { + if (callback) callback(); + }); xhr.send(); }); } @@ -84,6 +87,21 @@ }); }, + function subresourceRedirectToUnallowedServerRedirectOnHeadersReceived() { + var url = getServerURL('echo'); + var redirectURL = getServerURL('server-redirect?' + + getURLNonWebAccessible()); + var listener = function(details) { + return {redirectUrl: redirectURL}; + }; + chrome.webRequest.onHeadersReceived.addListener(listener, + {urls: [url]}, ['blocking']); + + assertRedirectFails(url, function() { + chrome.webRequest.onHeadersReceived.removeListener(listener); + }); + }, + function subresourceRedirectToDataUrlOnBeforeRequest() { var url = getServerURL('echo'); var listener = function(details) { @@ -124,6 +142,21 @@ }); }, + function subresourceRedirectToUnallowedServerRedirectOnBeforeRequest() { + var url = getServerURL('echo'); + var redirectURL = getServerURL('server-redirect?' + + getURLNonWebAccessible()); + var listener = function(details) { + return {redirectUrl: redirectURL}; + }; + chrome.webRequest.onBeforeRequest.addListener(listener, + {urls: [url]}, ['blocking']); + + assertRedirectFails(url, function() { + chrome.webRequest.onBeforeRequest.removeListener(listener); + }); + }, + function subresourceRedirectToDataUrlWithServerRedirect() { assertRedirectFails(getServerURL('server-redirect?' + dataURL)); },
diff --git a/chrome/test/data/media/picture-in-picture/pixel_test.html b/chrome/test/data/media/picture-in-picture/pixel_test.html new file mode 100644 index 0000000..49f3926 --- /dev/null +++ b/chrome/test/data/media/picture-in-picture/pixel_test.html
@@ -0,0 +1,30 @@ +<!DOCTYPE html> +<html> +<head> + <title>Picture-in-Picture Pixel Test</title> +</head> +<body> + <video controls preload=auto src='pixel_test_video.webm'></video> +</body> +<script> + const video = document.querySelector('video'); + + function isInPictureInPicture() { + window.domAutomationController.send(document.pictureInPictureElement == video); + } + + function enterPictureInPicture() { + video.requestPictureInPicture() + .then(win => { + win.addEventListener('resize', () => { + document.title = 'resized'; + }, { once: true }); + + window.domAutomationController.send(true); + }) + .catch(e => { + window.domAutomationController.send(false); + }); + } +</script> +</html>
diff --git a/chrome/test/data/media/picture-in-picture/pixel_test_video.webm b/chrome/test/data/media/picture-in-picture/pixel_test_video.webm new file mode 100644 index 0000000..c463965a --- /dev/null +++ b/chrome/test/data/media/picture-in-picture/pixel_test_video.webm Binary files differ
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json index 68aca22..9a6003ad 100644 --- a/chrome/test/data/policy/policy_test_cases.json +++ b/chrome/test/data/policy/policy_test_cases.json
@@ -43,15 +43,15 @@ }, "OverrideSecurityRestrictionsOnInsecureOrigin": { - "os": ["win", "linux", "mac"], - "test_policy": { "OverrideSecurityRestrictionsOnInsecureOrigin": ["http://example.com/"] }, + "os": ["win", "linux", "mac", "android", "chromeos"], + "test_policy": { "OverrideSecurityRestrictionsOnInsecureOrigin": ["http://example.com/","*.example.com"] }, "pref_mappings": [ { "pref": "unsafely_treat_insecure_origin_as_secure" } ] }, "UnsafelyTreatInsecureOriginAsSecure": { "note": "This policy is deprecated.", "os": ["win", "linux", "mac"], - "test_policy": { "UnsafelyTreatInsecureOriginAsSecure": ["http://example.com/"] }, + "test_policy": { "UnsafelyTreatInsecureOriginAsSecure": ["http://example.com/","*.example.com"] }, "pref_mappings": [ { "pref": "unsafely_treat_insecure_origin_as_secure" } ] }, @@ -3216,6 +3216,12 @@ ] }, + "CoalesceH2ConnectionsWithClientCertificatesForHosts": { + "os": ["win", "linux", "mac", "chromeos", "android"], + "test_policy": { "CoalesceH2ConnectionsWithClientCertificatesForHosts": ["example.com"] }, + "pref_mappings": [ { "pref": "ssl.client_certs.h2_coalescing_hosts", "local_state": true } ] + }, + "----- Chrome OS device policies ---------------------------------------": {}, "DevicePolicyRefreshRate": {
diff --git a/chrome/test/data/webui/extensions/cr_extensions_browsertest.js b/chrome/test/data/webui/extensions/cr_extensions_browsertest.js index 28bff0d..d101d6cc 100644 --- a/chrome/test/data/webui/extensions/cr_extensions_browsertest.js +++ b/chrome/test/data/webui/extensions/cr_extensions_browsertest.js
@@ -92,8 +92,7 @@ this.runMochaTest(extension_sidebar_tests.TestNames.LayoutAndClickHandlers); }); -// Flaky, see crbug.com/871541. -TEST_F('CrExtensionsSidebarTest', 'DISABLED_SetSelected', function() { +TEST_F('CrExtensionsSidebarTest', 'SetSelected', function() { this.runMochaTest(extension_sidebar_tests.TestNames.SetSelected); }); @@ -347,11 +346,9 @@ this.runMochaTest(extension_manager_tests.TestNames.Uninstall); }); -// Flaky, see crbug.com/871539. -TEST_F( - 'CrExtensionsManagerUnitTest', 'DISABLED_UninstallFromDetails', function() { - this.runMochaTest(extension_manager_tests.TestNames.UninstallFromDetails); - }); +TEST_F('CrExtensionsManagerUnitTest', 'UninstallFromDetails', function() { + this.runMochaTest(extension_manager_tests.TestNames.UninstallFromDetails); +}); TEST_F('CrExtensionsManagerUnitTest', 'ToggleIncognito', function() { this.runMochaTest(extension_manager_tests.TestNames.ToggleIncognitoMode); @@ -654,13 +651,10 @@ this.runMochaTest(extension_navigation_helper_tests.TestNames.Conversions); }); -// Flaky, see crbug.com/871540. -TEST_F( - 'CrExtensionsNavigationHelperTest', 'DISABLED_PushAndReplaceState', - function() { - this.runMochaTest( - extension_navigation_helper_tests.TestNames.PushAndReplaceState); - }); +TEST_F('CrExtensionsNavigationHelperTest', 'PushAndReplaceState', function() { + this.runMochaTest( + extension_navigation_helper_tests.TestNames.PushAndReplaceState); +}); TEST_F('CrExtensionsNavigationHelperTest', 'SupportedRoutes', function() { this.runMochaTest(
diff --git a/chrome/test/data/webui/settings/a11y/passwords_a11y_test.js b/chrome/test/data/webui/settings/a11y/passwords_a11y_test.js index 6801a33..af0a362 100644 --- a/chrome/test/data/webui/settings/a11y/passwords_a11y_test.js +++ b/chrome/test/data/webui/settings/a11y/passwords_a11y_test.js
@@ -25,11 +25,7 @@ ]), }; -// Disabled for flake. https://crbug.com/872575. The only way I could find to -// disable the test was to *not* call AccessibilityTest.define(), so this is -// commented out. -// AccessibilityTest.define('SettingsA11yManagePasswords', { -DISABLED_SettingsA11yManagePasswords = { +AccessibilityTest.define('SettingsA11yManagePasswords', { /** @override */ name: 'MANAGE_PASSWORDS', /** @type {PasswordManager} */ @@ -108,4 +104,4 @@ /** @override */ violationFilter: SettingsAccessibilityTest.violationFilter, -} /*)*/; +});
diff --git a/chrome/test/data/webui/settings/cr_settings_browsertest.js b/chrome/test/data/webui/settings/cr_settings_browsertest.js index 5ce9be6..f45cb6b1 100644 --- a/chrome/test/data/webui/settings/cr_settings_browsertest.js +++ b/chrome/test/data/webui/settings/cr_settings_browsertest.js
@@ -499,8 +499,7 @@ ]), }; -// Flaky, see crbug.com/871545. -TEST_F('CrSettingsPeoplePageTest', 'DISABLED_All', function() { +TEST_F('CrSettingsPeoplePageTest', 'All', function() { mocha.run(); }); @@ -583,8 +582,7 @@ ]), }; -// Flaky, see crbug.com/871620. -TEST_F('CrSettingsResetPageTest', 'DISABLED_All', function() { +TEST_F('CrSettingsResetPageTest', 'All', function() { mocha.run(); }); @@ -1012,8 +1010,7 @@ ]), }; -// Flaky, see https://crbug.com/872026. -TEST_F('CrSettingsCategorySettingExceptionsTest', 'DISABLED_All', function() { +TEST_F('CrSettingsCategorySettingExceptionsTest', 'All', function() { mocha.run(); }); @@ -1039,8 +1036,7 @@ ]), }; -// Flaky, see https://crbug.com/872027. -TEST_F('CrSettingsSiteEntryTest', 'DISABLED_All', function() { +TEST_F('CrSettingsSiteEntryTest', 'All', function() { mocha.run(); }); @@ -1101,8 +1097,7 @@ GEN('#define MAYBE_All All'); GEN('#endif'); -// Flaky, see crbug.com/871548. -TEST_F('CrSettingsSiteDetailsTest', 'DISABLED_All', function() { +TEST_F('CrSettingsSiteDetailsTest', 'MAYBE_All', function() { mocha.run(); }); @@ -1162,8 +1157,7 @@ mocha.grep('EditExceptionDialog').run(); }); -// Flaky, see https://crbug.com/872028. -TEST_F('CrSettingsSiteListTest', 'DISABLED_AddExceptionDialog', function() { +TEST_F('CrSettingsSiteListTest', 'AddExceptionDialog', function() { mocha.grep('AddExceptionDialog').run(); }); @@ -1516,8 +1510,7 @@ ]), }; -// Flaky, see crbug.com/871543. -TEST_F('CrSettingsEditDictionaryPageTest', 'DISABLED_All', function() { +TEST_F('CrSettingsEditDictionaryPageTest', 'All', function() { mocha.run(); }); @@ -1549,8 +1542,7 @@ ]), }; -// Flaky, see http://crbug/871666. -TEST_F('CrSettingsLanguagesTest', 'DISABLED_All', function() { +TEST_F('CrSettingsLanguagesTest', 'All', function() { mocha.run(); }); @@ -1591,8 +1583,7 @@ mocha.grep(assert(languages_page_tests.TestNames.InputMethods)).run(); }); -// Flaky, see crbug.com/871544. -TEST_F('CrSettingsLanguagesPageTest', 'DISABLED_Spellcheck', function() { +TEST_F('CrSettingsLanguagesPageTest', 'Spellcheck', function() { mocha.grep(assert(languages_page_tests.TestNames.Spellcheck)).run(); }); @@ -1613,8 +1604,7 @@ ]), }; -// Flaky, see crbug.com/871547. -TEST_F('CrSettingsRouteTest', 'DISABLED_All', function() { +TEST_F('CrSettingsRouteTest', 'All', function() { mocha.run(); });
diff --git a/chromecast/browser/accessibility/accessibility_manager.cc b/chromecast/browser/accessibility/accessibility_manager.cc index d46a252..760c359 100644 --- a/chromecast/browser/accessibility/accessibility_manager.cc +++ b/chromecast/browser/accessibility/accessibility_manager.cc
@@ -5,7 +5,7 @@ #include "chromecast/browser/accessibility/accessibility_manager.h" #include "chromecast/graphics/accessibility/focus_ring_controller.h" -#include "chromecast/graphics/accessibility/partial_magnification_controller.h" +#include "chromecast/graphics/accessibility/fullscreen_magnification_controller.h" #include "ui/aura/window.h" #include "ui/aura/window_tree_host.h" #include "ui/wm/public/activation_client.h" @@ -31,7 +31,7 @@ &accessibility_sound_proxy_); triple_tap_detector_ = std::make_unique<TripleTapDetector>(root_window, this); magnification_controller_ = - std::make_unique<PartialMagnificationController>(root_window); + std::make_unique<FullscreenMagnificationController>(root_window); } AccessibilityManager::~AccessibilityManager() {}
diff --git a/chromecast/browser/accessibility/touch_exploration_controller.cc b/chromecast/browser/accessibility/touch_exploration_controller.cc index ecc2223..79f9b6d 100644 --- a/chromecast/browser/accessibility/touch_exploration_controller.cc +++ b/chromecast/browser/accessibility/touch_exploration_controller.cc
@@ -121,13 +121,6 @@ // this event under this new state. } - if (passthrough_timer_.IsRunning() && - event.time_stamp() - most_recent_press_timestamp_ > - gesture_detector_config_.longpress_timeout) { - passthrough_timer_.Stop(); - OnPassthroughTimerFired(); - } - const ui::EventType type = touch_event.type(); const int touch_id = touch_event.pointer_details().id; @@ -186,9 +179,6 @@ if (VLOG_on_) VLOG(1) << "Leaving screen"; - // Indicates to the user that they are leaving the screen. - accessibility_sound_player_->PlayExitScreenEarcon(); - if (current_touch_ids_.size() == 0) { SET_STATE(NO_FINGERS_DOWN); if (VLOG_on_) { @@ -250,18 +240,12 @@ case ONE_FINGER_PASSTHROUGH: status = InOneFingerPassthrough(touch_event_dip, rewritten_event); break; - case CORNER_PASSTHROUGH: - status = InCornerPassthrough(touch_event_dip, rewritten_event); - break; case WAIT_FOR_NO_FINGERS: status = InWaitForNoFingers(touch_event_dip, rewritten_event); break; case TWO_FINGER_TAP: status = InTwoFingerTap(touch_event_dip, rewritten_event); break; - case EDGE_PASSTHROUGH: - status = InEdgePassthrough(touch_event_dip, rewritten_event); - break; } if (status == ui::EVENT_REWRITE_REWRITTEN) { DCHECK(rewritten_event->get()); @@ -286,27 +270,6 @@ return ui::EVENT_REWRITE_CONTINUE; } - int location = FindEdgesWithinInset(event.location(), kSlopDistanceFromEdge); - // If the press was at a corner, the user might go into corner passthrough - // instead. - bool in_a_bottom_corner = - (BOTTOM_LEFT_CORNER == location) || (BOTTOM_RIGHT_CORNER == location); - if (in_a_bottom_corner) { - passthrough_timer_.Start( - FROM_HERE, gesture_detector_config_.longpress_timeout, this, - &TouchExplorationController::OnPassthroughTimerFired); - } else { - // If the user enters the screen from the edge then send an earcon, - // and enter passthrough mode so that the system gesture handle can - // handle it. - int edge = FindEdgesWithinInset(event.location(), kLeavingScreenEdge); - if (edge != NO_EDGE) { - accessibility_sound_player_->PlayEnterScreenEarcon(); - SET_STATE(EDGE_PASSTHROUGH); - return ui::EVENT_REWRITE_CONTINUE; - } - } - initial_press_ = std::make_unique<ui::TouchEvent>(event); most_recent_press_timestamp_ = initial_press_->time_stamp(); initial_presses_[event.pointer_details().id] = event.location(); @@ -321,32 +284,11 @@ std::unique_ptr<ui::Event>* rewritten_event) { const ui::EventType type = event.type(); - int location = FindEdgesWithinInset(event.location(), kMaxDistanceFromEdge); - bool in_a_bottom_corner = - (location == BOTTOM_LEFT_CORNER) || (location == BOTTOM_RIGHT_CORNER); - // If the event is from the initial press and the location is no longer in the - // corner, then we are not waiting for a corner passthrough anymore. - if (event.pointer_details().id == initial_press_->pointer_details().id && - !in_a_bottom_corner) { - if (passthrough_timer_.IsRunning()) { - passthrough_timer_.Stop(); - // Since the long press timer has been running, it is possible that the - // tap timer has timed out before the long press timer has. If the tap - // timer timeout has elapsed, then fire the tap timer. - if (event.time_stamp() - most_recent_press_timestamp_ > - gesture_detector_config_.double_tap_timeout) { - OnTapTimerFired(); - } - } - } - if (type == ui::ET_TOUCH_PRESSED) { initial_presses_[event.pointer_details().id] = event.location(); SET_STATE(TWO_FINGER_TAP); return ui::EVENT_REWRITE_DISCARD; } else if (type == ui::ET_TOUCH_RELEASED || type == ui::ET_TOUCH_CANCELLED) { - if (passthrough_timer_.IsRunning()) - passthrough_timer_.Stop(); if (current_touch_ids_.size() == 0 && event.pointer_details().id == initial_press_->pointer_details().id) { MaybeSendSimulatedTapInLiftActivationBounds(event); @@ -528,45 +470,6 @@ return ui::EVENT_REWRITE_DISCARD; } -ui::EventRewriteStatus TouchExplorationController::InCornerPassthrough( - const ui::TouchEvent& event, - std::unique_ptr<ui::Event>* rewritten_event) { - ui::EventType type = event.type(); - - // If the first finger has left the corner, then exit passthrough. - if (event.pointer_details().id == initial_press_->pointer_details().id) { - int edges = - FindEdgesWithinInset(event.location(), kSlopDistanceFromEdge); - bool in_a_bottom_corner = - (edges == BOTTOM_LEFT_CORNER) || (edges == BOTTOM_RIGHT_CORNER); - if (type == ui::ET_TOUCH_MOVED && in_a_bottom_corner) - return ui::EVENT_REWRITE_DISCARD; - - accessibility_sound_player_->PlayPassthroughEndEarcon(); - if (current_touch_ids_.size() == 0) { - SET_STATE(NO_FINGERS_DOWN); - return ui::EVENT_REWRITE_DISCARD; - } - SET_STATE(WAIT_FOR_NO_FINGERS); - return ui::EVENT_REWRITE_DISCARD; - } - - // |event| locations are in DIP; see |RewriteEvent|. We need to dispatch - // screen coordinates. - gfx::PointF location_f(ConvertDIPToScreenInPixels(event.location_f())); - std::unique_ptr<ui::TouchEvent> new_event(new ui::TouchEvent( - type, gfx::Point(), event.time_stamp(), event.pointer_details())); - new_event->set_location_f(location_f); - new_event->set_root_location_f(location_f); - new_event->set_flags(event.flags()); - *rewritten_event = std::move(new_event); - - if (current_touch_ids_.size() == 0) - SET_STATE(NO_FINGERS_DOWN); - - return ui::EVENT_REWRITE_REWRITTEN; -} - ui::EventRewriteStatus TouchExplorationController::InOneFingerPassthrough( const ui::TouchEvent& event, std::unique_ptr<ui::Event>* rewritten_event) { @@ -744,24 +647,6 @@ return ui::EVENT_REWRITE_DISCARD; } -ui::EventRewriteStatus TouchExplorationController::InEdgePassthrough( - const ui::TouchEvent& event, - std::unique_ptr<ui::Event>* rewritten_event) { - if (current_touch_ids_.size() == 0) { - SET_STATE(NO_FINGERS_DOWN); - } - // |event| locations are in DIP; see |RewriteEvent|. We need to dispatch - // screen coordinates. - gfx::PointF location_f(ConvertDIPToScreenInPixels(event.location_f())); - std::unique_ptr<ui::TouchEvent> new_event(new ui::TouchEvent( - event.type(), gfx::Point(), event.time_stamp(), event.pointer_details())); - new_event->set_location_f(location_f); - new_event->set_root_location_f(location_f); - new_event->set_flags(event.flags()); - *rewritten_event = std::move(new_event); - return ui::EVENT_REWRITE_REWRITTEN; -} - base::TimeTicks TouchExplorationController::Now() { return ui::EventTimeForNow(); } @@ -796,9 +681,6 @@ return; } case SINGLE_TAP_PRESSED: - if (passthrough_timer_.IsRunning()) - return; - FALLTHROUGH; case GESTURE_IN_PROGRESS: // If only one finger is down, go into touch exploration. if (current_touch_ids_.size() == 1) { @@ -825,30 +707,6 @@ anchor_point_state_ = ANCHOR_POINT_FROM_TOUCH_EXPLORATION; } -void TouchExplorationController::OnPassthroughTimerFired() { - // The passthrough timer will only fire if if the user has held a finger in - // one of the passthrough corners for the duration of the passthrough timeout. - - // Check that initial press isn't null. Also a check that if the initial - // corner press was released, then it should not be in corner passthrough. - if (!initial_press_ || - touch_locations_.find(initial_press_->pointer_details().id) != - touch_locations_.end()) { - } - - gfx::Point location = - ToRoundedPoint(touch_locations_[initial_press_->pointer_details().id]); - int corner = FindEdgesWithinInset(location, kSlopDistanceFromEdge); - if (corner != BOTTOM_LEFT_CORNER && corner != BOTTOM_RIGHT_CORNER) - return; - - if (sound_timer_.IsRunning()) - sound_timer_.Stop(); - accessibility_sound_player_->PlayPassthroughEarcon(); - SET_STATE(CORNER_PASSTHROUGH); - return; -} - void TouchExplorationController::DispatchEvent(ui::Event* event) { SetTouchAccessibilityFlag(event); if (event->IsLocatedEvent()) { @@ -1084,9 +942,7 @@ case TOUCH_EXPLORATION: case TOUCH_EXPLORE_SECOND_PRESS: case ONE_FINGER_PASSTHROUGH: - case CORNER_PASSTHROUGH: case WAIT_FOR_NO_FINGERS: - case EDGE_PASSTHROUGH: if (gesture_provider_.get()) gesture_provider_.reset(NULL); max_gesture_touch_points_ = 0; @@ -1162,16 +1018,12 @@ return "GESTURE_IN_PROGRESS"; case TOUCH_EXPLORE_SECOND_PRESS: return "TOUCH_EXPLORE_SECOND_PRESS"; - case CORNER_PASSTHROUGH: - return "CORNER_PASSTHROUGH"; case ONE_FINGER_PASSTHROUGH: return "ONE_FINGER_PASSTHROUGH"; case WAIT_FOR_NO_FINGERS: return "WAIT_FOR_NO_FINGERS"; case TWO_FINGER_TAP: return "TWO_FINGER_TAP"; - case EDGE_PASSTHROUGH: - return "EDGE_PASSTHROUGH"; } return "Not a state"; }
diff --git a/chromecast/browser/accessibility/touch_exploration_controller.h b/chromecast/browser/accessibility/touch_exploration_controller.h index cebfcbc5..652599ce 100644 --- a/chromecast/browser/accessibility/touch_exploration_controller.h +++ b/chromecast/browser/accessibility/touch_exploration_controller.h
@@ -206,9 +206,6 @@ ui::EventRewriteStatus InTouchExploration( const ui::TouchEvent& event, std::unique_ptr<ui::Event>* rewritten_event); - ui::EventRewriteStatus InCornerPassthrough( - const ui::TouchEvent& event, - std::unique_ptr<ui::Event>* rewritten_event); ui::EventRewriteStatus InOneFingerPassthrough( const ui::TouchEvent& event, std::unique_ptr<ui::Event>* rewritten_event); @@ -224,9 +221,6 @@ ui::EventRewriteStatus InTwoFingerTap( const ui::TouchEvent& event, std::unique_ptr<ui::Event>* rewritten_event); - ui::EventRewriteStatus InEdgePassthrough( - const ui::TouchEvent& event, - std::unique_ptr<ui::Event>* rewritten_event); // Returns the current time of the tick clock. base::TimeTicks Now(); @@ -238,13 +232,6 @@ void StartTapTimer(); void OnTapTimerFired(); - // This timer is started every timer we get the first press event and the - // finger is in the corner of the screen. - // It fires after the corner passthrough delay elapses. If the - // user is still in the corner by the time this timer fires, all subsequent - // fingers added on the screen will be passed through. - void OnPassthroughTimerFired(); - // Dispatch a new event outside of the event rewriting flow. void DispatchEvent(ui::Event* event); @@ -372,11 +359,6 @@ // all fingers. ONE_FINGER_PASSTHROUGH, - // If the user has pressed and held down the left corner past long press, - // then as long as they are holding the corner, all subsequent fingers - // registered will be in passthrough. - CORNER_PASSTHROUGH, - // If the user added another finger in SINGLE_TAP_PRESSED, or if the user // has multiple fingers fingers down in any other state between // passthrough, touch exploration, and gestures, they must release @@ -388,10 +370,6 @@ // If the user taps the screen with two fingers and releases both fingers // before the grace period has passed, spoken feedback will be silenced. TWO_FINGER_TAP, - - // If the user enters the screen from the edge, pass events through, - // so that they are available to the system gesture handler. - EDGE_PASSTHROUGH, }; enum AnchorPointState { @@ -407,8 +385,6 @@ TOP_EDGE = 1 << 1, LEFT_EDGE = 1 << 2, BOTTOM_EDGE = 1 << 3, - BOTTOM_LEFT_CORNER = LEFT_EDGE | BOTTOM_EDGE, - BOTTOM_RIGHT_CORNER = RIGHT_EDGE | BOTTOM_EDGE, }; // Given a point, if it is within the given inset of an edge, returns the @@ -483,9 +459,6 @@ // A timer that fires after the double-tap delay. base::OneShotTimer tap_timer_; - // A timer that fires to enter passthrough. - base::OneShotTimer passthrough_timer_; - // A timer to fire an indicating sound when sliding to change volume. base::RepeatingTimer sound_timer_;
diff --git a/chromecast/browser/accessibility/touch_exploration_controller_unittest.cc b/chromecast/browser/accessibility/touch_exploration_controller_unittest.cc index 84f71d9..6e6efcf 100644 --- a/chromecast/browser/accessibility/touch_exploration_controller_unittest.cc +++ b/chromecast/browser/accessibility/touch_exploration_controller_unittest.cc
@@ -137,12 +137,6 @@ touch_exploration_controller_->OnTapTimerFired(); } - void CallPassthroughTimerNowForTesting() { - DCHECK(touch_exploration_controller_->passthrough_timer_.IsRunning()); - touch_exploration_controller_->passthrough_timer_.Stop(); - touch_exploration_controller_->OnPassthroughTimerFired(); - } - void CallTapTimerNowIfRunningForTesting() { if (touch_exploration_controller_->tap_timer_.IsRunning()) { touch_exploration_controller_->tap_timer_.Stop(); @@ -164,10 +158,6 @@ return touch_exploration_controller_->state_ == touch_exploration_controller_->TWO_FINGER_TAP; } - bool IsInCornerPassthroughStateForTesting() const { - return touch_exploration_controller_->state_ == - touch_exploration_controller_->CORNER_PASSTHROUGH; - } gfx::Rect BoundsOfRootWindowInDIPForTesting() const { return touch_exploration_controller_->root_window_->GetBoundsInScreen(); @@ -297,11 +287,6 @@ touch_exploration_controller_->CallTapTimerNowForTesting(); } - void AdvanceSimulatedTimePastPassthroughDelay() { - simulated_clock_.Advance(base::TimeDelta::FromMilliseconds(1000)); - touch_exploration_controller_->CallPassthroughTimerNowForTesting(); - } - void AdvanceSimulatedTimePastPotentialTapDelay() { simulated_clock_.Advance(base::TimeDelta::FromMilliseconds(1000)); touch_exploration_controller_->CallTapTimerNowIfRunningForTesting(); @@ -334,50 +319,6 @@ EXPECT_TRUE(IsInTouchToMouseMode()); } - // Checks that Corner Passthrough is working. Assumes that corner is the - // bottom left corner or the bottom right corner. - void AssertCornerPassthroughWorking(gfx::Point corner) { - ASSERT_EQ(0U, accessibility_sound_player_.NumPassthroughSounds()); - - ui::TouchEvent first_press( - ui::ET_TOUCH_PRESSED, corner, Now(), - ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, 0)); - generator_->Dispatch(&first_press); - - AdvanceSimulatedTimePastPassthroughDelay(); - EXPECT_FALSE(IsInGestureInProgressState()); - EXPECT_FALSE(IsInTouchToMouseMode()); - EXPECT_TRUE(IsInCornerPassthroughState()); - - gfx::Rect window = BoundsOfRootWindowInDIP(); - // The following events should be passed through. - gfx::Point passthrough(window.right() / 2, window.bottom() / 2); - ui::TouchEvent passthrough_press( - ui::ET_TOUCH_PRESSED, passthrough, Now(), - ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, 1)); - ASSERT_EQ(1U, accessibility_sound_player_.NumPassthroughSounds()); - generator_->Dispatch(&passthrough_press); - generator_->ReleaseTouchId(1); - generator_->PressTouchId(1); - EXPECT_FALSE(IsInGestureInProgressState()); - EXPECT_TRUE(IsInCornerPassthroughState()); - - std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); - ASSERT_EQ(3U, captured_events.size()); - EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); - EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); - EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[2]->type()); - generator_->ReleaseTouchId(1); - ClearCapturedEvents(); - - generator_->ReleaseTouchId(0); - captured_events = GetCapturedLocatedEvents(); - ASSERT_EQ(0U, captured_events.size()); - EXPECT_FALSE(IsInTouchToMouseMode()); - EXPECT_FALSE(IsInCornerPassthroughState()); - ClearCapturedEvents(); - } - bool IsInTouchToMouseMode() { aura::client::CursorClient* cursor_client = aura::client::GetCursorClient(root_window()); @@ -398,11 +339,6 @@ return touch_exploration_controller_->IsInTwoFingerTapStateForTesting(); } - bool IsInCornerPassthroughState() { - return touch_exploration_controller_ - ->IsInCornerPassthroughStateForTesting(); - } - gfx::Rect BoundsOfRootWindowInDIP() { return touch_exploration_controller_->BoundsOfRootWindowInDIPForTesting(); } @@ -1733,108 +1669,6 @@ EXPECT_FALSE(IsInTwoFingerTapState()); } -// Corner passthrough should turn on if the user first holds down on either the -// right or left corner past a delay and then places a finger anywhere else on -// the screen. -TEST_F(TouchExplorationTest, ActivateLeftCornerPassthrough) { - SwitchTouchExplorationMode(true); - - gfx::Rect window = BoundsOfRootWindowInDIP(); - gfx::Point left_corner( - (GetLeavingDistanceFromEdge() + GetMaxDistanceFromEdge()) / 2, - window.bottom() - - (GetLeavingDistanceFromEdge() + GetMaxDistanceFromEdge()) / 2); - AssertCornerPassthroughWorking(left_corner); -} - -TEST_F(TouchExplorationTest, ActivateRightCornerPassthrough) { - SwitchTouchExplorationMode(true); - - gfx::Rect window = BoundsOfRootWindowInDIP(); - gfx::Point right_corner( - window.right() - - (GetLeavingDistanceFromEdge() + GetMaxDistanceFromEdge()) / 2, - window.bottom() - - (GetLeavingDistanceFromEdge() + GetMaxDistanceFromEdge()) / 2); - AssertCornerPassthroughWorking(right_corner); -} - -// Earcons should play if the user slides off the screen or enters the screen -// from the edge. -TEST_F(TouchExplorationTest, EnterEarconPlays) { - SwitchTouchExplorationMode(true); - - gfx::Rect window = BoundsOfRootWindowInDIP(); - - gfx::Point upper_left_corner(0, 0); - gfx::Point upper_right_corner(window.right(), 0); - gfx::Point left_edge(0, 140); - gfx::Point right_edge(window.right(), 140); - gfx::Point top_edge(140, 0); - gfx::Point bottom_edge(140, window.bottom()); - - std::vector<gfx::Point> locations; - locations.push_back(upper_left_corner); - locations.push_back(upper_right_corner); - locations.push_back(left_edge); - locations.push_back(right_edge); - locations.push_back(top_edge); - locations.push_back(bottom_edge); - - for (std::vector<gfx::Point>::const_iterator point = locations.begin(); - point != locations.end(); ++point) { - ui::TouchEvent touch_event( - ui::ET_TOUCH_PRESSED, *point, Now(), - ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, 1)); - - generator_->Dispatch(&touch_event); - ASSERT_EQ(1U, accessibility_sound_player_.NumEnterScreenSounds()); - generator_->ReleaseTouchId(1); - accessibility_sound_player_.ResetCountersToZero(); - } -} - -TEST_F(TouchExplorationTest, ExitEarconPlays) { - SwitchTouchExplorationMode(true); - - // On the device, it cannot actually tell if the finger has left the screen or - // not. If the finger has left the screen, it reads it as a release that - // occurred very close to the edge of the screen even if the finger is still - // technically touching the moniter. To simulate this, a release that occurs - // close to the edge is dispatched. - gfx::Point initial_press(100, 200); - gfx::Rect window = BoundsOfRootWindowInDIP(); - - gfx::Point upper_left_corner(0, 0); - gfx::Point upper_right_corner(window.right(), 0); - gfx::Point lower_left_corner(0, window.bottom()); - gfx::Point lower_right_corner(window.right(), window.bottom()); - gfx::Point left_edge(0, 40); - gfx::Point right_edge(window.right(), 40); - gfx::Point top_edge(40, 0); - gfx::Point bottom_edge(40, window.bottom()); - - std::vector<gfx::Point> locations; - locations.push_back(upper_left_corner); - locations.push_back(upper_right_corner); - locations.push_back(lower_left_corner); - locations.push_back(lower_right_corner); - locations.push_back(left_edge); - locations.push_back(right_edge); - locations.push_back(top_edge); - locations.push_back(bottom_edge); - - for (std::vector<gfx::Point>::const_iterator point = locations.begin(); - point != locations.end(); ++point) { - generator_->PressTouch(); - generator_->MoveTouch(initial_press); - generator_->MoveTouch(*point); - generator_->ReleaseTouch(); - ASSERT_EQ(1U, accessibility_sound_player_.NumExitScreenSounds()); - accessibility_sound_player_.ResetCountersToZero(); - } -} - TEST_F(TouchExplorationTest, ExclusionArea) { SwitchTouchExplorationMode(true);
diff --git a/chromecast/browser/android/BUILD.gn b/chromecast/browser/android/BUILD.gn index fdb3a70..31ad5b50 100644 --- a/chromecast/browser/android/BUILD.gn +++ b/chromecast/browser/android/BUILD.gn
@@ -57,8 +57,10 @@ android_library("cast_audio_manager_java") { java_src_dir = "//chromecast/browser/android/apk/src" - java_files = - [ "$java_src_dir/org/chromium/chromecast/shell/CastAudioManager.java" ] + java_files = [ + "$java_src_dir/org/chromium/chromecast/shell/CastAudioManager.java", + "$java_src_dir/org/chromium/chromecast/shell/CastAudioFocusRequest.java", + ] deps = [ "//base:base_java", "//chromecast/base:base_java", @@ -162,6 +164,7 @@ java_files = [ "junit/src/org/chromium/chromecast/shell/AsyncTaskRunnerTest.java", "junit/src/org/chromium/chromecast/shell/CastAudioManagerTest.java", + "junit/src/org/chromium/chromecast/shell/CastAudioFocusRequestTest.java", "junit/src/org/chromium/chromecast/shell/CastCommandLineHelperTest.java", "junit/src/org/chromium/chromecast/shell/CastWebContentsActivityTest.java", "junit/src/org/chromium/chromecast/shell/CastWebContentsComponentTest.java",
diff --git a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastAudioFocusRequest.java b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastAudioFocusRequest.java new file mode 100644 index 0000000..f3e146f --- /dev/null +++ b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastAudioFocusRequest.java
@@ -0,0 +1,144 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chromecast.shell; + +import android.media.AudioAttributes; +import android.media.AudioFocusRequest; +import android.media.AudioManager; +import android.os.Build; +import android.support.annotation.NonNull; + +import org.chromium.base.Log; + +import java.util.HashSet; +import java.util.Set; + +/** + * Wrapper for Cast code to pass parameter to AudioFocus methods. + * This maintains backwards compatibility with old APIs - requestAudioFocus() and + * abandonAudioFocus() + */ +public class CastAudioFocusRequest { + private static final String TAG = "CastAudioFocus"; + private AudioFocusRequest mAudioFocusRequest; + private AudioAttributes mAudioAttributes; + private int mFocusGain; + private AudioManager.OnAudioFocusChangeListener mAudioFocusChangeListener; + + CastAudioFocusRequest(AudioFocusRequest audioFocusRequest) { + mAudioFocusRequest = audioFocusRequest; + } + + CastAudioFocusRequest(AudioAttributes audioAttributes, int focusGain, + AudioManager.OnAudioFocusChangeListener l) { + mAudioAttributes = audioAttributes; + mFocusGain = focusGain; + mAudioFocusChangeListener = l; + } + + AudioFocusRequest getAudioFocusRequest() { + return mAudioFocusRequest; + } + + private int getStreamType() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + if (mAudioAttributes != null) { + switch (mAudioAttributes.getContentType()) { + case AudioAttributes.CONTENT_TYPE_MOVIE: + case AudioAttributes.CONTENT_TYPE_MUSIC: + return AudioManager.STREAM_MUSIC; + case AudioAttributes.CONTENT_TYPE_SONIFICATION: + return AudioManager.STREAM_ALARM; + case AudioAttributes.CONTENT_TYPE_SPEECH: + return AudioManager.STREAM_VOICE_CALL; + case AudioAttributes.CONTENT_TYPE_UNKNOWN: + default: + return AudioManager.STREAM_SYSTEM; + } + } + } + return 0; + } + + void setAudioFocusChangeListener(AudioManager.OnAudioFocusChangeListener l) { + mAudioFocusChangeListener = l; + } + + int request(AudioManager audioManager) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + return audioManager.requestAudioFocus(mAudioFocusRequest); + } else { + return audioManager.requestAudioFocus( + mAudioFocusChangeListener, getStreamType(), mFocusGain); + } + } + + int abandon(AudioManager audioManager) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + return audioManager.abandonAudioFocusRequest(mAudioFocusRequest); + } else { + return audioManager.abandonAudioFocus(mAudioFocusChangeListener); + } + } + + /** + * Backwards compatible builder method to create CastAudioFocusRequest object. + */ + public static class Builder { + private AudioAttributes mAudioAttributes; + private int mFocusGain; + private AudioManager.OnAudioFocusChangeListener mAudioFocusChangeListener; + private Set<Integer> mValidFocusGainValues; + + public Builder() { + mAudioAttributes = null; + mFocusGain = 0; + mAudioFocusChangeListener = null; + mValidFocusGainValues = new HashSet<Integer>(); + mValidFocusGainValues.add(AudioManager.AUDIOFOCUS_GAIN); + mValidFocusGainValues.add(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); + mValidFocusGainValues.add(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK); + mValidFocusGainValues.add(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE); + } + + public @NonNull Builder setAudioAttributes(@NonNull AudioAttributes audioAttributes) { + mAudioAttributes = audioAttributes; + return this; + } + + public @NonNull Builder setFocusGain(int focusGain) { + if (mValidFocusGainValues.contains(focusGain)) { + mFocusGain = focusGain; + } else { + Log.e(TAG, "Invalid focus gain value " + focusGain); + mFocusGain = AudioManager.AUDIOFOCUS_GAIN; + } + return this; + } + + public @NonNull Builder setAudioFocusChangeListener( + AudioManager.OnAudioFocusChangeListener l) { + mAudioFocusChangeListener = l; + return this; + } + + public CastAudioFocusRequest build() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + AudioFocusRequest.Builder builder = new AudioFocusRequest.Builder(mFocusGain); + if (mAudioAttributes != null) { + builder = builder.setAudioAttributes(mAudioAttributes); + } + if (mAudioFocusChangeListener != null) { + builder = builder.setOnAudioFocusChangeListener(mAudioFocusChangeListener); + } + AudioFocusRequest audioFocusRequest = builder.build(); + return new CastAudioFocusRequest(audioFocusRequest); + } else { + return new CastAudioFocusRequest( + mAudioAttributes, mFocusGain, mAudioFocusChangeListener); + } + } + } +}
diff --git a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastAudioManager.java b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastAudioManager.java index e161f50..56089067 100644 --- a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastAudioManager.java +++ b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastAudioManager.java
@@ -4,9 +4,7 @@ package org.chromium.chromecast.shell; -import android.annotation.SuppressLint; import android.content.Context; -import android.media.AudioFocusRequest; import android.media.AudioManager; import android.os.Build; @@ -49,7 +47,7 @@ * TODO(sanfin): Distinguish between transient, ducking, and full audio focus losses. */ public Observable<Unit> requestAudioFocusWhen( - Observable<?> event, int streamType, int durationHint) { + Observable<?> event, CastAudioFocusRequest castAudioFocusRequest) { Controller<Unit> audioFocusState = new Controller<>(); event.watch(x -> { AudioManager.OnAudioFocusChangeListener listener = (int focusChange) -> { @@ -62,14 +60,16 @@ return; } }; + castAudioFocusRequest.setAudioFocusChangeListener(listener); // Request audio focus when the source event is activated. - if (requestAudioFocus(listener, streamType, durationHint) + if (requestAudioFocus(castAudioFocusRequest) != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { Log.e(TAG, "Failed to get audio focus"); } // Abandon audio focus when the source event is deactivated. return () -> { - if (abandonAudioFocus(listener) != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { + if (abandonAudioFocus(castAudioFocusRequest) + != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { Log.e(TAG, "Failed to abandon audio focus"); } audioFocusState.reset(); @@ -107,25 +107,12 @@ } } - @SuppressLint("NewApi") - public int requestAudioFocus(AudioFocusRequest focusRequest) { - return mAudioManager.requestAudioFocus(focusRequest); + public int requestAudioFocus(CastAudioFocusRequest castAudioFocusRequest) { + return castAudioFocusRequest.request(mAudioManager); } - @SuppressWarnings("deprecation") - public int requestAudioFocus( - AudioManager.OnAudioFocusChangeListener l, int streamType, int durationHint) { - return mAudioManager.requestAudioFocus(l, streamType, durationHint); - } - - @SuppressLint("NewApi") - public int abandonAudioFocusRequest(AudioFocusRequest focusRequest) { - return mAudioManager.abandonAudioFocusRequest(focusRequest); - } - - @SuppressWarnings("deprecation") - public int abandonAudioFocus(AudioManager.OnAudioFocusChangeListener l) { - return mAudioManager.abandonAudioFocus(l); + public int abandonAudioFocus(CastAudioFocusRequest castAudioFocusRequest) { + return castAudioFocusRequest.abandon(mAudioManager); } public int getStreamMaxVolume(int streamType) {
diff --git a/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/CastAudioFocusRequestTest.java b/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/CastAudioFocusRequestTest.java new file mode 100644 index 0000000..33e5eff --- /dev/null +++ b/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/CastAudioFocusRequestTest.java
@@ -0,0 +1,112 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chromecast.shell; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import android.media.AudioAttributes; +import android.media.AudioManager; +import android.os.Build; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.robolectric.annotation.Config; + +import org.chromium.testing.local.LocalRobolectricTestRunner; + +/** + * Tests for CastAudioFocusRequest. + */ +@RunWith(LocalRobolectricTestRunner.class) +@Config(manifest = Config.NONE) +public final class CastAudioFocusRequestTest { + private @Mock AudioManager mAudioManager; + + @Before + public void setUp() { + mAudioManager = mock(AudioManager.class); + } + + @Test + @Config(sdk = Build.VERSION_CODES.N_MR1) + public void testOldAudioFocusRequest() { + AudioAttributes audioAttributes = + new AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build(); + + CastAudioFocusRequest castAudioFocusRequest = + new CastAudioFocusRequest.Builder() + .setFocusGain(AudioManager.AUDIOFOCUS_GAIN) + .setAudioFocusChangeListener(null) + .setAudioAttributes(audioAttributes) + .build(); + castAudioFocusRequest.request(mAudioManager); + verify(mAudioManager) + .requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); + } + + @Test + @Config(sdk = Build.VERSION_CODES.N_MR1) + public void testOldAbandonAudioFocus() { + AudioAttributes audioAttributes = + new AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build(); + + CastAudioFocusRequest castAudioFocusRequest = + new CastAudioFocusRequest.Builder() + .setFocusGain(AudioManager.AUDIOFOCUS_GAIN) + .setAudioFocusChangeListener(null) + .setAudioAttributes(audioAttributes) + .build(); + castAudioFocusRequest.abandon(mAudioManager); + verify(mAudioManager).abandonAudioFocus(null); + } + + @Test + @Config(sdk = Build.VERSION_CODES.O) + public void testNewAudioFocusRequest() { + AudioAttributes audioAttributes = + new AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build(); + + CastAudioFocusRequest castAudioFocusRequest = + new CastAudioFocusRequest.Builder() + .setFocusGain(AudioManager.AUDIOFOCUS_GAIN) + .setAudioFocusChangeListener(null) + .setAudioAttributes(audioAttributes) + .build(); + castAudioFocusRequest.request(mAudioManager); + verify(mAudioManager).requestAudioFocus(castAudioFocusRequest.getAudioFocusRequest()); + } + + @Test + @Config(sdk = Build.VERSION_CODES.O) + public void testNewAbandonAudioFocus() { + AudioAttributes audioAttributes = + new AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build(); + + CastAudioFocusRequest castAudioFocusRequest = + new CastAudioFocusRequest.Builder() + .setFocusGain(AudioManager.AUDIOFOCUS_GAIN) + .setAudioFocusChangeListener(null) + .setAudioAttributes(audioAttributes) + .build(); + castAudioFocusRequest.abandon(mAudioManager); + verify(mAudioManager) + .abandonAudioFocusRequest(castAudioFocusRequest.getAudioFocusRequest()); + } +}
diff --git a/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/CastAudioManagerTest.java b/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/CastAudioManagerTest.java index f4d79b9..03c220c 100644 --- a/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/CastAudioManagerTest.java +++ b/chromecast/browser/android/junit/src/org/chromium/chromecast/shell/CastAudioManagerTest.java
@@ -10,6 +10,7 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; +import android.media.AudioAttributes; import android.media.AudioManager; import android.os.Build; import android.util.SparseIntArray; @@ -36,14 +37,26 @@ @Config(manifest = Config.NONE) public class CastAudioManagerTest { @Test + @Config(sdk = Build.VERSION_CODES.N_MR1) public void testAudioFocusScopeActivatedWhenRequestGranted() { CastAudioManager audioManager = CastAudioManager.getAudioManager(RuntimeEnvironment.application); ShadowAudioManager shadowAudioManager = Shadows.shadowOf(audioManager.getInternal()); Controller<Unit> requestAudioFocusState = new Controller<>(); List<String> result = new ArrayList<>(); - Observable<Unit> gotAudioFocusState = audioManager.requestAudioFocusWhen( - requestAudioFocusState, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); + + AudioAttributes audioAttributes = + new AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build(); + CastAudioFocusRequest castAudioFocusRequest = + new CastAudioFocusRequest.Builder() + .setFocusGain(AudioManager.AUDIOFOCUS_GAIN) + .setAudioAttributes(audioAttributes) + .build(); + Observable<Unit> gotAudioFocusState = + audioManager.requestAudioFocusWhen(requestAudioFocusState, castAudioFocusRequest); gotAudioFocusState.watch(x -> { result.add("Got audio focus"); return () -> result.add("Lost audio focus"); @@ -55,14 +68,25 @@ } @Test + @Config(sdk = Build.VERSION_CODES.N_MR1) public void testAudioFocusScopeDeactivatedWhenFocusRequestStateIsReset() { CastAudioManager audioManager = CastAudioManager.getAudioManager(RuntimeEnvironment.application); ShadowAudioManager shadowAudioManager = Shadows.shadowOf(audioManager.getInternal()); Controller<Unit> requestAudioFocusState = new Controller<>(); List<String> result = new ArrayList<>(); - Observable<Unit> gotAudioFocusState = audioManager.requestAudioFocusWhen( - requestAudioFocusState, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); + AudioAttributes audioAttributes = + new AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build(); + CastAudioFocusRequest castAudioFocusRequest = + new CastAudioFocusRequest.Builder() + .setFocusGain(AudioManager.AUDIOFOCUS_GAIN) + .setAudioAttributes(audioAttributes) + .build(); + Observable<Unit> gotAudioFocusState = + audioManager.requestAudioFocusWhen(requestAudioFocusState, castAudioFocusRequest); gotAudioFocusState.watch(x -> { result.add("Got audio focus"); return () -> result.add("Lost audio focus"); @@ -75,14 +99,25 @@ } @Test + @Config(sdk = Build.VERSION_CODES.N_MR1) public void testAudioFocusScopeDeactivatedWhenAudioFocusIsLostButRequestStillActive() { CastAudioManager audioManager = CastAudioManager.getAudioManager(RuntimeEnvironment.application); ShadowAudioManager shadowAudioManager = Shadows.shadowOf(audioManager.getInternal()); Controller<Unit> requestAudioFocusState = new Controller<>(); List<String> result = new ArrayList<>(); - Observable<Unit> gotAudioFocusState = audioManager.requestAudioFocusWhen( - requestAudioFocusState, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); + AudioAttributes audioAttributes = + new AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build(); + CastAudioFocusRequest castAudioFocusRequest = + new CastAudioFocusRequest.Builder() + .setFocusGain(AudioManager.AUDIOFOCUS_GAIN) + .setAudioAttributes(audioAttributes) + .build(); + Observable<Unit> gotAudioFocusState = + audioManager.requestAudioFocusWhen(requestAudioFocusState, castAudioFocusRequest); gotAudioFocusState.watch(x -> { result.add("Got audio focus"); return () -> result.add("Lost audio focus"); @@ -96,14 +131,25 @@ } @Test + @Config(sdk = Build.VERSION_CODES.N_MR1) public void testAudioFocusScopeReactivatedWhenAudioFocusIsLostAndRegained() { CastAudioManager audioManager = CastAudioManager.getAudioManager(RuntimeEnvironment.application); ShadowAudioManager shadowAudioManager = Shadows.shadowOf(audioManager.getInternal()); Controller<Unit> requestAudioFocusState = new Controller<>(); List<String> result = new ArrayList<>(); - Observable<Unit> gotAudioFocusState = audioManager.requestAudioFocusWhen( - requestAudioFocusState, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); + AudioAttributes audioAttributes = + new AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build(); + CastAudioFocusRequest castAudioFocusRequest = + new CastAudioFocusRequest.Builder() + .setFocusGain(AudioManager.AUDIOFOCUS_GAIN) + .setAudioAttributes(audioAttributes) + .build(); + Observable<Unit> gotAudioFocusState = + audioManager.requestAudioFocusWhen(requestAudioFocusState, castAudioFocusRequest); gotAudioFocusState.watch(x -> { result.add("Got audio focus"); return () -> result.add("Lost audio focus"); @@ -124,8 +170,18 @@ ShadowAudioManager shadowAudioManager = Shadows.shadowOf(audioManager.getInternal()); Controller<Unit> requestAudioFocusState = new Controller<>(); List<String> result = new ArrayList<>(); - Observable<Unit> gotAudioFocusState = audioManager.requestAudioFocusWhen( - requestAudioFocusState, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); + AudioAttributes audioAttributes = + new AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build(); + CastAudioFocusRequest castAudioFocusRequest = + new CastAudioFocusRequest.Builder() + .setFocusGain(AudioManager.AUDIOFOCUS_GAIN) + .setAudioAttributes(audioAttributes) + .build(); + Observable<Unit> gotAudioFocusState = + audioManager.requestAudioFocusWhen(requestAudioFocusState, castAudioFocusRequest); gotAudioFocusState.watch(x -> { result.add("Got audio focus"); return () -> result.add("Lost audio focus");
diff --git a/chromecast/common/cast_content_client.cc b/chromecast/common/cast_content_client.cc index d7da36d5..3bcd635 100644 --- a/chromecast/common/cast_content_client.cc +++ b/chromecast/common/cast_content_client.cc
@@ -74,7 +74,7 @@ BuildAndroidOsInfo().c_str() #else "X11; ", - content::BuildOSCpuInfo().c_str() + content::BuildOSCpuInfo(false /* include_android_build_number */).c_str() #endif ); return content::BuildUserAgentFromOSAndProduct(os_info, product) +
diff --git a/chromecast/graphics/BUILD.gn b/chromecast/graphics/BUILD.gn index 0baf4bfd..f730e43 100644 --- a/chromecast/graphics/BUILD.gn +++ b/chromecast/graphics/BUILD.gn
@@ -15,6 +15,7 @@ deps = [ "//base", + "//ui/events:events", "//ui/gfx", ] @@ -37,6 +38,8 @@ "accessibility/focus_ring_controller.h", "accessibility/focus_ring_layer.cc", "accessibility/focus_ring_layer.h", + "accessibility/fullscreen_magnification_controller.cc", + "accessibility/fullscreen_magnification_controller.h", "accessibility/magnification_controller.h", "accessibility/partial_magnification_controller.cc", "accessibility/partial_magnification_controller.h",
diff --git a/chromecast/graphics/accessibility/fullscreen_magnification_controller.cc b/chromecast/graphics/accessibility/fullscreen_magnification_controller.cc new file mode 100644 index 0000000..97c64a72 --- /dev/null +++ b/chromecast/graphics/accessibility/fullscreen_magnification_controller.cc
@@ -0,0 +1,380 @@ +// Copyright (c) 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromecast/graphics/accessibility/fullscreen_magnification_controller.h" + +#include "base/numerics/ranges.h" +#include "ui/aura/window.h" +#include "ui/aura/window_event_dispatcher.h" +#include "ui/aura/window_tree_host.h" +#include "ui/events/event.h" +#include "ui/gfx/transform.h" +#include "ui/gfx/transform_util.h" + +namespace chromecast { + +namespace { +// Default ratio of magnifier scale. +const float kDefaultMagnificationScale = 2.f; + +constexpr float kMaxMagnifiedScale = 20.0f; +constexpr float kMinMagnifiedScaleThreshold = 1.1f; +constexpr float kNonMagnifiedScale = 1.0f; + +constexpr float kZoomGestureLockThreshold = 0.1f; +constexpr float kScrollGestureLockThreshold = 20000.0f; + +// Convert point locations to DIP by using the original transform, rather than +// the one currently installed on the window tree host (which might be our +// magnifier). +gfx::Point ConvertPixelsToDIPWithOriginalTransform( + const gfx::Transform& transform, + const gfx::Point& point) { + gfx::Transform invert; + if (!transform.GetInverse(&invert)) { + // Some transforms can't be inverted, so we do the same as window tree + // host's DIP conversion and just use the transform as is in that case. + invert = transform; + } + gfx::PointF dip_point(point); + invert.TransformPoint(&dip_point); + return gfx::ToFlooredPoint(dip_point); +} + +// Correct the given scale value if necessary. +void ValidateScale(float* scale) { + *scale = base::ClampToRange(*scale, kNonMagnifiedScale, kMaxMagnifiedScale); + DCHECK(kNonMagnifiedScale <= *scale && *scale <= kMaxMagnifiedScale); +} + +} // namespace + +class FullscreenMagnificationController::GestureProviderClient + : public ui::GestureProviderAuraClient { + public: + GestureProviderClient() = default; + ~GestureProviderClient() override = default; + + // ui::GestureProviderAuraClient overrides: + void OnGestureEvent(GestureConsumer* consumer, + ui::GestureEvent* event) override { + // Do nothing. OnGestureEvent is for timer based gesture events, e.g. tap. + // MagnificationController is interested only in pinch and scroll + // gestures. + DCHECK_NE(ui::ET_GESTURE_SCROLL_BEGIN, event->type()); + DCHECK_NE(ui::ET_GESTURE_SCROLL_END, event->type()); + DCHECK_NE(ui::ET_GESTURE_SCROLL_UPDATE, event->type()); + DCHECK_NE(ui::ET_GESTURE_PINCH_BEGIN, event->type()); + DCHECK_NE(ui::ET_GESTURE_PINCH_END, event->type()); + DCHECK_NE(ui::ET_GESTURE_PINCH_UPDATE, event->type()); + } + + private: + DISALLOW_COPY_AND_ASSIGN(GestureProviderClient); +}; + +FullscreenMagnificationController::FullscreenMagnificationController( + aura::Window* root_window) + : root_window_(root_window), + magnification_scale_(kDefaultMagnificationScale) { + DCHECK(root_window); + root_window->GetHost()->GetEventSource()->AddEventRewriter(this); + + gesture_provider_client_ = std::make_unique<GestureProviderClient>(); + gesture_provider_ = std::make_unique<ui::GestureProviderAura>( + this, gesture_provider_client_.get()); +} + +FullscreenMagnificationController::~FullscreenMagnificationController() {} + +void FullscreenMagnificationController::SetEnabled(bool enabled) { + if (is_enabled_ == enabled) + return; + if (!is_enabled_) { + // Stash the original root window transform so we can restore it after we're + // done. + original_transform_ = root_window_->transform(); + } + is_enabled_ = enabled; + root_window_->SetTransform(GetMagnifierTransform()); +} + +bool FullscreenMagnificationController::IsEnabled() const { + return is_enabled_; +} + +void FullscreenMagnificationController::SetMagnificationScale( + float magnification_scale) { + magnification_scale_ = magnification_scale; + root_window_->SetTransform(GetMagnifierTransform()); +} + +gfx::Transform FullscreenMagnificationController::GetMagnifierTransform() + const { + gfx::Transform transform = original_transform_; + if (IsEnabled()) { + transform.Scale(magnification_scale_, magnification_scale_); + + // Top corner of window. + gfx::Point offset = gfx::ToFlooredPoint(magnification_origin_); + transform.Translate(-offset.x(), -offset.y()); + } + + return transform; +} + +// Overridden from ui::EventRewriter +ui::EventRewriteStatus FullscreenMagnificationController::RewriteEvent( + const ui::Event& event, + std::unique_ptr<ui::Event>* rewritten_event) { + if (!IsEnabled()) { + return ui::EventRewriteStatus::EVENT_REWRITE_CONTINUE; + } + if (!event.IsTouchEvent()) + return ui::EVENT_REWRITE_CONTINUE; + + const ui::TouchEvent* touch_event = event.AsTouchEvent(); + + // Touch events come through in screen pixels, but untransformed. This is the + // raw coordinate not yet mapped to the root window's coordinate system or the + // screen. Convert it into the root window's coordinate system, in DIP which + // is what the rest of this class expects. + gfx::Point location = ConvertPixelsToDIPWithOriginalTransform( + original_transform_, touch_event->location()); + gfx::Point root_location = ConvertPixelsToDIPWithOriginalTransform( + original_transform_, touch_event->root_location()); + + // We now need a TouchEvent that has its coordinates mapped into root window + // DIP. + ui::TouchEvent touch_event_dip = *touch_event; + touch_event_dip.set_location(location); + touch_event_dip.set_root_location(root_location); + + // Track finger presses so we can look for our two-finger drag. + if (touch_event_dip.type() == ui::ET_TOUCH_PRESSED) { + touch_points_++; + press_event_map_[touch_event_dip.pointer_details().id] = + std::make_unique<ui::TouchEvent>(*touch_event); + } else if (touch_event_dip.type() == ui::ET_TOUCH_RELEASED) { + touch_points_--; + press_event_map_.erase(touch_event_dip.pointer_details().id); + } + + if (gesture_provider_->OnTouchEvent(&touch_event_dip)) { + gesture_provider_->OnTouchEventAck( + touch_event_dip.unique_event_id(), false /* event_consumed */, + false /* is_source_touch_event_set_non_blocking */); + } else { + return ui::EVENT_REWRITE_DISCARD; + } + + // The user can change the zoom level with two fingers pinch and pan around + // with two fingers scroll. Once we detect one of those two gestures, we start + // consuming all touch events by cancelling existing touches. If + // cancel_pressed_touches is set to true, ET_TOUCH_CANCELLED + // events are dispatched for existing touches after the next for-loop. + bool cancel_pressed_touches = ProcessGestures(); + + if (cancel_pressed_touches) { + // Start consuming all touch events after we cancel existing touches. + consume_touch_event_ = true; + + if (!press_event_map_.empty()) { + auto it = press_event_map_.begin(); + + std::unique_ptr<ui::TouchEvent> rewritten_touch_event = + std::make_unique<ui::TouchEvent>(ui::ET_TOUCH_CANCELLED, gfx::Point(), + touch_event_dip.time_stamp(), + it->second->pointer_details()); + rewritten_touch_event->set_location_f(it->second->location_f()); + rewritten_touch_event->set_root_location_f(it->second->root_location_f()); + rewritten_touch_event->set_flags(it->second->flags()); + *rewritten_event = std::move(rewritten_touch_event); + + // The other event is cancelled in NextDispatchEvent. + press_event_map_.erase(it); + + return ui::EVENT_REWRITE_DISPATCH_ANOTHER; + } + } + + bool discard = consume_touch_event_; + + // Reset state once no point is touched on the screen. + if (touch_points_ == 0) { + consume_touch_event_ = false; + locked_gesture_ = NO_GESTURE; + + // Jump back to exactly 1.0 if we are just a tiny bit zoomed in. + if (magnification_scale_ < kMinMagnifiedScaleThreshold) + SetMagnificationScale(kNonMagnifiedScale); + } + + if (discard) + return ui::EVENT_REWRITE_DISCARD; + + return ui::EVENT_REWRITE_CONTINUE; +} + +ui::EventRewriteStatus FullscreenMagnificationController::NextDispatchEvent( + const ui::Event& last_event, + std::unique_ptr<ui::Event>* new_event) { + DCHECK_EQ(1u, press_event_map_.size()); + + auto it = press_event_map_.begin(); + + std::unique_ptr<ui::TouchEvent> event = std::make_unique<ui::TouchEvent>( + ui::ET_TOUCH_CANCELLED, gfx::Point(), last_event.time_stamp(), + it->second->pointer_details()); + event->set_location_f(it->second->location_f()); + event->set_root_location_f(it->second->root_location_f()); + event->set_flags(it->second->flags()); + *new_event = std::move(event); + + press_event_map_.erase(it); + + DCHECK_EQ(0u, press_event_map_.size()); + + return ui::EVENT_REWRITE_REWRITTEN; +} + +bool FullscreenMagnificationController::RedrawDIP( + const gfx::PointF& position_in_dip, + float scale) { + DCHECK(root_window_); + + float x = position_in_dip.x(); + float y = position_in_dip.y(); + + ValidateScale(&scale); + + if (x < 0) + x = 0; + if (y < 0) + y = 0; + + const gfx::Size host_size_in_dip = root_window_->bounds().size(); + const float scaled_width = host_size_in_dip.width() / scale; + const float scaled_height = host_size_in_dip.height() / scale; + float max_x = host_size_in_dip.width() - scaled_width; + float max_y = host_size_in_dip.height() - scaled_height; + if (x > max_x) + x = max_x; + if (y > max_y) + y = max_y; + + // Does nothing if both the origin and the scale are not changed. + if (magnification_origin_.x() == x && magnification_origin_.y() == y && + scale == magnification_scale_) { + return false; + } + + magnification_origin_.set_x(x); + magnification_origin_.set_y(y); + magnification_scale_ = scale; + + root_window_->SetTransform(GetMagnifierTransform()); + + return true; +} + +bool FullscreenMagnificationController::ProcessGestures() { + bool cancel_pressed_touches = false; + + std::vector<std::unique_ptr<ui::GestureEvent>> gestures = + gesture_provider_->GetAndResetPendingGestures(); + for (const auto& gesture : gestures) { + const ui::GestureEventDetails& details = gesture->details(); + + if (gesture->type() == ui::ET_GESTURE_END || + gesture->type() == ui::ET_GESTURE_BEGIN) { + locked_gesture_ = NO_GESTURE; + cancel_pressed_touches = false; + } + + if (details.touch_points() != 2) + continue; + + if (gesture->type() == ui::ET_GESTURE_PINCH_BEGIN) { + original_magnification_scale_ = magnification_scale_; + + // Start consuming touch events with cancelling existing touches. + if (!consume_touch_event_) + cancel_pressed_touches = true; + } else if (gesture->type() == ui::ET_GESTURE_PINCH_UPDATE && + (locked_gesture_ == NO_GESTURE || locked_gesture_ == ZOOM)) { + float scale = magnification_scale_ * details.scale(); + ValidateScale(&scale); + + // Lock to zoom mode if the difference between our new scale and old scale + // passes our zoom lock threshold. + if (locked_gesture_ == NO_GESTURE && + std::abs(scale - original_magnification_scale_) > + kZoomGestureLockThreshold) { + locked_gesture_ = FullscreenMagnificationController::ZOOM; + } + + // |details.bounding_box().CenterPoint()| return center of touch points + // of gesture in non-dip screen coordinate. + gfx::PointF gesture_center = + gfx::PointF(details.bounding_box().CenterPoint()); + + // Root transform does dip scaling, screen magnification scaling and + // translation. Apply inverse transform to convert non-dip screen + // coordinate to dip logical coordinate. + root_window_->GetHost()->GetInverseRootTransform().TransformPoint( + &gesture_center); + + // Calculate new origin to keep the distance between |gesture_center| + // and |origin| same in screen coordinate. This means the following + // equation. + // (gesture_center.x - magnification_origin_.x) * magnification_scale_ = + // (gesture_center.x - new_origin.x) * scale + // If you solve it for |new_origin|, you will get the following formula. + const gfx::PointF origin = + gfx::PointF(gesture_center.x() - + (magnification_scale_ / scale) * + (gesture_center.x() - magnification_origin_.x()), + gesture_center.y() - + (magnification_scale_ / scale) * + (gesture_center.y() - magnification_origin_.y())); + + RedrawDIP(origin, scale); + } else if (gesture->type() == ui::ET_GESTURE_SCROLL_BEGIN) { + original_magnification_origin_ = magnification_origin_; + + // Start consuming all touch events with cancelling existing touches. + if (!consume_touch_event_) + cancel_pressed_touches = true; + } else if (gesture->type() == ui::ET_GESTURE_SCROLL_UPDATE && + (locked_gesture_ == NO_GESTURE || locked_gesture_ == SCROLL)) { + // If we're not zoomed, scroll is a no-op. + if (magnification_scale_ <= kNonMagnifiedScale) { + continue; + } + float new_x = magnification_origin_.x() + + (-1.0f * details.scroll_x() / magnification_scale_); + float new_y = magnification_origin_.y() + + (-1.0f * details.scroll_y() / magnification_scale_); + + // Lock to scroll mode if the squared distance from the old position + // passes our scroll lock threshold. + if (locked_gesture_ == NO_GESTURE) { + float diff_x = + (new_x - original_magnification_origin_.x()) * magnification_scale_; + float diff_y = + (new_y - original_magnification_origin_.y()) * magnification_scale_; + float squared_distance = (diff_x * diff_x) + (diff_y * diff_y); + if (squared_distance > kScrollGestureLockThreshold) { + locked_gesture_ = SCROLL; + } + } + RedrawDIP(gfx::PointF(new_x, new_y), magnification_scale_); + } + } + + return cancel_pressed_touches; +} + +} // namespace chromecast
diff --git a/chromecast/graphics/accessibility/fullscreen_magnification_controller.h b/chromecast/graphics/accessibility/fullscreen_magnification_controller.h new file mode 100644 index 0000000..829498c7 --- /dev/null +++ b/chromecast/graphics/accessibility/fullscreen_magnification_controller.h
@@ -0,0 +1,102 @@ +// Copyright (c) 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROMECAST_GRAPHICS_ACCESSIBILITY_FULLSCREEN_MAGNIFICATION_CONTROLLER_H_ +#define CHROMECAST_GRAPHICS_ACCESSIBILITY_FULLSCREEN_MAGNIFICATION_CONTROLLER_H_ + +#include "chromecast/graphics/accessibility/magnification_controller.h" +#include "ui/events/event_handler.h" +#include "ui/events/event_rewriter.h" +#include "ui/events/gestures/gesture_provider_aura.h" +#include "ui/events/gestures/gesture_types.h" +#include "ui/gfx/geometry/point.h" +#include "ui/gfx/transform.h" + +namespace aura { +class Window; +} // namespace aura + +namespace ui { +class GestureProviderAura; +} // namespace ui + +namespace chromecast { + +class FullscreenMagnificationController : public MagnificationController, + public ui::EventRewriter, + public ui::GestureConsumer { + public: + explicit FullscreenMagnificationController(aura::Window* root_window); + ~FullscreenMagnificationController() override; + + void SetEnabled(bool enabled) override; + bool IsEnabled() const override; + void SetMagnificationScale(float magnification_scale) override; + + private: + class GestureProviderClient; + enum LockedGestureType { NO_GESTURE, ZOOM, SCROLL }; + + // The current transform to apply to the root window to perform magnification. + gfx::Transform GetMagnifierTransform() const; + + // Process pending gestures in |gesture_provider_|. This method returns true + // if the controller needs to cancel existing touches. + bool ProcessGestures(); + + // Redraws the magnification window with the given origin position in dip and + // the given scale. Returns true if the window is changed; otherwise, false. + bool RedrawDIP(const gfx::PointF& position_in_dip, float scale); + + // Overridden from ui::EventRewriter + ui::EventRewriteStatus RewriteEvent( + const ui::Event& event, + std::unique_ptr<ui::Event>* rewritten_event) override; + ui::EventRewriteStatus NextDispatchEvent( + const ui::Event& last_event, + std::unique_ptr<ui::Event>* new_event) override; + + aura::Window* root_window_; + + bool is_enabled_ = false; + gfx::Transform original_transform_; + + // Stores the last touched location. This value is used on zooming to keep + // this location visible. + gfx::Point point_of_interest_in_root_; + + // Current scale, origin (left-top) position of the magnification window. + float magnification_scale_; + gfx::PointF magnification_origin_; + + float original_magnification_scale_; + gfx::PointF original_magnification_origin_; + + // We own our own GestureProvider to detect gestures with screen coordinates + // of touch events. As MagnificationController changes zoom level and moves + // viewport, logical coordinates of touches cannot be used for gesture + // detection as they are changed if the controller reacts to gestures. + std::unique_ptr<ui::GestureProviderAura> gesture_provider_; + std::unique_ptr<GestureProviderClient> gesture_provider_client_; + + // We lock the gesture once user performs either scroll or pinch gesture above + // those thresholds. + LockedGestureType locked_gesture_ = NO_GESTURE; + + // If true, consumes all touch events. + bool consume_touch_event_ = false; + + // Number of touch points on the screen. + int32_t touch_points_ = 0; + + // Map for holding ET_TOUCH_PRESS events. Those events are used to dispatch + // ET_TOUCH_CANCELLED events. Events will be removed from this map when press + // events are cancelled, i.e. size of this map can be different from number of + // touches on the screen. Key is pointer id. + std::map<int32_t, std::unique_ptr<ui::TouchEvent>> press_event_map_; +}; + +} // namespace chromecast + +#endif // CHROMECAST_GRAPHICS_ACCESSIBILITY_FULLSCREEN_MAGNIFICATION_CONTROLLER_H_
diff --git a/chromecast/graphics/cast_gesture_handler.cc b/chromecast/graphics/cast_gesture_handler.cc index 9ed7cb1..1959af9 100644 --- a/chromecast/graphics/cast_gesture_handler.cc +++ b/chromecast/graphics/cast_gesture_handler.cc
@@ -10,4 +10,8 @@ return false; } +CastGestureHandler::Corner CastGestureHandler::HandledCornerHolds() const { + return NO_CORNERS; +} + } // namespace chromecast
diff --git a/chromecast/graphics/cast_gesture_handler.h b/chromecast/graphics/cast_gesture_handler.h index 04a1af1..0a1aec30 100644 --- a/chromecast/graphics/cast_gesture_handler.h +++ b/chromecast/graphics/cast_gesture_handler.h
@@ -5,6 +5,8 @@ #ifndef CHROMECAST_GRAPHICS_CAST_GESTURE_HANDLER_H_ #define CHROMECAST_GRAPHICS_CAST_GESTURE_HANDLER_H_ +#include "ui/events/event.h" + // TODO(rdaum): Move into chromecast/graphics/gestures, which will require some // cross-repo maneuvers. #include "base/macros.h" @@ -47,6 +49,37 @@ // followed by a release, within the tap timeout window virtual void HandleTapGesture(const gfx::Point& touch_location) {} + // Triggered when the finger enters a side margin from inside the screen. + // That is, the finger is leaving the screen. + virtual void HandleScreenExit(CastSideSwipeOrigin side, + const gfx::Point& touch_location) {} + + // Triggered when the finger enters a side margin from outside the screen. + // That is, the finger is entering the screen. + virtual void HandleScreenEnter(CastSideSwipeOrigin side, + const gfx::Point& touch_location) {} + + enum Corner { + NO_CORNERS = 0, + TOP_LEFT_CORNER = 1 << 0, + BOTTOM_LEFT_CORNER = 1 << 1, + TOP_RIGHT_CORNER = 1 << 2, + BOTTOM_RIGHT_CORNER = 1 << 3, + }; + + // Return a bitmask of the corners that this handler is interested in, if any. + virtual Corner HandledCornerHolds() const; + + // Triggered when the finger has been held inside the corner for longer + // than the corner hold threshold time. + virtual void HandleCornerHold(Corner corner_origin, + const ui::TouchEvent& touch_event) {} + + // Triggered when a corner hold is ended because the finger has left the + // corner or has been released. + virtual void HandleCornerHoldEnd(Corner corner_origin, + const ui::TouchEvent& touch_event) {} + private: DISALLOW_COPY_AND_ASSIGN(CastGestureHandler); };
diff --git a/chromecast/graphics/gestures/cast_system_gesture_dispatcher.cc b/chromecast/graphics/gestures/cast_system_gesture_dispatcher.cc index 557e9db..f36f75a 100644 --- a/chromecast/graphics/gestures/cast_system_gesture_dispatcher.cc +++ b/chromecast/graphics/gestures/cast_system_gesture_dispatcher.cc
@@ -76,4 +76,47 @@ } } -} // namespace chromecast \ No newline at end of file +void CastSystemGestureDispatcher::HandleScreenExit( + CastSideSwipeOrigin side, + const gfx::Point& touch_location) { + for (auto* gesture_handler : gesture_handlers_) { + gesture_handler->HandleScreenExit(side, touch_location); + } +} + +void CastSystemGestureDispatcher::HandleScreenEnter( + CastSideSwipeOrigin side, + const gfx::Point& touch_location) { + for (auto* gesture_handler : gesture_handlers_) { + gesture_handler->HandleScreenEnter(side, touch_location); + } +} + +CastGestureHandler::Corner CastSystemGestureDispatcher::HandledCornerHolds() + const { + int corner_hold_bitmask = CastGestureHandler::NO_CORNERS; + for (auto* gesture_handler : gesture_handlers_) { + corner_hold_bitmask |= gesture_handler->HandledCornerHolds(); + } + return static_cast<CastGestureHandler::Corner>(corner_hold_bitmask); +} + +void CastSystemGestureDispatcher::HandleCornerHold( + CastGestureHandler::Corner corner_origin, + const ui::TouchEvent& touch_event) { + for (auto* gesture_handler : gesture_handlers_) { + if (gesture_handler->HandledCornerHolds() & corner_origin) { + gesture_handler->HandleCornerHold(corner_origin, touch_event); + } + } +} +void CastSystemGestureDispatcher::HandleCornerHoldEnd( + CastGestureHandler::Corner corner_origin, + const ui::TouchEvent& touch_event) { + for (auto* gesture_handler : gesture_handlers_) { + if (gesture_handler->HandledCornerHolds() & corner_origin) { + gesture_handler->HandleCornerHoldEnd(corner_origin, touch_event); + } + } +} +} // namespace chromecast
diff --git a/chromecast/graphics/gestures/cast_system_gesture_dispatcher.h b/chromecast/graphics/gestures/cast_system_gesture_dispatcher.h index 46aca1b..b7a0c7d 100644 --- a/chromecast/graphics/gestures/cast_system_gesture_dispatcher.h +++ b/chromecast/graphics/gestures/cast_system_gesture_dispatcher.h
@@ -35,6 +35,15 @@ const gfx::Point& touch_location) override; void HandleTapDownGesture(const gfx::Point& touch_location) override; void HandleTapGesture(const gfx::Point& touch_location) override; + void HandleScreenExit(CastSideSwipeOrigin side, + const gfx::Point& touch_location) override; + void HandleScreenEnter(CastSideSwipeOrigin side, + const gfx::Point& touch_location) override; + Corner HandledCornerHolds() const override; + void HandleCornerHold(Corner corner_origin, + const ui::TouchEvent& touch_event) override; + void HandleCornerHoldEnd(Corner corner_origin, + const ui::TouchEvent& touch_event) override; private: base::flat_set<CastGestureHandler*> gesture_handlers_;
diff --git a/chromecast/graphics/gestures/side_swipe_detector.cc b/chromecast/graphics/gestures/side_swipe_detector.cc index af14dc3..ede8998 100644 --- a/chromecast/graphics/gestures/side_swipe_detector.cc +++ b/chromecast/graphics/gestures/side_swipe_detector.cc
@@ -13,7 +13,6 @@ #include "ui/aura/window_tree_host.h" #include "ui/display/display.h" #include "ui/display/screen.h" -#include "ui/events/event.h" #include "ui/events/event_rewriter.h" #include "ui/gfx/geometry/point.h" #include "ui/gfx/geometry/rect.h" @@ -57,7 +56,11 @@ bottom_gesture_start_height_(BottomGestureStartHeight()), gesture_handler_(gesture_handler), root_window_(root_window), - current_swipe_(CastSideSwipeOrigin::NONE) { + current_swipe_origin_(CastSideSwipeOrigin::NONE), + current_pointer_id_(ui::PointerDetails::kUnknownPointerId), + corner_hold_timer_(new base::OneShotTimer), + in_corner_hold_(false), + current_corner_origin_(CastGestureHandler::NO_CORNERS) { DCHECK(gesture_handler); DCHECK(root_window); root_window_->GetHost()->GetEventSource()->AddEventRewriter(this); @@ -67,30 +70,74 @@ root_window_->GetHost()->GetEventSource()->RemoveEventRewriter(this); } -CastSideSwipeOrigin SideSwipeDetector::GetDragPosition( +bool SideSwipeDetector::GetMarginPosition( const gfx::Point& point, - const gfx::Rect& screen_bounds) const { - if (point.y() < (screen_bounds.y() + gesture_start_height_)) { - return CastSideSwipeOrigin::TOP; + const gfx::Rect& screen_bounds, + CastSideSwipeOrigin* side, + CastGestureHandler::Corner* corner) const { + DCHECK(corner); + DCHECK(side); + *corner = CastGestureHandler::NO_CORNERS; + *side = CastSideSwipeOrigin::NONE; + + const int top_margin_limit = screen_bounds.y() + gesture_start_height_; + const int left_margin_limit = screen_bounds.x() + gesture_start_width_; + const int right_margin_limit = + screen_bounds.x() + screen_bounds.width() - gesture_start_width_; + const int bottom_margin_limit = + screen_bounds.y() + screen_bounds.height() - bottom_gesture_start_height_; + + // Find out if anybody is interested in corner events (hold or swipe). If not, + // we won't bother trying to check them, so that we can be sure that swipe + // events that happen in corners are treated as a side. + CastGestureHandler::Corner corners = gesture_handler_->HandledCornerHolds(); + + // Look for corners first if needed. + if (corners != CastGestureHandler::NO_CORNERS) { + if (corners && point.y() < top_margin_limit && + point.x() < left_margin_limit) { + *corner = CastGestureHandler::TOP_LEFT_CORNER; + return true; + } + if (point.y() < top_margin_limit && point.x() > right_margin_limit) { + *corner = CastGestureHandler::TOP_RIGHT_CORNER; + return true; + } + if (point.x() < left_margin_limit && point.y() > bottom_margin_limit) { + *corner = CastGestureHandler::BOTTOM_LEFT_CORNER; + return true; + } + if (point.x() > right_margin_limit && point.y() > bottom_margin_limit) { + *corner = CastGestureHandler::BOTTOM_RIGHT_CORNER; + return true; + } } - if (point.x() < (screen_bounds.x() + gesture_start_width_)) { - return CastSideSwipeOrigin::LEFT; + + // Then sides. + if (point.y() < top_margin_limit) { + *side = CastSideSwipeOrigin::TOP; + return true; } - if (point.x() > - (screen_bounds.x() + screen_bounds.width() - gesture_start_width_)) { - return CastSideSwipeOrigin::RIGHT; + if (point.x() < left_margin_limit) { + *side = CastSideSwipeOrigin::LEFT; + return true; } - if (point.y() > (screen_bounds.y() + screen_bounds.height() - - bottom_gesture_start_height_)) { - return CastSideSwipeOrigin::BOTTOM; + if (point.x() > right_margin_limit) { + *side = CastSideSwipeOrigin::RIGHT; + return true; } - return CastSideSwipeOrigin::NONE; + if (point.y() > bottom_margin_limit) { + *side = CastSideSwipeOrigin::BOTTOM; + return true; + } + *side = CastSideSwipeOrigin::NONE; + return false; } void SideSwipeDetector::StashEvent(const ui::TouchEvent& event) { // If the time since the gesture start is longer than our threshold, do not // stash the event (and clear the stashed events). - if (current_swipe_time_.Elapsed() > kGestureMarginEventsTimeLimit) { + if (gesture_elapsed_timer_.Elapsed() > kGestureMarginEventsTimeLimit) { stashed_events_.clear(); return; } @@ -104,7 +151,6 @@ if (!event.IsTouchEvent()) { return ui::EVENT_REWRITE_CONTINUE; } - const ui::TouchEvent* touch_event = event.AsTouchEvent(); // Touch events come through in screen pixels, but untransformed. This is the @@ -116,69 +162,121 @@ gfx::Rect screen_bounds = display::Screen::GetScreen() ->GetDisplayNearestPoint(touch_location) .bounds(); - CastSideSwipeOrigin side_swipe_origin = - GetDragPosition(touch_location, screen_bounds); - // A located event has occurred inside the margin. It might be the start of - // our gesture, or a touch that we need to squash. - if (current_swipe_ == CastSideSwipeOrigin::NONE && - side_swipe_origin != CastSideSwipeOrigin::NONE) { - // Check to see if we have any potential consumers of events on this side. - // If not, we can continue on without consuming it. - if (!gesture_handler_->CanHandleSwipe(side_swipe_origin)) { + CastSideSwipeOrigin detected_side; + CastGestureHandler::Corner detected_corner; + bool is_margin_event = GetMarginPosition(touch_location, screen_bounds, + &detected_side, &detected_corner); + + // Gesture initiation is a press event inside a margin for a new pointer id. + if (touch_event->type() == ui::ET_TOUCH_PRESSED) { + if (!is_margin_event) { return ui::EVENT_REWRITE_CONTINUE; } - // Detect the beginning of a system gesture swipe. - if (touch_event->type() != ui::ET_TOUCH_PRESSED) { + // We're entering the screen, so notify the dispatcher of that before + // looking for a swipe. + gesture_handler_->HandleScreenEnter(detected_side, touch_event->location()); + + // There's already a finger down, so don't process any swipes or corners + // with the new one. + if (current_pointer_id_ != ui::PointerDetails::kUnknownPointerId) { return ui::EVENT_REWRITE_CONTINUE; } - current_swipe_ = side_swipe_origin; + // Remember the finger. + current_pointer_id_ = touch_event->pointer_details().id; - // Let the subscribers know about the gesture begin. - gesture_handler_->HandleSideSwipeBegin(side_swipe_origin, touch_location); + // If we're in a corner (which means we're looking for that kind of thing), + // start the corner hold timer and move on. + in_corner_hold_ = false; + current_corner_origin_ = CastGestureHandler::NO_CORNERS; + if (detected_corner != CastGestureHandler::NO_CORNERS) { + current_corner_origin_ = detected_corner; + corner_hold_start_event_ = ui::Event::Clone(*touch_event); + corner_hold_timer_->Start( + FROM_HERE, gesture_detector_config_.longpress_timeout, this, + &SideSwipeDetector::OnCornerHoldTimerFired); + } else if (detected_side != CastSideSwipeOrigin::NONE && + gesture_handler_->CanHandleSwipe(detected_side)) { + current_swipe_origin_ = detected_side; - VLOG(1) << "side swipe gesture begin @ " << touch_location.ToString(); - current_swipe_time_ = base::ElapsedTimer(); + // Let the subscribers know about the gesture begin. + gesture_handler_->HandleSideSwipeBegin(detected_side, touch_location); - // Stash a copy of the event should we decide to reconstitute it later if we - // decide that this isn't in fact a side swipe. + VLOG(1) << "side swipe gesture begin @ " << touch_location.ToString(); + } else { + return ui::EVENT_REWRITE_CONTINUE; + } + gesture_elapsed_timer_ = base::ElapsedTimer(); + + // Stash a copy of the event should we decide to reconstitute it later if + // we decide that this isn't in fact a side swipe or corner hold. StashEvent(*touch_event); // Avoid corrupt gesture state caused by a missing kGestureScrollEnd event // as we potentially transition between web views. root_window_->CleanupGestureState(); - // And then stop the original event from propagating. return ui::EVENT_REWRITE_DISCARD; } - if (current_swipe_ == CastSideSwipeOrigin::NONE) { + // If we're releasing on our way out of the screen, let the world know. + if (touch_event->type() == ui::ET_TOUCH_RELEASED && + detected_side != CastSideSwipeOrigin::NONE) { + gesture_handler_->HandleScreenExit(detected_side, touch_event->location()); + } + + // If we're not in a gesture of any kind, or the the non-press events we're + // getting are not for the same pointer id, we're not interested in them. + if ((current_corner_origin_ == CastGestureHandler::NO_CORNERS && + current_swipe_origin_ == CastSideSwipeOrigin::NONE) || + touch_event->pointer_details().id != current_pointer_id_) { return ui::EVENT_REWRITE_CONTINUE; } - // A swipe is in progress, or has completed, so stop propagation of underlying - // gesture/touch events, after stashing a copy of the original event. - StashEvent(*touch_event); + // While we're in a swipe, stash events for later playback. + if (in_corner_hold_ || current_swipe_origin_ != CastSideSwipeOrigin::NONE) { + StashEvent(*touch_event); + } - // The finger has lifted, which means the end of the gesture, or if the finger - // hasn't travelled far enough, replay the original events. if (touch_event->type() == ui::ET_TOUCH_RELEASED) { - VLOG(1) << "gesture release; time since press: " - << current_swipe_time_.Elapsed().InMilliseconds() << "ms @ " + current_pointer_id_ = ui::PointerDetails::kUnknownPointerId; + + // If a corner event was in progress, we will need to either finish a hold + // or cancel it. + if (current_corner_origin_ != CastGestureHandler::NO_CORNERS) { + // If the corner was being held, notify consumers that it's over, + // clear events, and discard. + if (in_corner_hold_) { + EndCornerHold(*touch_event); + + stashed_events_.clear(); + return ui::EVENT_REWRITE_DISCARD; + } + + // Otherwise cancel and replay held events. + CancelCornerHoldCheck(); + + return StartNextDispatchStashedEvents(new_event); + } + + // If there was no side swipe in progress, we can just move on. + if (current_swipe_origin_ == CastSideSwipeOrigin::NONE) { + return ui::EVENT_REWRITE_CONTINUE; + } + + VLOG(1) << "gesture swipe release; time since press: " + << gesture_elapsed_timer_.Elapsed().InMilliseconds() << "ms @ " << touch_location.ToString(); - gesture_handler_->HandleSideSwipeEnd(current_swipe_, touch_location); - current_swipe_ = CastSideSwipeOrigin::NONE; + gesture_handler_->HandleSideSwipeEnd(current_swipe_origin_, touch_location); + current_swipe_origin_ = CastSideSwipeOrigin::NONE; // If the finger is still inside the touch margin at release, this is not // really a side swipe. Start streaming out events we stashed for later // retrieval. - if (side_swipe_origin != CastSideSwipeOrigin::NONE && - !stashed_events_.empty()) { - *new_event = ui::Event::Clone(stashed_events_.front()); - stashed_events_.pop_front(); - return ui::EVENT_REWRITE_DISPATCH_ANOTHER; + if (detected_side != CastSideSwipeOrigin::NONE) { + return StartNextDispatchStashedEvents(new_event); } // Otherwise, clear them. @@ -187,15 +285,49 @@ return ui::EVENT_REWRITE_DISCARD; } - // The system gesture is ongoing... - gesture_handler_->HandleSideSwipeContinue(current_swipe_, touch_location); - VLOG(1) << "gesture continue; time since press: " - << current_swipe_time_.Elapsed().InMilliseconds() << "ms @ " - << touch_location.ToString(); + // If we're looking for corner hold and the timer has not expired and we've + // left the corner, cancel the hold check now and replay the stashed events. + if (current_corner_origin_ != CastGestureHandler::NO_CORNERS && + detected_corner != current_corner_origin_ && + corner_hold_timer_->IsRunning()) { + CancelCornerHoldCheck(); + + return StartNextDispatchStashedEvents(new_event); + } + + // If a swipe is ongoing, let consumers know about it. + if (current_swipe_origin_ != CastSideSwipeOrigin::NONE) { + gesture_handler_->HandleSideSwipeContinue(current_swipe_origin_, + touch_location); + VLOG(1) << "gesture continue; time since press: " + << gesture_elapsed_timer_.Elapsed().InMilliseconds() << "ms @ " + << touch_location.ToString(); + } + + // If we're in corner hold and we've left the corner, that's an end. + if (in_corner_hold_ && detected_corner != current_corner_origin_) { + EndCornerHold(*touch_event); + + stashed_events_.clear(); + } return ui::EVENT_REWRITE_DISCARD; } +void SideSwipeDetector::CancelCornerHoldCheck() { + corner_hold_timer_->Stop(); + corner_hold_start_event_.reset(); + in_corner_hold_ = false; + current_corner_origin_ = CastGestureHandler::NO_CORNERS; +} + +void SideSwipeDetector::EndCornerHold(const ui::TouchEvent& event) { + gesture_handler_->HandleCornerHoldEnd(current_corner_origin_, event); + in_corner_hold_ = false; + current_corner_origin_ = CastGestureHandler::NO_CORNERS; + corner_hold_start_event_.reset(); +} + ui::EventRewriteStatus SideSwipeDetector::NextDispatchEvent( const ui::Event& last_event, std::unique_ptr<ui::Event>* new_event) { @@ -209,4 +341,30 @@ return ui::EVENT_REWRITE_DISPATCH_ANOTHER; } +void SideSwipeDetector::OnCornerHoldTimerFired() { + DCHECK(corner_hold_start_event_); + DCHECK(current_corner_origin_ != CastGestureHandler::NO_CORNERS); + DCHECK(!in_corner_hold_); + in_corner_hold_ = true; + gesture_handler_->HandleCornerHold(current_corner_origin_, + *corner_hold_start_event_->AsTouchEvent()); + corner_hold_start_event_.reset(); +} + +void SideSwipeDetector::SetTimerForTesting( + std::unique_ptr<base::OneShotTimer> timer) { + corner_hold_timer_ = std::move(timer); +} + +ui::EventRewriteStatus SideSwipeDetector::StartNextDispatchStashedEvents( + std::unique_ptr<ui::Event>* new_event) { + if (!stashed_events_.empty()) { + *new_event = ui::Event::Clone(stashed_events_.front()); + stashed_events_.pop_front(); + return ui::EVENT_REWRITE_DISPATCH_ANOTHER; + } + stashed_events_.clear(); + return ui::EVENT_REWRITE_DISCARD; +} + } // namespace chromecast
diff --git a/chromecast/graphics/gestures/side_swipe_detector.h b/chromecast/graphics/gestures/side_swipe_detector.h index 7a23db7..60ec0fb 100644 --- a/chromecast/graphics/gestures/side_swipe_detector.h +++ b/chromecast/graphics/gestures/side_swipe_detector.h
@@ -6,8 +6,10 @@ #define CHROMECAST_GRAPHICS_GESTURES_SIDE_SWIPE_DETECTOR_H_ #include "base/timer/elapsed_timer.h" +#include "base/timer/timer.h" #include "chromecast/graphics/cast_gesture_handler.h" #include "ui/events/event_rewriter.h" +#include "ui/events/gesture_detection/gesture_detector.h" namespace aura { class Window; @@ -15,6 +17,10 @@ namespace chromecast { +namespace test { +class SideSwipeDetectorTest; +} // namespace test + // An event rewriter for detecting system-wide gestures performed on the margins // of the root window. // Recognizes swipe gestures that originate from the top, left, bottom, and @@ -28,8 +34,10 @@ ~SideSwipeDetector() override; - CastSideSwipeOrigin GetDragPosition(const gfx::Point& point, - const gfx::Rect& screen_bounds) const; + bool GetMarginPosition(const gfx::Point& point, + const gfx::Rect& screen_bounds, + CastSideSwipeOrigin* side, + CastGestureHandler::Corner* corner) const; // Overridden from ui::EventRewriter ui::EventRewriteStatus RewriteEvent( @@ -40,7 +48,16 @@ std::unique_ptr<ui::Event>* new_event) override; private: + friend class test::SideSwipeDetectorTest; + void SetTimerForTesting(std::unique_ptr<base::OneShotTimer> mock_timer); + void StashEvent(const ui::TouchEvent& event); + void OnCornerHoldTimerFired(); + void EndCornerHold(const ui::TouchEvent& event); + void CancelCornerHoldCheck(); + + ui::EventRewriteStatus StartNextDispatchStashedEvents( + std::unique_ptr<ui::Event>* new_event); const int gesture_start_width_; const int gesture_start_height_; @@ -48,14 +65,22 @@ CastGestureHandler* gesture_handler_; aura::Window* root_window_; - CastSideSwipeOrigin current_swipe_; - base::ElapsedTimer current_swipe_time_; - + CastSideSwipeOrigin current_swipe_origin_; + int current_pointer_id_; + base::ElapsedTimer gesture_elapsed_timer_; std::deque<ui::TouchEvent> stashed_events_; + // A default gesture detector config, so we can share the same + // longpress timeout for corner hold. + ui::GestureDetector::Config gesture_detector_config_; + std::unique_ptr<base::OneShotTimer> corner_hold_timer_; + std::unique_ptr<ui::Event> corner_hold_start_event_; + bool in_corner_hold_; + CastGestureHandler::Corner current_corner_origin_; + DISALLOW_COPY_AND_ASSIGN(SideSwipeDetector); }; } // namespace chromecast -#endif // CHROMECAST_GRAPHICS_GESTURES_SIDE_SWIPE_DETECTOR_H_ \ No newline at end of file +#endif // CHROMECAST_GRAPHICS_GESTURES_SIDE_SWIPE_DETECTOR_H_
diff --git a/chromecast/graphics/gestures/side_swipe_detector_test.cc b/chromecast/graphics/gestures/side_swipe_detector_test.cc index c50c8581c..0a8a0af0 100644 --- a/chromecast/graphics/gestures/side_swipe_detector_test.cc +++ b/chromecast/graphics/gestures/side_swipe_detector_test.cc
@@ -6,14 +6,25 @@ #include <memory> +#include "base/message_loop/message_loop.h" #include "base/run_loop.h" +#include "base/test/simple_test_tick_clock.h" +#include "base/test/test_mock_time_task_runner.h" +#include "testing/gmock/include/gmock/gmock.h" #include "ui/aura/client/screen_position_client.h" #include "ui/aura/test/aura_test_base.h" #include "ui/aura/test/event_generator_delegate_aura.h" #include "ui/aura/window.h" +#include "ui/events/event_utils.h" #include "ui/events/test/event_generator.h" #include "ui/wm/core/default_screen_position_client.h" +// Gmock matchers and actions that we use below. +using testing::_; +using testing::AnyOf; +using testing::Eq; +using testing::Return; + namespace chromecast { namespace test { @@ -23,6 +34,9 @@ constexpr int kSwipeDistance = 50; constexpr int kNumSteps = 5; constexpr gfx::Point kZeroPoint{0, 0}; +constexpr base::TimeDelta kHoldCornerDelay = + base::TimeDelta::FromMilliseconds(3500); +constexpr gfx::Point kNWCorner{5, 5}; } // namespace @@ -49,11 +63,9 @@ DISALLOW_COPY_AND_ASSIGN(TestEventGeneratorDelegate); }; +// TODO(rdaum): Make this use gmock for all events instead of just for corners. class TestSideSwipeGestureHandler : public CastGestureHandler { public: - TestSideSwipeGestureHandler() - : begin_swipe_point_(kZeroPoint), end_swipe_point_(kZeroPoint) {} - ~TestSideSwipeGestureHandler() override = default; bool CanHandleSwipe(CastSideSwipeOrigin swipe_origin) override { @@ -82,6 +94,21 @@ CastSideSwipeOrigin end_swipe_origin() const { return end_swipe_origin_; } gfx::Point end_swipe_point() const { return end_swipe_point_; } + // Mocks. + MOCK_METHOD2(HandleScreenExit, + void(CastSideSwipeOrigin side, + const gfx::Point& touch_location)); + MOCK_METHOD2(HandleScreenEnter, + void(CastSideSwipeOrigin side, + const gfx::Point& touch_location)); + MOCK_CONST_METHOD0(HandledCornerHolds, CastGestureHandler::Corner()); + MOCK_METHOD2(HandleCornerHold, + void(CastGestureHandler::Corner corner_origin, + const ui::TouchEvent& touch_event)); + MOCK_METHOD2(HandleCornerHoldEnd, + void(CastGestureHandler::Corner corner_origin, + const ui::TouchEvent& touch_event)); + private: bool handle_swipe_ = true; @@ -124,6 +151,17 @@ gesture_handler_.get(), root_window()); test_event_handler_ = std::make_unique<TestEventHandler>(); root_window()->AddPostTargetHandler(test_event_handler_.get()); + + mock_task_runner_ = base::MakeRefCounted<base::TestMockTimeTaskRunner>( + base::Time::Now(), base::TimeTicks::Now()); + auto mock_timer = std::make_unique<base::OneShotTimer>( + mock_task_runner_->GetMockTickClock()); + mock_timer->SetTaskRunner(mock_task_runner_); + ui::SetEventTickClockForTesting(mock_task_runner_->GetMockTickClock()); + side_swipe_detector_->SetTimerForTesting(std::move(mock_timer)); + + EXPECT_CALL(test_gesture_handler(), HandledCornerHolds()) + .WillRepeatedly(Return(CastGestureHandler::NO_CORNERS)); } void TearDown() override { @@ -133,6 +171,52 @@ aura::test::AuraTestBase::TearDown(); } + // Simulate a tap-hold event in one place. + void Hold(const gfx::Point& tap_point, const base::TimeDelta& delta) { + ui::TouchEvent press( + ui::ET_TOUCH_PRESSED, tap_point, mock_clock()->NowTicks(), + ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, + ui::PointerDetails::kUnknownPointerId)); + GetEventGenerator().Dispatch(&press); + mock_task_runner()->AdvanceMockTickClock(delta); + mock_task_runner()->FastForwardBy(delta); + ui::TouchEvent release( + ui::ET_TOUCH_RELEASED, tap_point, mock_clock()->NowTicks(), + ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, + ui::PointerDetails::kUnknownPointerId)); + GetEventGenerator().Dispatch(&release); + } + + void Drag(const gfx::Point& start_point, + const base::TimeDelta& start_hold_time, + const base::TimeDelta& drag_time, + const gfx::Point& end_point, + bool end_release = true) { + ui::TouchEvent press( + ui::ET_TOUCH_PRESSED, start_point, mock_clock()->NowTicks(), + ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, + ui::PointerDetails::kUnknownPointerId)); + GetEventGenerator().Dispatch(&press); + mock_task_runner()->AdvanceMockTickClock(start_hold_time); + mock_task_runner()->FastForwardBy(start_hold_time); + + ui::TouchEvent move( + ui::ET_TOUCH_MOVED, end_point, mock_clock()->NowTicks(), + ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, + ui::PointerDetails::kUnknownPointerId)); + GetEventGenerator().Dispatch(&move); + mock_task_runner()->AdvanceMockTickClock(drag_time); + mock_task_runner()->FastForwardBy(drag_time); + + if (end_release) { + ui::TouchEvent release( + ui::ET_TOUCH_RELEASED, end_point, mock_clock()->NowTicks(), + ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, + ui::PointerDetails::kUnknownPointerId)); + GetEventGenerator().Dispatch(&release); + } + } + ui::test::EventGenerator& GetEventGenerator() { if (!event_generator_) { event_generator_.reset(new ui::test::EventGenerator( @@ -147,6 +231,14 @@ TestEventHandler& test_event_handler() { return *test_event_handler_; } + base::TestMockTimeTaskRunner* mock_task_runner() const { + return mock_task_runner_.get(); + } + + const base::TickClock* mock_clock() const { + return mock_task_runner_->GetMockTickClock(); + } + private: std::unique_ptr<aura::client::ScreenPositionClient> screen_position_client_; std::unique_ptr<ui::test::EventGenerator> event_generator_; @@ -154,6 +246,7 @@ std::unique_ptr<SideSwipeDetector> side_swipe_detector_; std::unique_ptr<TestEventHandler> test_event_handler_; std::unique_ptr<TestSideSwipeGestureHandler> gesture_handler_; + scoped_refptr<base::TestMockTimeTaskRunner> mock_task_runner_; }; // Test that initialization works and initial state is clean. @@ -175,8 +268,8 @@ generator.GestureScrollSequence(drag_point, drag_point - gfx::Vector2d(0, kSwipeDistance), kTimeDelay, kNumSteps); - base::RunLoop run_loop; - run_loop.RunUntilIdle(); + + base::RunLoop().RunUntilIdle(); EXPECT_EQ(CastSideSwipeOrigin::NONE, test_gesture_handler().begin_swipe_origin()); @@ -193,8 +286,8 @@ generator.GestureScrollSequence(drag_point, drag_point + gfx::Vector2d(kSwipeDistance, 0), kTimeDelay, kNumSteps); - base::RunLoop run_loop; - run_loop.RunUntilIdle(); + + base::RunLoop().RunUntilIdle(); EXPECT_EQ(CastSideSwipeOrigin::LEFT, test_gesture_handler().begin_swipe_origin()); @@ -212,8 +305,8 @@ generator.GestureScrollSequence(drag_point, drag_point - gfx::Vector2d(kSwipeDistance, 0), kTimeDelay, kNumSteps); - base::RunLoop run_loop; - run_loop.RunUntilIdle(); + + base::RunLoop().RunUntilIdle(); EXPECT_EQ(CastSideSwipeOrigin::RIGHT, test_gesture_handler().begin_swipe_origin()); @@ -230,8 +323,8 @@ generator.GestureScrollSequence(drag_point, drag_point + gfx::Vector2d(0, kSwipeDistance), kTimeDelay, kNumSteps); - base::RunLoop run_loop; - run_loop.RunUntilIdle(); + + base::RunLoop().RunUntilIdle(); EXPECT_EQ(CastSideSwipeOrigin::TOP, test_gesture_handler().begin_swipe_origin()); @@ -249,8 +342,8 @@ generator.GestureScrollSequence(drag_point, drag_point - gfx::Vector2d(0, kSwipeDistance), kTimeDelay, kNumSteps); - base::RunLoop run_loop; - run_loop.RunUntilIdle(); + + base::RunLoop().RunUntilIdle(); EXPECT_EQ(CastSideSwipeOrigin::BOTTOM, test_gesture_handler().begin_swipe_origin()); @@ -272,8 +365,8 @@ generator.GestureScrollSequence(drag_point, drag_point - gfx::Vector2d(0, kSwipeDistance), kTimeDelay, kNumSteps); - base::RunLoop run_loop; - run_loop.RunUntilIdle(); + + base::RunLoop().RunUntilIdle(); EXPECT_EQ(CastSideSwipeOrigin::NONE, test_gesture_handler().begin_swipe_origin()); @@ -284,5 +377,106 @@ EXPECT_NE(0, test_event_handler().NumTouchEventsReceived()); } +TEST_F(SideSwipeDetectorTest, ScreenEnter) { + EXPECT_CALL(test_gesture_handler(), + HandleScreenEnter(Eq(CastSideSwipeOrigin::TOP), _)) + .Times(1); + EXPECT_CALL(test_gesture_handler(), + HandleScreenExit(Eq(CastSideSwipeOrigin::TOP), _)) + .Times(0); + + test_gesture_handler().SetHandleSwipe(false); + + gfx::Point drag_point(root_window()->bounds().width() / 2, 0); + ui::test::EventGenerator& generator = GetEventGenerator(); + generator.GestureScrollSequence(drag_point, + drag_point + gfx::Vector2d(0, kSwipeDistance), + kTimeDelay, kNumSteps); + + base::RunLoop().RunUntilIdle(); +} + +TEST_F(SideSwipeDetectorTest, ScreenExit) { + EXPECT_CALL(test_gesture_handler(), + HandleScreenExit(Eq(CastSideSwipeOrigin::TOP), _)) + .Times(1); + EXPECT_CALL(test_gesture_handler(), + HandleScreenEnter(Eq(CastSideSwipeOrigin::TOP), _)) + .Times(0); + + test_gesture_handler().SetHandleSwipe(false); + + gfx::Point drag_point(root_window()->bounds().width() / 2, 0); + ui::test::EventGenerator& generator = GetEventGenerator(); + generator.GestureScrollSequence(drag_point + gfx::Vector2d(0, kSwipeDistance), + drag_point, kTimeDelay, kNumSteps); + + base::RunLoop().RunUntilIdle(); +} + +// Test corner hold. +TEST_F(SideSwipeDetectorTest, CornerHoldTrigger) { + EXPECT_CALL(test_gesture_handler(), HandledCornerHolds()) + .WillRepeatedly(Return(CastGestureHandler::TOP_LEFT_CORNER)); + EXPECT_CALL(test_gesture_handler(), + HandleCornerHold(Eq(CastGestureHandler::TOP_LEFT_CORNER), _)) + .Times(1); + EXPECT_CALL(test_gesture_handler(), + HandleCornerHoldEnd(Eq(CastGestureHandler::TOP_LEFT_CORNER), _)) + .Times(1); + Hold(kNWCorner, kHoldCornerDelay); + + base::RunLoop().RunUntilIdle(); +} + +// Test that it's a corner hold if we hold long enough in corner then drag out. +TEST_F(SideSwipeDetectorTest, CornerHoldDragOutOfCorner) { + EXPECT_CALL(test_gesture_handler(), HandledCornerHolds()) + .WillRepeatedly(Return(CastGestureHandler::TOP_LEFT_CORNER)); + EXPECT_CALL(test_gesture_handler(), HandleCornerHold(_, _)).Times(1); + EXPECT_CALL(test_gesture_handler(), HandleCornerHoldEnd(_, _)).Times(1); + Drag(kNWCorner, kHoldCornerDelay, kHoldCornerDelay, + kNWCorner + gfx::Vector2d(100, 100)); + + base::RunLoop().RunUntilIdle(); +} + +// Test that it's not a corner hold if it doesn't sit in the corner long enough. +TEST_F(SideSwipeDetectorTest, CornerHoldCancelNotLongEnough) { + EXPECT_CALL(test_gesture_handler(), HandledCornerHolds()) + .WillRepeatedly(Return(CastGestureHandler::TOP_LEFT_CORNER)); + EXPECT_CALL(test_gesture_handler(), HandleCornerHold(_, _)).Times(0); + EXPECT_CALL(test_gesture_handler(), HandleCornerHoldEnd(_, _)).Times(0); + Hold(kNWCorner, base::TimeDelta::FromMilliseconds(5)); + + base::RunLoop().RunUntilIdle(); +} + +// Test that it's not a corner hold if it drags out of the corner before the +// hold time. +TEST_F(SideSwipeDetectorTest, CornerHoldCancelDragOutOfCorner) { + EXPECT_CALL(test_gesture_handler(), HandledCornerHolds()) + .WillRepeatedly(Return(CastGestureHandler::TOP_LEFT_CORNER)); + EXPECT_CALL(test_gesture_handler(), HandleCornerHold(_, _)).Times(0); + EXPECT_CALL(test_gesture_handler(), HandleCornerHoldEnd(_, _)).Times(0); + Drag(kNWCorner, base::TimeDelta::FromMilliseconds(5), kHoldCornerDelay, + kNWCorner + gfx::Vector2d(100, 100)); + + base::RunLoop().RunUntilIdle(); +} + +// Test that it's not a corner hold if it drags out of the corner before the +// hold time, even with the finger held. +TEST_F(SideSwipeDetectorTest, CornerHoldCancelDragOutOfCornerButHeld) { + EXPECT_CALL(test_gesture_handler(), HandledCornerHolds()) + .WillRepeatedly(Return(CastGestureHandler::TOP_LEFT_CORNER)); + EXPECT_CALL(test_gesture_handler(), HandleCornerHold(_, _)).Times(0); + EXPECT_CALL(test_gesture_handler(), HandleCornerHoldEnd(_, _)).Times(0); + Drag(kNWCorner, base::TimeDelta::FromMilliseconds(5), kHoldCornerDelay, + kNWCorner + gfx::Vector2d(100, 100), false /* end_release */); + + base::RunLoop().RunUntilIdle(); +} + } // namespace test } // namespace chromecast
diff --git a/chromecast/graphics/gestures/triple_tap_detector.cc b/chromecast/graphics/gestures/triple_tap_detector.cc index 0e5be0a..dfe9734 100644 --- a/chromecast/graphics/gestures/triple_tap_detector.cc +++ b/chromecast/graphics/gestures/triple_tap_detector.cc
@@ -37,34 +37,31 @@ } const ui::TouchEvent& touch_event = static_cast<const ui::TouchEvent&>(event); - return HandleTripleTapState(touch_event, triple_tap_state_); -} - -ui::EventRewriteStatus TripleTapDetector::NextDispatchEvent( - const ui::Event& last_event, - std::unique_ptr<ui::Event>* new_event) { - // Only called if the rewriter has returned EVENT_REWRITE_DISPATCH_ANOTHER, - // and we don't do that. - NOTREACHED(); - return ui::EVENT_REWRITE_CONTINUE; -} - -ui::EventRewriteStatus TripleTapDetector::HandleTripleTapState( - const ui::TouchEvent& event, - TripleTapState state) { if (event.type() == ui::ET_TOUCH_PRESSED) { // If a press happened again before the minimum inter-tap interval, cancel // the triple tap. - if (state == TripleTapState::INTERVAL_WAIT && + if (triple_tap_state_ == TripleTapState::INTERVAL_WAIT && (event.time_stamp() - stashed_events_.back().time_stamp()) < gesture_detector_config_.double_tap_min_time) { + stashed_events_.clear(); TripleTapReset(); - return ui::EVENT_REWRITE_DISCARD; + return ui::EVENT_REWRITE_CONTINUE; + } + + // If the user moved too far from the last tap position, it's not a triple + // tap. + if (tap_count_) { + float distance = (touch_event.location() - last_tap_location_).Length(); + if (distance > gesture_detector_config_.double_tap_slop) { + TripleTapReset(); + stashed_events_.clear(); + return ui::EVENT_REWRITE_CONTINUE; + } } // Otherwise transition into a touched state. triple_tap_state_ = TripleTapState::TOUCH; - last_tap_location_ = event.location(); + last_tap_location_ = touch_event.location(); // If this is pressed too long, it should be treated as a long-press, and // not part of a triple-tap, so set a timer to detect that. @@ -72,64 +69,92 @@ gesture_detector_config_.longpress_timeout, this, &TripleTapDetector::OnLongPressIntervalTimerFired); - // Copy the event and then kill the original touch pressed event, we'll - // produce a new one when the timer expires if it turns out this wasn't a - // triple-tap. - stashed_events_.push_back(event); + // If we've already gotten one tap, discard this event, only the original + // tap needs to get through. + if (tap_count_) { + return ui::EVENT_REWRITE_DISCARD; + } - return ui::EVENT_REWRITE_DISCARD; + // Copy the event so we can issue a cancel for it later if this turns out to + // be a triple-tap. + stashed_events_.push_back(touch_event); + + return ui::EVENT_REWRITE_CONTINUE; } // Finger was released while we were waiting for one, count it as a tap. - if (event.type() == ui::ET_TOUCH_RELEASED && state == TripleTapState::TOUCH) { + if (touch_event.type() == ui::ET_TOUCH_RELEASED && + triple_tap_state_ == TripleTapState::TOUCH) { triple_tap_state_ = TripleTapState::INTERVAL_WAIT; triple_tap_timer_.Start(FROM_HERE, gesture_detector_config_.double_tap_timeout, this, &TripleTapDetector::OnTripleTapIntervalTimerFired); - stashed_events_.push_back(event); + tap_count_++; if (tap_count_ == 3) { - stashed_events_.clear(); TripleTapReset(); - delegate_->OnTripleTap(event.location()); - } - return ui::EVENT_REWRITE_DISCARD; - } + delegate_->OnTripleTap(touch_event.location()); - if (state != TripleTapState::NONE) { - stashed_events_.push_back(event); - return ui::EVENT_REWRITE_DISCARD; + // Start issuing cancel events for old presses. + DCHECK(!stashed_events_.empty()); + const auto& stashed_press = stashed_events_.front(); + std::unique_ptr<ui::TouchEvent> rewritten_touch_event = + std::make_unique<ui::TouchEvent>(ui::ET_TOUCH_CANCELLED, gfx::Point(), + touch_event.time_stamp(), + stashed_press.pointer_details()); + rewritten_touch_event->set_location_f(stashed_press.location_f()); + rewritten_touch_event->set_root_location_f( + stashed_press.root_location_f()); + rewritten_touch_event->set_flags(stashed_press.flags()); + *rewritten_event = std::move(rewritten_touch_event); + stashed_events_.pop_front(); + + if (!stashed_events_.empty()) + return ui::EVENT_REWRITE_DISPATCH_ANOTHER; + else + return ui::EVENT_REWRITE_REWRITTEN; + } else if (tap_count_ > 1) { + return ui::EVENT_REWRITE_DISCARD; + } } return ui::EVENT_REWRITE_CONTINUE; } +ui::EventRewriteStatus TripleTapDetector::NextDispatchEvent( + const ui::Event& last_event, + std::unique_ptr<ui::Event>* new_event) { + const auto& stashed_press = stashed_events_.front(); + std::unique_ptr<ui::TouchEvent> rewritten_touch_event = + std::make_unique<ui::TouchEvent>(ui::ET_TOUCH_CANCELLED, gfx::Point(), + last_event.time_stamp(), + stashed_press.pointer_details()); + rewritten_touch_event->set_location_f(stashed_press.location_f()); + rewritten_touch_event->set_root_location_f(stashed_press.root_location_f()); + rewritten_touch_event->set_flags(stashed_press.flags()); + *new_event = std::move(rewritten_touch_event); + stashed_events_.pop_front(); + + if (!stashed_events_.empty()) + return ui::EVENT_REWRITE_DISPATCH_ANOTHER; + else + return ui::EVENT_REWRITE_DISCARD; +} + void TripleTapDetector::OnTripleTapIntervalTimerFired() { TripleTapReset(); + stashed_events_.clear(); } void TripleTapDetector::OnLongPressIntervalTimerFired() { TripleTapReset(); + stashed_events_.clear(); } void TripleTapDetector::TripleTapReset() { triple_tap_state_ = TripleTapState::NONE; tap_count_ = 0; triple_tap_timer_.Stop(); - for (auto& event : stashed_events_) { - DispatchEvent(&event); - } - stashed_events_.clear(); -} - -void TripleTapDetector::DispatchEvent(ui::TouchEvent* event) { - // Turn off triple-tap before re-dispatching to avoid infinite recursion into - // this detector. - base::AutoReset<bool> toggle_enable(&enabled_, false); - DCHECK(!root_window_->GetHost() - ->dispatcher() - ->OnEventFromSource(event) - .dispatcher_destroyed); } } // namespace chromecast
diff --git a/chromecast/graphics/gestures/triple_tap_detector.h b/chromecast/graphics/gestures/triple_tap_detector.h index 6248373..97fb5706 100644 --- a/chromecast/graphics/gestures/triple_tap_detector.h +++ b/chromecast/graphics/gestures/triple_tap_detector.h
@@ -5,6 +5,8 @@ #ifndef CHROMECAST_GRAPHICS_GESTURES_TRIPLE_TAP_DETECTOR_H_ #define CHROMECAST_GRAPHICS_GESTURES_TRIPLE_TAP_DETECTOR_H_ +#include <deque> + #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/timer/timer.h" @@ -60,10 +62,6 @@ private: friend class TripleTapDetectorTest; - void DispatchEvent(ui::TouchEvent* event); - ui::EventRewriteStatus HandleTripleTapState(const ui::TouchEvent& event, - TripleTapState state); - // Expiration event for maximum time between taps in a triple tap. void OnTripleTapIntervalTimerFired(); // Expiration event for a finger that is pressed too long during a triple tap. @@ -84,7 +82,7 @@ int tap_count_; gfx::Point last_tap_location_; base::OneShotTimer triple_tap_timer_; - std::vector<ui::TouchEvent> stashed_events_; + std::deque<ui::TouchEvent> stashed_events_; DISALLOW_COPY_AND_ASSIGN(TripleTapDetector); };
diff --git a/chromecast/media/cma/backend/fuchsia/mixer_output_stream_fuchsia.cc b/chromecast/media/cma/backend/fuchsia/mixer_output_stream_fuchsia.cc index 880d41a7..8c527cbb 100644 --- a/chromecast/media/cma/backend/fuchsia/mixer_output_stream_fuchsia.cc +++ b/chromecast/media/cma/backend/fuchsia/mixer_output_stream_fuchsia.cc
@@ -49,7 +49,7 @@ fuchsia::media::AudioPtr audio_server = base::fuchsia::ComponentContext::GetDefault() ->ConnectToService<fuchsia::media::Audio>(); - audio_server->CreateRendererV2(audio_renderer_.NewRequest()); + audio_server->CreateAudioRenderer2(audio_renderer_.NewRequest()); audio_renderer_.set_error_handler( fit::bind_member(this, &MixerOutputStreamFuchsia::OnRendererError));
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM index 4e62ccee..74f8379 100644 --- a/chromeos/CHROMEOS_LKGM +++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@ -10933.0.0 \ No newline at end of file +10960.0.0 \ No newline at end of file
diff --git a/chromeos/login/login_state.cc b/chromeos/login/login_state.cc index f0825a4..b77ca90 100644 --- a/chromeos/login/login_state.cc +++ b/chromeos/login/login_state.cc
@@ -98,6 +98,11 @@ } bool LoginState::IsPublicSessionUser() const { + return logged_in_user_type_ == LOGGED_IN_USER_PUBLIC_ACCOUNT || + logged_in_user_type_ == LOGGED_IN_USER_PUBLIC_ACCOUNT_MANAGED; +} + +bool LoginState::ArePublicSessionRestrictionsEnabled() const { return logged_in_user_type_ == LOGGED_IN_USER_PUBLIC_ACCOUNT; } @@ -108,7 +113,7 @@ bool LoginState::UserHasNetworkProfile() const { if (!IsUserLoggedIn()) return false; - return logged_in_user_type_ != LOGGED_IN_USER_PUBLIC_ACCOUNT; + return !IsPublicSessionUser(); } bool LoginState::IsUserAuthenticated() const {
diff --git a/chromeos/login/login_state.h b/chromeos/login/login_state.h index 18e00f4..24009428 100644 --- a/chromeos/login/login_state.h +++ b/chromeos/login/login_state.h
@@ -26,6 +26,7 @@ LOGGED_IN_USER_OWNER, // The owner of the device is logged in LOGGED_IN_USER_GUEST, // A guest is logged in (i.e. incognito) LOGGED_IN_USER_PUBLIC_ACCOUNT, // A user is logged in to a public session. + LOGGED_IN_USER_PUBLIC_ACCOUNT_MANAGED, // Public session v2. LOGGED_IN_USER_SUPERVISED, // A supervised user is logged in LOGGED_IN_USER_KIOSK_APP, // Is in kiosk app mode LOGGED_IN_USER_ARC_KIOSK_APP // Is in ARC kiosk mode @@ -78,6 +79,9 @@ // Returns true if logged in to a public session. bool IsPublicSessionUser() const; + // Returns true if restrictions should be enabled for public session. + bool ArePublicSessionRestrictionsEnabled() const; + // Returns true if logged in as a kiosk app. bool IsKioskApp() const;
diff --git a/chromeos/login/scoped_test_public_session_login_state.cc b/chromeos/login/scoped_test_public_session_login_state.cc index 2e8be46..4a15fe97 100644 --- a/chromeos/login/scoped_test_public_session_login_state.cc +++ b/chromeos/login/scoped_test_public_session_login_state.cc
@@ -4,8 +4,6 @@ #include "chromeos/login/scoped_test_public_session_login_state.h" -#include "chromeos/login/login_state.h" - namespace chromeos { namespace { @@ -14,7 +12,11 @@ } // namespace -ScopedTestPublicSessionLoginState::ScopedTestPublicSessionLoginState() { +ScopedTestPublicSessionLoginState::ScopedTestPublicSessionLoginState( + LoginState::LoggedInUserType user_type) { + // Sanity check - allow only public session state. + CHECK(user_type == LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT || + user_type == LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT_MANAGED); // Allow only one instance of this class. CHECK(!g_instance_exists); g_instance_exists = true; @@ -24,9 +26,7 @@ LoginState::Initialize(); needs_shutdown_ = true; } - LoginState::Get()->SetLoggedInState( - LoginState::LOGGED_IN_ACTIVE, - LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT); + LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE, user_type); } ScopedTestPublicSessionLoginState::~ScopedTestPublicSessionLoginState() {
diff --git a/chromeos/login/scoped_test_public_session_login_state.h b/chromeos/login/scoped_test_public_session_login_state.h index d055f67..a9eafda 100644 --- a/chromeos/login/scoped_test_public_session_login_state.h +++ b/chromeos/login/scoped_test_public_session_login_state.h
@@ -6,6 +6,7 @@ #define CHROMEOS_LOGIN_SCOPED_TEST_PUBLIC_SESSION_LOGIN_STATE_H_ #include "base/macros.h" +#include "chromeos/login/login_state.h" namespace chromeos { @@ -14,7 +15,9 @@ // (so it nicely cleans up after going out of scope). class ScopedTestPublicSessionLoginState { public: - ScopedTestPublicSessionLoginState(); + ScopedTestPublicSessionLoginState( + LoginState::LoggedInUserType user_type = + LoginState::LOGGED_IN_USER_PUBLIC_ACCOUNT); ~ScopedTestPublicSessionLoginState(); private:
diff --git a/chromeos/network/managed_network_configuration_handler.h b/chromeos/network/managed_network_configuration_handler.h index 1b7d5a1..d1a1956 100644 --- a/chromeos/network/managed_network_configuration_handler.h +++ b/chromeos/network/managed_network_configuration_handler.h
@@ -20,6 +20,7 @@ namespace base { class DictionaryValue; class ListValue; +class Value; } namespace chromeos { @@ -90,6 +91,12 @@ const base::Closure& callback, const network_handler::ErrorCallback& error_callback) = 0; + virtual void SetManagerProperty( + const std::string& property_name, + const base::Value& value, + const base::Closure& callback, + const network_handler::ErrorCallback& error_callback) = 0; + // Initially configures an unconfigured network with the given user settings // and returns the new identifier to |callback| if successful. Fails if the // network was already configured by a call to this function or because of a
diff --git a/chromeos/network/managed_network_configuration_handler_impl.cc b/chromeos/network/managed_network_configuration_handler_impl.cc index 85217d9..77bc28f0 100644 --- a/chromeos/network/managed_network_configuration_handler_impl.cc +++ b/chromeos/network/managed_network_configuration_handler_impl.cc
@@ -383,6 +383,15 @@ error_callback); } +void ManagedNetworkConfigurationHandlerImpl::SetManagerProperty( + const std::string& property_name, + const base::Value& value, + const base::Closure& callback, + const network_handler::ErrorCallback& error_callback) { + network_configuration_handler_->SetManagerProperty(property_name, value, + callback, error_callback); +} + void ManagedNetworkConfigurationHandlerImpl::SetShillProperties( const std::string& service_path, std::unique_ptr<base::DictionaryValue> shill_dictionary,
diff --git a/chromeos/network/managed_network_configuration_handler_impl.h b/chromeos/network/managed_network_configuration_handler_impl.h index fb2327aa..144d65d 100644 --- a/chromeos/network/managed_network_configuration_handler_impl.h +++ b/chromeos/network/managed_network_configuration_handler_impl.h
@@ -21,6 +21,7 @@ namespace base { class DictionaryValue; +class Value; } namespace chromeos { @@ -59,6 +60,12 @@ const base::Closure& callback, const network_handler::ErrorCallback& error_callback) override; + void SetManagerProperty( + const std::string& property_name, + const base::Value& value, + const base::Closure& callback, + const network_handler::ErrorCallback& error_callback) override; + void CreateConfiguration( const std::string& userhash, const base::DictionaryValue& properties,
diff --git a/chromeos/network/mock_managed_network_configuration_handler.h b/chromeos/network/mock_managed_network_configuration_handler.h index 5533e0b..11fb6cc 100644 --- a/chromeos/network/mock_managed_network_configuration_handler.h +++ b/chromeos/network/mock_managed_network_configuration_handler.h
@@ -39,6 +39,11 @@ const base::DictionaryValue& user_settings, const base::Closure& callback, const network_handler::ErrorCallback& error_callback)); + MOCK_METHOD4(SetManagerProperty, + void(const std::string& property_name, + const base::Value& value, + const base::Closure& callback, + const network_handler::ErrorCallback& error_callback)); MOCK_CONST_METHOD4( CreateConfiguration, void(const std::string& userhash,
diff --git a/chromeos/network/network_configuration_handler.cc b/chromeos/network/network_configuration_handler.cc index a33eeca..5bc70453 100644 --- a/chromeos/network/network_configuration_handler.cc +++ b/chromeos/network/network_configuration_handler.cc
@@ -62,6 +62,15 @@ error_callback, dbus_error_name, dbus_error_message); } +void ManagerSetPropertiesErrorCallback( + const network_handler::ErrorCallback& error_callback, + const std::string& dbus_error_name, + const std::string& dbus_error_message) { + network_handler::ShillErrorCallbackFunction( + "ShillManagerClient.SetProperties Failed", std::string(), error_callback, + dbus_error_name, dbus_error_message); +} + void LogConfigProperties(const std::string& desc, const std::string& path, const base::DictionaryValue& properties) { @@ -444,6 +453,17 @@ error_callback)); } +void NetworkConfigurationHandler::SetManagerProperty( + const std::string& property_name, + const base::Value& value, + const base::Closure& callback, + const network_handler::ErrorCallback& error_callback) { + NET_LOG(USER) << "SetManagerProperty: " << property_name << ": " << value; + DBusThreadManager::Get()->GetShillManagerClient()->SetProperty( + property_name, value, callback, + base::Bind(&ManagerSetPropertiesErrorCallback, error_callback)); +} + // NetworkStateHandlerObserver methods void NetworkConfigurationHandler::NetworkListChanged() { for (auto iter = configure_callbacks_.begin();
diff --git a/chromeos/network/network_configuration_handler.h b/chromeos/network/network_configuration_handler.h index b75f2a9..0534102 100644 --- a/chromeos/network/network_configuration_handler.h +++ b/chromeos/network/network_configuration_handler.h
@@ -25,6 +25,7 @@ namespace base { class DictionaryValue; class ListValue; +class Value; } namespace dbus { @@ -119,6 +120,12 @@ const base::Closure& callback, const network_handler::ErrorCallback& error_callback); + // Changes the value of a shill manager property. + void SetManagerProperty(const std::string& property_name, + const base::Value& value, + const base::Closure& callback, + const network_handler::ErrorCallback& error_callback); + // NetworkStateHandlerObserver void NetworkListChanged() override; void OnShuttingDown() override;
diff --git a/chromeos/network/network_configuration_handler_unittest.cc b/chromeos/network/network_configuration_handler_unittest.cc index ee681c4..6578d9a 100644 --- a/chromeos/network/network_configuration_handler_unittest.cc +++ b/chromeos/network/network_configuration_handler_unittest.cc
@@ -182,6 +182,14 @@ get_properties_ = dictionary.CreateDeepCopy(); } + void ManagerGetPropertiesCallback(const std::string& success_callback_name, + DBusMethodCallStatus call_status, + const base::DictionaryValue& result) { + if (call_status == chromeos::DBUS_METHOD_CALL_SUCCESS) + success_callback_name_ = success_callback_name; + manager_get_properties_ = result.CreateDeepCopy(); + } + void CreateConfigurationCallback(const std::string& service_path, const std::string& guid) { create_service_path_ = service_path; @@ -276,6 +284,18 @@ return true; } + bool GetReceivedStringManagerProperty(const std::string& key, + std::string* result) { + if (!manager_get_properties_) + return false; + const base::Value* value = + manager_get_properties_->FindKeyOfType(key, base::Value::Type::STRING); + if (!value) + return false; + *result = value->GetString(); + return true; + } + FakeShillServiceClient* GetShillServiceClient() { return static_cast<FakeShillServiceClient*>( DBusThreadManager::Get()->GetShillServiceClient()); @@ -294,6 +314,7 @@ std::string success_callback_name_; std::string get_properties_path_; std::unique_ptr<base::DictionaryValue> get_properties_; + std::unique_ptr<base::DictionaryValue> manager_get_properties_; std::string create_service_path_; }; @@ -648,4 +669,22 @@ network_configuration_observer.get()); } +TEST_F(NetworkConfigurationHandlerTest, AlwaysOnVpn) { + const std::string vpn_package = "com.android.vpn"; + + network_configuration_handler_->SetManagerProperty( + shill::kAlwaysOnVpnPackageProperty, base::Value(vpn_package), + base::DoNothing(), base::Bind(&ErrorCallback)); + + DBusThreadManager::Get()->GetShillManagerClient()->GetProperties( + Bind(&NetworkConfigurationHandlerTest::ManagerGetPropertiesCallback, + base::Unretained(this), "ManagerGetProperties")); + base::RunLoop().RunUntilIdle(); + std::string package_result; + EXPECT_EQ("ManagerGetProperties", success_callback_name_); + EXPECT_TRUE(GetReceivedStringManagerProperty( + shill::kAlwaysOnVpnPackageProperty, &package_result)); + EXPECT_EQ(vpn_package, package_result); +} + } // namespace chromeos
diff --git a/chromeos/services/assistant/assistant_manager_service_impl.cc b/chromeos/services/assistant/assistant_manager_service_impl.cc index af25db38..82b48e4 100644 --- a/chromeos/services/assistant/assistant_manager_service_impl.cc +++ b/chromeos/services/assistant/assistant_manager_service_impl.cc
@@ -195,6 +195,7 @@ void AssistantManagerServiceImpl::RequestScreenContext( const gfx::Rect& region, + bool from_user, RequestScreenContextCallback callback) { if (!assistant_enabled_ || !context_enabled_) { // If context is not enabled, we notify assistant immediately to activate @@ -204,10 +205,15 @@ } // We wait for the closure to execute twice: once for the screenshot and once - // for the view hierarchy. + // for the view hierarchy. If the screen context request was user initiated, + // we then proceed to send a screen context query to the server. Otherwise, + // we cache our screen context to send alongside subsequent voice/text + // queries. In all cases, |callback| will be run to inform our caller that + // context grabbing has been completed. auto on_done = base::BarrierClosure( 2, base::BindOnce( - &AssistantManagerServiceImpl::SendContextQueryAndRunCallback, + from_user ? &AssistantManagerServiceImpl::SendScreenContextQuery + : &AssistantManagerServiceImpl::CacheScreenContext, weak_factory_.GetWeakPtr(), std::move(callback))); service_->client()->RequestAssistantStructure( @@ -251,11 +257,6 @@ notification_subscribers_.AddPtr(std::move(subscriber)); } -void AssistantManagerServiceImpl::AddAssistantScreenContextSubscriber( - mojom::AssistantScreenContextSubscriberPtr subscriber) { - screen_context_subscribers_.AddPtr(std::move(subscriber)); -} - void AssistantManagerServiceImpl::RetrieveNotification( mojom::AssistantNotificationPtr notification, int action_index) { @@ -315,15 +316,6 @@ weak_factory_.GetWeakPtr(), resolution)); } -void AssistantManagerServiceImpl::OnShowContextualHtml( - const std::string& html) { - main_thread_task_runner_->PostTask( - FROM_HERE, - base::BindOnce( - &AssistantManagerServiceImpl::OnShowContextualHtmlOnMainThread, - weak_factory_.GetWeakPtr(), html)); -} - void AssistantManagerServiceImpl::OnShowHtml(const std::string& html) { main_thread_task_runner_->PostTask( FROM_HERE, @@ -743,12 +735,6 @@ } } -void AssistantManagerServiceImpl::OnShowContextualHtmlOnMainThread( - const std::string& html) { - screen_context_subscribers_.ForAllPtrs( - [&html](auto* ptr) { ptr->OnContextualHtmlResponse(html); }); -} - void AssistantManagerServiceImpl::OnShowHtmlOnMainThread( const std::string& html) { interaction_subscribers_.ForAllPtrs( @@ -845,15 +831,33 @@ std::move(on_done).Run(); } -void AssistantManagerServiceImpl::SendContextQueryAndRunCallback( +void AssistantManagerServiceImpl::CacheScreenContext( RequestScreenContextCallback callback) { - assistant_manager_internal_->SendScreenContextRequest( - std::vector<std::string>{ - CreateContextProto(AssistantBundle{ - std::move(assistant_extra_), std::move(assistant_tree_), - }), - CreateContextProto(assistant_screenshot_)}); + // TODO(dmblack): Cache view hierarchy and screenshot data so that we can + // send it alongside subsequent voice/text queries for additional context. + assistant_extra_.reset(); + assistant_tree_.reset(); assistant_screenshot_.clear(); + + // Run callback now that screen context has been successfully grabbed. + std::move(callback).Run(); +} + +void AssistantManagerServiceImpl::SendScreenContextQuery( + RequestScreenContextCallback callback) { + // Note: This call initiates a user facing interaction which will interrupt + // any other user interaction in progress. As such, it should only be called + // as a direct result of a query for screen related content initiated by the + // user, e.g. via suggestion chip press or Assistant stylus tool selection. + assistant_manager_internal_->SendScreenContextRequest( + {CreateContextProto(AssistantBundle{ + std::move(assistant_extra_), std::move(assistant_tree_), + }), + CreateContextProto(assistant_screenshot_)}); + + assistant_screenshot_.clear(); + + // Run callback now that screen context has been successfully grabbed. std::move(callback).Run(); }
diff --git a/chromeos/services/assistant/assistant_manager_service_impl.h b/chromeos/services/assistant/assistant_manager_service_impl.h index 5a2ebfb..706a5fe 100644 --- a/chromeos/services/assistant/assistant_manager_service_impl.h +++ b/chromeos/services/assistant/assistant_manager_service_impl.h
@@ -87,17 +87,15 @@ mojom::AssistantInteractionSubscriberPtr subscriber) override; void AddAssistantNotificationSubscriber( mojom::AssistantNotificationSubscriberPtr subscriber) override; - void AddAssistantScreenContextSubscriber( - mojom::AssistantScreenContextSubscriberPtr subscriber) override; void RetrieveNotification(mojom::AssistantNotificationPtr notification, int action_index) override; void DismissNotification( mojom::AssistantNotificationPtr notification) override; void RequestScreenContext(const gfx::Rect& region, + bool from_user, RequestScreenContextCallback callback) override; // AssistantActionObserver overrides: - void OnShowContextualHtml(const std::string& html) override; void OnShowHtml(const std::string& html) override; void OnShowSuggestions( const std::vector<action::Suggestion>& suggestions) override; @@ -159,7 +157,6 @@ void OnConversationTurnStartedOnMainThread(bool is_mic_open); void OnConversationTurnFinishedOnMainThread( assistant_client::ConversationStateListener::Resolution resolution); - void OnShowContextualHtmlOnMainThread(const std::string& html); void OnShowHtmlOnMainThread(const std::string& html); void OnShowSuggestionsOnMainThread( const std::vector<mojom::AssistantSuggestionPtr>& suggestions); @@ -178,7 +175,8 @@ void RegisterFallbackMediaHandler(); - void SendContextQueryAndRunCallback(RequestScreenContextCallback callback); + void CacheScreenContext(RequestScreenContextCallback callback); + void SendScreenContextQuery(RequestScreenContextCallback callback); void OnAssistantStructureReceived( base::OnceClosure on_done, @@ -201,8 +199,6 @@ interaction_subscribers_; mojo::InterfacePtrSet<mojom::AssistantNotificationSubscriber> notification_subscribers_; - mojo::InterfacePtrSet<mojom::AssistantScreenContextSubscriber> - screen_context_subscribers_; ash::mojom::VoiceInteractionControllerPtr voice_interaction_controller_; mojo::Binding<ash::mojom::VoiceInteractionObserver> voice_interaction_observer_binding_;
diff --git a/chromeos/services/assistant/fake_assistant_manager_service_impl.cc b/chromeos/services/assistant/fake_assistant_manager_service_impl.cc index c3a8322..51e2b0f 100644 --- a/chromeos/services/assistant/fake_assistant_manager_service_impl.cc +++ b/chromeos/services/assistant/fake_assistant_manager_service_impl.cc
@@ -48,6 +48,7 @@ void FakeAssistantManagerServiceImpl::RequestScreenContext( const gfx::Rect& region, + bool from_user, RequestScreenContextCallback callback) {} void FakeAssistantManagerServiceImpl::StartVoiceInteraction() {} @@ -62,9 +63,6 @@ void FakeAssistantManagerServiceImpl::AddAssistantNotificationSubscriber( mojom::AssistantNotificationSubscriberPtr subscriber) {} -void FakeAssistantManagerServiceImpl::AddAssistantScreenContextSubscriber( - mojom::AssistantScreenContextSubscriberPtr subscriber) {} - void FakeAssistantManagerServiceImpl::RetrieveNotification( mojom::AssistantNotificationPtr notification, int action_index) {}
diff --git a/chromeos/services/assistant/fake_assistant_manager_service_impl.h b/chromeos/services/assistant/fake_assistant_manager_service_impl.h index 9b55974..6ddab99e 100644 --- a/chromeos/services/assistant/fake_assistant_manager_service_impl.h +++ b/chromeos/services/assistant/fake_assistant_manager_service_impl.h
@@ -46,13 +46,12 @@ mojom::AssistantInteractionSubscriberPtr subscriber) override; void AddAssistantNotificationSubscriber( mojom::AssistantNotificationSubscriberPtr subscriber) override; - void AddAssistantScreenContextSubscriber( - mojom::AssistantScreenContextSubscriberPtr subscriber) override; void RetrieveNotification(mojom::AssistantNotificationPtr notification, int action_index) override; void DismissNotification( mojom::AssistantNotificationPtr notification) override; void RequestScreenContext(const gfx::Rect& region, + bool from_user, RequestScreenContextCallback callback) override; private:
diff --git a/chromeos/services/assistant/public/mojom/assistant.mojom b/chromeos/services/assistant/public/mojom/assistant.mojom index 9738affa..3e1c32f 100644 --- a/chromeos/services/assistant/public/mojom/assistant.mojom +++ b/chromeos/services/assistant/public/mojom/assistant.mojom
@@ -32,10 +32,6 @@ AddAssistantNotificationSubscriber( AssistantNotificationSubscriber subscriber); - // Registers assistant screen context event subscriber. - AddAssistantScreenContextSubscriber( - AssistantScreenContextSubscriber subscriber); - // Retrieves a notification. A voiceless interaction will be sent to server to // retrieve the notification payload, which can trigger other assistant's // events such as OnTextResponse to show the result in the UI. The reteived @@ -47,8 +43,13 @@ // Asks assistant to grab screen context. |region| controls the part of the // screen to snapshot. If |region| is empty, it takes fullscreen screenshot. - // After grabbing completion, the callback will be invoked. - RequestScreenContext(gfx.mojom.Rect region) => (); + // The |from_user| parameter is true if the request originated from the user, + // false otherwise. A user request for screen context may come as a result of + // a suggestion chip press or Assistant stylus selection. A request that did + // not originate from the user occurs on launch of Assistant to provide + // additional context for subsequent voice/text queries. After grab + // completion, the callback will be invoked. + RequestScreenContext(gfx.mojom.Rect region, bool from_user) => (); }; // Subscribes to assistant's interaction event. These events are server driven @@ -106,14 +107,6 @@ OnRemoveNotification(string grouping_key); }; -// Subscribes to assistant's screen context events. These events are server -// driven and pertain to the user's screen context. Screen context includes -// both screenshot and view hierarchy data. -interface AssistantScreenContextSubscriber { - // Assistant got contextual Html response from server. - OnContextualHtmlResponse(string response); -}; - // Interface for browser to bind and start assistant. interface AssistantPlatform { // Initiates assistant and provides interfaces for assistant to call into the
diff --git a/chromeos/services/assistant/service.cc b/chromeos/services/assistant/service.cc index 4675431..3f98374 100644 --- a/chromeos/services/assistant/service.cc +++ b/chromeos/services/assistant/service.cc
@@ -98,11 +98,7 @@ } void Service::BindAssistantConnection(mojom::AssistantRequest request) { - // Assistant interface is supposed to be used when UI is actually in - // use, which should be way later than assistant is created. DCHECK(assistant_manager_service_); - DCHECK(assistant_manager_service_->GetState() == - AssistantManagerService::State::RUNNING); bindings_.AddBinding(assistant_manager_service_.get(), std::move(request)); }
diff --git a/chromeos/services/assistant/test_support/mock_assistant.h b/chromeos/services/assistant/test_support/mock_assistant.h index 4535b28..9b49abe 100644 --- a/chromeos/services/assistant/test_support/mock_assistant.h +++ b/chromeos/services/assistant/test_support/mock_assistant.h
@@ -35,17 +35,24 @@ AddAssistantNotificationSubscriber, void(chromeos::assistant::mojom::AssistantNotificationSubscriberPtr)); - MOCK_METHOD1( - AddAssistantScreenContextSubscriber, - void(chromeos::assistant::mojom::AssistantScreenContextSubscriberPtr)); - MOCK_METHOD2(RetrieveNotification, void(chromeos::assistant::mojom::AssistantNotificationPtr, int)); MOCK_METHOD1(DismissNotification, void(chromeos::assistant::mojom::AssistantNotificationPtr)); - MOCK_METHOD2(RequestScreenContext, void(const gfx::Rect&, base::OnceClosure)); + // Mock DoRequestScreenContext in lieu of RequestScreenContext. + MOCK_METHOD3(DoRequestScreenContext, + void(const gfx::Rect&, bool from_user, base::OnceClosure*)); + + // Note: We can't mock RequestScreenContext directly because of the move + // semantics required around base::OnceClosure. Instead, we route calls to a + // mockable delegate method, DoRequestScreenContext. + void RequestScreenContext(const gfx::Rect& region, + bool from_user, + base::OnceClosure callback) override { + DoRequestScreenContext(region, from_user, &callback); + } private: DISALLOW_COPY_AND_ASSIGN(MockAssistant);
diff --git a/chromeos/services/multidevice_setup/host_status_provider.cc b/chromeos/services/multidevice_setup/host_status_provider.cc index c42d1f97..4779d1af 100644 --- a/chromeos/services/multidevice_setup/host_status_provider.cc +++ b/chromeos/services/multidevice_setup/host_status_provider.cc
@@ -20,7 +20,7 @@ if (host_device_) { PA_LOG(ERROR) << "HostStatusWithDevice::HostStatusWithDevice(): Tried to " << "construct a HostStatusWithDevice with a status " - << "indicatating no device, but a device was provided. " + << "indicating no device, but a device was provided. " << "Status: " << host_status_ << ", Device ID: " << host_device_->GetTruncatedDeviceIdForLogs(); NOTREACHED(); @@ -28,7 +28,7 @@ } else if (!host_device_) { PA_LOG(ERROR) << "HostStatusWithDevice::HostStatusWithDevice(): Tried to " << "construct a HostStatusWithDevice with a status " - << "indicatating a device, but no device was provided." + << "indicating a device, but no device was provided. " << "Status: " << host_status_; NOTREACHED(); }
diff --git a/chromeos/services/multidevice_setup/public/cpp/prefs.cc b/chromeos/services/multidevice_setup/public/cpp/prefs.cc index 3bba382..ab452bf4 100644 --- a/chromeos/services/multidevice_setup/public/cpp/prefs.cc +++ b/chromeos/services/multidevice_setup/public/cpp/prefs.cc
@@ -36,8 +36,8 @@ const char kInstantTetheringFeatureEnabledPrefName[] = "tether.enabled"; void RegisterFeaturePrefs(PrefRegistrySimple* registry) { - registry->RegisterBooleanPref(kSuiteEnabledPrefName, false); - registry->RegisterBooleanPref(kAndroidMessagesFeatureEnabledPrefName, false); + registry->RegisterBooleanPref(kSuiteEnabledPrefName, true); + registry->RegisterBooleanPref(kAndroidMessagesFeatureEnabledPrefName, true); registry->RegisterBooleanPref(kInstantTetheringFeatureAllowedPrefName, true); registry->RegisterBooleanPref(kInstantTetheringFeatureEnabledPrefName, true); }
diff --git a/components/arc/BUILD.gn b/components/arc/BUILD.gn index 617e78d..58846b3 100644 --- a/components/arc/BUILD.gn +++ b/components/arc/BUILD.gn
@@ -44,6 +44,8 @@ "metrics/arc_metrics_service.h", "midis/arc_midis_bridge.cc", "midis/arc_midis_bridge.h", + "net/always_on_vpn_manager.cc", + "net/always_on_vpn_manager.h", "net/arc_net_host_impl.cc", "net/arc_net_host_impl.h", "obb_mounter/arc_obb_mounter_bridge.cc", @@ -284,6 +286,7 @@ "intent_helper/intent_filter_unittest.cc", "intent_helper/link_handler_model_unittest.cc", "metrics/arc_metrics_service_unittest.cc", + "net/always_on_vpn_manager_unittest.cc", "net/arc_net_host_impl_unittest.cc", "power/arc_power_bridge_unittest.cc", "timer/arc_timer_bridge_unittest.cc",
diff --git a/components/arc/ime/arc_ime_service_unittest.cc b/components/arc/ime/arc_ime_service_unittest.cc index cc8aa56c..4c2f90fa 100644 --- a/components/arc/ime/arc_ime_service_unittest.cc +++ b/components/arc/ime/arc_ime_service_unittest.cc
@@ -18,6 +18,7 @@ #include "ui/base/ime/composition_text.h" #include "ui/base/ime/dummy_input_method.h" #include "ui/events/event.h" +#include "ui/events/keycodes/dom/dom_code.h" #include "ui/events/keycodes/keyboard_codes.h" #include "ui/keyboard/keyboard_controller.h" @@ -258,12 +259,12 @@ // When text input type is NONE, the event is not forwarded. instance_->OnTextInputTypeChanged(ui::TEXT_INPUT_TYPE_NONE, false); - instance_->InsertChar(ui::KeyEvent('a', ui::VKEY_A, 0)); + instance_->InsertChar(ui::KeyEvent('a', ui::VKEY_A, ui::DomCode::NONE, 0)); EXPECT_EQ(0, fake_arc_ime_bridge_->count_send_insert_text()); // When the bridge is accepting text inputs, forward the event. instance_->OnTextInputTypeChanged(ui::TEXT_INPUT_TYPE_TEXT, true); - instance_->InsertChar(ui::KeyEvent('a', ui::VKEY_A, 0)); + instance_->InsertChar(ui::KeyEvent('a', ui::VKEY_A, ui::DomCode::NONE, 0)); EXPECT_EQ(1, fake_arc_ime_bridge_->count_send_insert_text()); }
diff --git a/components/arc/net/DEPS b/components/arc/net/DEPS index 2511a96..04c0d47 100644 --- a/components/arc/net/DEPS +++ b/components/arc/net/DEPS
@@ -3,5 +3,6 @@ "+chromeos/network", "+components/onc", "+components/user_manager", + "+third_party/cros_system_api/dbus/service_constants.h", "+third_party/cros_system_api/dbus/shill", ]
diff --git a/components/arc/net/always_on_vpn_manager.cc b/components/arc/net/always_on_vpn_manager.cc new file mode 100644 index 0000000..cc58fa7 --- /dev/null +++ b/components/arc/net/always_on_vpn_manager.cc
@@ -0,0 +1,73 @@ +// Copyright (c) 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/arc/net/always_on_vpn_manager.h" + +#include <string> + +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/logging.h" +#include "base/values.h" +#include "chromeos/network/managed_network_configuration_handler.h" +#include "chromeos/network/network_handler.h" +#include "components/arc/arc_prefs.h" +#include "third_party/cros_system_api/dbus/service_constants.h" + +namespace { + +void SetPackageErrorCallback( + const std::string& error_name, + std::unique_ptr<base::DictionaryValue> error_data) { + DVLOG(1) << "Error while setting Always-On VPN package in shill: " + << error_name << ", " << *error_data; +} + +} // namespace + +namespace arc { + +AlwaysOnVpnManager::AlwaysOnVpnManager(PrefService* pref_service) { + registrar_.Init(pref_service); + registrar_.Add( + prefs::kAlwaysOnVpnPackage, + base::Bind(&AlwaysOnVpnManager::OnPrefChanged, base::Unretained(this))); + registrar_.Add( + prefs::kAlwaysOnVpnLockdown, + base::Bind(&AlwaysOnVpnManager::OnPrefChanged, base::Unretained(this))); + // update once with values before we started listening + OnPrefChanged(); +} + +AlwaysOnVpnManager::~AlwaysOnVpnManager() { + std::string package = + registrar_.prefs()->GetString(prefs::kAlwaysOnVpnPackage); + bool lockdown = registrar_.prefs()->GetBoolean(prefs::kAlwaysOnVpnLockdown); + if (lockdown && !package.empty()) { + chromeos::NetworkHandler::Get() + ->managed_network_configuration_handler() + ->SetManagerProperty(shill::kAlwaysOnVpnPackageProperty, + base::Value(std::string()), base::DoNothing(), + base::Bind(&SetPackageErrorCallback)); + } + registrar_.RemoveAll(); +} + +void AlwaysOnVpnManager::OnPrefChanged() { + std::string always_on_vpn_package; + bool lockdown = registrar_.prefs()->GetBoolean(prefs::kAlwaysOnVpnLockdown); + // Only enforce blackholing if lockdown mode is enabled + if (lockdown) { + always_on_vpn_package = + registrar_.prefs()->GetString(prefs::kAlwaysOnVpnPackage); + } + chromeos::NetworkHandler::Get() + ->managed_network_configuration_handler() + ->SetManagerProperty(shill::kAlwaysOnVpnPackageProperty, + base::Value(always_on_vpn_package), + base::DoNothing(), + base::Bind(&SetPackageErrorCallback)); +} + +} // namespace arc
diff --git a/components/arc/net/always_on_vpn_manager.h b/components/arc/net/always_on_vpn_manager.h new file mode 100644 index 0000000..528a93c --- /dev/null +++ b/components/arc/net/always_on_vpn_manager.h
@@ -0,0 +1,32 @@ +// Copyright (c) 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_ARC_NET_ALWAYS_ON_VPN_MANAGER_H_ +#define COMPONENTS_ARC_NET_ALWAYS_ON_VPN_MANAGER_H_ + +#include <string> + +#include "base/macros.h" +#include "components/prefs/pref_change_registrar.h" +#include "components/prefs/pref_service.h" + +namespace arc { + +class AlwaysOnVpnManager { + public: + explicit AlwaysOnVpnManager(PrefService* pref_service); + ~AlwaysOnVpnManager(); + + private: + // Callback for the registrar + void OnPrefChanged(); + + PrefChangeRegistrar registrar_; + + DISALLOW_COPY_AND_ASSIGN(AlwaysOnVpnManager); +}; + +} // namespace arc + +#endif // COMPONENTS_ARC_NET_ALWAYS_ON_VPN_MANAGER_H_
diff --git a/components/arc/net/always_on_vpn_manager_unittest.cc b/components/arc/net/always_on_vpn_manager_unittest.cc new file mode 100644 index 0000000..3011903 --- /dev/null +++ b/components/arc/net/always_on_vpn_manager_unittest.cc
@@ -0,0 +1,140 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/arc/net/always_on_vpn_manager.h" + +#include "base/bind.h" +#include "base/logging.h" +#include "base/run_loop.h" +#include "base/values.h" +#include "chromeos/dbus/dbus_method_call_status.h" +#include "chromeos/dbus/dbus_thread_manager.h" +#include "chromeos/dbus/shill_manager_client.h" +#include "chromeos/network/network_handler.h" +#include "components/arc/arc_prefs.h" +#include "components/prefs/testing_pref_service.h" +#include "content/public/test/test_browser_thread_bundle.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/cros_system_api/dbus/service_constants.h" + +namespace { + +constexpr const char kVpnPackage[] = "com.android.vpn"; +const base::Value kVpnPackageValue(kVpnPackage); + +void OnGetProperties(chromeos::DBusMethodCallStatus* call_status_out, + std::string* package_name_out, + const base::Closure& callback, + chromeos::DBusMethodCallStatus call_status, + const base::DictionaryValue& result) { + *call_status_out = call_status; + const base::Value* value = result.FindKeyOfType( + shill::kAlwaysOnVpnPackageProperty, base::Value::Type::STRING); + if (value != nullptr) + *package_name_out = value->GetString(); + callback.Run(); +} + +void CheckStatus(chromeos::DBusMethodCallStatus call_status) { + ASSERT_EQ(chromeos::DBUS_METHOD_CALL_SUCCESS, call_status); +} + +std::string GetAlwaysOnPackageName() { + chromeos::DBusMethodCallStatus call_status = + chromeos::DBUS_METHOD_CALL_FAILURE; + std::string package_name; + chromeos::ShillManagerClient* shill_manager = + chromeos::DBusThreadManager::Get()->GetShillManagerClient(); + base::RunLoop run_loop; + shill_manager->GetProperties( + base::Bind(&OnGetProperties, base::Unretained(&call_status), + base::Unretained(&package_name), run_loop.QuitClosure())); + run_loop.Run(); + CheckStatus(call_status); + return package_name; +} + +} // namespace + +namespace arc { +namespace { + +class AlwaysOnVpnManagerTest : public testing::Test { + public: + AlwaysOnVpnManagerTest() = default; + + void SetUp() override { + chromeos::DBusThreadManager::Initialize(); + EXPECT_TRUE(chromeos::DBusThreadManager::Get()->IsUsingFakes()); + chromeos::NetworkHandler::Initialize(); + EXPECT_TRUE(chromeos::NetworkHandler::IsInitialized()); + arc::prefs::RegisterProfilePrefs(pref_service()->registry()); + } + + void TearDown() override { + chromeos::NetworkHandler::Shutdown(); + chromeos::DBusThreadManager::Shutdown(); + } + + TestingPrefServiceSimple* pref_service() { return &pref_service_; } + + private: + content::TestBrowserThreadBundle thread_bundle_; + TestingPrefServiceSimple pref_service_; + + DISALLOW_COPY_AND_ASSIGN(AlwaysOnVpnManagerTest); +}; + +TEST_F(AlwaysOnVpnManagerTest, SetPackageWhileLockdownUnset) { + auto always_on_manager = std::make_unique<AlwaysOnVpnManager>(pref_service()); + + EXPECT_EQ(std::string(), GetAlwaysOnPackageName()); + + pref_service()->Set(arc::prefs::kAlwaysOnVpnPackage, kVpnPackageValue); + + EXPECT_EQ(std::string(), GetAlwaysOnPackageName()); +} + +TEST_F(AlwaysOnVpnManagerTest, SetPackageWhileLockdownTrue) { + pref_service()->Set(arc::prefs::kAlwaysOnVpnLockdown, base::Value(true)); + + auto always_on_manager = std::make_unique<AlwaysOnVpnManager>(pref_service()); + + EXPECT_EQ(std::string(), GetAlwaysOnPackageName()); + + pref_service()->Set(arc::prefs::kAlwaysOnVpnPackage, kVpnPackageValue); + + EXPECT_EQ(kVpnPackage, GetAlwaysOnPackageName()); + + pref_service()->Set(arc::prefs::kAlwaysOnVpnPackage, + base::Value(base::StringPiece())); + + EXPECT_EQ(std::string(), GetAlwaysOnPackageName()); +} + +TEST_F(AlwaysOnVpnManagerTest, SetPackageThatsAlreadySetAtBoot) { + pref_service()->Set(arc::prefs::kAlwaysOnVpnLockdown, base::Value(true)); + pref_service()->Set(arc::prefs::kAlwaysOnVpnPackage, kVpnPackageValue); + + auto always_on_manager = std::make_unique<AlwaysOnVpnManager>(pref_service()); + + EXPECT_EQ(kVpnPackage, GetAlwaysOnPackageName()); +} + +TEST_F(AlwaysOnVpnManagerTest, SetLockdown) { + pref_service()->Set(arc::prefs::kAlwaysOnVpnPackage, kVpnPackageValue); + + auto always_on_manager = std::make_unique<AlwaysOnVpnManager>(pref_service()); + + pref_service()->Set(arc::prefs::kAlwaysOnVpnLockdown, base::Value(true)); + + EXPECT_EQ(kVpnPackage, GetAlwaysOnPackageName()); + + pref_service()->Set(arc::prefs::kAlwaysOnVpnLockdown, base::Value(false)); + + EXPECT_EQ(std::string(), GetAlwaysOnPackageName()); +} + +} // namespace +} // namespace arc
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc index fc06f6d..c1fcf2c 100644 --- a/components/autofill/content/renderer/password_autofill_agent.cc +++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -897,9 +897,9 @@ DCHECK(!input->IsNull()); input->SetAutofillValue(WebString::FromUTF16(credential)); input->SetAutofillState(WebAutofillState::kAutofilled); - UpdateFieldValueAndPropertiesMaskMap(*input, &credential, - FieldPropertiesFlags::AUTOFILLED, - &field_value_and_properties_map_); + UpdateFieldValueAndPropertiesMaskMap( + *input, &credential, FieldPropertiesFlags::AUTOFILLED_ON_USER_TRIGGER, + &field_value_and_properties_map_); } void PasswordAutofillAgent::FillPasswordFieldAndSave( @@ -1876,9 +1876,10 @@ } } - UpdateFieldValueAndPropertiesMaskMap(*username_element, &username, - FieldPropertiesFlags::AUTOFILLED, - field_value_and_properties_map); + UpdateFieldValueAndPropertiesMaskMap( + *username_element, &username, + FieldPropertiesFlags::AUTOFILLED_ON_PAGELOAD, + field_value_and_properties_map); username_element->SetAutofillState(WebAutofillState::kAutofilled); if (logger) logger->LogElementName(Logger::STRING_USERNAME_FILLED, *username_element); @@ -1889,9 +1890,10 @@ // user is intentionally interacting with the page. if (password_element->Value().Utf16() != password) password_element->SetSuggestedValue(WebString::FromUTF16(password)); - UpdateFieldValueAndPropertiesMaskMap(*password_element, &password, - FieldPropertiesFlags::AUTOFILLED, - field_value_and_properties_map); + UpdateFieldValueAndPropertiesMaskMap( + *password_element, &password, + FieldPropertiesFlags::AUTOFILLED_ON_PAGELOAD, + field_value_and_properties_map); ProvisionallySavePassword(password_element->Form(), *password_element, RESTRICTION_NONE); gatekeeper_.RegisterElement(password_element);
diff --git a/components/autofill/core/browser/BUILD.gn b/components/autofill/core/browser/BUILD.gn index a25bbb94..b780abb65 100644 --- a/components/autofill/core/browser/BUILD.gn +++ b/components/autofill/core/browser/BUILD.gn
@@ -225,6 +225,7 @@ if (!is_android) { sources += [ "ui/local_card_migration_bubble_controller.h", + "ui/local_card_migration_dialog_controller.h", "ui/save_card_bubble_controller.h", ] }
diff --git a/components/autofill/core/browser/autofill_download_manager.cc b/components/autofill/core/browser/autofill_download_manager.cc index 12ff190..1eaeaab6 100644 --- a/components/autofill/core/browser/autofill_download_manager.cc +++ b/components/autofill/core/browser/autofill_download_manager.cc
@@ -258,8 +258,11 @@ for (const auto& field : upload.field()) { out << "\n Field" - << "\n signature: " << field.signature() - << "\n autofill_type: " << field.autofill_type(); + << "\n signature: " << field.signature() << "\n autofill_type: [" + << field.autofill_type(0); + for (int i = 1; i < field.autofill_type_size(); ++i) + out << ", " << field.autofill_type(i); + out << "]"; if (!field.name().empty()) out << "\n name: " << field.name(); if (!field.autocomplete().empty())
diff --git a/components/autofill/core/browser/autofill_experiments.cc b/components/autofill/core/browser/autofill_experiments.cc index e5fa504..ac71d4e0 100644 --- a/components/autofill/core/browser/autofill_experiments.cc +++ b/components/autofill/core/browser/autofill_experiments.cc
@@ -6,6 +6,7 @@ #include "base/command_line.h" #include "base/feature_list.h" +#include "base/metrics/field_trial_params.h" #include "base/strings/string16.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" @@ -38,6 +39,9 @@ "AutofillCreditCardAblationExperiment", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kAutofillCreditCardLocalCardMigration{ "AutofillCreditCardLocalCardMigration", base::FEATURE_DISABLED_BY_DEFAULT}; +const char kAutofillCreditCardLocalCardMigrationParameterName[] = "variant"; +const char kAutofillCreditCardLocalCardMigrationParameterWithoutSettingsPage[] = + "without-settings-page"; const base::Feature kAutofillDeleteDisusedAddresses{ "AutofillDeleteDisusedAddresses", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kAutofillDeleteDisusedCreditCards{ @@ -100,8 +104,19 @@ #endif } -bool IsAutofillCreditCardLocalCardMigrationExperimentEnabled() { - return base::FeatureList::IsEnabled(kAutofillCreditCardLocalCardMigration); +LocalCardMigrationExperimentalFlag GetLocalCardMigrationExperimentalFlag() { + if (!base::FeatureList::IsEnabled(kAutofillCreditCardLocalCardMigration)) + return LocalCardMigrationExperimentalFlag::kMigrationDisabled; + + std::string param = base::GetFieldTrialParamValueByFeature( + kAutofillCreditCardLocalCardMigration, + kAutofillCreditCardLocalCardMigrationParameterName); + + if (param == + kAutofillCreditCardLocalCardMigrationParameterWithoutSettingsPage) { + return LocalCardMigrationExperimentalFlag::kMigrationWithoutSettingsPage; + } + return LocalCardMigrationExperimentalFlag::kMigrationIncludeSettingsPage; } bool OfferStoreUnmaskedCards() {
diff --git a/components/autofill/core/browser/autofill_experiments.h b/components/autofill/core/browser/autofill_experiments.h index 6480fca..02407ef 100644 --- a/components/autofill/core/browser/autofill_experiments.h +++ b/components/autofill/core/browser/autofill_experiments.h
@@ -48,6 +48,10 @@ extern const char kCreditCardSigninPromoImpressionLimitParamKey[]; extern const char kAutofillCreditCardLastUsedDateShowExpirationDateKey[]; extern const char kAutofillUpstreamMaxMinutesSinceAutofillProfileUseKey[]; +extern const base::Feature kAutofillCreditCardLocalCardMigration; +extern const char kAutofillCreditCardLocalCardMigrationParameterName[]; +extern const char + kAutofillCreditCardLocalCardMigrationParameterWithoutSettingsPage[]; #if defined(OS_MACOSX) extern const base::Feature kMacViewsAutofillPopup; @@ -74,9 +78,22 @@ const syncer::SyncService* sync_service, const std::string& user_email); -// Returns whether Autofill credit card local card migration experiment is -// enabled. -bool IsAutofillCreditCardLocalCardMigrationExperimentEnabled(); +// Enum for local card migration experimental flag states. +enum class LocalCardMigrationExperimentalFlag { + // Local card migration disabled. + kMigrationDisabled, + // Only migrate local cards when user submits form. + kMigrationWithoutSettingsPage, + // Migrate both on submitted form and from settings page. + kMigrationIncludeSettingsPage, +}; + +// Returns kMigrationDisabled if no experimental behavior is enabled for +// kAutofillCreditCardLocalCardMigration; Return kMigrationIncludeSettingsPage +// if user enables the local card migration and does not exclude the settings +// page. Return kMigrationWithoutSettingsPage if user chooses to exclude the +// settings page migration. +LocalCardMigrationExperimentalFlag GetLocalCardMigrationExperimentalFlag(); // For testing purposes; not to be launched. When enabled, Chrome Upstream // always requests that the user enters/confirms cardholder name in the
diff --git a/components/autofill/core/browser/autofill_metrics.cc b/components/autofill/core/browser/autofill_metrics.cc index fc389f9..ad53f51 100644 --- a/components/autofill/core/browser/autofill_metrics.cc +++ b/components/autofill/core/browser/autofill_metrics.cc
@@ -791,6 +791,17 @@ } // static +void AutofillMetrics::LogManageCardsPromptMetric(ManageCardsPromptMetric metric, + bool is_upload_save) { + DCHECK_LT(metric, NUM_MANAGE_CARDS_PROMPT_METRICS); + std::string destination = is_upload_save ? ".Upload" : ".Local"; + std::string metric_with_destination = + "Autofill.ManageCardsPrompt" + destination; + base::UmaHistogramEnumeration(metric_with_destination, metric, + NUM_MANAGE_CARDS_PROMPT_METRICS); +} + +// static void AutofillMetrics::LogScanCreditCardPromptMetric( ScanCreditCardPromptMetric metric) { DCHECK_LT(metric, NUM_SCAN_CREDIT_CARD_PROMPT_METRICS);
diff --git a/components/autofill/core/browser/autofill_metrics.h b/components/autofill/core/browser/autofill_metrics.h index 63296e56..f299bee1 100644 --- a/components/autofill/core/browser/autofill_metrics.h +++ b/components/autofill/core/browser/autofill_metrics.h
@@ -242,6 +242,20 @@ NUM_SAVE_CARD_PROMPT_METRICS, }; + // Metrics to measure user interaction with the Manage Cards view + // shown when user clicks on the save card icon after accepting + // to save a card. + enum ManageCardsPromptMetric { + // The manage cards promo was shown. + MANAGE_CARDS_SHOWN, + // The user clicked on [Done]. + MANAGE_CARDS_DONE, + // The user clicked on [Manage cards]. + MANAGE_CARDS_MANAGE_CARDS, + + NUM_MANAGE_CARDS_PROMPT_METRICS + }; + // Metrics measuring how well we predict field types. These metric values are // logged for each field in a submitted form for: // - the heuristic prediction @@ -829,6 +843,8 @@ SaveCardPromptMetric metric, bool is_uploading, security_state::SecurityLevel security_level); + static void LogManageCardsPromptMetric(ManageCardsPromptMetric metric, + bool is_uploading); static void LogScanCreditCardPromptMetric(ScanCreditCardPromptMetric metric); static void LogLocalCardMigrationBubbleOfferMetric( LocalCardMigrationBubbleOfferMetric metric,
diff --git a/components/autofill/core/browser/autofill_test_utils.cc b/components/autofill/core/browser/autofill_test_utils.cc index 3abf1bc..d760fb08 100644 --- a/components/autofill/core/browser/autofill_test_utils.cc +++ b/components/autofill/core/browser/autofill_test_utils.cc
@@ -576,7 +576,7 @@ field->set_type(control_type); if (autocomplete) field->set_autocomplete(autocomplete); - field->set_autofill_type(autofill_type); + field->add_autofill_type(autofill_type); } void FillQueryField(AutofillQueryContents::Form::Field* field,
diff --git a/components/autofill/core/browser/credit_card_save_manager.cc b/components/autofill/core/browser/credit_card_save_manager.cc index 833afac..6d180cc 100644 --- a/components/autofill/core/browser/credit_card_save_manager.cc +++ b/components/autofill/core/browser/credit_card_save_manager.cc
@@ -181,7 +181,8 @@ .substr(0, 6), upload_request_.active_experiments, app_locale_, base::BindOnce(&CreditCardSaveManager::OnDidGetUploadDetails, - weak_ptr_factory_.GetWeakPtr())); + weak_ptr_factory_.GetWeakPtr()), + payments::kUploadCardBillableServiceNumber); } bool CreditCardSaveManager::IsCreditCardUploadEnabled() {
diff --git a/components/autofill/core/browser/form_structure.cc b/components/autofill/core/browser/form_structure.cc index 40d584c..091ce14 100644 --- a/components/autofill/core/browser/form_structure.cc +++ b/components/autofill/core/browser/form_structure.cc
@@ -1573,44 +1573,45 @@ if (IsCheckable(field->check_status)) continue; - const ServerFieldTypeSet& types = field->possible_types(); - for (const auto& field_type : types) { - // Add the same field elements as the query and a few more below. - if (ShouldSkipField(*field)) - continue; + // Add the same field elements as the query and a few more below. + if (ShouldSkipField(*field)) + continue; - AutofillUploadContents::Field* added_field = upload->add_field(); - added_field->set_autofill_type(field_type); - if (field->generation_type()) { - added_field->set_generation_type(field->generation_type()); - added_field->set_generated_password_changed( - field->generated_password_changed()); - } + auto* added_field = upload->add_field(); - if (field->vote_type()) { - added_field->set_vote_type(field->vote_type()); - } + for (const auto& field_type : field->possible_types()) { + added_field->add_autofill_type(field_type); + } - added_field->set_signature(field->GetFieldSignature()); + if (field->generation_type()) { + added_field->set_generation_type(field->generation_type()); + added_field->set_generated_password_changed( + field->generated_password_changed()); + } - if (field->properties_mask) - added_field->set_properties_mask(field->properties_mask); + if (field->vote_type()) { + added_field->set_vote_type(field->vote_type()); + } - if (IsAutofillFieldMetadataEnabled()) { - added_field->set_type(field->form_control_type); + added_field->set_signature(field->GetFieldSignature()); - if (!field->name.empty()) - added_field->set_name(base::UTF16ToUTF8(field->name)); + if (field->properties_mask) + added_field->set_properties_mask(field->properties_mask); - if (!field->id.empty()) - added_field->set_id(base::UTF16ToUTF8(field->id)); + if (IsAutofillFieldMetadataEnabled()) { + added_field->set_type(field->form_control_type); - if (!field->autocomplete_attribute.empty()) - added_field->set_autocomplete(field->autocomplete_attribute); + if (!field->name.empty()) + added_field->set_name(base::UTF16ToUTF8(field->name)); - if (!field->css_classes.empty()) - added_field->set_css_classes(base::UTF16ToUTF8(field->css_classes)); - } + if (!field->id.empty()) + added_field->set_id(base::UTF16ToUTF8(field->id)); + + if (!field->autocomplete_attribute.empty()) + added_field->set_autocomplete(field->autocomplete_attribute); + + if (!field->css_classes.empty()) + added_field->set_css_classes(base::UTF16ToUTF8(field->css_classes)); } } }
diff --git a/components/autofill/core/browser/form_structure_unittest.cc b/components/autofill/core/browser/form_structure_unittest.cc index b75e65c..74465864 100644 --- a/components/autofill/core/browser/form_structure_unittest.cc +++ b/components/autofill/core/browser/form_structure_unittest.cc
@@ -2471,18 +2471,18 @@ // Adjust the expected proto string. upload.set_form_signature(7816485729218079147U); upload.set_autofill_used(false); - // Create an additonal 8 fields (total of 13). - for (int i = 0; i < 8; ++i) { + // Create an additional 2 fields (total of 7). + for (int i = 0; i < 2; ++i) { test::FillUploadField(upload.add_field(), 509334676U, "address", "text", nullptr, 30U); } // Put the appropriate autofill type on the different address fields. - upload.mutable_field(6)->set_autofill_type(31U); - upload.mutable_field(7)->set_autofill_type(37U); - upload.mutable_field(8)->set_autofill_type(38U); - upload.mutable_field(10)->set_autofill_type(31U); - upload.mutable_field(11)->set_autofill_type(37U); - upload.mutable_field(12)->set_autofill_type(38U); + upload.mutable_field(5)->add_autofill_type(31U); + upload.mutable_field(5)->add_autofill_type(37U); + upload.mutable_field(5)->add_autofill_type(38U); + upload.mutable_field(6)->add_autofill_type(31U); + upload.mutable_field(6)->add_autofill_type(37U); + upload.mutable_field(6)->add_autofill_type(38U); ASSERT_TRUE(upload.SerializeToString(&expected_upload_string)); AutofillUploadContents encoded_upload3; @@ -3553,14 +3553,9 @@ form_structure->field(2)->set_possible_types(possible_field_types[2]); // Modify the expected upload. - // Put the NAME_FIRST prediction on the third field. - upload.mutable_field(2)->set_autofill_type(3); - // Replace the fourth field by the old third field. - test::FillUploadField(upload.mutable_field(3), 2404144663U, "last", "text", - nullptr, 5U); - // Re-add the old fourth field. - test::FillUploadField(upload.add_field(), 509334676U, "address", "text", - nullptr, 30U); + // Add the NAME_FIRST prediction to the third field. + upload.mutable_field(2)->add_autofill_type(3); + upload.mutable_field(2)->mutable_autofill_type()->SwapElements(0, 1); ASSERT_TRUE(upload.SerializeToString(&expected_upload_string)); @@ -3578,8 +3573,7 @@ possible_field_types[form_structure->field_count() - 1]); // Adjust the expected upload proto. - test::FillUploadField(upload.add_field(), 509334676U, "address", "text", - nullptr, 31U); + upload.mutable_field(3)->add_autofill_type(31U); ASSERT_TRUE(upload.SerializeToString(&expected_upload_string)); AutofillUploadContents encoded_upload3; @@ -3598,7 +3592,7 @@ possible_field_types[form_structure->field_count() - 1]); // Adjust the expected upload proto. - upload.mutable_field(5)->set_autofill_type(60); + upload.mutable_field(3)->set_autofill_type(1, 60); ASSERT_TRUE(upload.SerializeToString(&expected_upload_string)); AutofillUploadContents encoded_upload4;
diff --git a/components/autofill/core/browser/local_card_migration_manager.cc b/components/autofill/core/browser/local_card_migration_manager.cc index 1769934a..8aa7dde1 100644 --- a/components/autofill/core/browser/local_card_migration_manager.cc +++ b/components/autofill/core/browser/local_card_migration_manager.cc
@@ -100,7 +100,8 @@ /*pan_first_six=*/std::string(), upload_request_.active_experiments, app_locale_, base::BindOnce(&LocalCardMigrationManager::OnDidGetUploadDetails, - weak_ptr_factory_.GetWeakPtr())); + weak_ptr_factory_.GetWeakPtr()), + payments::kMigrateCardBillableServiceNumber); } // TODO(crbug.com/852904): Pops up a larger, modal dialog showing the local @@ -115,7 +116,8 @@ // Confirm that the user is signed in, syncing, and the proper experiment // flags are enabled. bool migration_experiment_enabled = - IsAutofillCreditCardLocalCardMigrationExperimentEnabled(); + GetLocalCardMigrationExperimentalFlag() != + LocalCardMigrationExperimentalFlag::kMigrationDisabled; bool credit_card_upload_enabled = ::autofill::IsCreditCardUploadEnabled( client_->GetPrefs(), client_->GetSyncService(), client_->GetIdentityManager()->GetPrimaryAccountInfo().email);
diff --git a/components/autofill/core/browser/payments/payments_client.cc b/components/autofill/core/browser/payments/payments_client.cc index 58cd6962..25c9373 100644 --- a/components/autofill/core/browser/payments/payments_client.cc +++ b/components/autofill/core/browser/payments/payments_client.cc
@@ -64,9 +64,6 @@ const char kPaymentsOAuth2Scope[] = "https://www.googleapis.com/auth/wallet.chrome"; -const int kUnmaskCardBillableServiceNumber = 70154; -const int kUploadCardBillableServiceNumber = 70073; - GURL GetRequestUrl(const std::string& path) { if (base::CommandLine::ForCurrentProcess()->HasSwitch("sync-url")) { if (IsPaymentsProductionEnabled()) { @@ -274,13 +271,15 @@ const std::string& app_locale, base::OnceCallback<void(AutofillClient::PaymentsRpcResult, const base::string16&, - std::unique_ptr<base::DictionaryValue>)> callback) + std::unique_ptr<base::DictionaryValue>)> callback, + const int billable_service_number) : addresses_(addresses), detected_values_(detected_values), pan_first_six_(pan_first_six), active_experiments_(active_experiments), app_locale_(app_locale), - callback_(std::move(callback)) {} + callback_(std::move(callback)), + billable_service_number_(billable_service_number) {} ~GetUploadDetailsRequest() override {} std::string GetRequestUrlPath() override { @@ -293,6 +292,7 @@ base::DictionaryValue request_dict; std::unique_ptr<base::DictionaryValue> context(new base::DictionaryValue()); context->SetString("language_code", app_locale_); + context->SetInteger("billable_service", billable_service_number_); request_dict.Set("context", std::move(context)); std::unique_ptr<base::ListValue> addresses(new base::ListValue()); @@ -352,6 +352,7 @@ callback_; base::string16 context_token_; std::unique_ptr<base::DictionaryValue> legal_message_; + const int billable_service_number_; }; class UploadCardRequest : public PaymentsRequest { @@ -506,11 +507,13 @@ const std::string& app_locale, base::OnceCallback<void(AutofillClient::PaymentsRpcResult, const base::string16&, - std::unique_ptr<base::DictionaryValue>)> callback) { - IssueRequest(std::make_unique<GetUploadDetailsRequest>( - addresses, detected_values, pan_first_six, - active_experiments, app_locale, std::move(callback)), - false); + std::unique_ptr<base::DictionaryValue>)> callback, + const int billable_service_number) { + IssueRequest( + std::make_unique<GetUploadDetailsRequest>( + addresses, detected_values, pan_first_six, active_experiments, + app_locale, std::move(callback), billable_service_number), + false); } void PaymentsClient::UploadCard(
diff --git a/components/autofill/core/browser/payments/payments_client.h b/components/autofill/core/browser/payments/payments_client.h index ca740d4..e961723 100644 --- a/components/autofill/core/browser/payments/payments_client.h +++ b/components/autofill/core/browser/payments/payments_client.h
@@ -32,6 +32,12 @@ namespace payments { +// Billable service number is defined in Payments server to distinguish +// different requests. +const int kUnmaskCardBillableServiceNumber = 70154; +const int kUploadCardBillableServiceNumber = 70073; +const int kMigrateCardBillableServiceNumber = 70264; + class PaymentsRequest; // PaymentsClient issues Payments RPCs and manages responses and failure @@ -112,9 +118,11 @@ // CreditCardSaveManager::DetectedValue values that relays what data is // actually available for upload in order to make more informed upload // decisions. |callback| is the callback function when get response from - // server. If the conditions are met, the legal message will be returned via - // |callback|. |active_experiments| is used by Payments server to track - // requests that were triggered by enabled features. + // server. |billable_service_number| is used to set the billable service + // number in the GetUploadDetails request. If the conditions are met, the + // legal message will be returned via |callback|. |active_experiments| is used + // by Payments server to track requests that were triggered by enabled + // features. virtual void GetUploadDetails( const std::vector<AutofillProfile>& addresses, const int detected_values, @@ -123,8 +131,8 @@ const std::string& app_locale, base::OnceCallback<void(AutofillClient::PaymentsRpcResult, const base::string16&, - std::unique_ptr<base::DictionaryValue>)> - callback); + std::unique_ptr<base::DictionaryValue>)> callback, + const int billable_service_number); // The user has indicated that they would like to upload a card with the given // cvc. This request will fail server-side if a successful call to
diff --git a/components/autofill/core/browser/payments/payments_client_unittest.cc b/components/autofill/core/browser/payments/payments_client_unittest.cc index 94e7f6f6..e1175f5 100644 --- a/components/autofill/core/browser/payments/payments_client_unittest.cc +++ b/components/autofill/core/browser/payments/payments_client_unittest.cc
@@ -145,7 +145,8 @@ /*pan_first_six=*/"411111", std::vector<const char*>(), "language-LOCALE", base::BindOnce(&PaymentsClientTest::OnDidGetUploadDetails, - weak_ptr_factory_.GetWeakPtr())); + weak_ptr_factory_.GetWeakPtr()), + /*billable_service_number=*/12345); } void StartUploading(bool include_cvc) { @@ -435,6 +436,14 @@ std::string::npos); } +TEST_F(PaymentsClientTest, GetDetailsIncludeBillableServiceNumber) { + StartGettingUploadDetails(); + + // Verify that billable service number was included in the request. + EXPECT_TRUE(GetUploadData().find("\"billable_service\":12345") != + std::string::npos); +} + TEST_F(PaymentsClientTest, UploadSuccessWithoutServerId) { StartUploading(/*include_cvc=*/true); IssueOAuthToken();
diff --git a/components/autofill/core/browser/payments/test_payments_client.cc b/components/autofill/core/browser/payments/test_payments_client.cc index c42daa5..d8d5e2f 100644 --- a/components/autofill/core/browser/payments/test_payments_client.cc +++ b/components/autofill/core/browser/payments/test_payments_client.cc
@@ -26,7 +26,8 @@ const std::string& app_locale, base::OnceCallback<void(AutofillClient::PaymentsRpcResult, const base::string16&, - std::unique_ptr<base::DictionaryValue>)> callback) { + std::unique_ptr<base::DictionaryValue>)> callback, + const int billable_service_number) { upload_details_addresses_ = addresses; detected_values_ = detected_values; pan_first_six_ = pan_first_six;
diff --git a/components/autofill/core/browser/payments/test_payments_client.h b/components/autofill/core/browser/payments/test_payments_client.h index b4394e93..3012148 100644 --- a/components/autofill/core/browser/payments/test_payments_client.h +++ b/components/autofill/core/browser/payments/test_payments_client.h
@@ -34,8 +34,8 @@ const std::string& app_locale, base::OnceCallback<void(AutofillClient::PaymentsRpcResult, const base::string16&, - std::unique_ptr<base::DictionaryValue>)> callback) - override; + std::unique_ptr<base::DictionaryValue>)> callback, + const int billable_service_number) override; void UploadCard( const payments::PaymentsClient::UploadRequestDetails& request_details,
diff --git a/components/autofill/core/browser/personal_data_manager_unittest.cc b/components/autofill/core/browser/personal_data_manager_unittest.cc index eb235f6a..9b5ffe8 100644 --- a/components/autofill/core/browser/personal_data_manager_unittest.cc +++ b/components/autofill/core/browser/personal_data_manager_unittest.cc
@@ -4525,8 +4525,8 @@ // Tests that DeleteDisusedAddresses is not run if the feature is disabled. TEST_F(PersonalDataManagerTest, DeleteDisusedAddresses_DoNothingWhenDisabled) { - // Make sure feature is disabled by default. - EXPECT_FALSE(base::FeatureList::IsEnabled(kAutofillDeleteDisusedAddresses)); + base::test::ScopedFeatureList scoped_features; + scoped_features.InitAndDisableFeature(kAutofillDeleteDisusedAddresses); CreateDeletableDisusedProfile(); @@ -4652,8 +4652,8 @@ // Tests that DeleteDisusedCreditCards is not run if the feature is disabled. TEST_F(PersonalDataManagerTest, DeleteDisusedCreditCards_DoNothingWhenDisabled) { - // Make sure feature is disabled by default. - EXPECT_FALSE(base::FeatureList::IsEnabled(kAutofillDeleteDisusedCreditCards)); + base::test::ScopedFeatureList scoped_features; + scoped_features.InitAndDisableFeature(kAutofillDeleteDisusedCreditCards); CreateDeletableExpiredAndDisusedCreditCard();
diff --git a/components/autofill/core/browser/proto/server.proto b/components/autofill/core/browser/proto/server.proto index 32878d25..d057963 100644 --- a/components/autofill/core/browser/proto/server.proto +++ b/components/autofill/core/browser/proto/server.proto
@@ -76,7 +76,7 @@ // enum of types located at // components/autofill/core/browser/field_types.h // AutoFillFieldType - required fixed32 autofill_type = 7; + repeated fixed32 autofill_type = 7; // The value of the name attribute on the field, if present. Otherwise, the // value of the id attribute. See HTMLFormControlElement::nameForAutofill.
diff --git a/components/autofill/core/browser/test_local_card_migration_manager.cc b/components/autofill/core/browser/test_local_card_migration_manager.cc index 6f0fb6c..2f6b11d 100644 --- a/components/autofill/core/browser/test_local_card_migration_manager.cc +++ b/components/autofill/core/browser/test_local_card_migration_manager.cc
@@ -26,7 +26,8 @@ bool TestLocalCardMigrationManager::IsCreditCardMigrationEnabled() { bool migration_experiment_enabled = - IsAutofillCreditCardLocalCardMigrationExperimentEnabled(); + GetLocalCardMigrationExperimentalFlag() != + LocalCardMigrationExperimentalFlag::kMigrationDisabled; bool has_google_payments_account = (static_cast<int64_t>(payments_client_->GetPrefService()->GetDouble( prefs::kAutofillBillingCustomerNumber)) != 0);
diff --git a/components/autofill/core/browser/ui/local_card_migration_dialog_controller.h b/components/autofill/core/browser/ui/local_card_migration_dialog_controller.h new file mode 100644 index 0000000..f4c13c25 --- /dev/null +++ b/components/autofill/core/browser/ui/local_card_migration_dialog_controller.h
@@ -0,0 +1,39 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_UI_LOCAL_CARD_MIGRATION_DIALOG_CONTROLLER_H_ +#define COMPONENTS_AUTOFILL_CORE_BROWSER_UI_LOCAL_CARD_MIGRATION_DIALOG_CONTROLLER_H_ + +#include <memory> +#include <vector> + +#include "base/macros.h" +#include "base/strings/string16.h" + +namespace autofill { + +enum class LocalCardMigrationDialogState; +class MigratableCreditCard; + +// TODO(crbug.com/867194): Add legal message. +// Interface that exposes controller functionality to local card migration +// dialog views. +class LocalCardMigrationDialogController { + public: + LocalCardMigrationDialogController() {} + virtual ~LocalCardMigrationDialogController() {} + + virtual LocalCardMigrationDialogState GetViewState() const = 0; + virtual void SetViewState(LocalCardMigrationDialogState view_state) = 0; + virtual std::vector<MigratableCreditCard>& GetCardList() = 0; + virtual void SetCardList(std::vector<MigratableCreditCard>& card_list) = 0; + virtual void OnDialogClosed() = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(LocalCardMigrationDialogController); +}; + +} // namespace autofill + +#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_UI_LOCAL_CARD_MIGRATION_DIALOG_CONTROLLER_H_
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc index 3cc9fa48e..bffcdf2 100644 --- a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc +++ b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge.cc
@@ -34,7 +34,7 @@ // Address to this variable used as the user data key. static int kAutofillWalletSyncBridgeUserDataKey = 0; -std::string GetStorageKeyFromAutofillWalletSpecifics( +std::string GetSpecificsIdFromAutofillWalletSpecifics( const AutofillWalletSpecifics& specifics) { switch (specifics.type()) { case AutofillWalletSpecifics::MASKED_CREDIT_CARD: @@ -50,6 +50,13 @@ return std::string(); } +std::string GetClientTagForWalletDataSpecificsId( + const std::string& specifics_id) { + // Unlike for the wallet_metadata model type, the wallet_data expects + // specifics id directly as client tags. + return specifics_id; +} + } // namespace // static @@ -144,16 +151,16 @@ const syncer::EntityData& entity_data) { DCHECK(entity_data.specifics.has_autofill_wallet()); - return GetClientTagForSpecificsId( - entity_data.specifics.autofill_wallet().type(), - GetStorageKey(entity_data)); + return GetClientTagForWalletDataSpecificsId( + GetSpecificsIdFromAutofillWalletSpecifics( + entity_data.specifics.autofill_wallet())); } std::string AutofillWalletSyncBridge::GetStorageKey( const syncer::EntityData& entity_data) { DCHECK(entity_data.specifics.has_autofill_wallet()); - return GetStorageKeyFromAutofillWalletSpecifics( - entity_data.specifics.autofill_wallet()); + return GetStorageKeyForSpecificsId(GetSpecificsIdFromAutofillWalletSpecifics( + entity_data.specifics.autofill_wallet())); } void AutofillWalletSyncBridge::SetSyncData(
diff --git a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc index 7513678..bf58942 100644 --- a/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc +++ b/components/autofill/core/browser/webdata/autofill_wallet_sync_bridge_unittest.cc
@@ -58,8 +58,8 @@ //const char kCard2SpecificsId[] = "Y2FyZDLvv74="; // Unique sync tags for the server IDs. -const char kAddr1SyncTag[] = "address-YWRkcjHvv74="; -const char kCard1SyncTag[] = "card-Y2FyZDHvv74="; +const char kAddr1SyncTag[] = "YWRkcjHvv74="; +const char kCard1SyncTag[] = "Y2FyZDHvv74="; const char kLocaleString[] = "en-US"; const base::Time kJune2017 = base::Time::FromDoubleT(1497552271); @@ -270,16 +270,16 @@ // The following 2 tests make sure client tags stay stable. TEST_F(AutofillWalletSyncBridgeTest, GetClientTagForAddress) { AutofillWalletSpecifics specifics = - CreateAutofillWalletSpecificsForAddress(kAddr1SyncTag); + CreateAutofillWalletSpecificsForAddress(kAddr1SpecificsId); EXPECT_EQ(bridge()->GetClientTag(SpecificsToEntity(specifics)), - "address-" + std::string(kAddr1SyncTag)); + kAddr1SyncTag); } TEST_F(AutofillWalletSyncBridgeTest, GetClientTagForCard) { AutofillWalletSpecifics specifics = - CreateAutofillWalletSpecificsForCard(kCard1SyncTag); + CreateAutofillWalletSpecificsForCard(kCard1SpecificsId); EXPECT_EQ(bridge()->GetClientTag(SpecificsToEntity(specifics)), - "card-" + std::string(kCard1SyncTag)); + kCard1SyncTag); } // The following 2 tests make sure storage keys stay stable. @@ -503,4 +503,4 @@ EXPECT_FALSE(card.bank_name().empty()); } -} // namespace autofill \ No newline at end of file +} // namespace autofill
diff --git a/components/autofill/core/common/form_field_data.h b/components/autofill/core/common/form_field_data.h index 4e54cf3..aedef09f 100644 --- a/components/autofill/core/common/form_field_data.h +++ b/components/autofill/core/common/form_field_data.h
@@ -28,13 +28,19 @@ // being autofilled. This is different from // WebFormControlElement::IsAutofilled(). It is meant to be used for password // fields, to determine whether viewing the value needs user reauthentication. - AUTOFILLED = 1u << 1, + AUTOFILLED_ON_USER_TRIGGER = 1u << 1, + // The field received focus at any moment. HAD_FOCUS = 1u << 2, // Use this flag, if some error occurred in flags processing. ERROR_OCCURRED = 1u << 3, // On submission, the value of the field was recognised as a value which is // already stored. - KNOWN_VALUE = 1u << 4 + KNOWN_VALUE = 1u << 4, + // A value was autofilled on pageload. This means that at least one character + // of the field value comes from being autofilled. + AUTOFILLED_ON_PAGELOAD = 1u << 5, + // A value was autofilled on any of the triggers. + AUTOFILLED = AUTOFILLED_ON_USER_TRIGGER | AUTOFILLED_ON_PAGELOAD, }; // FieldPropertiesMask is used to contain combinations of FieldPropertiesFlags
diff --git a/components/autofill_strings.grdp b/components/autofill_strings.grdp index 30c8d43f1..a41edf4 100644 --- a/components/autofill_strings.grdp +++ b/components/autofill_strings.grdp
@@ -24,23 +24,17 @@ To use cards from your Google Account, sign in to Chrome </message> <message name="IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE" desc="Promo message for Sign-in Promo bubble (shown after a local save) to get people to sign in."> - To get your cards on all devices, sign in and turn on sync. + To use your cards on all devices, sign in and turn on sync. </message> <message name="IDS_AUTOFILL_SYNC_PROMO_MESSAGE" desc="Promo message for Sign-in Promo bubble (shown after a local save) to get people to sync."> - To get your cards on all devices, turn on sync. + To use your cards on all devices, turn on sync. </message> <message name="IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE_DICE_DISABLED" desc="Text of the sign in promo bubble and manage cards footnote."> - To get your cards on all your devices, <ph name="SIGN_IN_LINK">$1<ex>sign in</ex></ph>. - </message> - <message name="IDS_AUTOFILL_SYNC_PROMO_MESSAGE_DICE_DISABLED" desc="Text of the sync promo bubble and manage cards footnote."> - To get your cards on all your devices, <ph name="SYNC_LINK">$1<ex>turn on sync</ex></ph>. + To use your cards on all your devices, <ph name="SIGN_IN_LINK">$1<ex>sign in</ex></ph>. </message> <message name="IDS_AUTOFILL_SIGNIN_PROMO_LINK_DICE_DISABLED" desc="Text of the link to sign in from the save card sync promo."> sign in to Chrome </message> - <message name="IDS_AUTOFILL_SYNC_PROMO_LINK_DICE_DISABLED" desc="Text of the link to sync from the save card sync promo."> - turn on sync - </message> <if expr="_google_chrome"> <message name="IDS_AUTOFILL_DELETE_AUTOCOMPLETE_SUGGESTION_CONFIRMATION_BODY" desc="Text in a dialog to confirm that the user wants to delete an autocomplete form history suggestion."> Remove form suggestion from Chrome? @@ -271,14 +265,48 @@ This name is from your Google Account. </message> - <!-- Autofill Local card migration bubble or prompt --> + <!-- Autofill Local card migration bubble or dialog --> <if expr="not is_ios and not is_android"> - <message name="IDS_AUTOFILL_LOCAL_CARD_MIGRATION_BUBBLE_TITLE" desc="Text to show in the Autofill local card migration intermediate bubble."> + <message name="IDS_AUTOFILL_LOCAL_CARD_MIGRATION_BUBBLE_TITLE" desc="The title text for a bubble that offers users to start the process of migrating local cards to cloud."> Save all your cards in one place? </message> - <message name="IDS_AUTOFILL_LOCAL_CARD_MIGRATION_BUBBLE_BUTTON_LABEL" desc="Text to show in the Autofill local card migration intermediate bubble button."> + <message name="IDS_AUTOFILL_LOCAL_CARD_MIGRATION_BUBBLE_BUTTON_LABEL" desc="The text in the OK button of a bubble that offers users to start the process of migration local cards to cloud."> Continue </message> + <message name="IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_TITLE_OFFER" desc="The title text for a dialog that offers to migrate local cards into the cloud."> + All your cards in one place + </message> + <message name="IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_TITLE_DONE" desc="The title text for a dialog shown after the user accepts another dialog that offers to migrate local cards into the cloud and all cards are successfully migrated."> + You're all set! + </message> + <message name="IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_TITLE_FIX" desc="The title text for a dialog shown after the user accepts another dialog that offers to migrate local cards into the cloud but there are errors with the cards that they need to address."> + Almost done + </message> + <message name="IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_MESSAGE_OFFER" desc="The body text for a dialog that offers to migrate local cards into the cloud. [ICU Syntax]"> + {NUM_CARDS, plural, + =1 {This card will be saved to your Google Account for faster checkout across devices.} + other {These cards will be saved to your Google Account for faster checkout across devices.}} + </message> + <message name="IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_MESSAGE_DONE" desc="The body text for a dialog shown after the user accepts another dialog that offers to migrate local cards into the cloud and all cards are successfully migrated. [ICU Syntax]"> + {NUM_CARDS, plural, + =1 {This card has been added to your Google Account. You can now use it from any signed-in device.} + other {These cards have been added to your Google Account. You can now use them from any signed-in device.}} + </message> + <message name="IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_MESSAGE_FIX" desc="The body text shown on a dialog after the user accepts another dialog that offers to migrate local cards into the cloud but there are errors with the cards that they need to address."> + Please check the info below and fix any errors, if necessary + </message> + <message name="IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_BUTTON_LABEL_SAVE" desc="The text in the OK button of a dialog that offers to migrate local cards into the cloud."> + Save + </message> + <message name="IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_BUTTON_LABEL_CANCEL" desc="The text in the cancel button of a dialog that offers to migrate local cards into the cloud."> + Cancel + </message> + <message name="IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_BUTTON_LABEL_DONE" desc="The text in the OK button a dialog shown after the user accepts another dialog that offers to migrate local cards into the cloud."> + Done + </message> + <message name="IDS_AUTOFILL_LOCAL_CARD_MIGRATION_DIALOG_BUTTON_LABEL_VIEW_CARDS" desc="The text in the cancel button a dialog shown after the user accepts another dialog that offers to migrate local cards into the cloud."> + View cards + </message> </if> <!-- Autofill credit card suggestion popup --> @@ -400,7 +428,7 @@ <message name="IDS_AUTOFILL_CARD_UNMASK_NEW_CARD_LINK" desc="Text for link that prompts user to update their credit card after it may have been re-issued." formatter_data="android_java"> Update card </message> - <message name="IDS_AUTOFILL_DIALOG_PLACEHOLDER_CVC" desc="The placeholder/label text for credit card verification code in the requestAutocomplete dialog."> + <message name="IDS_AUTOFILL_DIALOG_PLACEHOLDER_CVC" desc="The placeholder/label text for credit card verification code in the requestAutocomplete dialog. The text field where this is presented can be very narrow, so please prefer to translate this to the most common abbreviated form. [CHAR-LIMIT=4]" meaning="Placeholder label for a very narrow CVC field that should preferably be translated to an abbreviated form."> CVC </message> <message name="IDS_AUTOFILL_LOADING_REGIONS" desc="The string to display in the regions combobox while loading the region data.">
diff --git a/components/autofill_strings_grdp/IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE.png.sha1 b/components/autofill_strings_grdp/IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE.png.sha1 index fbb4909e..b3ca23b 100644 --- a/components/autofill_strings_grdp/IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE.png.sha1 +++ b/components/autofill_strings_grdp/IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE.png.sha1
@@ -1 +1 @@ -a89c37b7304b73ad2457c4257ba5490bfc85e77e \ No newline at end of file +7fd0c1c2e9c2fc61cd96d78b46df278eb6a4b240 \ No newline at end of file
diff --git a/components/autofill_strings_grdp/IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE_DICE_DISABLED.png.sha1 b/components/autofill_strings_grdp/IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE_DICE_DISABLED.png.sha1 index 271d295..b9fc9fb 100644 --- a/components/autofill_strings_grdp/IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE_DICE_DISABLED.png.sha1 +++ b/components/autofill_strings_grdp/IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE_DICE_DISABLED.png.sha1
@@ -1 +1 @@ -8b8a9d5c99f2660d412ce39345e67f3aa81b5f73 \ No newline at end of file +ce02819f305ffd9df521d015a4545fe6a86e102b \ No newline at end of file
diff --git a/components/autofill_strings_grdp/IDS_AUTOFILL_SYNC_PROMO_MESSAGE.png.sha1 b/components/autofill_strings_grdp/IDS_AUTOFILL_SYNC_PROMO_MESSAGE.png.sha1 index 9143fbe0..03d3d61 100644 --- a/components/autofill_strings_grdp/IDS_AUTOFILL_SYNC_PROMO_MESSAGE.png.sha1 +++ b/components/autofill_strings_grdp/IDS_AUTOFILL_SYNC_PROMO_MESSAGE.png.sha1
@@ -1 +1 @@ -858dc993349162f2ec90e3c4baadf862e60c0047 \ No newline at end of file +13ec87c37f7618bac7417db8d5736047118bb69f \ No newline at end of file
diff --git a/components/background_task_scheduler/BUILD.gn b/components/background_task_scheduler/BUILD.gn index 9525aff..5f445bc 100644 --- a/components/background_task_scheduler/BUILD.gn +++ b/components/background_task_scheduler/BUILD.gn
@@ -20,6 +20,13 @@ } if (is_android) { + # This is shared between WebView and Chrome. We do not want to add GCM + # related permissions for WebView while still wanting to avoid collision + # between WebView and Chrome. + android_library("background_task_scheduler_task_ids_java") { + java_files = [ "android/java/src/org/chromium/components/background_task_scheduler/TaskIds.java" ] + } + android_library("background_task_scheduler_java") { java_files = [ "android/java/src/org/chromium/components/background_task_scheduler/BackgroundTask.java", @@ -36,12 +43,12 @@ "android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerPrefs.java", "android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerUma.java", "android/java/src/org/chromium/components/background_task_scheduler/BundleToPersistableBundleConverter.java", - "android/java/src/org/chromium/components/background_task_scheduler/TaskIds.java", "android/java/src/org/chromium/components/background_task_scheduler/TaskInfo.java", "android/java/src/org/chromium/components/background_task_scheduler/TaskParameters.java", ] deps = [ + ":background_task_scheduler_task_ids_java", "$google_play_services_package:google_play_services_base_java", "$google_play_services_package:google_play_services_basement_java", "$google_play_services_package:google_play_services_gcm_java",
diff --git a/components/browser_sync/profile_sync_service_autofill_unittest.cc b/components/browser_sync/profile_sync_service_autofill_unittest.cc index 19172b6..018c0fc 100644 --- a/components/browser_sync/profile_sync_service_autofill_unittest.cc +++ b/components/browser_sync/profile_sync_service_autofill_unittest.cc
@@ -107,6 +107,10 @@ autofill::prefs::kAutofillJapanCityFieldMigrated, true); registry->RegisterBooleanPref(autofill::prefs::kAutofillOrphanRowsRemoved, true); + registry->RegisterIntegerPref( + autofill::prefs::kAutofillLastVersionDisusedAddressesDeleted, 0); + registry->RegisterIntegerPref( + autofill::prefs::kAutofillLastVersionDisusedCreditCardsDeleted, 0); } void RunAndSignal(base::OnceClosure cb, WaitableEvent* event) {
diff --git a/components/chrome_cleaner/public/constants/constants.cc b/components/chrome_cleaner/public/constants/constants.cc index 35553511..d6c8f62 100644 --- a/components/chrome_cleaner/public/constants/constants.cc +++ b/components/chrome_cleaner/public/constants/constants.cc
@@ -45,4 +45,46 @@ const wchar_t kUploadResultsValueName[] = L"UploadResults"; const wchar_t kVersionValueName[] = L"Version"; +std::ostream& operator<<(std::ostream& stream, ExecutionMode mode) { + switch (mode) { + case ExecutionMode::kNone: + stream << "ExecutionModeNone"; + break; + case ExecutionMode::kScanning: + stream << "ExecutionModeScanning"; + break; + case ExecutionMode::kCleanup: + stream << "ExecutionModeCleanup"; + break; + case ExecutionMode::kNumValues: + stream << "ExecutionModeNumValues"; + break; + } + return stream; +} + +std::ostream& operator<<(std::ostream& stream, ChromePromptValue value) { + switch (value) { + case ChromePromptValue::kUnspecified: + stream << "ChromePromptUnspecified"; + break; + case ChromePromptValue::kPrompted: + stream << "ChromePromptPrompted"; + break; + case ChromePromptValue::kUserInitiated: + stream << "ChromePromptUserInitiated"; + break; + case ChromePromptValue::kLegacyNotPrompted: + stream << "ChromePromptLegacyNotPrompted"; + break; + case ChromePromptValue::kLegacyUnknown: + stream << "ChromePromptLegacyUnknown"; + break; + case ChromePromptValue::kLegacyShownFromMenu: + stream << "ChromePromptLegacyShownFromMenu"; + break; + } + return stream; +} + } // namespace chrome_cleaner
diff --git a/components/chrome_cleaner/public/constants/constants.h b/components/chrome_cleaner/public/constants/constants.h index db965df..60df2b1 100644 --- a/components/chrome_cleaner/public/constants/constants.h +++ b/components/chrome_cleaner/public/constants/constants.h
@@ -5,6 +5,8 @@ #ifndef COMPONENTS_CHROME_CLEANER_PUBLIC_CONSTANTS_CONSTANTS_H_ #define COMPONENTS_CHROME_CLEANER_PUBLIC_CONSTANTS_CONSTANTS_H_ +#include <ostream> + #include "components/chrome_cleaner/public/constants/result_codes.h" // Constants shared by the Chromium and the Chrome Cleanaup tool repos. @@ -149,6 +151,14 @@ kNumValues, }; +// Pretty printers for gtest and CHECK. Declared here to avoid ODR violations. +// See explanation at +// https://groups.google.com/a/chromium.org/d/msg/chromium-dev/i_wOTsE5Z6g/jhtqTY6fCwAJ. + +std::ostream& operator<<(std::ostream& stream, ChromePromptValue mode); + +std::ostream& operator<<(std::ostream& stream, ExecutionMode mode); + } // namespace chrome_cleaner #endif // COMPONENTS_CHROME_CLEANER_PUBLIC_CONSTANTS_CONSTANTS_H_
diff --git a/components/component_updater/component_installer.cc b/components/component_updater/component_installer.cc index 6d343fa3..bbbb1ea2 100644 --- a/components/component_updater/component_installer.cc +++ b/components/component_updater/component_installer.cc
@@ -419,15 +419,14 @@ return; } - if (!callback.is_null()) - std::move(callback).Run(); - - if (!registration_info->manifest) { + if (registration_info->manifest) { + ComponentReady(std::move(registration_info->manifest)); + } else { DVLOG(1) << "No component found for " << installer_policy_->GetName(); - return; } - ComponentReady(std::move(registration_info->manifest)); + if (!callback.is_null()) + std::move(callback).Run(); } void ComponentInstaller::ComponentReady(
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc index 46de20d..c0f49b67 100644 --- a/components/content_settings/core/browser/content_settings_registry.cc +++ b/components/content_settings/core/browser/content_settings_registry.cc
@@ -296,7 +296,7 @@ Register(CONTENT_SETTINGS_TYPE_SOUND, "sound", CONTENT_SETTING_ALLOW, WebsiteSettingsInfo::UNSYNCABLE, WhitelistedSchemes(), ValidSettings(CONTENT_SETTING_ALLOW, CONTENT_SETTING_BLOCK), - WebsiteSettingsInfo::REQUESTING_ORIGIN_ONLY_SCOPE, + WebsiteSettingsInfo::TOP_LEVEL_ORIGIN_ONLY_SCOPE, WebsiteSettingsRegistry::DESKTOP | WebsiteSettingsRegistry::PLATFORM_ANDROID, ContentSettingsInfo::INHERIT_IN_INCOGNITO,
diff --git a/components/contextual_search/browser/DEPS b/components/contextual_search/browser/DEPS deleted file mode 100644 index 1c35d9c..0000000 --- a/components/contextual_search/browser/DEPS +++ /dev/null
@@ -1,3 +0,0 @@ -include_rules = [ - "+content/public/browser", -]
diff --git a/components/cronet/url_request_context_config.cc b/components/cronet/url_request_context_config.cc index 6eda898..4af387d 100644 --- a/components/cronet/url_request_context_config.cc +++ b/components/cronet/url_request_context_config.cc
@@ -583,17 +583,8 @@ ParseAndSetExperimentalOptions(context_builder, &session_params, net_log); context_builder->set_http_network_session_params(session_params); - std::unique_ptr<net::CertVerifier> cert_verifier; - if (mock_cert_verifier) { - // Because |context_builder| expects CachingCertVerifier, wrap - // |mock_cert_verifier| into a CachingCertVerifier. - cert_verifier = std::make_unique<net::CachingCertVerifier>( - std::move(mock_cert_verifier)); - } else { - // net::CertVerifier::CreateDefault() returns a CachingCertVerifier. - cert_verifier = net::CertVerifier::CreateDefault(); - } - context_builder->SetCertVerifier(std::move(cert_verifier)); + if (mock_cert_verifier) + context_builder->SetCertVerifier(std::move(mock_cert_verifier)); // Certificate Transparency is intentionally ignored in Cronet. // See //net/docs/certificate-transparency.md for more details. context_builder->set_ct_verifier(
diff --git a/components/dom_distiller/content/browser/test/dom_distiller_js_browsertest.cc b/components/dom_distiller/content/browser/test/dom_distiller_js_browsertest.cc index 8a12b91..0c0edab 100644 --- a/components/dom_distiller/content/browser/test/dom_distiller_js_browsertest.cc +++ b/components/dom_distiller/content/browser/test/dom_distiller_js_browsertest.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "base/callback.h" +#include "base/cfi_buildflags.h" #include "base/command_line.h" #include "base/location.h" #include "base/logging.h" @@ -101,8 +102,13 @@ } }; -#if defined(MEMORY_SANITIZER) +// Disabled on MSan and Android CFI bots. // https://crbug.com/845180 +#if defined(MEMORY_SANITIZER) || \ + (defined(OS_ANDROID) && \ + (BUILDFLAG(CFI_CAST_CHECK) || BUILDFLAG(CFI_ICALL_CHECK) || \ + BUILDFLAG(CFI_ENFORCEMENT_DIAGNOSTIC) || \ + BUILDFLAG(CFI_ENFORCEMENT_TRAP))) #define MAYBE_RunJsTests DISABLED_RunJsTests #else #define MAYBE_RunJsTests RunJsTests
diff --git a/components/exo/buffer.cc b/components/exo/buffer.cc index 5c71e22..42647b5 100644 --- a/components/exo/buffer.cc +++ b/components/exo/buffer.cc
@@ -21,6 +21,7 @@ #include "base/trace_event/trace_event.h" #include "base/trace_event/trace_event_argument.h" #include "components/exo/layer_tree_frame_sink_holder.h" +#include "components/exo/wm_helper.h" #include "components/viz/common/gpu/context_provider.h" #include "components/viz/common/resources/resource_format.h" #include "components/viz/common/resources/resource_format_utils.h" @@ -423,7 +424,7 @@ texture_.reset(); ui::ContextFactory* context_factory = - aura::Env::GetInstance()->context_factory(); + WMHelper::GetInstance()->env()->context_factory(); // Note: This can fail if GPU acceleration has been disabled. scoped_refptr<viz::ContextProvider> context_provider = context_factory->SharedMainThreadContextProvider();
diff --git a/components/exo/client_controlled_shell_surface.cc b/components/exo/client_controlled_shell_surface.cc index 9570ef5..9e5ad04 100644 --- a/components/exo/client_controlled_shell_surface.cc +++ b/components/exo/client_controlled_shell_surface.cc
@@ -8,8 +8,8 @@ #include <utility> #include "ash/frame/caption_buttons/caption_button_model.h" -#include "ash/frame/custom_frame_view_ash.h" #include "ash/frame/header_view.h" +#include "ash/frame/non_client_frame_view_ash.h" #include "ash/frame/wide_frame_view.h" #include "ash/public/cpp/immersive/immersive_fullscreen_controller.h" #include "ash/public/cpp/shell_window_ids.h" @@ -551,7 +551,7 @@ bounds_changed_callback_) { // Sends the client bounds, which matches the geometry // when frame is enabled. - ash::CustomFrameViewAsh* frame_view = GetFrameView(); + ash::NonClientFrameViewAsh* frame_view = GetFrameView(); // The client's geometry uses fullscreen in client controlled, // (but the surface is placed under the frame), so just use @@ -721,8 +721,9 @@ client_controlled_state_ = state.get(); window_state->SetStateObject(std::move(state)); window_state->SetDelegate(std::move(window_delegate)); - ash::CustomFrameViewAsh* frame_view = static_cast<ash::CustomFrameViewAsh*>( - ShellSurfaceBase::CreateNonClientFrameView(widget)); + ash::NonClientFrameViewAsh* frame_view = + static_cast<ash::NonClientFrameViewAsh*>( + ShellSurfaceBase::CreateNonClientFrameView(widget)); immersive_fullscreen_controller_ = std::make_unique<ash::ImmersiveFullscreenController>(); frame_view->InitImmersiveFullscreenControllerForView( @@ -856,7 +857,7 @@ gfx::Rect ClientControlledShellSurface::GetShadowBounds() const { gfx::Rect shadow_bounds = ShellSurfaceBase::GetShadowBounds(); - const ash::CustomFrameViewAsh* frame_view = GetFrameView(); + const ash::NonClientFrameViewAsh* frame_view = GetFrameView(); if (frame_view->visible()) { // The client controlled geometry is only for the client // area. When the chrome side frame is enabled, the shadow height @@ -878,7 +879,7 @@ window_state->set_ignore_keyboard_bounds_change(true); if (container_ == ash::kShellWindowId_SystemModalContainer) DisableMovement(); - ash::CustomFrameViewAsh* frame_view = GetFrameView(); + ash::NonClientFrameViewAsh* frame_view = GetFrameView(); frame_view->SetCaptionButtonModel(std::make_unique<CaptionButtonModel>( frame_visible_button_mask_, frame_enabled_button_mask_)); UpdateAutoHideFrame(); @@ -892,7 +893,7 @@ } gfx::Rect ClientControlledShellSurface::GetWidgetBounds() const { - const ash::CustomFrameViewAsh* frame_view = GetFrameView(); + const ash::NonClientFrameViewAsh* frame_view = GetFrameView(); if (frame_view->visible()) { // The client's geometry uses entire display area in client // controlled in maximized, and the surface is placed under the @@ -1000,14 +1001,14 @@ return ash::wm::GetWindowState(widget_->GetNativeWindow()); } -ash::CustomFrameViewAsh* ClientControlledShellSurface::GetFrameView() { - return static_cast<ash::CustomFrameViewAsh*>( +ash::NonClientFrameViewAsh* ClientControlledShellSurface::GetFrameView() { + return static_cast<ash::NonClientFrameViewAsh*>( widget_->non_client_view()->frame_view()); } -const ash::CustomFrameViewAsh* ClientControlledShellSurface::GetFrameView() +const ash::NonClientFrameViewAsh* ClientControlledShellSurface::GetFrameView() const { - return static_cast<const ash::CustomFrameViewAsh*>( + return static_cast<const ash::NonClientFrameViewAsh*>( widget_->non_client_view()->frame_view()); }
diff --git a/components/exo/client_controlled_shell_surface.h b/components/exo/client_controlled_shell_surface.h index 8294e32..afbda15 100644 --- a/components/exo/client_controlled_shell_surface.h +++ b/components/exo/client_controlled_shell_surface.h
@@ -18,7 +18,7 @@ #include "ui/display/display_observer.h" namespace ash { -class CustomFrameViewAsh; +class NonClientFrameViewAsh; class ImmersiveFullscreenController; class WideFrameView; @@ -258,8 +258,8 @@ void EnsureCompositorIsLockedForOrientationChange(); ash::wm::WindowState* GetWindowState(); - ash::CustomFrameViewAsh* GetFrameView(); - const ash::CustomFrameViewAsh* GetFrameView() const; + ash::NonClientFrameViewAsh* GetFrameView(); + const ash::NonClientFrameViewAsh* GetFrameView() const; GeometryChangedCallback geometry_changed_callback_;
diff --git a/components/exo/client_controlled_shell_surface_unittest.cc b/components/exo/client_controlled_shell_surface_unittest.cc index 84b4370..4f539b2 100644 --- a/components/exo/client_controlled_shell_surface_unittest.cc +++ b/components/exo/client_controlled_shell_surface_unittest.cc
@@ -7,8 +7,8 @@ #include "ash/display/screen_orientation_controller.h" #include "ash/frame/caption_buttons/caption_button_model.h" #include "ash/frame/caption_buttons/frame_caption_button_container_view.h" -#include "ash/frame/custom_frame_view_ash.h" #include "ash/frame/header_view.h" +#include "ash/frame/non_client_frame_view_ash.h" #include "ash/frame/wide_frame_view.h" #include "ash/public/cpp/ash_features.h" #include "ash/public/cpp/window_properties.h" @@ -495,8 +495,9 @@ surface->Commit(); views::Widget* widget = shell_surface->GetWidget(); - ash::CustomFrameViewAsh* frame_view = static_cast<ash::CustomFrameViewAsh*>( - widget->non_client_view()->frame_view()); + ash::NonClientFrameViewAsh* frame_view = + static_cast<ash::NonClientFrameViewAsh*>( + widget->non_client_view()->frame_view()); // Normal state. EXPECT_TRUE(frame_view->visible()); @@ -1381,8 +1382,9 @@ 1 << ash::CAPTION_BUTTON_ICON_CLOSE | 1 << ash::CAPTION_BUTTON_ICON_BACK | 1 << ash::CAPTION_BUTTON_ICON_MENU; - ash::CustomFrameViewAsh* frame_view = static_cast<ash::CustomFrameViewAsh*>( - shell_surface->GetWidget()->non_client_view()->frame_view()); + ash::NonClientFrameViewAsh* frame_view = + static_cast<ash::NonClientFrameViewAsh*>( + shell_surface->GetWidget()->non_client_view()->frame_view()); ash::FrameCaptionButtonContainerView* container = static_cast<ash::HeaderView*>(frame_view->GetHeaderView()) ->caption_button_container(); @@ -1446,8 +1448,9 @@ auto paint_does_draw_text = [&shell_surface]() { TestCanvas canvas; shell_surface->OnSetFrame(SurfaceFrameType::NORMAL); - ash::CustomFrameViewAsh* frame_view = static_cast<ash::CustomFrameViewAsh*>( - shell_surface->GetWidget()->non_client_view()->frame_view()); + ash::NonClientFrameViewAsh* frame_view = + static_cast<ash::NonClientFrameViewAsh*>( + shell_surface->GetWidget()->non_client_view()->frame_view()); frame_view->SetVisible(true); // Paint to a layer so we can pass a root PaintInfo. frame_view->GetHeaderView()->SetPaintToLayer(); @@ -1646,8 +1649,9 @@ EXPECT_EQ(window_state->GetStateType(), ash::mojom::WindowStateType::LEFT_SNAPPED); - ash::CustomFrameViewAsh* frame_view = static_cast<ash::CustomFrameViewAsh*>( - shell_surface->GetWidget()->non_client_view()->frame_view()); + ash::NonClientFrameViewAsh* frame_view = + static_cast<ash::NonClientFrameViewAsh*>( + shell_surface->GetWidget()->non_client_view()->frame_view()); // Snapped window can also use auto hide. surface->SetFrame(SurfaceFrameType::AUTOHIDE); EXPECT_TRUE(frame_view->visible());
diff --git a/components/exo/shell_surface.cc b/components/exo/shell_surface.cc index e41a474..9691dd2 100644 --- a/components/exo/shell_surface.cc +++ b/components/exo/shell_surface.cc
@@ -270,7 +270,7 @@ target, location, component, base::BindOnce(end_drag, base::Unretained(this))); } else { - gfx::Point location = aura::Env::GetInstance()->last_mouse_location(); + gfx::Point location = WMHelper::GetInstance()->env()->last_mouse_location(); ::wm::ConvertPointFromScreen(widget_->GetNativeWindow()->GetRootWindow(), &location); toplevel_handler->AttemptToStartDrag(
diff --git a/components/exo/shell_surface_base.cc b/components/exo/shell_surface_base.cc index 6873fa4..7cbceb2 100644 --- a/components/exo/shell_surface_base.cc +++ b/components/exo/shell_surface_base.cc
@@ -6,7 +6,7 @@ #include <algorithm> -#include "ash/frame/custom_frame_view_ash.h" +#include "ash/frame/non_client_frame_view_ash.h" #include "ash/public/cpp/config.h" #include "ash/public/cpp/shelf_types.h" #include "ash/public/cpp/shell_window_ids.h" @@ -96,7 +96,7 @@ DISALLOW_COPY_AND_ASSIGN(ShellSurfaceWidget); }; -class CustomFrameView : public ash::CustomFrameViewAsh, +class CustomFrameView : public ash::NonClientFrameViewAsh, public aura::WindowObserver { public: using ShapeRects = std::vector<gfx::Rect>; @@ -105,13 +105,13 @@ ShellSurfaceBase* shell_surface, bool enabled, bool client_controlled_move_resize) - : CustomFrameViewAsh(widget), + : NonClientFrameViewAsh(widget), shell_surface_(shell_surface), client_controlled_move_resize_(client_controlled_move_resize) { SetEnabled(enabled); SetVisible(enabled); if (!enabled) - CustomFrameViewAsh::SetShouldPaintHeader(false); + NonClientFrameViewAsh::SetShouldPaintHeader(false); frame()->GetNativeWindow()->AddObserver(this); } @@ -123,10 +123,10 @@ } } - // Overridden from ash::CustomFrameViewAsh: + // Overridden from ash::NonClientFrameViewAsh: void SetShouldPaintHeader(bool paint) override { if (visible()) { - CustomFrameViewAsh::SetShouldPaintHeader(paint); + NonClientFrameViewAsh::SetShouldPaintHeader(paint); return; } // TODO(oshima): The caption area will be unknown @@ -164,7 +164,7 @@ // SetShouldPaintHeader(). Note: this can be removed if the layer mask in // CustomFrameView becomes unnecessary. // TODO(oshima): Investigate if we can eliminate this. - CustomFrameViewAsh::UpdateHeaderView(); + NonClientFrameViewAsh::UpdateHeaderView(); } void OnWindowDestroying(aura::Window* window) override { @@ -175,46 +175,46 @@ // Overridden from views::NonClientFrameView: gfx::Rect GetBoundsForClientView() const override { if (visible()) - return ash::CustomFrameViewAsh::GetBoundsForClientView(); + return ash::NonClientFrameViewAsh::GetBoundsForClientView(); return bounds(); } gfx::Rect GetWindowBoundsForClientBounds( const gfx::Rect& client_bounds) const override { if (visible()) { - return ash::CustomFrameViewAsh::GetWindowBoundsForClientBounds( + return ash::NonClientFrameViewAsh::GetWindowBoundsForClientBounds( client_bounds); } return client_bounds; } int NonClientHitTest(const gfx::Point& point) override { if (visible() || !client_controlled_move_resize_) - return ash::CustomFrameViewAsh::NonClientHitTest(point); + return ash::NonClientFrameViewAsh::NonClientHitTest(point); return GetWidget()->client_view()->NonClientHitTest(point); } void GetWindowMask(const gfx::Size& size, gfx::Path* window_mask) override { if (visible()) - return ash::CustomFrameViewAsh::GetWindowMask(size, window_mask); + return ash::NonClientFrameViewAsh::GetWindowMask(size, window_mask); } void ResetWindowControls() override { if (visible()) - return ash::CustomFrameViewAsh::ResetWindowControls(); + return ash::NonClientFrameViewAsh::ResetWindowControls(); } void UpdateWindowIcon() override { if (visible()) - return ash::CustomFrameViewAsh::ResetWindowControls(); + return ash::NonClientFrameViewAsh::ResetWindowControls(); } void UpdateWindowTitle() override { if (visible()) - return ash::CustomFrameViewAsh::UpdateWindowTitle(); + return ash::NonClientFrameViewAsh::UpdateWindowTitle(); } void SizeConstraintsChanged() override { if (visible()) - return ash::CustomFrameViewAsh::SizeConstraintsChanged(); + return ash::NonClientFrameViewAsh::SizeConstraintsChanged(); } gfx::Size GetMinimumSize() const override { gfx::Size minimum_size = shell_surface_->GetMinimumSize(); if (visible()) { - return ash::CustomFrameViewAsh::GetWindowBoundsForClientBounds( + return ash::NonClientFrameViewAsh::GetWindowBoundsForClientBounds( gfx::Rect(minimum_size)) .size(); } @@ -320,7 +320,7 @@ }; // A place holder to disable default implementation created by -// ash::CustomFrameViewAsh, which triggers immersive fullscreen etc, which +// ash::NonClientFrameViewAsh, which triggers immersive fullscreen etc, which // we don't need. class CustomWindowStateDelegate : public ash::wm::WindowStateDelegate { public:
diff --git a/components/exo/shell_surface_unittest.cc b/components/exo/shell_surface_unittest.cc index b0f0b02..987f78e 100644 --- a/components/exo/shell_surface_unittest.cc +++ b/components/exo/shell_surface_unittest.cc
@@ -5,7 +5,7 @@ #include "components/exo/shell_surface.h" #include "ash/accessibility/accessibility_delegate.h" -#include "ash/frame/custom_frame_view_ash.h" +#include "ash/frame/non_client_frame_view_ash.h" #include "ash/public/cpp/shell_window_ids.h" #include "ash/shell.h" #include "ash/shell_test_api.h" @@ -558,8 +558,8 @@ shell_surface->OnSetFrameColors(SK_ColorRED, SK_ColorTRANSPARENT); surface->Commit(); - const ash::CustomFrameViewAsh* frame = - static_cast<const ash::CustomFrameViewAsh*>( + const ash::NonClientFrameViewAsh* frame = + static_cast<const ash::NonClientFrameViewAsh*>( shell_surface->GetWidget()->non_client_view()->frame_view()); // Test if colors set before initial commit are set.
diff --git a/components/exo/surface.cc b/components/exo/surface.cc index 895f76bb..7d462deb 100644 --- a/components/exo/surface.cc +++ b/components/exo/surface.cc
@@ -192,8 +192,10 @@ //////////////////////////////////////////////////////////////////////////////// // Surface, public: -Surface::Surface() : window_(new aura::Window(new CustomWindowDelegate(this))) { - window_->SetType(aura::client::WINDOW_TYPE_CONTROL); +Surface::Surface() + : window_(std::make_unique<aura::Window>(new CustomWindowDelegate(this), + aura::client::WINDOW_TYPE_CONTROL, + WMHelper::GetInstance()->env())) { window_->SetName("ExoSurface"); window_->SetProperty(kSurfaceKey, this); window_->Init(ui::LAYER_NOT_DRAWN);
diff --git a/components/exo/surface_tree_host.cc b/components/exo/surface_tree_host.cc index ed01de4b..bcbc1dcf 100644 --- a/components/exo/surface_tree_host.cc +++ b/components/exo/surface_tree_host.cc
@@ -80,8 +80,10 @@ // SurfaceTreeHost, public: SurfaceTreeHost::SurfaceTreeHost(const std::string& window_name) - : host_window_(std::make_unique<aura::Window>(nullptr)) { - host_window_->SetType(aura::client::WINDOW_TYPE_CONTROL); + : host_window_( + std::make_unique<aura::Window>(nullptr, + aura::client::WINDOW_TYPE_CONTROL, + WMHelper::GetInstance()->env())) { host_window_->SetName(window_name); host_window_->Init(ui::LAYER_SOLID_COLOR); host_window_->set_owned_by_parent(false); @@ -92,11 +94,11 @@ host_window_->SetEventTargeter(std::make_unique<CustomWindowTargeter>(this)); layer_tree_frame_sink_holder_ = std::make_unique<LayerTreeFrameSinkHolder>( this, host_window_->CreateLayerTreeFrameSink()); - aura::Env::GetInstance()->context_factory()->AddObserver(this); + WMHelper::GetInstance()->env()->context_factory()->AddObserver(this); } SurfaceTreeHost::~SurfaceTreeHost() { - aura::Env::GetInstance()->context_factory()->RemoveObserver(this); + WMHelper::GetInstance()->env()->context_factory()->RemoveObserver(this); SetRootSurface(nullptr); LayerTreeFrameSinkHolder::DeleteWhenLastResourceHasBeenReclaimed( std::move(layer_tree_frame_sink_holder_)); @@ -252,7 +254,7 @@ for (auto& resource : frame.resource_list) sync_tokens.push_back(resource.mailbox_holder.sync_token.GetData()); ui::ContextFactory* context_factory = - aura::Env::GetInstance()->context_factory(); + WMHelper::GetInstance()->env()->context_factory(); gpu::gles2::GLES2Interface* gles2 = context_factory->SharedMainThreadContextProvider()->ContextGL(); gles2->VerifySyncTokensCHROMIUM(sync_tokens.data(), sync_tokens.size());
diff --git a/components/exo/surface_unittest.cc b/components/exo/surface_unittest.cc index 40630cf2..1954f45e 100644 --- a/components/exo/surface_unittest.cc +++ b/components/exo/surface_unittest.cc
@@ -12,6 +12,7 @@ #include "components/exo/sub_surface.h" #include "components/exo/test/exo_test_base.h" #include "components/exo/test/exo_test_helper.h" +#include "components/exo/wm_helper.h" #include "components/viz/common/quads/compositor_frame.h" #include "components/viz/common/quads/texture_draw_quad.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" @@ -102,7 +103,8 @@ const viz::CompositorFrame& GetFrameFromSurface(ShellSurface* shell_surface) { viz::SurfaceId surface_id = shell_surface->host_window()->GetSurfaceId(); - viz::SurfaceManager* surface_manager = aura::Env::GetInstance() + viz::SurfaceManager* surface_manager = WMHelper::GetInstance() + ->env() ->context_factory_private() ->GetFrameSinkManager() ->surface_manager();
diff --git a/components/exo/test/exo_test_base.cc b/components/exo/test/exo_test_base.cc index 0905ebd..9a193515 100644 --- a/components/exo/test/exo_test_base.cc +++ b/components/exo/test/exo_test_base.cc
@@ -4,10 +4,12 @@ #include "components/exo/test/exo_test_base.h" +#include "ash/shell.h" #include "base/command_line.h" #include "components/exo/test/exo_test_helper.h" #include "components/exo/test/test_client_controlled_state_delegate.h" #include "components/exo/wm_helper.h" +#include "ui/aura/env.h" #include "ui/base/ime/input_method_factory.h" #include "ui/wm/core/wm_core_switches.h" @@ -27,7 +29,7 @@ command_line->AppendSwitch(wm::switches::kWindowAnimationsDisabled); ui::SetUpInputMethodFactoryForTesting(); AshTestBase::SetUp(); - wm_helper_ = std::make_unique<WMHelper>(); + wm_helper_ = std::make_unique<WMHelper>(ash::Shell::Get()->aura_env()); WMHelper::SetInstance(wm_helper_.get()); test::TestClientControlledStateDelegate::InstallFactory(); }
diff --git a/components/exo/test/exo_test_helper.cc b/components/exo/test/exo_test_helper.cc index c99278c..ad160f7b 100644 --- a/components/exo/test/exo_test_helper.cc +++ b/components/exo/test/exo_test_helper.cc
@@ -65,7 +65,8 @@ std::unique_ptr<gfx::GpuMemoryBuffer> ExoTestHelper::CreateGpuMemoryBuffer( const gfx::Size& size, gfx::BufferFormat format) { - return aura::Env::GetInstance() + return WMHelper::GetInstance() + ->env() ->context_factory() ->GetGpuMemoryBufferManager() ->CreateGpuMemoryBuffer(size, format, gfx::BufferUsage::GPU_READ,
diff --git a/components/exo/text_input_unittest.cc b/components/exo/text_input_unittest.cc index 658519c9..2aa5e1a6 100644 --- a/components/exo/text_input_unittest.cc +++ b/components/exo/text_input_unittest.cc
@@ -14,6 +14,7 @@ #include "ui/aura/window_tree_host.h" #include "ui/base/ime/composition_text.h" #include "ui/base/ime/input_method_observer.h" +#include "ui/events/keycodes/dom/dom_code.h" #include "ui/views/widget/widget.h" using testing::_; @@ -267,7 +268,7 @@ TEST_F(TextInputTest, InsertCharNormalKey) { base::char16 ch = 'x'; - ui::KeyEvent ev(ch, ui::VKEY_X, 0); + ui::KeyEvent ev(ch, ui::VKEY_X, ui::DomCode::NONE, 0); EXPECT_CALL(*delegate(), Commit(base::string16(1, ch))).Times(1); EXPECT_CALL(*delegate(), SendKey(_)).Times(0); @@ -275,4 +276,4 @@ } } // anonymous namespace -} // namespace exo \ No newline at end of file +} // namespace exo
diff --git a/components/exo/wayland/clients/test/wayland_client_test.cc b/components/exo/wayland/clients/test/wayland_client_test.cc index 47fcf5a..34100a2f 100644 --- a/components/exo/wayland/clients/test/wayland_client_test.cc +++ b/components/exo/wayland/clients/test/wayland_client_test.cc
@@ -23,6 +23,7 @@ #include "components/exo/file_helper.h" #include "components/exo/wayland/server.h" #include "components/exo/wm_helper.h" +#include "ui/aura/env.h" #include "ui/aura/window_tree_host.h" #include "ui/events/gesture_detection/gesture_configuration.h" #include "ui/wm/core/cursor_manager.h" @@ -144,7 +145,7 @@ gesture_config->set_long_press_time_in_ms(1000); gesture_config->set_max_touch_move_in_pixels_for_click(5); - wm_helper_ = std::make_unique<WMHelper>(); + wm_helper_ = std::make_unique<WMHelper>(ash::Shell::Get()->aura_env()); WMHelper::SetInstance(wm_helper_.get()); display_ = std::make_unique<Display>(nullptr, nullptr, nullptr); wayland_server_ = exo::wayland::Server::Create(display_.get());
diff --git a/components/exo/wm_helper.cc b/components/exo/wm_helper.cc index 0432568..8fe7677 100644 --- a/components/exo/wm_helper.cc +++ b/components/exo/wm_helper.cc
@@ -27,9 +27,10 @@ //////////////////////////////////////////////////////////////////////////////// // WMHelper, public: -WMHelper::WMHelper() +WMHelper::WMHelper(aura::Env* env) : vsync_manager_( - GetPrimaryRoot()->layer()->GetCompositor()->vsync_manager()) {} + GetPrimaryRoot()->layer()->GetCompositor()->vsync_manager()), + env_(env) {} WMHelper::~WMHelper() {}
diff --git a/components/exo/wm_helper.h b/components/exo/wm_helper.h index 3b34b483..53f49f4 100644 --- a/components/exo/wm_helper.h +++ b/components/exo/wm_helper.h
@@ -17,6 +17,7 @@ } namespace aura { +class env; class Window; namespace client { class CursorClient; @@ -58,13 +59,15 @@ virtual ~DragDropObserver() {} }; - WMHelper(); + explicit WMHelper(aura::Env* env); ~WMHelper() override; static void SetInstance(WMHelper* helper); static WMHelper* GetInstance(); static bool HasInstance(); + aura::Env* env() { return env_; } + void AddActivationObserver(wm::ActivationChangeObserver* observer); void RemoveActivationObserver(wm::ActivationChangeObserver* observer); void AddFocusObserver(aura::client::FocusChangeObserver* observer); @@ -111,6 +114,7 @@ base::TimeTicks vsync_timebase_; base::TimeDelta vsync_interval_; scoped_refptr<ui::CompositorVSyncManager> vsync_manager_; + aura::Env* const env_; DISALLOW_COPY_AND_ASSIGN(WMHelper); };
diff --git a/components/gcm_driver/BUILD.gn b/components/gcm_driver/BUILD.gn index 0c5bcb1e..5ef587a 100644 --- a/components/gcm_driver/BUILD.gn +++ b/components/gcm_driver/BUILD.gn
@@ -47,7 +47,9 @@ "//components/gcm_driver/common", "//components/gcm_driver/crypto", "//components/gcm_driver/instance_id", + "//crypto", ] + deps = [ ":gcm_buildflags", "//base:i18n", @@ -64,6 +66,7 @@ "//net", "//services/identity/public/cpp", "//services/network/public/cpp", + "//services/network/public/mojom", "//url:url", ] @@ -140,6 +143,7 @@ "//net", "//services/network:test_support", "//services/network/public/cpp", + "//services/network/public/mojom", "//testing/gtest", ]
diff --git a/components/gcm_driver/DEPS b/components/gcm_driver/DEPS index 4adaea8..0fb497e1 100644 --- a/components/gcm_driver/DEPS +++ b/components/gcm_driver/DEPS
@@ -21,6 +21,7 @@ "+net", "+services/identity/public", "+services/network/public/cpp", + "+services/network/public/mojom", "+services/network/test", "+third_party/leveldatabase", # Only used for tests. ]
diff --git a/components/gcm_driver/fake_gcm_client.cc b/components/gcm_driver/fake_gcm_client.cc index 87e2bf9e..8c1db00 100644 --- a/components/gcm_driver/fake_gcm_client.cc +++ b/components/gcm_driver/fake_gcm_client.cc
@@ -75,8 +75,9 @@ const ChromeBuildInfo& chrome_build_info, const base::FilePath& store_path, const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, - const scoped_refptr<net::URLRequestContextGetter>& - url_request_context_getter, + base::RepeatingCallback< + void(network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, const scoped_refptr<network::SharedURLLoaderFactory>& url_loader_factory, std::unique_ptr<Encryptor> encryptor, Delegate* delegate) {
diff --git a/components/gcm_driver/fake_gcm_client.h b/components/gcm_driver/fake_gcm_client.h index e1500d0..15be54d4 100644 --- a/components/gcm_driver/fake_gcm_client.h +++ b/components/gcm_driver/fake_gcm_client.h
@@ -46,8 +46,9 @@ const ChromeBuildInfo& chrome_build_info, const base::FilePath& store_path, const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, - const scoped_refptr<net::URLRequestContextGetter>& - url_request_context_getter, + base::RepeatingCallback< + void(network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, const scoped_refptr<network::SharedURLLoaderFactory>& url_loader_factory, std::unique_ptr<Encryptor> encryptor, Delegate* delegate) override;
diff --git a/components/gcm_driver/gcm_client.h b/components/gcm_driver/gcm_client.h index 79a7789..e8bd9d6 100644 --- a/components/gcm_driver/gcm_client.h +++ b/components/gcm_driver/gcm_client.h
@@ -16,6 +16,7 @@ #include "components/gcm_driver/common/gcm_messages.h" #include "components/gcm_driver/gcm_activity.h" #include "components/gcm_driver/registration_info.h" +#include "services/network/public/mojom/proxy_resolving_socket.mojom.h" template <class T> class scoped_refptr; @@ -27,7 +28,6 @@ namespace net { class IPEndPoint; -class URLRequestContextGetter; } namespace network { @@ -235,16 +235,18 @@ // |chrome_build_info|: chrome info, i.e., version, channel and etc. // |store_path|: path to the GCM store. // |blocking_task_runner|: for running blocking file tasks. - // |url_request_context_getter|: for url requests. The GCMClient must be - // deleted before the Getter's underlying URLRequestContext. + // |get_socket_factory_callback|: a callback that can accept a request for a + // network::mojom::ProxyResolvingSocketFactoryPtr. It needs to be safe to + // run on any thread. // |delegate|: the delegate whose methods will be called asynchronously in // response to events and messages. virtual void Initialize( const ChromeBuildInfo& chrome_build_info, const base::FilePath& store_path, const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, - const scoped_refptr<net::URLRequestContextGetter>& - url_request_context_getter, + base::RepeatingCallback< + void(network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, const scoped_refptr<network::SharedURLLoaderFactory>& url_loader_factory, std::unique_ptr<Encryptor> encryptor, Delegate* delegate) = 0;
diff --git a/components/gcm_driver/gcm_client_impl.cc b/components/gcm_driver/gcm_client_impl.cc index c30c7dcb..168bef64 100644 --- a/components/gcm_driver/gcm_client_impl.cc +++ b/components/gcm_driver/gcm_client_impl.cc
@@ -41,7 +41,6 @@ #include "google_apis/gcm/monitoring/gcm_stats_recorder.h" #include "google_apis/gcm/protocol/checkin.pb.h" #include "google_apis/gcm/protocol/mcs.pb.h" -#include "net/url_request/url_request_context.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "url/gurl.h" @@ -279,10 +278,13 @@ std::unique_ptr<ConnectionFactory> GCMInternalsBuilder::BuildConnectionFactory( const std::vector<GURL>& endpoints, const net::BackoffEntry::Policy& backoff_policy, - net::URLRequestContext* url_request_context, + base::RepeatingCallback< + void(network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, GCMStatsRecorder* recorder) { - return base::WrapUnique<ConnectionFactory>(new ConnectionFactoryImpl( - endpoints, backoff_policy, url_request_context, recorder)); + return std::make_unique<ConnectionFactoryImpl>( + endpoints, backoff_policy, std::move(get_socket_factory_callback), + recorder); } GCMClientImpl::CheckinInfo::CheckinInfo() @@ -318,7 +320,6 @@ start_mode_(DELAYED_START), clock_(internals_builder_->GetClock()), gcm_store_reset_(false), - url_request_context_getter_(nullptr), periodic_checkin_ptr_factory_(this), destroying_gcm_store_ptr_factory_(this), weak_ptr_factory_(this) {} @@ -330,16 +331,16 @@ const ChromeBuildInfo& chrome_build_info, const base::FilePath& path, const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, - const scoped_refptr<net::URLRequestContextGetter>& - url_request_context_getter, + base::RepeatingCallback< + void(network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, const scoped_refptr<network::SharedURLLoaderFactory>& url_loader_factory, std::unique_ptr<Encryptor> encryptor, GCMClient::Delegate* delegate) { DCHECK_EQ(UNINITIALIZED, state_); - DCHECK(url_request_context_getter); DCHECK(delegate); - url_request_context_getter_ = url_request_context_getter; + get_socket_factory_callback_ = std::move(get_socket_factory_callback); url_loader_factory_ = url_loader_factory; chrome_build_info_ = chrome_build_info; @@ -498,8 +499,8 @@ if (fallback_endpoint.is_valid()) endpoints.push_back(fallback_endpoint); connection_factory_ = internals_builder_->BuildConnectionFactory( - endpoints, GetGCMBackoffPolicy(), - url_request_context_getter_->GetURLRequestContext(), &recorder_); + endpoints, GetGCMBackoffPolicy(), get_socket_factory_callback_, + &recorder_); connection_factory_->SetConnectionListener(this); mcs_client_ = internals_builder_->BuildMCSClient( chrome_build_info_.version, clock_, connection_factory_.get(),
diff --git a/components/gcm_driver/gcm_client_impl.h b/components/gcm_driver/gcm_client_impl.h index d2c730a3..5f9edd6 100644 --- a/components/gcm_driver/gcm_client_impl.h +++ b/components/gcm_driver/gcm_client_impl.h
@@ -29,7 +29,7 @@ #include "google_apis/gcm/protocol/android_checkin.pb.h" #include "google_apis/gcm/protocol/checkin.pb.h" #include "net/http/http_status_code.h" -#include "net/url_request/url_request_context_getter.h" +#include "services/network/public/mojom/proxy_resolving_socket.mojom.h" class GURL; @@ -42,10 +42,6 @@ class DataMessageStanza; } // namespace mcs_proto -namespace net { -class URLRequestContext; -} // namespace net - namespace network { class SharedURLLoaderFactory; } // namespace network @@ -73,7 +69,9 @@ virtual std::unique_ptr<ConnectionFactory> BuildConnectionFactory( const std::vector<GURL>& endpoints, const net::BackoffEntry::Policy& backoff_policy, - net::URLRequestContext* url_request_context, + base::RepeatingCallback< + void(network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, GCMStatsRecorder* recorder); }; @@ -112,8 +110,9 @@ const ChromeBuildInfo& chrome_build_info, const base::FilePath& store_path, const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner, - const scoped_refptr<net::URLRequestContextGetter>& - url_request_context_getter, + base::RepeatingCallback< + void(network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, const scoped_refptr<network::SharedURLLoaderFactory>& url_loader_factory, std::unique_ptr<Encryptor> encryptor, GCMClient::Delegate* delegate) override; @@ -369,7 +368,10 @@ bool gcm_store_reset_; std::unique_ptr<ConnectionFactory> connection_factory_; - scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; + base::RepeatingCallback<void( + network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback_; + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; // Controls receiving and sending of packets and reliable message queueing.
diff --git a/components/gcm_driver/gcm_client_impl_unittest.cc b/components/gcm_driver/gcm_client_impl_unittest.cc index a2895c0e..f4404026 100644 --- a/components/gcm_driver/gcm_client_impl_unittest.cc +++ b/components/gcm_driver/gcm_client_impl_unittest.cc
@@ -9,6 +9,7 @@ #include <initializer_list> #include <memory> +#include "base/bind_helpers.h" #include "base/command_line.h" #include "base/files/file_path.h" #include "base/files/file_util.h" @@ -230,7 +231,9 @@ std::unique_ptr<ConnectionFactory> BuildConnectionFactory( const std::vector<GURL>& endpoints, const net::BackoffEntry::Policy& backoff_policy, - net::URLRequestContext* url_request_context, + base::RepeatingCallback< + void(network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, GCMStatsRecorder* recorder) override; private: @@ -260,7 +263,9 @@ FakeGCMInternalsBuilder::BuildConnectionFactory( const std::vector<GURL>& endpoints, const net::BackoffEntry::Policy& backoff_policy, - net::URLRequestContext* url_request_context, + base::RepeatingCallback< + void(network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, GCMStatsRecorder* recorder) { return base::WrapUnique<ConnectionFactory>(new FakeConnectionFactory()); } @@ -622,8 +627,7 @@ chrome_build_info.version = kChromeVersion; chrome_build_info.product_category_for_subtypes = kProductCategoryForSubtypes; gcm_client_->Initialize( - chrome_build_info, gcm_store_path(), task_runner_, - url_request_context_getter_, + chrome_build_info, gcm_store_path(), task_runner_, base::DoNothing(), base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( &test_url_loader_factory_), base::WrapUnique<Encryptor>(new FakeEncryptor), this);
diff --git a/components/gcm_driver/gcm_desktop_utils.cc b/components/gcm_driver/gcm_desktop_utils.cc index e1c9cfd..57c82121 100644 --- a/components/gcm_driver/gcm_desktop_utils.cc +++ b/components/gcm_driver/gcm_desktop_utils.cc
@@ -93,7 +93,9 @@ std::unique_ptr<GCMClientFactory> gcm_client_factory, PrefService* prefs, const base::FilePath& store_path, - const scoped_refptr<net::URLRequestContextGetter>& request_context, + base::RepeatingCallback< + void(network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, version_info::Channel channel, const std::string& product_category_for_subtypes, @@ -104,8 +106,8 @@ std::move(gcm_client_factory), GetChromeBuildInfo(channel, product_category_for_subtypes), GetChannelStatusRequestUrl(channel), GetUserAgent(channel), prefs, - store_path, request_context, url_loader_factory, ui_task_runner, - io_task_runner, blocking_task_runner)); + store_path, get_socket_factory_callback, url_loader_factory, + ui_task_runner, io_task_runner, blocking_task_runner)); } } // namespace gcm
diff --git a/components/gcm_driver/gcm_desktop_utils.h b/components/gcm_driver/gcm_desktop_utils.h index 8663fb4..105cd20 100644 --- a/components/gcm_driver/gcm_desktop_utils.h +++ b/components/gcm_driver/gcm_desktop_utils.h
@@ -10,16 +10,13 @@ #include "base/memory/ref_counted.h" #include "base/sequenced_task_runner.h" #include "components/version_info/version_info.h" +#include "services/network/public/mojom/proxy_resolving_socket.mojom.h" class PrefService; namespace base { class FilePath; } -namespace net { -class URLRequestContextGetter; -} - namespace network { class SharedURLLoaderFactory; } @@ -33,7 +30,9 @@ std::unique_ptr<GCMClientFactory> gcm_client_factory, PrefService* prefs, const base::FilePath& store_path, - const scoped_refptr<net::URLRequestContextGetter>& request_context, + base::RepeatingCallback< + void(network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, version_info::Channel channel, const std::string& product_category_for_subtypes,
diff --git a/components/gcm_driver/gcm_driver_desktop.cc b/components/gcm_driver/gcm_driver_desktop.cc index 864e3cd..d5a93c60 100644 --- a/components/gcm_driver/gcm_driver_desktop.cc +++ b/components/gcm_driver/gcm_driver_desktop.cc
@@ -26,7 +26,6 @@ #include "components/gcm_driver/system_encryptor.h" #include "google_apis/gcm/engine/account_mapping.h" #include "net/base/ip_endpoint.h" -#include "net/url_request/url_request_context_getter.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #if defined(OS_CHROMEOS) @@ -73,7 +72,9 @@ std::unique_ptr<GCMClientFactory> gcm_client_factory, const GCMClient::ChromeBuildInfo& chrome_build_info, const base::FilePath& store_path, - const scoped_refptr<net::URLRequestContextGetter>& request_context, + base::RepeatingCallback< + void(network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, std::unique_ptr<network::SharedURLLoaderFactoryInfo> loader_factory_info, const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner); void Start(GCMClient::StartMode start_mode, @@ -145,7 +146,9 @@ std::unique_ptr<GCMClientFactory> gcm_client_factory, const GCMClient::ChromeBuildInfo& chrome_build_info, const base::FilePath& store_path, - const scoped_refptr<net::URLRequestContextGetter>& request_context, + base::RepeatingCallback< + void(network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, std::unique_ptr<network::SharedURLLoaderFactoryInfo> loader_factory_info, const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner) { DCHECK(io_thread_->RunsTasksInCurrentSequence()); @@ -156,7 +159,8 @@ network::SharedURLLoaderFactory::Create(std::move(loader_factory_info)); gcm_client_->Initialize(chrome_build_info, store_path, blocking_task_runner, - request_context, url_loader_factory_for_io, + std::move(get_socket_factory_callback), + url_loader_factory_for_io, std::make_unique<SystemEncryptor>(), this); } @@ -505,7 +509,9 @@ const std::string& user_agent, PrefService* prefs, const base::FilePath& store_path, - const scoped_refptr<net::URLRequestContextGetter>& request_context, + base::RepeatingCallback< + void(network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_for_ui, const scoped_refptr<base::SequencedTaskRunner>& ui_thread, const scoped_refptr<base::SequencedTaskRunner>& io_thread, @@ -540,7 +546,7 @@ base::BindOnce(&GCMDriverDesktop::IOWorker::Initialize, base::Unretained(io_worker_.get()), std::move(gcm_client_factory), chrome_build_info, - store_path, request_context, + store_path, std::move(get_socket_factory_callback), // ->Clone() permits creation of an equivalent // SharedURLLoaderFactory on IO thread. url_loader_factory_for_ui->Clone(), blocking_task_runner));
diff --git a/components/gcm_driver/gcm_driver_desktop.h b/components/gcm_driver/gcm_driver_desktop.h index c2713e12..697dcc8 100644 --- a/components/gcm_driver/gcm_driver_desktop.h +++ b/components/gcm_driver/gcm_driver_desktop.h
@@ -22,6 +22,7 @@ #include "components/gcm_driver/gcm_client.h" #include "components/gcm_driver/gcm_connection_observer.h" #include "components/gcm_driver/gcm_driver.h" +#include "services/network/public/mojom/proxy_resolving_socket.mojom.h" class PrefService; @@ -30,10 +31,6 @@ class SequencedTaskRunner; } -namespace net { -class URLRequestContextGetter; -} - namespace network { class SharedURLLoaderFactory; } @@ -57,7 +54,9 @@ const std::string& user_agent, PrefService* prefs, const base::FilePath& store_path, - const scoped_refptr<net::URLRequestContextGetter>& request_context, + base::RepeatingCallback< + void(network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_for_ui, const scoped_refptr<base::SequencedTaskRunner>& ui_thread, const scoped_refptr<base::SequencedTaskRunner>& io_thread,
diff --git a/components/gcm_driver/gcm_driver_desktop_unittest.cc b/components/gcm_driver/gcm_driver_desktop_unittest.cc index c31e7437..3ea40822 100644 --- a/components/gcm_driver/gcm_driver_desktop_unittest.cc +++ b/components/gcm_driver/gcm_driver_desktop_unittest.cc
@@ -243,15 +243,15 @@ new net::TestURLRequestContextGetter(io_thread_.task_runner()); GCMClient::ChromeBuildInfo chrome_build_info; chrome_build_info.product_category_for_subtypes = "com.chrome.macosx"; - driver_.reset(new GCMDriverDesktop( + driver_ = std::make_unique<GCMDriverDesktop>( std::unique_ptr<GCMClientFactory>(new FakeGCMClientFactory( base::ThreadTaskRunnerHandle::Get(), io_thread_.task_runner())), chrome_build_info, kTestChannelStatusRequestURL, "user-agent-string", - &prefs_, temp_dir_.GetPath(), request_context, + &prefs_, temp_dir_.GetPath(), base::DoNothing(), base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( &test_url_loader_factory_), base::ThreadTaskRunnerHandle::Get(), io_thread_.task_runner(), - message_loop_.task_runner())); + message_loop_.task_runner()); gcm_app_handler_.reset(new FakeGCMAppHandler); gcm_connection_observer_.reset(new FakeGCMConnectionObserver);
diff --git a/components/gcm_driver/gcm_profile_service.cc b/components/gcm_driver/gcm_profile_service.cc index 9ba06f5..47bd3d00 100644 --- a/components/gcm_driver/gcm_profile_service.cc +++ b/components/gcm_driver/gcm_profile_service.cc
@@ -142,6 +142,10 @@ PrefService* prefs, base::FilePath path, net::URLRequestContextGetter* request_context, + base::RepeatingCallback< + void(base::WeakPtr<GCMProfileService>, + network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, version_info::Channel channel, const std::string& product_category_for_subtypes, @@ -150,11 +154,12 @@ const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner, const scoped_refptr<base::SequencedTaskRunner>& io_task_runner, scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner) - : identity_manager_(identity_manager), - request_context_(request_context) { + : identity_manager_(identity_manager), request_context_(request_context) { driver_ = CreateGCMDriverDesktop( std::move(gcm_client_factory), prefs, - path.Append(gcm_driver::kGCMStoreDirname), request_context_, + path.Append(gcm_driver::kGCMStoreDirname), + base::BindRepeating(get_socket_factory_callback, + weak_ptr_factory_.GetWeakPtr()), url_loader_factory, channel, product_category_for_subtypes, ui_task_runner, io_task_runner, blocking_task_runner);
diff --git a/components/gcm_driver/gcm_profile_service.h b/components/gcm_driver/gcm_profile_service.h index ba66cdf..0da5c055 100644 --- a/components/gcm_driver/gcm_profile_service.h +++ b/components/gcm_driver/gcm_profile_service.h
@@ -13,10 +13,12 @@ #include "base/files/file_path.h" #include "base/macros.h" #include "base/memory/ref_counted.h" +#include "base/memory/weak_ptr.h" #include "build/build_config.h" #include "components/gcm_driver/gcm_buildflags.h" #include "components/keyed_service/core/keyed_service.h" #include "components/version_info/version_info.h" +#include "services/network/public/mojom/proxy_resolving_socket.mojom.h" class PrefService; @@ -44,6 +46,9 @@ // Providing GCM service, via GCMDriver. class GCMProfileService : public KeyedService { public: + using GetProxyResolvingFactoryCallback = base::RepeatingCallback<void( + network::mojom::ProxyResolvingSocketFactoryRequest)>; + #if BUILDFLAG(USE_GCM_FROM_PLATFORM) GCMProfileService( base::FilePath path, @@ -53,6 +58,10 @@ PrefService* prefs, base::FilePath path, net::URLRequestContextGetter* request_context, + base::RepeatingCallback< + void(base::WeakPtr<GCMProfileService>, + network::mojom::ProxyResolvingSocketFactoryRequest)> + get_socket_factory_callback, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, version_info::Channel channel, const std::string& product_category_for_subtypes, @@ -92,6 +101,11 @@ std::unique_ptr<IdentityObserver> identity_observer_; #endif + GetProxyResolvingFactoryCallback get_socket_factory_callback_; + + // WeakPtr generated by the factory must be dereferenced on the UI thread. + base::WeakPtrFactory<GCMProfileService> weak_ptr_factory_{this}; + DISALLOW_COPY_AND_ASSIGN(GCMProfileService); };
diff --git a/components/gcm_driver/instance_id/BUILD.gn b/components/gcm_driver/instance_id/BUILD.gn index b0936a1..5a316155 100644 --- a/components/gcm_driver/instance_id/BUILD.gn +++ b/components/gcm_driver/instance_id/BUILD.gn
@@ -22,6 +22,7 @@ "//components/keyed_service/core:core", "//components/prefs:prefs", "//crypto", + "//services/network/public/mojom", ] if (use_gcm_from_platform) {
diff --git a/components/metrics/BUILD.gn b/components/metrics/BUILD.gn index 296d41e..47a10a83 100644 --- a/components/metrics/BUILD.gn +++ b/components/metrics/BUILD.gn
@@ -262,10 +262,13 @@ "call_stack_profile_builder.cc", "call_stack_profile_builder.h", "call_stack_profile_params.h", + "call_stack_profile_proto_encoder.cc", + "call_stack_profile_proto_encoder.h", ] deps = [ "//base:base", + "//third_party/metrics_proto", ] } @@ -277,6 +280,7 @@ deps = [ ":metrics", "//components/metrics/public/interfaces:call_stack_mojo_bindings", + "//third_party/metrics_proto", ] } @@ -289,6 +293,7 @@ ":call_stack_profile", "//components/metrics/public/interfaces:call_stack_mojo_bindings", "//services/service_manager/public/cpp", + "//third_party/metrics_proto", ] } @@ -332,6 +337,7 @@ sources = [ "call_stack_profile_builder_unittest.cc", "call_stack_profile_metrics_provider_unittest.cc", + "call_stack_profile_proto_encoder_unittest.cc", "child_call_stack_profile_collector_unittest.cc", "cloned_install_detector_unittest.cc", "component_metrics_provider_unittest.cc", @@ -383,6 +389,7 @@ "//services/network/public/cpp:cpp", "//services/service_manager/public/cpp", "//testing/gtest", + "//third_party/metrics_proto", "//third_party/zlib/google:compression_utils", "//ui/gfx/geometry", ]
diff --git a/components/metrics/call_stack_profile_builder.cc b/components/metrics/call_stack_profile_builder.cc index ff2d6af..0619c35 100644 --- a/components/metrics/call_stack_profile_builder.cc +++ b/components/metrics/call_stack_profile_builder.cc
@@ -5,9 +5,10 @@ #include "components/metrics/call_stack_profile_builder.h" #include <utility> +#include <vector> #include "base/atomicops.h" -#include "base/logging.h" +#include "components/metrics/call_stack_profile_proto_encoder.h" using StackSamplingProfiler = base::StackSamplingProfiler; @@ -41,8 +42,9 @@ } // namespace CallStackProfileBuilder::CallStackProfileBuilder( - const CompletedCallback& callback) - : callback_(callback) {} + const CompletedCallback& callback, + const CallStackProfileParams& profile_params) + : callback_(callback), profile_params_(profile_params) {} CallStackProfileBuilder::~CallStackProfileBuilder() = default; @@ -89,8 +91,19 @@ profile_.profile_duration = profile_duration; profile_.sampling_period = sampling_period; - // Run the associated callback, passing the collected profile. - callback_.Run(std::move(profile_)); + // TODO(chengx): build the metrics.SampledProfile protocol message + // incrementally. + SampledProfile sampled_profile; + sampled_profile.set_process( + ToExecutionContextProcess(profile_params_.process)); + sampled_profile.set_thread(ToExecutionContextThread(profile_params_.thread)); + sampled_profile.set_trigger_event( + ToSampledProfileTriggerEvent(profile_params_.trigger)); + CopyProfileToProto(profile_, sampled_profile.mutable_call_stack_profile()); + + // Run the associated callback, passing the protocol message which encodes the + // collected profile. + callback_.Run(sampled_profile); } // static
diff --git a/components/metrics/call_stack_profile_builder.h b/components/metrics/call_stack_profile_builder.h index fcd972cf..8a968aa 100644 --- a/components/metrics/call_stack_profile_builder.h +++ b/components/metrics/call_stack_profile_builder.h
@@ -9,23 +9,42 @@ #include "base/callback.h" #include "base/profiler/stack_sampling_profiler.h" +#include "components/metrics/call_stack_profile_params.h" +#include "third_party/metrics_proto/sampled_profile.pb.h" namespace metrics { // CallStackProfileBuilder builds a CallStackProfile from the collected sampling // data. // -// The results of the profile building -- a CallStackProfile, is passed to the -// completed callback. A CallStackProfile contains a set of Samples and -// Modules, and other sampling information. One Sample corresponds to a single -// recorded stack, and the Modules record those modules associated with the -// recorded stack frames. +// The results of the profile building -- a CallStackProfile, is encoded to +// metrics.SampledProfile protocol message. The message is then passed to the +// completed callback. A CallStackProfile contains a set of Samples and Modules, +// and other sampling information. One Sample corresponds to a single recorded +// stack, and the Modules record those modules associated with the recorded +// stack frames. class CallStackProfileBuilder : public base::StackSamplingProfiler::ProfileBuilder { public: - // The callback type used to collect a completed profile. The passed - // CallStackProfile is move-only. Other threads, including the UI thread, may - // block on callback completion so this should run as quickly as possible. + // These milestones of a process lifetime can be passed as process "mile- + // stones" to CallStackProfileBuilder::SetProcessMilestone(). Be sure to + // update the translation constants at the top of the .cc file when this is + // changed. + enum Milestones : int { + MAIN_LOOP_START, + MAIN_NAVIGATION_START, + MAIN_NAVIGATION_FINISHED, + FIRST_NONEMPTY_PAINT, + + SHUTDOWN_START, + + MILESTONES_MAX_VALUE + }; + + // The callback type used to collect a metrics.SampledProfile protocol + // message. The passed SampledProfile is move-only. Other threads, including + // the UI thread, may block on callback completion so this should run as + // quickly as possible. // // IMPORTANT NOTE: The callback is invoked on a thread the profiler // constructs, rather than on the thread used to construct the profiler, and @@ -33,10 +52,10 @@ // loops that create CallStackProfileBuilders, posting a task to the message // loop with the moved (i.e. std::move) profile is the thread-safe callback // implementation. - using CompletedCallback = - base::Callback<void(base::StackSamplingProfiler::CallStackProfile)>; + using CompletedCallback = base::RepeatingCallback<void(SampledProfile)>; - CallStackProfileBuilder(const CompletedCallback& callback); + CallStackProfileBuilder(const CompletedCallback& callback, + const CallStackProfileParams& profile_params); ~CallStackProfileBuilder() override; @@ -68,6 +87,9 @@ // Callback made when sampling a profile completes. const CompletedCallback callback_; + // The parameters associated with the sampled profile. + const CallStackProfileParams profile_params_; + DISALLOW_COPY_AND_ASSIGN(CallStackProfileBuilder); };
diff --git a/components/metrics/call_stack_profile_builder_unittest.cc b/components/metrics/call_stack_profile_builder_unittest.cc index e3922b2..b3fd998 100644 --- a/components/metrics/call_stack_profile_builder_unittest.cc +++ b/components/metrics/call_stack_profile_builder_unittest.cc
@@ -5,33 +5,41 @@ #include "components/metrics/call_stack_profile_builder.h" #include "base/files/file_path.h" +#include "base/sampling_heap_profiler/module_cache.h" #include "base/test/bind_test_util.h" #include "base/time/time.h" +#include "build/build_config.h" +#include "components/metrics/call_stack_profile_params.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/metrics_proto/sampled_profile.pb.h" -using StackSamplingProfiler = base::StackSamplingProfiler; -using InternalFrame = StackSamplingProfiler::InternalFrame; +using InternalFrame = base::StackSamplingProfiler::InternalFrame; using Module = base::ModuleCache::Module; -using CallStackProfile = StackSamplingProfiler::CallStackProfile; +using CallStackProfile = base::StackSamplingProfiler::CallStackProfile; namespace metrics { namespace { +constexpr CallStackProfileParams kProfileParams = { + CallStackProfileParams::BROWSER_PROCESS, + CallStackProfileParams::MAIN_THREAD, + CallStackProfileParams::PROCESS_STARTUP}; + // Called on the profiler thread when complete, to collect profile. -void SaveProfile(CallStackProfile* profile, CallStackProfile pending_profile) { - *profile = std::move(pending_profile); +void SaveProfile(SampledProfile* proto, SampledProfile pending_proto) { + *proto = std::move(pending_proto); } } // namespace TEST(CallStackProfileBuilderTest, SetProcessMilestone) { - CallStackProfile profile; + SampledProfile proto; - // Set up a callback to record the CallStackProfile to local variable - // |profile|. + // Set up a callback to record the CallStackProfile to local variable |proto|. auto profile_builder = std::make_unique<CallStackProfileBuilder>( - Bind(&SaveProfile, Unretained(&profile))); + base::BindRepeating(&SaveProfile, base::Unretained(&proto)), + kProfileParams); profile_builder->RecordAnnotations(); profile_builder->OnSampleCompleted(std::vector<InternalFrame>()); @@ -42,118 +50,190 @@ profile_builder->OnProfileCompleted(base::TimeDelta(), base::TimeDelta()); - ASSERT_EQ(2u, profile.samples.size()); - EXPECT_EQ(0u, profile.samples[0].process_milestones); - EXPECT_EQ(1u << 1, profile.samples[1].process_milestones); + ASSERT_TRUE(proto.has_call_stack_profile()); + const CallStackProfile& profile = proto.call_stack_profile(); + + ASSERT_EQ(2, profile.sample_size()); + + uint32_t process_milestones = 0; + for (int i = 0; i < profile.sample(0).process_phase().size(); ++i) + process_milestones |= 1U << profile.sample(0).process_phase().Get(i); + EXPECT_EQ(0U, process_milestones); + + process_milestones = 0; + for (int i = 0; i < profile.sample(1).process_phase().size(); ++i) + process_milestones |= 1U << profile.sample(1).process_phase().Get(i); + EXPECT_EQ(1U << 1, process_milestones); } -TEST(CallStackProfileBuilderTest, OnSampleCompleted) { - CallStackProfile profile; +TEST(CallStackProfileBuilderTest, ProfilingCompleted) { + SampledProfile proto; - // Set up a callback to record the CallStackProfile to local variable - // |profile|. + // Set up a callback to record the CallStackProfile to local variable |proto|. auto profile_builder = std::make_unique<CallStackProfileBuilder>( - Bind(&SaveProfile, Unretained(&profile))); + base::BindRepeating(&SaveProfile, base::Unretained(&proto)), + kProfileParams); - Module module1 = {0xccccdddd, "1", - base::FilePath(FILE_PATH_LITERAL("file_path_1"))}; - Module module2 = {0xccddccdd, "2", - base::FilePath(FILE_PATH_LITERAL("file_path_2"))}; - InternalFrame frame1 = {0xaaaabbbb, module1}; - InternalFrame frame2 = {0xaabbaabb, module2}; +#if defined(OS_WIN) + uint64_t module_md5 = 0x46C3E4166659AC02ULL; + base::FilePath module_path(L"c:\\some\\path\\to\\chrome.exe"); +#else + uint64_t module_md5 = 0x554838A8451AC36CULL; + base::FilePath module_path("/some/path/to/chrome"); +#endif - std::vector<InternalFrame> frames = {frame1, frame2}; + const uintptr_t module_base_address1 = 0x1000; + Module module1 = {module_base_address1, "1", module_path}; + InternalFrame frame1 = {module_base_address1 + 0x10, module1}; - profile_builder->OnSampleCompleted(frames); - profile_builder->OnProfileCompleted(base::TimeDelta(), base::TimeDelta()); + const uintptr_t module_base_address2 = 0x1100; + Module module2 = {module_base_address2, "2", module_path}; + InternalFrame frame2 = {module_base_address2 + 0x10, module2}; - ASSERT_EQ(1u, profile.samples.size()); - ASSERT_EQ(2u, profile.samples[0].frames.size()); - EXPECT_EQ(0u, profile.samples[0].frames[0].module_index); - EXPECT_EQ(1u, profile.samples[0].frames[1].module_index); -} + const uintptr_t module_base_address3 = 0x1010; + Module module3 = {module_base_address3, "3", module_path}; + InternalFrame frame3 = {module_base_address3 + 0x10, module3}; -TEST(CallStackProfileBuilderTest, OnProfileCompleted) { - CallStackProfile profile; + std::vector<InternalFrame> frames1 = {frame1, frame2}; + std::vector<InternalFrame> frames2 = {frame3}; - // Set up a callback to record the CallStackProfile to local variable - // |profile|. - auto profile_builder = std::make_unique<CallStackProfileBuilder>( - Bind(&SaveProfile, Unretained(&profile))); - - Module module1 = {0xccccdddd, "1", - base::FilePath(FILE_PATH_LITERAL("file_path_1"))}; - Module module2 = {0xccddccdd, "2", - base::FilePath(FILE_PATH_LITERAL("file_path_2"))}; - InternalFrame frame1 = {0xaaaabbbb, module1}; - InternalFrame frame2 = {0xaabbaabb, module2}; - - std::vector<InternalFrame> frames = {frame1, frame2}; - - profile_builder->OnSampleCompleted(frames); + profile_builder->OnSampleCompleted(frames1); + profile_builder->OnSampleCompleted(frames2); profile_builder->OnProfileCompleted(base::TimeDelta::FromMilliseconds(500), base::TimeDelta::FromMilliseconds(100)); - ASSERT_EQ(1u, profile.samples.size()); - ASSERT_EQ(2u, profile.samples[0].frames.size()); - EXPECT_EQ(base::TimeDelta::FromMilliseconds(500), profile.profile_duration); - EXPECT_EQ(base::TimeDelta::FromMilliseconds(100), profile.sampling_period); + ASSERT_TRUE(proto.has_process()); + ASSERT_EQ(BROWSER_PROCESS, proto.process()); + ASSERT_TRUE(proto.has_thread()); + ASSERT_EQ(MAIN_THREAD, proto.thread()); + ASSERT_TRUE(proto.has_trigger_event()); + ASSERT_EQ(SampledProfile::PROCESS_STARTUP, proto.trigger_event()); + + ASSERT_TRUE(proto.has_call_stack_profile()); + const CallStackProfile& profile = proto.call_stack_profile(); + + ASSERT_EQ(2, profile.sample_size()); + ASSERT_EQ(2, profile.sample(0).entry_size()); + ASSERT_TRUE(profile.sample(0).entry(0).has_module_id_index()); + EXPECT_EQ(0, profile.sample(0).entry(0).module_id_index()); + ASSERT_TRUE(profile.sample(0).entry(1).has_module_id_index()); + EXPECT_EQ(1, profile.sample(0).entry(1).module_id_index()); + ASSERT_EQ(1, profile.sample(1).entry_size()); + ASSERT_TRUE(profile.sample(1).entry(0).has_module_id_index()); + EXPECT_EQ(2, profile.sample(1).entry(0).module_id_index()); + + ASSERT_EQ(3, profile.module_id().size()); + ASSERT_TRUE(profile.module_id(0).has_build_id()); + ASSERT_EQ("1", profile.module_id(0).build_id()); + ASSERT_TRUE(profile.module_id(0).has_name_md5_prefix()); + ASSERT_EQ(module_md5, profile.module_id(0).name_md5_prefix()); + ASSERT_TRUE(profile.module_id(1).has_build_id()); + ASSERT_EQ("2", profile.module_id(1).build_id()); + ASSERT_TRUE(profile.module_id(1).has_name_md5_prefix()); + ASSERT_EQ(module_md5, profile.module_id(1).name_md5_prefix()); + ASSERT_TRUE(profile.module_id(2).has_build_id()); + ASSERT_EQ("3", profile.module_id(2).build_id()); + ASSERT_TRUE(profile.module_id(2).has_name_md5_prefix()); + ASSERT_EQ(module_md5, profile.module_id(2).name_md5_prefix()); + + ASSERT_TRUE(profile.has_profile_duration_ms()); + EXPECT_EQ(500, profile.profile_duration_ms()); + ASSERT_TRUE(profile.has_sampling_period_ms()); + EXPECT_EQ(100, profile.sampling_period_ms()); } -TEST(CallStackProfileBuilderTest, InvalidModule) { - CallStackProfile profile; +TEST(CallStackProfileBuilderTest, Modules) { + SampledProfile proto; - // Set up a callback to record the CallStackProfile to local variable - // |profile|. + // Set up a callback to record the CallStackProfile to local variable |proto|. auto profile_builder = std::make_unique<CallStackProfileBuilder>( - Bind(&SaveProfile, Unretained(&profile))); + base::BindRepeating(&SaveProfile, base::Unretained(&proto)), + kProfileParams); - Module module1; - Module module2 = {0xccddccdd, "2", - base::FilePath(FILE_PATH_LITERAL("file_path_2"))}; - InternalFrame frame1 = {0xaaaabbbb, module1}; - InternalFrame frame2 = {0xaabbaabb, module2}; + const uintptr_t module_base_address1 = 0x1000; + Module module1; // module1 has no information hence invalid. + InternalFrame frame1 = {module_base_address1 + 0x10, module1}; + + const uintptr_t module_base_address2 = 0x1100; +#if defined(OS_WIN) + uint64_t module_md5 = 0x46C3E4166659AC02ULL; + base::FilePath module_path(L"c:\\some\\path\\to\\chrome.exe"); +#else + uint64_t module_md5 = 0x554838A8451AC36CULL; + base::FilePath module_path("/some/path/to/chrome"); +#endif + Module module2 = {module_base_address2, "2", module_path}; + InternalFrame frame2 = {module_base_address2 + 0x10, module2}; std::vector<InternalFrame> frames = {frame1, frame2}; profile_builder->OnSampleCompleted(frames); profile_builder->OnProfileCompleted(base::TimeDelta(), base::TimeDelta()); - ASSERT_EQ(1u, profile.samples.size()); - ASSERT_EQ(2u, profile.samples[0].frames.size()); + ASSERT_TRUE(proto.has_call_stack_profile()); + const CallStackProfile& profile = proto.call_stack_profile(); - // module1 has no information hence invalid. The module index of the frame is - // therefore base::kUnknownModuleIndex. - EXPECT_EQ(base::kUnknownModuleIndex, - profile.samples[0].frames[0].module_index); + ASSERT_EQ(1, profile.sample_size()); + ASSERT_EQ(2, profile.sample(0).entry_size()); - EXPECT_EQ(0u, profile.samples[0].frames[1].module_index); + ASSERT_FALSE(profile.sample(0).entry(0).has_module_id_index()); + ASSERT_TRUE(profile.sample(0).entry(1).has_module_id_index()); + EXPECT_EQ(0, profile.sample(0).entry(1).module_id_index()); + + ASSERT_EQ(1, profile.module_id().size()); + ASSERT_TRUE(profile.module_id(0).has_build_id()); + ASSERT_EQ("2", profile.module_id(0).build_id()); + ASSERT_TRUE(profile.module_id(0).has_name_md5_prefix()); + ASSERT_EQ(module_md5, profile.module_id(0).name_md5_prefix()); } TEST(CallStackProfileBuilderTest, DedupModules) { - CallStackProfile profile; - auto profile_builder = std::make_unique<CallStackProfileBuilder>( - Bind(&SaveProfile, Unretained(&profile))); + SampledProfile proto; - Module module1 = {0xccccdddd, "1", - base::FilePath(FILE_PATH_LITERAL("file_path_1"))}; - Module module2 = {0xccccdddd, "2", - base::FilePath(FILE_PATH_LITERAL("file_path_2"))}; - InternalFrame frame1 = {0xaaaabbbb, module1}; - InternalFrame frame2 = {0xaabbaabb, module2}; + // Set up a callback to record the CallStackProfile to local variable |proto|. + auto profile_builder = std::make_unique<CallStackProfileBuilder>( + base::BindRepeating(&SaveProfile, base::Unretained(&proto)), + kProfileParams); + + const uintptr_t module_base_address = 0x1000; + +#if defined(OS_WIN) + uint64_t module_md5 = 0x46C3E4166659AC02ULL; + base::FilePath module_path(L"c:\\some\\path\\to\\chrome.exe"); +#else + uint64_t module_md5 = 0x554838A8451AC36CULL; + base::FilePath module_path("/some/path/to/chrome"); +#endif + + Module module1 = {module_base_address, "1", module_path}; + InternalFrame frame1 = {module_base_address + 0x10, module1}; + + Module module2 = {module_base_address, "1", module_path}; + InternalFrame frame2 = {module_base_address + 0x20, module2}; std::vector<InternalFrame> frames = {frame1, frame2}; profile_builder->OnSampleCompleted(frames); profile_builder->OnProfileCompleted(base::TimeDelta(), base::TimeDelta()); - ASSERT_EQ(1u, profile.samples.size()); - ASSERT_EQ(2u, profile.samples[0].frames.size()); + ASSERT_TRUE(proto.has_call_stack_profile()); + const CallStackProfile& profile = proto.call_stack_profile(); - // Since module1 and module2 have the same base address 0xccccdddd, they are - // considered the same module and therefore deduped. - EXPECT_EQ(0u, profile.samples[0].frames[0].module_index); - EXPECT_EQ(0u, profile.samples[0].frames[1].module_index); + ASSERT_EQ(1, profile.sample_size()); + ASSERT_EQ(2, profile.sample(0).entry_size()); + + // Since module1 and module2 have the same base address, they are considered + // the same module and therefore deduped. + ASSERT_TRUE(profile.sample(0).entry(0).has_module_id_index()); + EXPECT_EQ(0, profile.sample(0).entry(0).module_id_index()); + ASSERT_TRUE(profile.sample(0).entry(1).has_module_id_index()); + EXPECT_EQ(0, profile.sample(0).entry(1).module_id_index()); + + ASSERT_EQ(1, profile.module_id().size()); + ASSERT_TRUE(profile.module_id(0).has_build_id()); + ASSERT_EQ("1", profile.module_id(0).build_id()); + ASSERT_TRUE(profile.module_id(0).has_name_md5_prefix()); + ASSERT_EQ(module_md5, profile.module_id(0).name_md5_prefix()); } -} // namespace metrics +} // namespace metrics \ No newline at end of file
diff --git a/components/metrics/call_stack_profile_collector.cc b/components/metrics/call_stack_profile_collector.cc index 7395f3cb..4f84172 100644 --- a/components/metrics/call_stack_profile_collector.cc +++ b/components/metrics/call_stack_profile_collector.cc
@@ -8,7 +8,7 @@ #include <utility> #include "components/metrics/call_stack_profile_metrics_provider.h" -#include "mojo/public/cpp/bindings/interface_request.h" +#include "components/metrics/call_stack_profile_proto_encoder.h" #include "mojo/public/cpp/bindings/strong_binding.h" namespace metrics { @@ -28,15 +28,13 @@ std::move(request)); } -void CallStackProfileCollector::Collect(const CallStackProfileParams& params, - base::TimeTicks start_timestamp, - CallStackProfile profile) { - if (params.process != expected_process_) +void CallStackProfileCollector::Collect(base::TimeTicks start_timestamp, + SampledProfile profile) { + if (profile.process() != ToExecutionContextProcess(expected_process_)) return; - CallStackProfileParams params_copy = params; - CallStackProfileMetricsProvider::ReceiveCompletedProfile( - params_copy, start_timestamp, std::move(profile)); + CallStackProfileMetricsProvider::ReceiveCompletedProfile(start_timestamp, + std::move(profile)); } } // namespace metrics
diff --git a/components/metrics/call_stack_profile_collector.h b/components/metrics/call_stack_profile_collector.h index 97a4db4c..0ffb94d 100644 --- a/components/metrics/call_stack_profile_collector.h +++ b/components/metrics/call_stack_profile_collector.h
@@ -6,14 +6,14 @@ #define COMPONENTS_METRICS_CALL_STACK_PROFILE_COLLECTOR_H_ #include "base/macros.h" +#include "components/metrics/call_stack_profile_params.h" #include "components/metrics/public/interfaces/call_stack_profile_collector.mojom.h" +#include "third_party/metrics_proto/sampled_profile.pb.h" namespace metrics { class CallStackProfileCollector : public mojom::CallStackProfileCollector { public: - using CallStackProfile = base::StackSamplingProfiler::CallStackProfile; - explicit CallStackProfileCollector( CallStackProfileParams::Process expected_process); ~CallStackProfileCollector() override; @@ -23,9 +23,8 @@ mojom::CallStackProfileCollectorRequest request); // mojom::CallStackProfileCollector: - void Collect(const CallStackProfileParams& params, - base::TimeTicks start_timestamp, - CallStackProfile profile) override; + void Collect(base::TimeTicks start_timestamp, + SampledProfile profile) override; private: // Profile params are validated to come from this process. Profiles with a
diff --git a/components/metrics/call_stack_profile_metrics_provider.cc b/components/metrics/call_stack_profile_metrics_provider.cc index 9672bbae..91a73f6 100644 --- a/components/metrics/call_stack_profile_metrics_provider.cc +++ b/components/metrics/call_stack_profile_metrics_provider.cc
@@ -4,35 +4,16 @@ #include "components/metrics/call_stack_profile_metrics_provider.h" -#include <stddef.h> -#include <stdint.h> - -#include <algorithm> -#include <cstring> -#include <map> -#include <string> #include <utility> #include <vector> #include "base/bind.h" -#include "base/location.h" -#include "base/logging.h" #include "base/macros.h" #include "base/memory/singleton.h" -#include "base/metrics/field_trial_params.h" -#include "base/metrics/metrics_hashes.h" -#include "base/process/process_info.h" -#include "base/profiler/stack_sampling_profiler.h" -#include "base/single_thread_task_runner.h" -#include "base/stl_util.h" #include "base/synchronization/lock.h" -#include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" -#include "build/build_config.h" #include "third_party/metrics_proto/chrome_user_metrics_extension.pb.h" -using base::StackSamplingProfiler; - namespace metrics { namespace { @@ -45,53 +26,27 @@ // profile representation. const size_t kMaxPendingProfiles = 1250; -// Provide a mapping from the C++ "enum" definition of various process mile- -// stones to the equivalent protobuf "enum" definition. This table-lookup -// conversion allows for the implementation to evolve and still be compatible -// with the protobuf -- even if there are ever more than 32 defined proto -// values, though never more than 32 could be in-use in a given C++ version -// of the code. -const ProcessPhase - kProtoPhases[CallStackProfileMetricsProvider::MILESTONES_MAX_VALUE] = { - ProcessPhase::MAIN_LOOP_START, - ProcessPhase::MAIN_NAVIGATION_START, - ProcessPhase::MAIN_NAVIGATION_FINISHED, - ProcessPhase::FIRST_NONEMPTY_PAINT, - - ProcessPhase::SHUTDOWN_START, -}; - // ProfileState -------------------------------------------------------------- -// A set of profiles and the CallStackProfileMetricsProvider state associated -// with them. +// A set of profiles and the start time of the collection associated with them. struct ProfileState { - ProfileState(const CallStackProfileParams& params, - base::TimeTicks start_timestamp, - StackSamplingProfiler::CallStackProfile profile); + ProfileState(base::TimeTicks start_timestamp, SampledProfile profile); ProfileState(ProfileState&&); ProfileState& operator=(ProfileState&&); - // The metrics-related parameters provided to - // CallStackProfileMetricsProvider::GetProfilerCallback(). - CallStackProfileParams params; - // The time at which the profile collection was started. base::TimeTicks start_timestamp; - // The call stack profile collected by the profiler. - StackSamplingProfiler::CallStackProfile profile; + // The call stack profile message collected by the profiler. + SampledProfile profile; private: DISALLOW_COPY_AND_ASSIGN(ProfileState); }; -ProfileState::ProfileState(const CallStackProfileParams& params, - base::TimeTicks start_timestamp, - StackSamplingProfiler::CallStackProfile profile) - : params(params), - start_timestamp(start_timestamp), - profile(std::move(profile)) {} +ProfileState::ProfileState(base::TimeTicks start_timestamp, + SampledProfile profile) + : start_timestamp(start_timestamp), profile(std::move(profile)) {} ProfileState::ProfileState(ProfileState&&) = default; @@ -213,194 +168,14 @@ // Will be invoked on either the main thread or the profiler's thread. Provides // the profile to PendingProfiles to append, if the collecting state allows. -void ReceiveCompletedProfileImpl( - const CallStackProfileParams& params, - base::TimeTicks start_timestamp, - StackSamplingProfiler::CallStackProfile profile) { +void ReceiveCompletedProfileImpl(base::TimeTicks start_timestamp, + SampledProfile profile) { PendingProfiles::GetInstance()->CollectProfilesIfCollectionEnabled( - ProfileState(params, start_timestamp, std::move(profile))); + ProfileState(start_timestamp, std::move(profile))); } // Invoked on an arbitrary thread. Ignores the provided profile. -void IgnoreCompletedProfile(StackSamplingProfiler::CallStackProfile profile) {} - -// Functions to encode protobufs ---------------------------------------------- - -// The protobuf expects the MD5 checksum prefix of the module name. -uint64_t HashModuleFilename(const base::FilePath& filename) { - const base::FilePath::StringType basename = filename.BaseName().value(); - // Copy the bytes in basename into a string buffer. - size_t basename_length_in_bytes = - basename.size() * sizeof(base::FilePath::CharType); - std::string name_bytes(basename_length_in_bytes, '\0'); - memcpy(&name_bytes[0], &basename[0], basename_length_in_bytes); - return base::HashMetricName(name_bytes); -} - -// Transcode |sample| into |proto_sample|, using base addresses in |modules| to -// compute module instruction pointer offsets. -void CopySampleToProto( - const StackSamplingProfiler::Sample& sample, - const std::vector<StackSamplingProfiler::Module>& modules, - CallStackProfile::Sample* proto_sample) { - for (const auto& frame : sample.frames) { - CallStackProfile::Entry* entry = proto_sample->add_entry(); - // A frame may not have a valid module. If so, we can't compute the - // instruction pointer offset, and we don't want to send bare pointers, so - // leave call_stack_entry empty. - if (frame.module_index == base::kUnknownModuleIndex) - continue; - int64_t module_offset = - reinterpret_cast<const char*>(frame.instruction_pointer) - - reinterpret_cast<const char*>(modules[frame.module_index].base_address); - DCHECK_GE(module_offset, 0); - entry->set_address(static_cast<uint64_t>(module_offset)); - entry->set_module_id_index(frame.module_index); - } -} - -// Transcode Sample annotations into protobuf fields. The C++ code uses a bit- -// field with each bit corresponding to an entry in an enumeration while the -// protobuf uses a repeated field of individual values. Conversion tables -// allow for arbitrary mapping, though no more than 32 in any given version -// of the code. -void CopyAnnotationsToProto(uint32_t new_milestones, - CallStackProfile::Sample* sample_proto) { - for (size_t bit = 0; new_milestones != 0 && bit < sizeof(new_milestones) * 8; - ++bit) { - const uint32_t flag = 1U << bit; - if (new_milestones & flag) { - if (bit >= base::size(kProtoPhases)) { - NOTREACHED(); - continue; - } - sample_proto->add_process_phase(kProtoPhases[bit]); - new_milestones ^= flag; // Bit is set so XOR will clear it. - } - } -} - -// Transcode |profile| into |proto_profile|. -void CopyProfileToProto( - const StackSamplingProfiler::CallStackProfile& profile, - CallStackProfileParams::SampleOrderingSpec ordering_spec, - CallStackProfile* proto_profile) { - if (profile.samples.empty()) - return; - - const bool preserve_order = - ordering_spec == CallStackProfileParams::PRESERVE_ORDER; - - std::map<StackSamplingProfiler::Sample, int> sample_index; - uint32_t milestones = 0; - for (auto it = profile.samples.begin(); it != profile.samples.end(); ++it) { - int existing_sample_index = -1; - if (preserve_order) { - // Collapse sample with the previous one if they match. Samples match - // if the frame and all annotations are the same. - if (proto_profile->sample_size() > 0 && *it == *(it - 1)) - existing_sample_index = proto_profile->sample_size() - 1; - } else { - auto location = sample_index.find(*it); - if (location != sample_index.end()) - existing_sample_index = location->second; - } - - if (existing_sample_index != -1) { - CallStackProfile::Sample* sample_proto = - proto_profile->mutable_sample()->Mutable(existing_sample_index); - sample_proto->set_count(sample_proto->count() + 1); - continue; - } - - CallStackProfile::Sample* sample_proto = proto_profile->add_sample(); - CopySampleToProto(*it, profile.modules, sample_proto); - sample_proto->set_count(1); - CopyAnnotationsToProto(it->process_milestones & ~milestones, sample_proto); - milestones = it->process_milestones; - - if (!preserve_order) { - sample_index.insert(std::make_pair( - *it, static_cast<int>(proto_profile->sample_size()) - 1)); - } - } - - for (const auto& module : profile.modules) { - CallStackProfile::ModuleIdentifier* module_id = - proto_profile->add_module_id(); - module_id->set_build_id(module.id); - module_id->set_name_md5_prefix(HashModuleFilename(module.filename)); - } - - proto_profile->set_profile_duration_ms( - profile.profile_duration.InMilliseconds()); - proto_profile->set_sampling_period_ms( - profile.sampling_period.InMilliseconds()); -} - -// Translates CallStackProfileParams's process to the corresponding -// execution context Process. -Process ToExecutionContextProcess(CallStackProfileParams::Process process) { - switch (process) { - case CallStackProfileParams::UNKNOWN_PROCESS: - return UNKNOWN_PROCESS; - case CallStackProfileParams::BROWSER_PROCESS: - return BROWSER_PROCESS; - case CallStackProfileParams::RENDERER_PROCESS: - return RENDERER_PROCESS; - case CallStackProfileParams::GPU_PROCESS: - return GPU_PROCESS; - case CallStackProfileParams::UTILITY_PROCESS: - return UTILITY_PROCESS; - case CallStackProfileParams::ZYGOTE_PROCESS: - return ZYGOTE_PROCESS; - case CallStackProfileParams::SANDBOX_HELPER_PROCESS: - return SANDBOX_HELPER_PROCESS; - case CallStackProfileParams::PPAPI_PLUGIN_PROCESS: - return PPAPI_PLUGIN_PROCESS; - case CallStackProfileParams::PPAPI_BROKER_PROCESS: - return PPAPI_BROKER_PROCESS; - } - NOTREACHED(); - return UNKNOWN_PROCESS; -} - -// Translates CallStackProfileParams's thread to the corresponding -// SampledProfile Thread. -Thread ToExecutionContextThread(CallStackProfileParams::Thread thread) { - switch (thread) { - case CallStackProfileParams::UNKNOWN_THREAD: - return UNKNOWN_THREAD; - case CallStackProfileParams::MAIN_THREAD: - return MAIN_THREAD; - case CallStackProfileParams::IO_THREAD: - return IO_THREAD; - case CallStackProfileParams::COMPOSITOR_THREAD: - return COMPOSITOR_THREAD; - } - NOTREACHED(); - return UNKNOWN_THREAD; -} - -// Translates CallStackProfileParams's trigger to the corresponding -// SampledProfile TriggerEvent. -SampledProfile::TriggerEvent ToSampledProfileTriggerEvent( - CallStackProfileParams::Trigger trigger) { - switch (trigger) { - case CallStackProfileParams::UNKNOWN: - return SampledProfile::UNKNOWN_TRIGGER_EVENT; - case CallStackProfileParams::PROCESS_STARTUP: - return SampledProfile::PROCESS_STARTUP; - case CallStackProfileParams::JANKY_TASK: - return SampledProfile::JANKY_TASK; - case CallStackProfileParams::THREAD_HUNG: - return SampledProfile::THREAD_HUNG; - case CallStackProfileParams::PERIODIC_COLLECTION: - return SampledProfile::PERIODIC_COLLECTION; - } - NOTREACHED(); - return SampledProfile::UNKNOWN_TRIGGER_EVENT; -} +void IgnoreCompletedProfile(SampledProfile profile) {} } // namespace @@ -414,24 +189,22 @@ CallStackProfileMetricsProvider::~CallStackProfileMetricsProvider() {} CallStackProfileBuilder::CompletedCallback -CallStackProfileMetricsProvider::GetProfilerCallbackForBrowserProcess( - const CallStackProfileParams& params) { +CallStackProfileMetricsProvider::GetProfilerCallbackForBrowserProcess() { // Ignore the profile if the collection is disabled. If the collection state // changes while collecting, this will be detected by the callback and // profile will be ignored at that point. if (!PendingProfiles::GetInstance()->IsCollectionEnabled()) - return base::Bind(&IgnoreCompletedProfile); + return base::BindRepeating(&IgnoreCompletedProfile); - return base::Bind(&ReceiveCompletedProfileImpl, params, - base::TimeTicks::Now()); + return base::BindRepeating(&ReceiveCompletedProfileImpl, + base::TimeTicks::Now()); } // static void CallStackProfileMetricsProvider::ReceiveCompletedProfile( - const CallStackProfileParams& params, base::TimeTicks profile_start_time, - StackSamplingProfiler::CallStackProfile profile) { - ReceiveCompletedProfileImpl(params, profile_start_time, std::move(profile)); + SampledProfile profile) { + ReceiveCompletedProfileImpl(profile_start_time, std::move(profile)); } void CallStackProfileMetricsProvider::OnRecordingEnabled() { @@ -453,15 +226,7 @@ for (const auto& profile_state : pending_profiles) { SampledProfile* sampled_profile = uma_proto->add_sampled_profile(); - sampled_profile->set_process( - ToExecutionContextProcess(profile_state.params.process)); - sampled_profile->set_thread( - ToExecutionContextThread(profile_state.params.thread)); - sampled_profile->set_trigger_event( - ToSampledProfileTriggerEvent(profile_state.params.trigger)); - CopyProfileToProto(profile_state.profile, - profile_state.params.ordering_spec, - sampled_profile->mutable_call_stack_profile()); + *sampled_profile = std::move(profile_state.profile); } }
diff --git a/components/metrics/call_stack_profile_metrics_provider.h b/components/metrics/call_stack_profile_metrics_provider.h index 4b05c4e..978b4d2 100644 --- a/components/metrics/call_stack_profile_metrics_provider.h +++ b/components/metrics/call_stack_profile_metrics_provider.h
@@ -7,11 +7,10 @@ #include "base/feature_list.h" #include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "base/profiler/stack_sampling_profiler.h" +#include "base/time/time.h" #include "components/metrics/call_stack_profile_builder.h" -#include "components/metrics/call_stack_profile_params.h" #include "components/metrics/metrics_provider.h" +#include "third_party/metrics_proto/sampled_profile.pb.h" namespace metrics { @@ -20,21 +19,6 @@ // Performs metrics logging for the stack sampling profiler. class CallStackProfileMetricsProvider : public MetricsProvider { public: - // These milestones of a process lifetime can be passed as process "mile- - // stones" to CallStackProfileBuilder::SetProcessMilestone(). Be sure to - // update the translation constants at the top of the .cc file when this is - // changed. - enum Milestones : int { - MAIN_LOOP_START, - MAIN_NAVIGATION_START, - MAIN_NAVIGATION_FINISHED, - FIRST_NONEMPTY_PAINT, - - SHUTDOWN_START, - - MILESTONES_MAX_VALUE - }; - CallStackProfileMetricsProvider(); ~CallStackProfileMetricsProvider() override; @@ -43,16 +27,14 @@ // immediately passed to the CallStackProfileBuilder, and should not be // reused. static CallStackProfileBuilder::CompletedCallback - GetProfilerCallbackForBrowserProcess(const CallStackProfileParams& params); + GetProfilerCallbackForBrowserProcess(); // Provides completed stack profile to the metrics provider. Intended for use // when receiving profiles over IPC. In-process StackSamplingProfiler users // should instead use a variant of GetProfilerCallback*(). |profile| is not // const& because it must be passed with std::move. - static void ReceiveCompletedProfile( - const CallStackProfileParams& params, - base::TimeTicks profile_start_time, - base::StackSamplingProfiler::CallStackProfile profile); + static void ReceiveCompletedProfile(base::TimeTicks profile_start_time, + SampledProfile profile); // MetricsProvider: void OnRecordingEnabled() override;
diff --git a/components/metrics/call_stack_profile_metrics_provider_unittest.cc b/components/metrics/call_stack_profile_metrics_provider_unittest.cc index 309235c3..c303911 100644 --- a/components/metrics/call_stack_profile_metrics_provider_unittest.cc +++ b/components/metrics/call_stack_profile_metrics_provider_unittest.cc
@@ -4,111 +4,13 @@ #include "components/metrics/call_stack_profile_metrics_provider.h" -#include <stddef.h> -#include <stdint.h> - #include <utility> #include "base/macros.h" -#include "base/profiler/stack_sampling_profiler.h" -#include "base/run_loop.h" -#include "base/stl_util.h" -#include "base/strings/string_number_conversions.h" #include "base/test/scoped_feature_list.h" -#include "build/build_config.h" -#include "components/metrics/call_stack_profile_params.h" -#include "components/variations/entropy_provider.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/metrics_proto/chrome_user_metrics_extension.pb.h" -using base::StackSamplingProfiler; -using Frame = StackSamplingProfiler::Frame; -using Module = StackSamplingProfiler::Module; -using Sample = StackSamplingProfiler::Sample; -using Profile = StackSamplingProfiler::CallStackProfile; - -namespace { - -struct ExpectedProtoModule { - const char* build_id; - uint64_t name_md5; - uint64_t base_address; -}; - -struct ExpectedProtoEntry { - int32_t module_index; - uint64_t address; -}; - -struct ExpectedProtoSample { - uint32_t process_milestones; // Bit-field of expected milestones. - const ExpectedProtoEntry* entries; - int entry_count; - int64_t entry_repeats; -}; - -struct ExpectedProtoProfile { - int32_t duration_ms; - int32_t period_ms; - const ExpectedProtoModule* modules; - int module_count; - const ExpectedProtoSample* samples; - int sample_count; -}; - -class ProfileFactory { - public: - ProfileFactory(int duration_ms, int interval_ms) { - profile_.profile_duration = base::TimeDelta::FromMilliseconds(duration_ms); - profile_.sampling_period = base::TimeDelta::FromMilliseconds(interval_ms); - } - ~ProfileFactory() {} - - ProfileFactory& AddMilestone(int milestone); - ProfileFactory& NewSample(); - ProfileFactory& AddFrame(size_t module, uintptr_t offset); - ProfileFactory& DefineModule(const char* name, - const base::FilePath& path, - uintptr_t base); - - Profile Build(); - - private: - Profile profile_; - uint32_t process_milestones_ = 0; - - DISALLOW_COPY_AND_ASSIGN(ProfileFactory); -}; - -ProfileFactory& ProfileFactory::AddMilestone(int milestone) { - process_milestones_ |= 1 << milestone; - return *this; -} - -ProfileFactory& ProfileFactory::NewSample() { - profile_.samples.push_back(Sample()); - profile_.samples.back().process_milestones = process_milestones_; - return *this; -} - -ProfileFactory& ProfileFactory::AddFrame(size_t module, uintptr_t offset) { - profile_.samples.back().frames.push_back(Frame(offset, module)); - return *this; -} - -ProfileFactory& ProfileFactory::DefineModule(const char* name, - const base::FilePath& path, - uintptr_t base) { - profile_.modules.push_back(Module(base, name, path)); - return *this; -} - -Profile ProfileFactory::Build() { - return std::move(profile_); -} - -} // namespace - namespace metrics { // This test fixture enables the feature that @@ -123,15 +25,11 @@ ~CallStackProfileMetricsProviderTest() override {} // Utility function to append a profile to the metrics provider. - void AppendProfile(const CallStackProfileParams& params, Profile profile) { - CallStackProfileMetricsProvider::GetProfilerCallbackForBrowserProcess( - params) - .Run(std::move(profile)); + void AppendProfile(SampledProfile proto) { + CallStackProfileMetricsProvider::GetProfilerCallbackForBrowserProcess().Run( + std::move(proto)); } - void VerifyProfileProto(const ExpectedProtoProfile& expected, - const SampledProfile& proto); - private: // Exposes the feature from the CallStackProfileMetricsProvider. class TestState : public CallStackProfileMetricsProvider { @@ -145,329 +43,36 @@ DISALLOW_COPY_AND_ASSIGN(CallStackProfileMetricsProviderTest); }; -void CallStackProfileMetricsProviderTest::VerifyProfileProto( - const ExpectedProtoProfile& expected, - const SampledProfile& proto) { - ASSERT_TRUE(proto.has_call_stack_profile()); - const CallStackProfile& stack = proto.call_stack_profile(); - - ASSERT_TRUE(stack.has_profile_duration_ms()); - EXPECT_EQ(expected.duration_ms, stack.profile_duration_ms()); - ASSERT_TRUE(stack.has_sampling_period_ms()); - EXPECT_EQ(expected.period_ms, stack.sampling_period_ms()); - - ASSERT_EQ(expected.module_count, stack.module_id().size()); - for (int m = 0; m < expected.module_count; ++m) { - SCOPED_TRACE("module " + base::IntToString(m)); - const CallStackProfile::ModuleIdentifier& module_id = - stack.module_id().Get(m); - ASSERT_TRUE(module_id.has_build_id()); - EXPECT_EQ(expected.modules[m].build_id, module_id.build_id()); - ASSERT_TRUE(module_id.has_name_md5_prefix()); - EXPECT_EQ(expected.modules[m].name_md5, module_id.name_md5_prefix()); - } - - ASSERT_EQ(expected.sample_count, stack.sample().size()); - for (int s = 0; s < expected.sample_count; ++s) { - SCOPED_TRACE("sample " + base::IntToString(s)); - const CallStackProfile::Sample& proto_sample = stack.sample().Get(s); - - uint32_t process_milestones = 0; - for (int i = 0; i < proto_sample.process_phase().size(); ++i) - process_milestones |= 1U << proto_sample.process_phase().Get(i); - EXPECT_EQ(expected.samples[s].process_milestones, process_milestones); - - ASSERT_EQ(expected.samples[s].entry_count, proto_sample.entry().size()); - ASSERT_TRUE(proto_sample.has_count()); - EXPECT_EQ(expected.samples[s].entry_repeats, proto_sample.count()); - for (int e = 0; e < expected.samples[s].entry_count; ++e) { - SCOPED_TRACE("entry " + base::NumberToString(e)); - const CallStackProfile::Entry& entry = proto_sample.entry().Get(e); - if (expected.samples[s].entries[e].module_index >= 0) { - ASSERT_TRUE(entry.has_module_id_index()); - EXPECT_EQ(expected.samples[s].entries[e].module_index, - entry.module_id_index()); - ASSERT_TRUE(entry.has_address()); - EXPECT_EQ(expected.samples[s].entries[e].address, entry.address()); - } else { - EXPECT_FALSE(entry.has_module_id_index()); - EXPECT_FALSE(entry.has_address()); - } - } - } -} - -// Checks that all duplicate samples are collapsed with -// preserve_sample_ordering = false. -TEST_F(CallStackProfileMetricsProviderTest, RepeatedStacksUnordered) { - const uintptr_t module_base_address = 0x1000; - const char* module_name = "ABCD"; - -#if defined(OS_WIN) - uint64_t module_md5 = 0x46C3E4166659AC02ULL; - base::FilePath module_path(L"c:\\some\\path\\to\\chrome.exe"); -#else - uint64_t module_md5 = 0x554838A8451AC36CULL; - base::FilePath module_path("/some/path/to/chrome"); -#endif - - Profile profile = - ProfileFactory(100, 10) - .DefineModule(module_name, module_path, module_base_address) - - .AddMilestone(0) - .NewSample() - .AddFrame(0, module_base_address + 0x10) - .NewSample() - .AddFrame(0, module_base_address + 0x20) - .NewSample() - .AddFrame(0, module_base_address + 0x10) - .NewSample() - .AddFrame(0, module_base_address + 0x10) - - .AddMilestone(1) - .NewSample() - .AddFrame(0, module_base_address + 0x10) - .NewSample() - .AddFrame(0, module_base_address + 0x20) - .NewSample() - .AddFrame(0, module_base_address + 0x10) - .NewSample() - .AddFrame(0, module_base_address + 0x10) - - .Build(); - - const ExpectedProtoModule expected_proto_modules[] = { - { module_name, module_md5, module_base_address }, - }; - - const ExpectedProtoEntry expected_proto_entries[] = { - { 0, 0x10 }, - { 0, 0x20 }, - }; - const ExpectedProtoSample expected_proto_samples[] = { - { 1, &expected_proto_entries[0], 1, 3 }, - { 0, &expected_proto_entries[1], 1, 1 }, - { 2, &expected_proto_entries[0], 1, 3 }, - { 0, &expected_proto_entries[1], 1, 1 }, - }; - - const ExpectedProtoProfile expected_proto_profile = { - 100, - 10, - expected_proto_modules, - base::size(expected_proto_modules), - expected_proto_samples, - base::size(expected_proto_samples), - }; - +// Checks that the pending profile is passed to ProvideCurrentSessionData. +TEST_F(CallStackProfileMetricsProviderTest, ProvideCurrentSessionData) { CallStackProfileMetricsProvider provider; provider.OnRecordingEnabled(); - CallStackProfileParams params(CallStackProfileParams::BROWSER_PROCESS, - CallStackProfileParams::MAIN_THREAD, - CallStackProfileParams::PROCESS_STARTUP, - CallStackProfileParams::MAY_SHUFFLE); - AppendProfile(params, std::move(profile)); + AppendProfile(SampledProfile()); ChromeUserMetricsExtension uma_proto; provider.ProvideCurrentSessionData(&uma_proto); - ASSERT_EQ(1, uma_proto.sampled_profile().size()); - VerifyProfileProto(expected_proto_profile, - uma_proto.sampled_profile().Get(0)); -} - -// Checks that only contiguous duplicate samples are collapsed with -// preserve_sample_ordering = true. -TEST_F(CallStackProfileMetricsProviderTest, RepeatedStacksOrdered) { - const uintptr_t module_base_address = 0x1000; - const char* module_name = "ABCD"; - -#if defined(OS_WIN) - uint64_t module_md5 = 0x46C3E4166659AC02ULL; - base::FilePath module_path(L"c:\\some\\path\\to\\chrome.exe"); -#else - uint64_t module_md5 = 0x554838A8451AC36CULL; - base::FilePath module_path("/some/path/to/chrome"); -#endif - - Profile profile = - ProfileFactory(100, 10) - .DefineModule(module_name, module_path, module_base_address) - - .AddMilestone(0) - .NewSample() - .AddFrame(0, module_base_address + 0x10) - .NewSample() - .AddFrame(0, module_base_address + 0x20) - .NewSample() - .AddFrame(0, module_base_address + 0x10) - .NewSample() - .AddFrame(0, module_base_address + 0x10) - - .AddMilestone(1) - .NewSample() - .AddFrame(0, module_base_address + 0x10) - .NewSample() - .AddFrame(0, module_base_address + 0x20) - .NewSample() - .AddFrame(0, module_base_address + 0x10) - .NewSample() - .AddFrame(0, module_base_address + 0x10) - - .Build(); - - const ExpectedProtoModule expected_proto_modules[] = { - { module_name, module_md5, module_base_address }, - }; - - const ExpectedProtoEntry expected_proto_entries[] = { - { 0, 0x10 }, - { 0, 0x20 }, - }; - const ExpectedProtoSample expected_proto_samples[] = { - { 1, &expected_proto_entries[0], 1, 1 }, - { 0, &expected_proto_entries[1], 1, 1 }, - { 0, &expected_proto_entries[0], 1, 2 }, - { 2, &expected_proto_entries[0], 1, 1 }, - { 0, &expected_proto_entries[1], 1, 1 }, - { 0, &expected_proto_entries[0], 1, 2 }, - }; - - const ExpectedProtoProfile expected_proto_profile = { - 100, - 10, - expected_proto_modules, - base::size(expected_proto_modules), - expected_proto_samples, - base::size(expected_proto_samples), - }; - - CallStackProfileMetricsProvider provider; - provider.OnRecordingEnabled(); - CallStackProfileParams params(CallStackProfileParams::BROWSER_PROCESS, - CallStackProfileParams::MAIN_THREAD, - CallStackProfileParams::PROCESS_STARTUP, - CallStackProfileParams::PRESERVE_ORDER); - AppendProfile(params, std::move(profile)); - ChromeUserMetricsExtension uma_proto; - provider.ProvideCurrentSessionData(&uma_proto); - - ASSERT_EQ(1, uma_proto.sampled_profile().size()); - VerifyProfileProto(expected_proto_profile, - uma_proto.sampled_profile().Get(0)); -} - -// Checks that unknown modules produce an empty Entry. -TEST_F(CallStackProfileMetricsProviderTest, UnknownModule) { - Profile profile = ProfileFactory(100, 10) - .NewSample() - .AddFrame(base::kUnknownModuleIndex, 0x1234) - .Build(); - - const ExpectedProtoEntry expected_proto_entries[] = { - { -1, 0 }, - }; - const ExpectedProtoSample expected_proto_samples[] = { - { 0, &expected_proto_entries[0], 1, 1 }, - }; - - const ExpectedProtoProfile expected_proto_profile = { - 100, - 10, - nullptr, - 0, - expected_proto_samples, - base::size(expected_proto_samples), - }; - - CallStackProfileMetricsProvider provider; - provider.OnRecordingEnabled(); - CallStackProfileParams params(CallStackProfileParams::BROWSER_PROCESS, - CallStackProfileParams::MAIN_THREAD, - CallStackProfileParams::PROCESS_STARTUP, - CallStackProfileParams::MAY_SHUFFLE); - AppendProfile(params, std::move(profile)); - ChromeUserMetricsExtension uma_proto; - provider.ProvideCurrentSessionData(&uma_proto); - - ASSERT_EQ(1, uma_proto.sampled_profile().size()); - VerifyProfileProto(expected_proto_profile, - uma_proto.sampled_profile().Get(0)); -} - -// Checks that the pending profile is only passed back to -// ProvideCurrentSessionData once. -TEST_F(CallStackProfileMetricsProviderTest, ProfileProvidedOnlyOnce) { - CallStackProfileMetricsProvider provider; - for (int r = 0; r < 2; ++r) { - Profile profile = - // Use the sampling period to distinguish the two profiles. - ProfileFactory(100, r) - .NewSample() - .AddFrame(base::kUnknownModuleIndex, 0x1234) - .Build(); - - CallStackProfileMetricsProvider provider; - provider.OnRecordingEnabled(); - CallStackProfileParams params(CallStackProfileParams::BROWSER_PROCESS, - CallStackProfileParams::MAIN_THREAD, - CallStackProfileParams::PROCESS_STARTUP, - CallStackProfileParams::MAY_SHUFFLE); - AppendProfile(params, std::move(profile)); - ChromeUserMetricsExtension uma_proto; - provider.ProvideCurrentSessionData(&uma_proto); - - ASSERT_EQ(1, uma_proto.sampled_profile().size()); - const SampledProfile& sampled_profile = uma_proto.sampled_profile().Get(0); - ASSERT_TRUE(sampled_profile.has_call_stack_profile()); - const CallStackProfile& call_stack_profile = - sampled_profile.call_stack_profile(); - ASSERT_TRUE(call_stack_profile.has_sampling_period_ms()); - EXPECT_EQ(r, call_stack_profile.sampling_period_ms()); - } } // Checks that the pending profile is provided to ProvideCurrentSessionData // when collected before CallStackProfileMetricsProvider is instantiated. TEST_F(CallStackProfileMetricsProviderTest, ProfileProvidedWhenCollectedBeforeInstantiation) { - Profile profile = ProfileFactory(100, 10) - .NewSample() - .AddFrame(base::kUnknownModuleIndex, 0x1234) - .Build(); - - CallStackProfileParams params(CallStackProfileParams::BROWSER_PROCESS, - CallStackProfileParams::MAIN_THREAD, - CallStackProfileParams::PROCESS_STARTUP, - CallStackProfileParams::MAY_SHUFFLE); - AppendProfile(params, std::move(profile)); - + AppendProfile(SampledProfile()); CallStackProfileMetricsProvider provider; provider.OnRecordingEnabled(); ChromeUserMetricsExtension uma_proto; provider.ProvideCurrentSessionData(&uma_proto); - EXPECT_EQ(1, uma_proto.sampled_profile_size()); } // Checks that the pending profile is not provided to ProvideCurrentSessionData // while recording is disabled. TEST_F(CallStackProfileMetricsProviderTest, ProfileNotProvidedWhileDisabled) { - Profile profile = ProfileFactory(100, 10) - .NewSample() - .AddFrame(base::kUnknownModuleIndex, 0x1234) - .Build(); - CallStackProfileMetricsProvider provider; provider.OnRecordingDisabled(); - CallStackProfileParams params(CallStackProfileParams::BROWSER_PROCESS, - CallStackProfileParams::MAIN_THREAD, - CallStackProfileParams::PROCESS_STARTUP, - CallStackProfileParams::MAY_SHUFFLE); - AppendProfile(params, std::move(profile)); + AppendProfile(SampledProfile()); ChromeUserMetricsExtension uma_proto; provider.ProvideCurrentSessionData(&uma_proto); - EXPECT_EQ(0, uma_proto.sampled_profile_size()); } @@ -477,23 +82,12 @@ ProfileNotProvidedAfterChangeToDisabled) { CallStackProfileMetricsProvider provider; provider.OnRecordingEnabled(); - CallStackProfileParams params(CallStackProfileParams::BROWSER_PROCESS, - CallStackProfileParams::MAIN_THREAD, - CallStackProfileParams::PROCESS_STARTUP, - CallStackProfileParams::MAY_SHUFFLE); CallStackProfileBuilder::CompletedCallback callback = - CallStackProfileMetricsProvider::GetProfilerCallbackForBrowserProcess( - params); + CallStackProfileMetricsProvider::GetProfilerCallbackForBrowserProcess(); provider.OnRecordingDisabled(); - - Profile profile = ProfileFactory(100, 10) - .NewSample() - .AddFrame(base::kUnknownModuleIndex, 0x1234) - .Build(); - callback.Run(std::move(profile)); + callback.Run(SampledProfile()); ChromeUserMetricsExtension uma_proto; provider.ProvideCurrentSessionData(&uma_proto); - EXPECT_EQ(0, uma_proto.sampled_profile_size()); } @@ -503,24 +97,13 @@ ProfileNotProvidedAfterChangeToDisabledThenEnabled) { CallStackProfileMetricsProvider provider; provider.OnRecordingEnabled(); - CallStackProfileParams params(CallStackProfileParams::BROWSER_PROCESS, - CallStackProfileParams::MAIN_THREAD, - CallStackProfileParams::PROCESS_STARTUP, - CallStackProfileParams::MAY_SHUFFLE); CallStackProfileBuilder::CompletedCallback callback = - CallStackProfileMetricsProvider::GetProfilerCallbackForBrowserProcess( - params); + CallStackProfileMetricsProvider::GetProfilerCallbackForBrowserProcess(); provider.OnRecordingDisabled(); provider.OnRecordingEnabled(); - - Profile profile = ProfileFactory(100, 10) - .NewSample() - .AddFrame(base::kUnknownModuleIndex, 0x1234) - .Build(); - callback.Run(std::move(profile)); + callback.Run(SampledProfile()); ChromeUserMetricsExtension uma_proto; provider.ProvideCurrentSessionData(&uma_proto); - EXPECT_EQ(0, uma_proto.sampled_profile_size()); } @@ -530,23 +113,12 @@ ProfileNotProvidedAfterChangeFromDisabled) { CallStackProfileMetricsProvider provider; provider.OnRecordingDisabled(); - CallStackProfileParams params(CallStackProfileParams::BROWSER_PROCESS, - CallStackProfileParams::MAIN_THREAD, - CallStackProfileParams::PROCESS_STARTUP, - CallStackProfileParams::MAY_SHUFFLE); CallStackProfileBuilder::CompletedCallback callback = - CallStackProfileMetricsProvider::GetProfilerCallbackForBrowserProcess( - params); + CallStackProfileMetricsProvider::GetProfilerCallbackForBrowserProcess(); provider.OnRecordingEnabled(); - - Profile profile = ProfileFactory(100, 10) - .NewSample() - .AddFrame(base::kUnknownModuleIndex, 0x1234) - .Build(); - callback.Run(std::move(profile)); + callback.Run(SampledProfile()); ChromeUserMetricsExtension uma_proto; provider.ProvideCurrentSessionData(&uma_proto); - EXPECT_EQ(0, uma_proto.sampled_profile_size()); }
diff --git a/components/metrics/call_stack_profile_params.h b/components/metrics/call_stack_profile_params.h index 05e4203..5e78ef1 100644 --- a/components/metrics/call_stack_profile_params.h +++ b/components/metrics/call_stack_profile_params.h
@@ -47,16 +47,6 @@ TRIGGER_LAST = PERIODIC_COLLECTION }; - // Allows the caller to specify whether sample ordering is - // important. MAY_SHUFFLE should always be used to enable better compression, - // unless the use case needs order to be preserved for a specific reason. - enum SampleOrderingSpec { - // The provider may shuffle the sample order to improve compression. - MAY_SHUFFLE, - // The provider will not change the sample order. - PRESERVE_ORDER - }; - // The default constructor is required for mojo and should not be used // otherwise. A valid trigger should always be specified. constexpr CallStackProfileParams() @@ -64,15 +54,7 @@ constexpr CallStackProfileParams(Process process, Thread thread, Trigger trigger) - : CallStackProfileParams(process, thread, trigger, MAY_SHUFFLE) {} - constexpr CallStackProfileParams(Process process, - Thread thread, - Trigger trigger, - SampleOrderingSpec ordering_spec) - : process(process), - thread(thread), - trigger(trigger), - ordering_spec(ordering_spec) {} + : process(process), thread(thread), trigger(trigger) {} // The collection process. Process process; @@ -82,9 +64,6 @@ // The triggering event. Trigger trigger; - - // Whether to preserve sample ordering. - SampleOrderingSpec ordering_spec; }; } // namespace metrics
diff --git a/components/metrics/call_stack_profile_proto_encoder.cc b/components/metrics/call_stack_profile_proto_encoder.cc new file mode 100644 index 0000000..d23842b2 --- /dev/null +++ b/components/metrics/call_stack_profile_proto_encoder.cc
@@ -0,0 +1,191 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/metrics/call_stack_profile_proto_encoder.h" + +#include <stddef.h> + +#include <cstring> +#include <map> +#include <string> +#include <utility> + +#include "base/logging.h" +#include "base/metrics/metrics_hashes.h" +#include "base/stl_util.h" +#include "components/metrics/call_stack_profile_builder.h" + +namespace metrics { + +namespace { + +// Provide a mapping from the C++ "enum" definition of various process mile- +// stones to the equivalent protobuf "enum" definition. This table-lookup +// conversion allows for the implementation to evolve and still be compatible +// with the protobuf -- even if there are ever more than 32 defined proto +// values, though never more than 32 could be in-use in a given C++ version +// of the code. +const ProcessPhase kProtoPhases[CallStackProfileBuilder::MILESTONES_MAX_VALUE] = + { + ProcessPhase::MAIN_LOOP_START, + ProcessPhase::MAIN_NAVIGATION_START, + ProcessPhase::MAIN_NAVIGATION_FINISHED, + ProcessPhase::FIRST_NONEMPTY_PAINT, + + ProcessPhase::SHUTDOWN_START, +}; + +} // namespace + +uint64_t HashModuleFilename(const base::FilePath& filename) { + const base::FilePath::StringType basename = filename.BaseName().value(); + // Copy the bytes in basename into a string buffer. + size_t basename_length_in_bytes = + basename.size() * sizeof(base::FilePath::CharType); + std::string name_bytes(basename_length_in_bytes, '\0'); + memcpy(&name_bytes[0], &basename[0], basename_length_in_bytes); + return base::HashMetricName(name_bytes); +} + +void CopySampleToProto( + const base::StackSamplingProfiler::Sample& sample, + const std::vector<base::StackSamplingProfiler::Module>& modules, + CallStackProfile::Sample* proto_sample) { + for (const auto& frame : sample.frames) { + CallStackProfile::Entry* entry = proto_sample->add_entry(); + // A frame may not have a valid module. If so, we can't compute the + // instruction pointer offset, and we don't want to send bare pointers, so + // leave call_stack_entry empty. + if (frame.module_index == base::kUnknownModuleIndex) + continue; + int64_t module_offset = + reinterpret_cast<const char*>(frame.instruction_pointer) - + reinterpret_cast<const char*>(modules[frame.module_index].base_address); + DCHECK_GE(module_offset, 0); + entry->set_address(static_cast<uint64_t>(module_offset)); + entry->set_module_id_index(frame.module_index); + } +} + +void CopyAnnotationsToProto(uint32_t new_milestones, + CallStackProfile::Sample* sample_proto) { + for (size_t bit = 0; new_milestones != 0 && bit < sizeof(new_milestones) * 8; + ++bit) { + const uint32_t flag = 1U << bit; + if (new_milestones & flag) { + if (bit >= base::size(kProtoPhases)) { + NOTREACHED(); + continue; + } + sample_proto->add_process_phase(kProtoPhases[bit]); + new_milestones ^= flag; // Bit is set so XOR will clear it. + } + } +} + +// The sample order in |profile| is not preserved in |proto_profile|. +void CopyProfileToProto( + const base::StackSamplingProfiler::CallStackProfile& profile, + CallStackProfile* proto_profile) { + if (profile.samples.empty()) + return; + + std::map<base::StackSamplingProfiler::Sample, int> sample_index; + uint32_t milestones = 0; + for (auto it = profile.samples.begin(); it != profile.samples.end(); ++it) { + int existing_sample_index = -1; + + auto location = sample_index.find(*it); + if (location != sample_index.end()) + existing_sample_index = location->second; + + if (existing_sample_index != -1) { + CallStackProfile::Sample* sample_proto = + proto_profile->mutable_sample()->Mutable(existing_sample_index); + sample_proto->set_count(sample_proto->count() + 1); + continue; + } + + CallStackProfile::Sample* sample_proto = proto_profile->add_sample(); + CopySampleToProto(*it, profile.modules, sample_proto); + sample_proto->set_count(1); + CopyAnnotationsToProto(it->process_milestones & ~milestones, sample_proto); + milestones = it->process_milestones; + + sample_index.insert(std::make_pair( + *it, static_cast<int>(proto_profile->sample_size()) - 1)); + } + + for (const auto& module : profile.modules) { + CallStackProfile::ModuleIdentifier* module_id = + proto_profile->add_module_id(); + module_id->set_build_id(module.id); + module_id->set_name_md5_prefix(HashModuleFilename(module.filename)); + } + + proto_profile->set_profile_duration_ms( + profile.profile_duration.InMilliseconds()); + proto_profile->set_sampling_period_ms( + profile.sampling_period.InMilliseconds()); +} + +Process ToExecutionContextProcess(CallStackProfileParams::Process process) { + switch (process) { + case CallStackProfileParams::UNKNOWN_PROCESS: + return UNKNOWN_PROCESS; + case CallStackProfileParams::BROWSER_PROCESS: + return BROWSER_PROCESS; + case CallStackProfileParams::RENDERER_PROCESS: + return RENDERER_PROCESS; + case CallStackProfileParams::GPU_PROCESS: + return GPU_PROCESS; + case CallStackProfileParams::UTILITY_PROCESS: + return UTILITY_PROCESS; + case CallStackProfileParams::ZYGOTE_PROCESS: + return ZYGOTE_PROCESS; + case CallStackProfileParams::SANDBOX_HELPER_PROCESS: + return SANDBOX_HELPER_PROCESS; + case CallStackProfileParams::PPAPI_PLUGIN_PROCESS: + return PPAPI_PLUGIN_PROCESS; + case CallStackProfileParams::PPAPI_BROKER_PROCESS: + return PPAPI_BROKER_PROCESS; + } + NOTREACHED(); + return UNKNOWN_PROCESS; +} + +Thread ToExecutionContextThread(CallStackProfileParams::Thread thread) { + switch (thread) { + case CallStackProfileParams::UNKNOWN_THREAD: + return UNKNOWN_THREAD; + case CallStackProfileParams::MAIN_THREAD: + return MAIN_THREAD; + case CallStackProfileParams::IO_THREAD: + return IO_THREAD; + case CallStackProfileParams::COMPOSITOR_THREAD: + return COMPOSITOR_THREAD; + } + NOTREACHED(); + return UNKNOWN_THREAD; +} + +SampledProfile::TriggerEvent ToSampledProfileTriggerEvent( + CallStackProfileParams::Trigger trigger) { + switch (trigger) { + case CallStackProfileParams::UNKNOWN: + return SampledProfile::UNKNOWN_TRIGGER_EVENT; + case CallStackProfileParams::PROCESS_STARTUP: + return SampledProfile::PROCESS_STARTUP; + case CallStackProfileParams::JANKY_TASK: + return SampledProfile::JANKY_TASK; + case CallStackProfileParams::THREAD_HUNG: + return SampledProfile::THREAD_HUNG; + case CallStackProfileParams::PERIODIC_COLLECTION: + return SampledProfile::PERIODIC_COLLECTION; + } + NOTREACHED(); + return SampledProfile::UNKNOWN_TRIGGER_EVENT; +} + +} // namespace metrics
diff --git a/components/metrics/call_stack_profile_proto_encoder.h b/components/metrics/call_stack_profile_proto_encoder.h new file mode 100644 index 0000000..7628c8cf --- /dev/null +++ b/components/metrics/call_stack_profile_proto_encoder.h
@@ -0,0 +1,57 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_METRICS_CALL_STACK_PROFILE_PROTO_ENCODER_H_ +#define COMPONENTS_METRICS_CALL_STACK_PROFILE_PROTO_ENCODER_H_ + +#include <vector> + +#include "base/files/file_path.h" +#include "base/profiler/stack_sampling_profiler.h" +#include "components/metrics/call_stack_profile_params.h" +#include "third_party/metrics_proto/sampled_profile.pb.h" + +namespace metrics { + +// These functions are used to encode protobufs. + +// The protobuf expects the MD5 checksum prefix of the module name. +uint64_t HashModuleFilename(const base::FilePath& filename); + +// Transcode |sample| into |proto_sample|, using base addresses in |modules| to +// compute module instruction pointer offsets. +void CopySampleToProto( + const base::StackSamplingProfiler::Sample& sample, + const std::vector<base::StackSamplingProfiler::Module>& modules, + CallStackProfile::Sample* proto_sample); + +// Transcode Sample annotations into protobuf fields. The C++ code uses a bit- +// field with each bit corresponding to an entry in an enumeration while the +// protobuf uses a repeated field of individual values. Conversion tables +// allow for arbitrary mapping, though no more than 32 in any given version +// of the code. +void CopyAnnotationsToProto(uint32_t new_milestones, + CallStackProfile::Sample* sample_proto); + +// Transcode |profile| into |proto_profile|. +void CopyProfileToProto( + const base::StackSamplingProfiler::CallStackProfile& profile, + CallStackProfile* proto_profile); + +// Translates CallStackProfileParams's process to the corresponding +// execution context Process. +Process ToExecutionContextProcess(CallStackProfileParams::Process process); + +// Translates CallStackProfileParams's thread to the corresponding +// SampledProfile Thread. +Thread ToExecutionContextThread(CallStackProfileParams::Thread thread); + +// Translates CallStackProfileParams's trigger to the corresponding +// SampledProfile TriggerEvent. +SampledProfile::TriggerEvent ToSampledProfileTriggerEvent( + CallStackProfileParams::Trigger trigger); + +} // namespace metrics + +#endif // COMPONENTS_METRICS_CALL_STACK_PROFILE_PROTO_ENCODER_H_
diff --git a/components/metrics/call_stack_profile_proto_encoder_unittest.cc b/components/metrics/call_stack_profile_proto_encoder_unittest.cc new file mode 100644 index 0000000..e7d0f07e --- /dev/null +++ b/components/metrics/call_stack_profile_proto_encoder_unittest.cc
@@ -0,0 +1,258 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/metrics/call_stack_profile_proto_encoder.h" + +#include <utility> + +#include "base/macros.h" +#include "base/profiler/stack_sampling_profiler.h" +#include "base/stl_util.h" +#include "base/strings/string_number_conversions.h" +#include "build/build_config.h" +#include "components/metrics/call_stack_profile_params.h" +#include "components/metrics/call_stack_profile_proto_encoder.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/metrics_proto/sampled_profile.pb.h" + +using base::StackSamplingProfiler; +using Frame = StackSamplingProfiler::Frame; +using Module = StackSamplingProfiler::Module; +using Sample = StackSamplingProfiler::Sample; +using Profile = StackSamplingProfiler::CallStackProfile; + +namespace { + +struct ExpectedProtoModule { + const char* build_id; + uint64_t name_md5; + uint64_t base_address; +}; + +struct ExpectedProtoEntry { + int32_t module_index; + uint64_t address; +}; + +struct ExpectedProtoSample { + uint32_t process_milestones; // Bit-field of expected milestones. + const ExpectedProtoEntry* entries; + int entry_count; + int64_t entry_repeats; +}; + +struct ExpectedProtoProfile { + int32_t duration_ms; + int32_t period_ms; + const ExpectedProtoModule* modules; + int module_count; + const ExpectedProtoSample* samples; + int sample_count; +}; + +class ProfileFactory { + public: + ProfileFactory(int duration_ms, int interval_ms) { + profile_.profile_duration = base::TimeDelta::FromMilliseconds(duration_ms); + profile_.sampling_period = base::TimeDelta::FromMilliseconds(interval_ms); + } + ~ProfileFactory() {} + + ProfileFactory& AddMilestone(int milestone); + ProfileFactory& NewSample(); + ProfileFactory& AddFrame(size_t module, uintptr_t offset); + ProfileFactory& DefineModule(const char* name, + const base::FilePath& path, + uintptr_t base); + + Profile Build(); + + private: + Profile profile_; + uint32_t process_milestones_ = 0; + + DISALLOW_COPY_AND_ASSIGN(ProfileFactory); +}; + +ProfileFactory& ProfileFactory::AddMilestone(int milestone) { + process_milestones_ |= 1 << milestone; + return *this; +} + +ProfileFactory& ProfileFactory::NewSample() { + profile_.samples.push_back(Sample()); + profile_.samples.back().process_milestones = process_milestones_; + return *this; +} + +ProfileFactory& ProfileFactory::AddFrame(size_t module, uintptr_t offset) { + profile_.samples.back().frames.push_back(Frame(offset, module)); + return *this; +} + +ProfileFactory& ProfileFactory::DefineModule(const char* name, + const base::FilePath& path, + uintptr_t base) { + profile_.modules.push_back(Module(base, name, path)); + return *this; +} + +Profile ProfileFactory::Build() { + return std::move(profile_); +} + +} // namespace + +namespace metrics { + +void VerifyProfileProto(const ExpectedProtoProfile& expected, + const SampledProfile& proto) { + ASSERT_TRUE(proto.has_call_stack_profile()); + const CallStackProfile& stack = proto.call_stack_profile(); + + ASSERT_TRUE(stack.has_profile_duration_ms()); + EXPECT_EQ(expected.duration_ms, stack.profile_duration_ms()); + ASSERT_TRUE(stack.has_sampling_period_ms()); + EXPECT_EQ(expected.period_ms, stack.sampling_period_ms()); + + ASSERT_EQ(expected.module_count, stack.module_id().size()); + for (int m = 0; m < expected.module_count; ++m) { + SCOPED_TRACE("module " + base::IntToString(m)); + const CallStackProfile::ModuleIdentifier& module_id = + stack.module_id().Get(m); + ASSERT_TRUE(module_id.has_build_id()); + EXPECT_EQ(expected.modules[m].build_id, module_id.build_id()); + ASSERT_TRUE(module_id.has_name_md5_prefix()); + EXPECT_EQ(expected.modules[m].name_md5, module_id.name_md5_prefix()); + } + + ASSERT_EQ(expected.sample_count, stack.sample().size()); + for (int s = 0; s < expected.sample_count; ++s) { + SCOPED_TRACE("sample " + base::IntToString(s)); + const CallStackProfile::Sample& proto_sample = stack.sample().Get(s); + + uint32_t process_milestones = 0; + for (int i = 0; i < proto_sample.process_phase().size(); ++i) + process_milestones |= 1U << proto_sample.process_phase().Get(i); + EXPECT_EQ(expected.samples[s].process_milestones, process_milestones); + + ASSERT_EQ(expected.samples[s].entry_count, proto_sample.entry().size()); + ASSERT_TRUE(proto_sample.has_count()); + EXPECT_EQ(expected.samples[s].entry_repeats, proto_sample.count()); + for (int e = 0; e < expected.samples[s].entry_count; ++e) { + SCOPED_TRACE("entry " + base::NumberToString(e)); + const CallStackProfile::Entry& entry = proto_sample.entry().Get(e); + if (expected.samples[s].entries[e].module_index >= 0) { + ASSERT_TRUE(entry.has_module_id_index()); + EXPECT_EQ(expected.samples[s].entries[e].module_index, + entry.module_id_index()); + ASSERT_TRUE(entry.has_address()); + EXPECT_EQ(expected.samples[s].entries[e].address, entry.address()); + } else { + EXPECT_FALSE(entry.has_module_id_index()); + EXPECT_FALSE(entry.has_address()); + } + } + } +} + +// Checks that all duplicate samples are collapsed with +// preserve_sample_ordering = false. +TEST(CallStackProfileProtoEncoderTest, RepeatedStacksUnordered) { + const uintptr_t module_base_address = 0x1000; + const char* module_name = "ABCD"; + +#if defined(OS_WIN) + uint64_t module_md5 = 0x46C3E4166659AC02ULL; + base::FilePath module_path(L"c:\\some\\path\\to\\chrome.exe"); +#else + uint64_t module_md5 = 0x554838A8451AC36CULL; + base::FilePath module_path("/some/path/to/chrome"); +#endif + + Profile profile = + ProfileFactory(100, 10) + .DefineModule(module_name, module_path, module_base_address) + + .AddMilestone(0) + .NewSample() + .AddFrame(0, module_base_address + 0x10) + .NewSample() + .AddFrame(0, module_base_address + 0x20) + .NewSample() + .AddFrame(0, module_base_address + 0x10) + .NewSample() + .AddFrame(0, module_base_address + 0x10) + + .AddMilestone(1) + .NewSample() + .AddFrame(0, module_base_address + 0x10) + .NewSample() + .AddFrame(0, module_base_address + 0x20) + .NewSample() + .AddFrame(0, module_base_address + 0x10) + .NewSample() + .AddFrame(0, module_base_address + 0x10) + + .Build(); + + const ExpectedProtoModule expected_proto_modules[] = { + {module_name, module_md5, module_base_address}, + }; + + const ExpectedProtoEntry expected_proto_entries[] = { + {0, 0x10}, {0, 0x20}, + }; + const ExpectedProtoSample expected_proto_samples[] = { + {1, &expected_proto_entries[0], 1, 3}, + {0, &expected_proto_entries[1], 1, 1}, + {2, &expected_proto_entries[0], 1, 3}, + {0, &expected_proto_entries[1], 1, 1}, + }; + + const ExpectedProtoProfile expected_proto_profile = { + 100, + 10, + expected_proto_modules, + base::size(expected_proto_modules), + expected_proto_samples, + base::size(expected_proto_samples), + }; + + SampledProfile proto; + CopyProfileToProto(profile, proto.mutable_call_stack_profile()); + + VerifyProfileProto(expected_proto_profile, proto); +} + +// Checks that unknown modules produce an empty Entry. +TEST(CallStackProfileProtoEncoderTest, UnknownModule) { + Profile profile = ProfileFactory(100, 10) + .NewSample() + .AddFrame(base::kUnknownModuleIndex, 0x1234) + .Build(); + + const ExpectedProtoEntry expected_proto_entries[] = { + {-1, 0}, + }; + const ExpectedProtoSample expected_proto_samples[] = { + {0, &expected_proto_entries[0], 1, 1}, + }; + + const ExpectedProtoProfile expected_proto_profile = { + 100, + 10, + nullptr, + 0, + expected_proto_samples, + base::size(expected_proto_samples), + }; + + SampledProfile proto; + CopyProfileToProto(profile, proto.mutable_call_stack_profile()); + + VerifyProfileProto(expected_proto_profile, proto); +} + +} // namespace metrics
diff --git a/components/metrics/child_call_stack_profile_collector.cc b/components/metrics/child_call_stack_profile_collector.cc index 3cdfc55..ef4b7ef 100644 --- a/components/metrics/child_call_stack_profile_collector.cc +++ b/components/metrics/child_call_stack_profile_collector.cc
@@ -7,11 +7,10 @@ #include <utility> #include "base/bind.h" -#include "base/bind_helpers.h" #include "base/logging.h" #include "base/synchronization/lock.h" #include "base/threading/thread_task_runner_handle.h" -#include "services/service_manager/public/cpp/interface_provider.h" +#include "base/time/time.h" namespace metrics { @@ -20,12 +19,9 @@ default; ChildCallStackProfileCollector::ProfileState::ProfileState( - const CallStackProfileParams& params, base::TimeTicks start_timestamp, - base::StackSamplingProfiler::CallStackProfile profile) - : params(params), - start_timestamp(start_timestamp), - profile(std::move(profile)) {} + SampledProfile profile) + : start_timestamp(start_timestamp), profile(std::move(profile)) {} ChildCallStackProfileCollector::ProfileState::~ProfileState() = default; @@ -40,11 +36,10 @@ CallStackProfileBuilder::CompletedCallback ChildCallStackProfileCollector::GetProfilerCallback( - const CallStackProfileParams& params, base::TimeTicks profile_start_time) { return base::Bind(&ChildCallStackProfileCollector::Collect, // This class has lazy instance lifetime. - base::Unretained(this), params, profile_start_time); + base::Unretained(this), profile_start_time); } void ChildCallStackProfileCollector::SetParentProfileCollector( @@ -60,26 +55,23 @@ parent_collector_ = std::move(parent_collector); if (parent_collector_) { for (ProfileState& state : profiles_) { - parent_collector_->Collect(state.params, state.start_timestamp, + parent_collector_->Collect(state.start_timestamp, std::move(state.profile)); } } profiles_.clear(); } -void ChildCallStackProfileCollector::Collect( - const CallStackProfileParams& params, - base::TimeTicks start_timestamp, - CallStackProfile profile) { +void ChildCallStackProfileCollector::Collect(base::TimeTicks start_timestamp, + SampledProfile profile) { // Impl function is used as it needs to PostTask() to itself on a different // thread - which only works with a void return value. - CollectImpl(params, start_timestamp, std::move(profile)); + CollectImpl(start_timestamp, std::move(profile)); } void ChildCallStackProfileCollector::CollectImpl( - const CallStackProfileParams& params, base::TimeTicks start_timestamp, - CallStackProfile profile) { + SampledProfile profile) { base::AutoLock alock(lock_); if (task_runner_ && // The profiler thread does not have a task runner. Attempting to @@ -90,16 +82,15 @@ task_runner_->PostTask( FROM_HERE, base::BindOnce(&ChildCallStackProfileCollector::CollectImpl, // This class has lazy instance lifetime. - base::Unretained(this), params, - start_timestamp, std::move(profile))); + base::Unretained(this), start_timestamp, + std::move(profile))); return; } if (parent_collector_) { - parent_collector_->Collect(params, start_timestamp, std::move(profile)); + parent_collector_->Collect(start_timestamp, std::move(profile)); } else if (retain_profiles_) { - profiles_.push_back( - ProfileState(params, start_timestamp, std::move(profile))); + profiles_.push_back(ProfileState(start_timestamp, std::move(profile))); } }
diff --git a/components/metrics/child_call_stack_profile_collector.h b/components/metrics/child_call_stack_profile_collector.h index 6e5f3313..e61b301e 100644 --- a/components/metrics/child_call_stack_profile_collector.h +++ b/components/metrics/child_call_stack_profile_collector.h
@@ -13,6 +13,7 @@ #include "base/synchronization/lock.h" #include "components/metrics/call_stack_profile_builder.h" #include "components/metrics/public/interfaces/call_stack_profile_collector.mojom.h" +#include "third_party/metrics_proto/sampled_profile.pb.h" namespace service_manager { class InterfaceProvider; @@ -56,7 +57,6 @@ // to the CallStackProfileBuilder, and should not be reused between // CallStackProfileBuilders. This function may be called on any thread. CallStackProfileBuilder::CompletedCallback GetProfilerCallback( - const CallStackProfileParams& params, base::TimeTicks profile_start_time); // Sets the CallStackProfileCollector interface from |parent_collector|. This @@ -74,32 +74,23 @@ struct ProfileState { ProfileState(); ProfileState(ProfileState&&); - ProfileState(const CallStackProfileParams& params, - base::TimeTicks start_timestamp, - base::StackSamplingProfiler::CallStackProfile profile); + ProfileState(base::TimeTicks start_timestamp, SampledProfile profile); ~ProfileState(); ProfileState& operator=(ProfileState&&); - CallStackProfileParams params; base::TimeTicks start_timestamp; // The sampled profile. - base::StackSamplingProfiler::CallStackProfile profile; + SampledProfile profile; private: DISALLOW_COPY_AND_ASSIGN(ProfileState); }; - using CallStackProfile = base::StackSamplingProfiler::CallStackProfile; + void Collect(base::TimeTicks start_timestamp, SampledProfile profile); - void Collect(const CallStackProfileParams& params, - base::TimeTicks start_timestamp, - CallStackProfile profile); - - void CollectImpl(const CallStackProfileParams& params, - base::TimeTicks start_timestamp, - CallStackProfile profile); + void CollectImpl(base::TimeTicks start_timestamp, SampledProfile profile); // This object may be accessed on any thread, including the profiler // thread. The expected use case for the object is to be created and have
diff --git a/components/metrics/child_call_stack_profile_collector_unittest.cc b/components/metrics/child_call_stack_profile_collector_unittest.cc index aa924cb..f85c9f9 100644 --- a/components/metrics/child_call_stack_profile_collector_unittest.cc +++ b/components/metrics/child_call_stack_profile_collector_unittest.cc
@@ -11,10 +11,7 @@ #include "base/bind.h" #include "base/message_loop/message_loop.h" #include "base/run_loop.h" -#include "components/metrics/call_stack_profile_params.h" #include "mojo/public/cpp/bindings/binding.h" -#include "mojo/public/cpp/bindings/interface_request.h" -#include "services/service_manager/public/cpp/interface_provider.h" #include "testing/gtest/include/gtest/gtest.h" namespace metrics { @@ -23,17 +20,14 @@ protected: class Receiver : public mojom::CallStackProfileCollector { public: - using CallStackProfile = base::StackSamplingProfiler::CallStackProfile; - explicit Receiver(mojom::CallStackProfileCollectorRequest request) : binding_(this, std::move(request)) {} ~Receiver() override {} - void Collect(const CallStackProfileParams& params, - base::TimeTicks start_timestamp, - CallStackProfile profile) override { + void Collect(base::TimeTicks start_timestamp, + SampledProfile profile) override { this->profiles.push_back(ChildCallStackProfileCollector::ProfileState( - params, start_timestamp, std::move(profile))); + start_timestamp, std::move(profile))); } std::vector<ChildCallStackProfileCollector::ProfileState> profiles; @@ -47,10 +41,9 @@ ChildCallStackProfileCollectorTest() : receiver_impl_(new Receiver(MakeRequest(&receiver_))) {} - void CollectEmptyProfile(const CallStackProfileParams& params) { - base::StackSamplingProfiler::CallStackProfile profile; - child_collector_.GetProfilerCallback(params, base::TimeTicks::Now()) - .Run(std::move(profile)); + void CollectEmptyProfile() { + child_collector_.GetProfilerCallback(base::TimeTicks::Now()) + .Run(SampledProfile()); } const std::vector<ChildCallStackProfileCollector::ProfileState>& profiles() @@ -72,17 +65,8 @@ EXPECT_EQ(0u, profiles().size()); // Add a profile before providing the interface. - CollectEmptyProfile(CallStackProfileParams( - CallStackProfileParams::BROWSER_PROCESS, - CallStackProfileParams::MAIN_THREAD, CallStackProfileParams::JANKY_TASK, - CallStackProfileParams::PRESERVE_ORDER)); + CollectEmptyProfile(); ASSERT_EQ(1u, profiles().size()); - EXPECT_EQ(CallStackProfileParams::BROWSER_PROCESS, - profiles()[0].params.process); - EXPECT_EQ(CallStackProfileParams::MAIN_THREAD, profiles()[0].params.thread); - EXPECT_EQ(CallStackProfileParams::JANKY_TASK, profiles()[0].params.trigger); - EXPECT_EQ(CallStackProfileParams::PRESERVE_ORDER, - profiles()[0].params.ordering_spec); base::TimeTicks start_timestamp = profiles()[0].start_timestamp; EXPECT_GE(base::TimeDelta::FromMilliseconds(10), base::TimeTicks::Now() - start_timestamp); @@ -92,29 +76,14 @@ base::RunLoop().RunUntilIdle(); EXPECT_EQ(0u, profiles().size()); ASSERT_EQ(1u, receiver_impl_->profiles.size()); - EXPECT_EQ(CallStackProfileParams::JANKY_TASK, - receiver_impl_->profiles[0].params.trigger); - EXPECT_EQ(CallStackProfileParams::PRESERVE_ORDER, - receiver_impl_->profiles[0].params.ordering_spec); EXPECT_EQ(start_timestamp, receiver_impl_->profiles[0].start_timestamp); // Add a profile after providing the interface. It should also be passed. receiver_impl_->profiles.clear(); - CollectEmptyProfile(CallStackProfileParams( - CallStackProfileParams::GPU_PROCESS, CallStackProfileParams::MAIN_THREAD, - CallStackProfileParams::THREAD_HUNG, - CallStackProfileParams::PRESERVE_ORDER)); + CollectEmptyProfile(); base::RunLoop().RunUntilIdle(); EXPECT_EQ(0u, profiles().size()); ASSERT_EQ(1u, receiver_impl_->profiles.size()); - EXPECT_EQ(CallStackProfileParams::GPU_PROCESS, - receiver_impl_->profiles[0].params.process); - EXPECT_EQ(CallStackProfileParams::MAIN_THREAD, - receiver_impl_->profiles[0].params.thread); - EXPECT_EQ(CallStackProfileParams::THREAD_HUNG, - receiver_impl_->profiles[0].params.trigger); - EXPECT_EQ(CallStackProfileParams::PRESERVE_ORDER, - receiver_impl_->profiles[0].params.ordering_spec); EXPECT_GE(base::TimeDelta::FromMilliseconds(10), (base::TimeTicks::Now() - receiver_impl_->profiles[0].start_timestamp)); @@ -124,17 +93,8 @@ EXPECT_EQ(0u, profiles().size()); // Add a profile before providing a null interface. - CollectEmptyProfile(CallStackProfileParams( - CallStackProfileParams::BROWSER_PROCESS, - CallStackProfileParams::MAIN_THREAD, CallStackProfileParams::JANKY_TASK, - CallStackProfileParams::PRESERVE_ORDER)); + CollectEmptyProfile(); ASSERT_EQ(1u, profiles().size()); - EXPECT_EQ(CallStackProfileParams::BROWSER_PROCESS, - profiles()[0].params.process); - EXPECT_EQ(CallStackProfileParams::MAIN_THREAD, profiles()[0].params.thread); - EXPECT_EQ(CallStackProfileParams::JANKY_TASK, profiles()[0].params.trigger); - EXPECT_EQ(CallStackProfileParams::PRESERVE_ORDER, - profiles()[0].params.ordering_spec); EXPECT_GE(base::TimeDelta::FromMilliseconds(10), base::TimeTicks::Now() - profiles()[0].start_timestamp); @@ -146,10 +106,7 @@ // Add a profile after providing a null interface. They should also be // flushed. - CollectEmptyProfile(CallStackProfileParams( - CallStackProfileParams::GPU_PROCESS, CallStackProfileParams::MAIN_THREAD, - CallStackProfileParams::THREAD_HUNG, - CallStackProfileParams::PRESERVE_ORDER)); + CollectEmptyProfile(); EXPECT_EQ(0u, profiles().size()); }
diff --git a/components/metrics/persistent_system_profile.h b/components/metrics/persistent_system_profile.h index b15a590..6c854a9 100644 --- a/components/metrics/persistent_system_profile.h +++ b/components/metrics/persistent_system_profile.h
@@ -48,7 +48,7 @@ // Retrieves the system profile from a persistent memory allocator. Returns // true if a profile was successfully retrieved. If null is passed for the - // |system_profile|, only a basic check for the existance of one will be + // |system_profile|, only a basic check for the existence of one will be // done. static bool GetSystemProfile( const base::PersistentMemoryAllocator& memory_allocator,
diff --git a/components/metrics/public/cpp/BUILD.gn b/components/metrics/public/cpp/BUILD.gn index ca2f057..b9c2af5c 100644 --- a/components/metrics/public/cpp/BUILD.gn +++ b/components/metrics/public/cpp/BUILD.gn
@@ -15,5 +15,6 @@ "//components/metrics/public/interfaces:call_stack_mojo_test_bindings", "//mojo/public/cpp/bindings", "//testing/gtest", + "//third_party/metrics_proto", ] }
diff --git a/components/metrics/public/cpp/call_stack_profile.typemap b/components/metrics/public/cpp/call_stack_profile.typemap index aa84565..e7fa49f0 100644 --- a/components/metrics/public/cpp/call_stack_profile.typemap +++ b/components/metrics/public/cpp/call_stack_profile.typemap
@@ -4,24 +4,11 @@ mojom = "//components/metrics/public/interfaces/call_stack_profile_collector.mojom" -public_headers = [ - "//base/profiler/stack_sampling_profiler.h", - "//components/metrics/call_stack_profile_params.h", -] +public_headers = [ "//third_party/metrics_proto/sampled_profile.pb.h" ] traits_headers = [ "//components/metrics/public/cpp/call_stack_profile_struct_traits.h" ] deps = [ - "//base", - "//components/metrics:call_stack_profile", + "//third_party/metrics_proto", ] -type_mappings = [ - "metrics.mojom.CallStackModule=base::StackSamplingProfiler::Module", - "metrics.mojom.CallStackFrame=base::StackSamplingProfiler::Frame", - "metrics.mojom.CallStackSample=base::StackSamplingProfiler::Sample[move_only]", - "metrics.mojom.CallStackProfile=base::StackSamplingProfiler::CallStackProfile[move_only]", - "metrics.mojom.CallStackProfileParams=metrics::CallStackProfileParams", - "metrics.mojom.Process=metrics::CallStackProfileParams::Process", - "metrics.mojom.SampleOrderingSpec=metrics::CallStackProfileParams::SampleOrderingSpec", - "metrics.mojom.Thread=metrics::CallStackProfileParams::Thread", - "metrics.mojom.Trigger=metrics::CallStackProfileParams::Trigger", -] +type_mappings = + [ "metrics.mojom.SampledProfile=metrics::SampledProfile[move_only]" ]
diff --git a/components/metrics/public/cpp/call_stack_profile_struct_traits.h b/components/metrics/public/cpp/call_stack_profile_struct_traits.h index b062a5a0..bdcc617 100644 --- a/components/metrics/public/cpp/call_stack_profile_struct_traits.h +++ b/components/metrics/public/cpp/call_stack_profile_struct_traits.h
@@ -3,371 +3,46 @@ // found in the LICENSE file. // Defines StructTraits specializations for translating between mojo types and -// base::StackSamplingProfiler types, with data validity checks. +// metrics:: types, with data validity checks. #ifndef COMPONENTS_METRICS_PUBLIC_CPP_CALL_STACK_PROFILE_STRUCT_TRAITS_H_ #define COMPONENTS_METRICS_PUBLIC_CPP_CALL_STACK_PROFILE_STRUCT_TRAITS_H_ #include <string> -#include <utility> -#include <vector> -#include "base/files/file_path.h" -#include "base/profiler/stack_sampling_profiler.h" +#include "base/strings/string_piece.h" #include "components/metrics/public/interfaces/call_stack_profile_collector.mojom.h" +#include "third_party/metrics_proto/sampled_profile.pb.h" namespace mojo { template <> -struct StructTraits<metrics::mojom::CallStackModuleDataView, - base::StackSamplingProfiler::Module> { - static uint64_t base_address( - const base::StackSamplingProfiler::Module& module) { - return module.base_address; - } - static const std::string& id( - const base::StackSamplingProfiler::Module& module) { - return module.id; - } - static const base::FilePath& filename( - const base::StackSamplingProfiler::Module& module) { - return module.filename; +struct StructTraits<metrics::mojom::SampledProfileDataView, + metrics::SampledProfile> { + static std::string contents(const metrics::SampledProfile& profile) { + std::string output; + profile.SerializeToString(&output); + return output; } - static bool Read(metrics::mojom::CallStackModuleDataView data, - base::StackSamplingProfiler::Module* out) { - std::string id; - base::FilePath filename; - if (!data.ReadId(&id) || !data.ReadFilename(&filename)) + static bool Read(metrics::mojom::SampledProfileDataView data, + metrics::SampledProfile* out) { + base::StringPiece contents; + if (!data.ReadContents(&contents)) return false; - *out = - base::StackSamplingProfiler::Module(data.base_address(), id, filename); - return true; - } -}; - -template <> -struct StructTraits<metrics::mojom::CallStackFrameDataView, - base::StackSamplingProfiler::Frame> { - static uint64_t instruction_pointer( - const base::StackSamplingProfiler::Frame& frame) { - return frame.instruction_pointer; - } - static uint64_t module_index( - const base::StackSamplingProfiler::Frame& frame) { - return frame.module_index == base::kUnknownModuleIndex - ? static_cast<uint64_t>(-1) - : frame.module_index; - } - - static bool Read(metrics::mojom::CallStackFrameDataView data, - base::StackSamplingProfiler::Frame* out) { - size_t module_index = data.module_index() == static_cast<uint64_t>(-1) - ? base::kUnknownModuleIndex - : data.module_index(); - - // We can't know whether the module_index field is valid at this point since - // we don't have access to the number of modules here. This will be checked - // in CallStackProfile's Read function below. - *out = base::StackSamplingProfiler::Frame(data.instruction_pointer(), - module_index); - return true; - } -}; - -template <> -struct StructTraits<metrics::mojom::CallStackSampleDataView, - base::StackSamplingProfiler::Sample> { - static const std::vector<base::StackSamplingProfiler::Frame>& frames( - const base::StackSamplingProfiler::Sample& sample) { - return sample.frames; - } - static int32_t process_milestones( - const base::StackSamplingProfiler::Sample& sample) { - return sample.process_milestones; - } - - static bool Read(metrics::mojom::CallStackSampleDataView data, - base::StackSamplingProfiler::Sample* out) { - std::vector<base::StackSamplingProfiler::Frame> frames; - if (!data.ReadFrames(&frames)) + if (!out->ParseFromArray(contents.data(), contents.size())) return false; - *out = base::StackSamplingProfiler::Sample(); - out->frames = std::move(frames); - out->process_milestones = data.process_milestones(); - return true; - } -}; - -template <> -struct StructTraits<metrics::mojom::CallStackProfileDataView, - base::StackSamplingProfiler::CallStackProfile> { - static const std::vector<base::StackSamplingProfiler::Module>& modules( - const base::StackSamplingProfiler::CallStackProfile& profile) { - return profile.modules; - } - static const std::vector<base::StackSamplingProfiler::Sample>& samples( - const base::StackSamplingProfiler::CallStackProfile& profile) { - return profile.samples; - } - static const base::TimeDelta profile_duration( - const base::StackSamplingProfiler::CallStackProfile& profile) { - return profile.profile_duration; - } - static const base::TimeDelta sampling_period( - const base::StackSamplingProfiler::CallStackProfile& profile) { - return profile.sampling_period; - } - - static bool ValidateSamples( - std::vector<base::StackSamplingProfiler::Sample> samples, - size_t module_count) { - for (const base::StackSamplingProfiler::Sample& sample : samples) { - for (const base::StackSamplingProfiler::Frame& frame : sample.frames) { - if (frame.module_index >= module_count && - frame.module_index != base::kUnknownModuleIndex) - return false; - } - } - return true; - } - - static bool Read(metrics::mojom::CallStackProfileDataView data, - base::StackSamplingProfiler::CallStackProfile* out) { - std::vector<base::StackSamplingProfiler::Module> modules; - std::vector<base::StackSamplingProfiler::Sample> samples; - base::TimeDelta profile_duration, sampling_period; - if (!data.ReadModules(&modules) || !data.ReadSamples(&samples) || - !data.ReadProfileDuration(&profile_duration) || - !data.ReadSamplingPeriod(&sampling_period) || - !ValidateSamples(samples, modules.size())) + // This is purely a sanity check to minimize bad data uploaded, and not + // required for security reasons. + if (!out->unknown_fields().empty()) return false; - *out = base::StackSamplingProfiler::CallStackProfile(); - out->modules = std::move(modules); - out->samples = std::move(samples); - out->profile_duration = profile_duration; - out->sampling_period = sampling_period; return true; } }; -template <> -struct EnumTraits<metrics::mojom::Process, - metrics::CallStackProfileParams::Process> { - static metrics::mojom::Process ToMojom( - metrics::CallStackProfileParams::Process process) { - switch (process) { - case metrics::CallStackProfileParams::Process::UNKNOWN_PROCESS: - return metrics::mojom::Process::UNKNOWN_PROCESS; - case metrics::CallStackProfileParams::Process::BROWSER_PROCESS: - return metrics::mojom::Process::BROWSER_PROCESS; - case metrics::CallStackProfileParams::Process::RENDERER_PROCESS: - return metrics::mojom::Process::RENDERER_PROCESS; - case metrics::CallStackProfileParams::Process::GPU_PROCESS: - return metrics::mojom::Process::GPU_PROCESS; - case metrics::CallStackProfileParams::Process::UTILITY_PROCESS: - return metrics::mojom::Process::UTILITY_PROCESS; - case metrics::CallStackProfileParams::Process::ZYGOTE_PROCESS: - return metrics::mojom::Process::ZYGOTE_PROCESS; - case metrics::CallStackProfileParams::Process::SANDBOX_HELPER_PROCESS: - return metrics::mojom::Process::SANDBOX_HELPER_PROCESS; - case metrics::CallStackProfileParams::Process::PPAPI_PLUGIN_PROCESS: - return metrics::mojom::Process::PPAPI_PLUGIN_PROCESS; - case metrics::CallStackProfileParams::Process::PPAPI_BROKER_PROCESS: - return metrics::mojom::Process::PPAPI_BROKER_PROCESS; - } - NOTREACHED(); - return metrics::mojom::Process::UNKNOWN_PROCESS; - } - - static bool FromMojom(metrics::mojom::Process process, - metrics::CallStackProfileParams::Process* out) { - switch (process) { - case metrics::mojom::Process::UNKNOWN_PROCESS: - *out = metrics::CallStackProfileParams::Process::UNKNOWN_PROCESS; - return true; - case metrics::mojom::Process::BROWSER_PROCESS: - *out = metrics::CallStackProfileParams::Process::BROWSER_PROCESS; - return true; - case metrics::mojom::Process::RENDERER_PROCESS: - *out = metrics::CallStackProfileParams::Process::RENDERER_PROCESS; - return true; - case metrics::mojom::Process::GPU_PROCESS: - *out = metrics::CallStackProfileParams::Process::GPU_PROCESS; - return true; - case metrics::mojom::Process::UTILITY_PROCESS: - *out = metrics::CallStackProfileParams::Process::UTILITY_PROCESS; - return true; - case metrics::mojom::Process::ZYGOTE_PROCESS: - *out = metrics::CallStackProfileParams::Process::ZYGOTE_PROCESS; - return true; - case metrics::mojom::Process::SANDBOX_HELPER_PROCESS: - *out = metrics::CallStackProfileParams::Process::SANDBOX_HELPER_PROCESS; - return true; - case metrics::mojom::Process::PPAPI_PLUGIN_PROCESS: - *out = metrics::CallStackProfileParams::Process::PPAPI_PLUGIN_PROCESS; - return true; - case metrics::mojom::Process::PPAPI_BROKER_PROCESS: - *out = metrics::CallStackProfileParams::Process::PPAPI_BROKER_PROCESS; - return true; - } - return false; - } -}; - -template <> -struct EnumTraits<metrics::mojom::Thread, - metrics::CallStackProfileParams::Thread> { - static metrics::mojom::Thread ToMojom( - metrics::CallStackProfileParams::Thread thread) { - switch (thread) { - case metrics::CallStackProfileParams::Thread::UNKNOWN_THREAD: - return metrics::mojom::Thread::UNKNOWN_THREAD; - case metrics::CallStackProfileParams::Thread::MAIN_THREAD: - return metrics::mojom::Thread::MAIN_THREAD; - case metrics::CallStackProfileParams::Thread::IO_THREAD: - return metrics::mojom::Thread::IO_THREAD; - case metrics::CallStackProfileParams::Thread::COMPOSITOR_THREAD: - return metrics::mojom::Thread::COMPOSITOR_THREAD; - } - NOTREACHED(); - return metrics::mojom::Thread::UNKNOWN_THREAD; - } - - static bool FromMojom(metrics::mojom::Thread thread, - metrics::CallStackProfileParams::Thread* out) { - switch (thread) { - case metrics::mojom::Thread::UNKNOWN_THREAD: - *out = metrics::CallStackProfileParams::Thread::UNKNOWN_THREAD; - return true; - case metrics::mojom::Thread::MAIN_THREAD: - *out = metrics::CallStackProfileParams::Thread::MAIN_THREAD; - return true; - case metrics::mojom::Thread::IO_THREAD: - *out = metrics::CallStackProfileParams::Thread::IO_THREAD; - return true; - case metrics::mojom::Thread::COMPOSITOR_THREAD: - *out = metrics::CallStackProfileParams::Thread::COMPOSITOR_THREAD; - return true; - } - return false; - } -}; - -template <> -struct EnumTraits<metrics::mojom::Trigger, - metrics::CallStackProfileParams::Trigger> { - static metrics::mojom::Trigger ToMojom( - metrics::CallStackProfileParams::Trigger trigger) { - switch (trigger) { - case metrics::CallStackProfileParams::Trigger::UNKNOWN: - return metrics::mojom::Trigger::UNKNOWN; - case metrics::CallStackProfileParams::Trigger::PROCESS_STARTUP: - return metrics::mojom::Trigger::PROCESS_STARTUP; - case metrics::CallStackProfileParams::Trigger::JANKY_TASK: - return metrics::mojom::Trigger::JANKY_TASK; - case metrics::CallStackProfileParams::Trigger::THREAD_HUNG: - return metrics::mojom::Trigger::THREAD_HUNG; - case metrics::CallStackProfileParams::Trigger::PERIODIC_COLLECTION: - return metrics::mojom::Trigger::PERIODIC_COLLECTION; - } - NOTREACHED(); - return metrics::mojom::Trigger::UNKNOWN; - } - - static bool FromMojom(metrics::mojom::Trigger trigger, - metrics::CallStackProfileParams::Trigger* out) { - switch (trigger) { - case metrics::mojom::Trigger::UNKNOWN: - *out = metrics::CallStackProfileParams::Trigger::UNKNOWN; - return true; - case metrics::mojom::Trigger::PROCESS_STARTUP: - *out = metrics::CallStackProfileParams::Trigger::PROCESS_STARTUP; - return true; - case metrics::mojom::Trigger::JANKY_TASK: - *out = metrics::CallStackProfileParams::Trigger::JANKY_TASK; - return true; - case metrics::mojom::Trigger::THREAD_HUNG: - *out = metrics::CallStackProfileParams::Trigger::THREAD_HUNG; - return true; - case metrics::mojom::Trigger::PERIODIC_COLLECTION: - *out = metrics::CallStackProfileParams::Trigger::PERIODIC_COLLECTION; - return true; - } - return false; - } -}; - -template <> -struct StructTraits<metrics::mojom::CallStackProfileParamsDataView, - metrics::CallStackProfileParams> { - static metrics::CallStackProfileParams::Process process( - const metrics::CallStackProfileParams& params) { - return params.process; - } - static metrics::CallStackProfileParams::Thread thread( - const metrics::CallStackProfileParams& params) { - return params.thread; - } - static metrics::CallStackProfileParams::Trigger trigger( - const metrics::CallStackProfileParams& params) { - return params.trigger; - } - static metrics::CallStackProfileParams::SampleOrderingSpec ordering_spec( - const metrics::CallStackProfileParams& params) { - return params.ordering_spec; - } - - static bool Read(metrics::mojom::CallStackProfileParamsDataView data, - metrics::CallStackProfileParams* out) { - metrics::CallStackProfileParams::Process process; - metrics::CallStackProfileParams::Thread thread; - metrics::CallStackProfileParams::Trigger trigger; - metrics::CallStackProfileParams::SampleOrderingSpec ordering_spec; - if (!data.ReadProcess(&process) || !data.ReadThread(&thread) || - !data.ReadTrigger(&trigger) || !data.ReadOrderingSpec(&ordering_spec)) { - return false; - } - *out = metrics::CallStackProfileParams(process, thread, trigger, - ordering_spec); - return true; - } -}; - -template <> -struct EnumTraits<metrics::mojom::SampleOrderingSpec, - metrics::CallStackProfileParams::SampleOrderingSpec> { - static metrics::mojom::SampleOrderingSpec ToMojom( - metrics::CallStackProfileParams::SampleOrderingSpec spec) { - switch (spec) { - case metrics::CallStackProfileParams::SampleOrderingSpec::MAY_SHUFFLE: - return metrics::mojom::SampleOrderingSpec::MAY_SHUFFLE; - case metrics::CallStackProfileParams::SampleOrderingSpec::PRESERVE_ORDER: - return metrics::mojom::SampleOrderingSpec::PRESERVE_ORDER; - } - NOTREACHED(); - return metrics::mojom::SampleOrderingSpec::MAY_SHUFFLE; - } - - static bool FromMojom( - metrics::mojom::SampleOrderingSpec spec, - metrics::CallStackProfileParams::SampleOrderingSpec* out) { - switch (spec) { - case metrics::mojom::SampleOrderingSpec::MAY_SHUFFLE: - *out = metrics::CallStackProfileParams::SampleOrderingSpec::MAY_SHUFFLE; - return true; - case metrics::mojom::SampleOrderingSpec::PRESERVE_ORDER: - *out = - metrics::CallStackProfileParams::SampleOrderingSpec::PRESERVE_ORDER; - return true; - } - return false; - } -}; - } // namespace mojo #endif // COMPONENTS_METRICS_PUBLIC_CPP_CALL_STACK_PROFILE_STRUCT_TRAITS_H_
diff --git a/components/metrics/public/cpp/call_stack_profile_struct_traits_unittest.cc b/components/metrics/public/cpp/call_stack_profile_struct_traits_unittest.cc index b0d2bf0..c40e5ae 100644 --- a/components/metrics/public/cpp/call_stack_profile_struct_traits_unittest.cc +++ b/components/metrics/public/cpp/call_stack_profile_struct_traits_unittest.cc
@@ -4,32 +4,15 @@ #include <utility> -#include "base/logging.h" #include "base/macros.h" #include "base/message_loop/message_loop.h" #include "components/metrics/public/interfaces/call_stack_profile_collector_test.mojom.h" #include "mojo/public/cpp/bindings/binding.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/metrics_proto/sampled_profile.pb.h" namespace metrics { -namespace { - -base::StackSamplingProfiler::CallStackProfile CreateProfile( - const std::vector<base::StackSamplingProfiler::Module>& modules, - const std::vector<base::StackSamplingProfiler::Sample>& samples, - base::TimeDelta profile_duration, - base::TimeDelta sampling_period) { - base::StackSamplingProfiler::CallStackProfile profile; - profile.modules = modules; - profile.samples = samples; - profile.profile_duration = profile_duration; - profile.sampling_period = sampling_period; - return profile; -} - -} - class CallStackProfileCollectorTestImpl : public mojom::CallStackProfileCollectorTest { public: @@ -39,45 +22,8 @@ } // CallStackProfileCollectorTest: - void BounceFrame(const base::StackSamplingProfiler::Frame& in, - BounceFrameCallback callback) override { - std::move(callback).Run(in); - } - - void BounceModule(const base::StackSamplingProfiler::Module& in, - BounceModuleCallback callback) override { - std::move(callback).Run(in); - } - - void BounceProfile(base::StackSamplingProfiler::CallStackProfile in, - BounceProfileCallback callback) override { - std::move(callback).Run(std::move(in)); - } - - void BounceTrigger(CallStackProfileParams::Trigger in, - BounceTriggerCallback callback) override { - std::move(callback).Run(in); - } - - void BounceProcess(CallStackProfileParams::Process in, - BounceProcessCallback callback) override { - std::move(callback).Run(in); - } - - void BounceThread(CallStackProfileParams::Thread in, - BounceThreadCallback callback) override { - std::move(callback).Run(in); - } - - void BounceSampleOrderingSpec( - CallStackProfileParams::SampleOrderingSpec in, - BounceSampleOrderingSpecCallback callback) override { - std::move(callback).Run(in); - } - - void BounceCallStackProfileParams( - const CallStackProfileParams& in, - BounceCallStackProfileParamsCallback callback) override { + void BounceSampledProfile(SampledProfile in, + BounceSampledProfileCallback callback) override { std::move(callback).Run(in); } @@ -99,261 +45,56 @@ DISALLOW_COPY_AND_ASSIGN(CallStackProfileStructTraitsTest); }; -// Checks serialization/deserialization of Module fields. -TEST_F(CallStackProfileStructTraitsTest, Module) { - using Module = base::StackSamplingProfiler::Module; +// Checks serialization/deserialization of SampledProfile. +TEST_F(CallStackProfileStructTraitsTest, SampledProfile) { + // Construct a SampledProfile protocol buffer message. + SampledProfile input_proto; - struct SerializeCase { - Module module; - bool expect_success; - }; + CallStackProfile* proto_profile = input_proto.mutable_call_stack_profile(); - const SerializeCase serialize_cases[] = { - // Null base address. - { - Module(0x0, "abcd", base::FilePath(base::FilePath::kCurrentDirectory)), - true - }, - // Non-null base address. - { - Module(0x10, "abcd", base::FilePath(base::FilePath::kCurrentDirectory)), - true - }, - // Base address with a bit set beyond 32 bits, when built for x64. - { - Module(1ULL << (sizeof(uintptr_t) * 8) * 3 / 4, "abcd", - base::FilePath(base::FilePath::kCurrentDirectory)), - true - }, - // Empty module id. - { - Module(0x10, "", base::FilePath(base::FilePath::kCurrentDirectory)), - true - }, - }; + CallStackProfile::Sample* proto_sample = proto_profile->add_sample(); + proto_sample->set_count(1); + CallStackProfile::Entry* entry = proto_sample->add_entry(); + entry->set_address(0x10ULL); + entry->set_module_id_index(0); - for (const SerializeCase& input : serialize_cases) { - Module output; - EXPECT_EQ(input.expect_success, - proxy_->BounceModule(input.module, &output)); + CallStackProfile::ModuleIdentifier* module_id = + proto_profile->add_module_id(); + module_id->set_build_id("a"); + module_id->set_name_md5_prefix(111U); - if (!input.expect_success) - continue; + proto_profile->set_profile_duration_ms(1000); + proto_profile->set_sampling_period_ms(2000); - EXPECT_EQ(input.module.base_address, output.base_address); - EXPECT_EQ(input.module.id, output.id); - EXPECT_EQ(input.module.filename, output.filename); - } -} + // Send the message round trip, and verify those values. + SampledProfile output_proto; + EXPECT_TRUE( + proxy_->BounceSampledProfile(std::move(input_proto), &output_proto)); -// Checks serialization/deserialization of Frame fields. -TEST_F(CallStackProfileStructTraitsTest, Frame) { - using Frame = base::StackSamplingProfiler::Frame; + const CallStackProfile& out_profile = output_proto.call_stack_profile(); - const Frame serialize_cases[] = { - // Null instruction pointer. - Frame(0x0, 10), - // Non-null instruction pointer. - Frame(0x10, 10), - // Instruction pointer with a bit set beyond 32 bits, when built for x64. - Frame(1ULL << (sizeof(uintptr_t) * 8) * 3 / 4, 10), - // Zero module index. - Frame(0xabcd, 0), - // Non-zero module index. - Frame(0xabcd, 1), - // Non-zero module index. - Frame(0xabcd, 10), - // Unknown module index. - Frame(0xabcd, base::kUnknownModuleIndex), - }; + ASSERT_EQ(1, out_profile.sample_size()); + ASSERT_EQ(1, out_profile.sample(0).entry_size()); - for (const Frame& input : serialize_cases) { - Frame output; - EXPECT_TRUE(proxy_->BounceFrame(input, &output)); + ASSERT_TRUE(out_profile.sample(0).entry(0).has_address()); + EXPECT_EQ(0x10ULL, out_profile.sample(0).entry(0).address()); - EXPECT_EQ(input.instruction_pointer, output.instruction_pointer); - EXPECT_EQ(input.module_index, output.module_index); - } -} + ASSERT_TRUE(out_profile.sample(0).entry(0).has_module_id_index()); + EXPECT_EQ(0, out_profile.sample(0).entry(0).module_id_index()); -// Checks serialization/deserialization of Profile fields, including validation -// of the Frame module_index field. -TEST_F(CallStackProfileStructTraitsTest, Profile) { - using base::StackSamplingProfiler; - using Module = StackSamplingProfiler::Module; - using Frame = StackSamplingProfiler::Frame; - using Sample = StackSamplingProfiler::Sample; - using Profile = StackSamplingProfiler::CallStackProfile; + ASSERT_EQ(1, out_profile.module_id().size()); - struct SerializeCase { - Profile profile; - bool expect_success; - }; + ASSERT_TRUE(out_profile.module_id(0).has_build_id()); + ASSERT_EQ("a", out_profile.module_id(0).build_id()); - const SerializeCase serialize_cases[] = { - // Empty modules and samples. - {CreateProfile(std::vector<Module>(), std::vector<Sample>(), - base::TimeDelta::FromSeconds(1), - base::TimeDelta::FromSeconds(2)), - true}, - // Non-empty modules and empty samples. - {CreateProfile({Module(0x4000, "a", base::FilePath())}, - std::vector<Sample>(), base::TimeDelta::FromSeconds(1), - base::TimeDelta::FromSeconds(2)), - true}, - // Valid values for modules and samples. - {CreateProfile( - { - Module(0x4000, "a", base::FilePath()), - Module(0x4100, "b", base::FilePath()), - }, - { - Sample({ - Frame(0x4010, 0), Frame(0x4110, 1), - Frame(0x4110, base::kUnknownModuleIndex), - }), - }, - base::TimeDelta::FromSeconds(1), base::TimeDelta::FromSeconds(2)), - true}, - // Valid values for modules, but an out of range module index in the - // second - // sample. - {CreateProfile( - { - Module(0x4000, "a", base::FilePath()), - Module(0x4100, "b", base::FilePath()), - }, - { - Sample({ - Frame(0x4010, 0), Frame(0x4110, 1), - Frame(0x4110, base::kUnknownModuleIndex), - }), - Sample({ - Frame(0x4010, 0), Frame(0x4110, 2), - }), - }, - base::TimeDelta::FromSeconds(1), base::TimeDelta::FromSeconds(2)), - false}, - }; + ASSERT_TRUE(out_profile.module_id(0).has_name_md5_prefix()); + ASSERT_EQ(111U, out_profile.module_id(0).name_md5_prefix()); - for (const SerializeCase& input : serialize_cases) { - SCOPED_TRACE(&input - &serialize_cases[0]); + ASSERT_TRUE(out_profile.has_profile_duration_ms()); + EXPECT_EQ(1000, out_profile.profile_duration_ms()); - Profile output; - EXPECT_EQ(input.expect_success, - proxy_->BounceProfile(input.profile.CopyForTesting(), &output)); - - if (!input.expect_success) - continue; - - EXPECT_EQ(input.profile.modules, output.modules); - EXPECT_EQ(input.profile.samples, output.samples); - EXPECT_EQ(input.profile.profile_duration, output.profile_duration); - EXPECT_EQ(input.profile.sampling_period, output.sampling_period); - } -} - -// Checks serialization/deserialization of the process, including validation. -TEST_F(CallStackProfileStructTraitsTest, Process) { - using Process = CallStackProfileParams::Process; - - Process out; - - EXPECT_TRUE(proxy_->BounceProcess(Process::UNKNOWN_PROCESS, &out)); - EXPECT_EQ(Process::UNKNOWN_PROCESS, out); - - EXPECT_TRUE(proxy_->BounceProcess(Process::BROWSER_PROCESS, &out)); - EXPECT_EQ(Process::BROWSER_PROCESS, out); - - EXPECT_TRUE(proxy_->BounceProcess(Process::RENDERER_PROCESS, &out)); - EXPECT_EQ(Process::RENDERER_PROCESS, out); - - EXPECT_TRUE(proxy_->BounceProcess(Process::GPU_PROCESS, &out)); - EXPECT_EQ(Process::GPU_PROCESS, out); - - EXPECT_TRUE(proxy_->BounceProcess(Process::UTILITY_PROCESS, &out)); - EXPECT_EQ(Process::UTILITY_PROCESS, out); - - EXPECT_TRUE(proxy_->BounceProcess(Process::ZYGOTE_PROCESS, &out)); - EXPECT_EQ(Process::ZYGOTE_PROCESS, out); - - EXPECT_TRUE(proxy_->BounceProcess(Process::SANDBOX_HELPER_PROCESS, &out)); - EXPECT_EQ(Process::SANDBOX_HELPER_PROCESS, out); - - EXPECT_TRUE(proxy_->BounceProcess(Process::PPAPI_PLUGIN_PROCESS, &out)); - EXPECT_EQ(Process::PPAPI_PLUGIN_PROCESS, out); - - EXPECT_TRUE(proxy_->BounceProcess(Process::PPAPI_BROKER_PROCESS, &out)); - EXPECT_EQ(Process::PPAPI_BROKER_PROCESS, out); -} - -// Checks serialization/deserialization of the thread, including validation. -TEST_F(CallStackProfileStructTraitsTest, Thread) { - using Thread = CallStackProfileParams::Thread; - - Thread out; - - EXPECT_TRUE(proxy_->BounceThread(Thread::MAIN_THREAD, &out)); - EXPECT_EQ(Thread::MAIN_THREAD, out); - - EXPECT_TRUE(proxy_->BounceThread(Thread::IO_THREAD, &out)); - EXPECT_EQ(Thread::IO_THREAD, out); - - EXPECT_TRUE(proxy_->BounceThread(Thread::COMPOSITOR_THREAD, &out)); - EXPECT_EQ(Thread::COMPOSITOR_THREAD, out); -} - -// Checks serialization/deserialization of the trigger, including validation. -TEST_F(CallStackProfileStructTraitsTest, Trigger) { - using Trigger = CallStackProfileParams::Trigger; - - Trigger out; - - EXPECT_TRUE(proxy_->BounceTrigger(Trigger::UNKNOWN, &out)); - EXPECT_EQ(Trigger::UNKNOWN, out); - - EXPECT_TRUE(proxy_->BounceTrigger(Trigger::PROCESS_STARTUP, &out)); - EXPECT_EQ(Trigger::PROCESS_STARTUP, out); - - EXPECT_TRUE(proxy_->BounceTrigger(Trigger::JANKY_TASK, &out)); - EXPECT_EQ(Trigger::JANKY_TASK, out); - - EXPECT_TRUE(proxy_->BounceTrigger(Trigger::THREAD_HUNG, &out)); - EXPECT_EQ(Trigger::THREAD_HUNG, out); -} - -// Checks serialization/deserialization of the SampleOrderingSpec, including -// validation. -TEST_F(CallStackProfileStructTraitsTest, SampleOrderingSpec) { - using SampleOrderingSpec = CallStackProfileParams::SampleOrderingSpec; - - SampleOrderingSpec out; - - EXPECT_TRUE(proxy_->BounceSampleOrderingSpec(SampleOrderingSpec::MAY_SHUFFLE, - &out)); - EXPECT_EQ(SampleOrderingSpec::MAY_SHUFFLE, out); - - EXPECT_TRUE(proxy_->BounceSampleOrderingSpec( - SampleOrderingSpec::PRESERVE_ORDER, - &out)); - EXPECT_EQ(SampleOrderingSpec::PRESERVE_ORDER, out); -} - -// Checks serialization/deserialization of the CallStackProfileParams. -TEST_F(CallStackProfileStructTraitsTest, CallStackProfileParams) { - CallStackProfileParams out; - - EXPECT_TRUE(proxy_->BounceCallStackProfileParams( - CallStackProfileParams(CallStackProfileParams::BROWSER_PROCESS, - CallStackProfileParams::MAIN_THREAD, - CallStackProfileParams::PROCESS_STARTUP, - CallStackProfileParams::PRESERVE_ORDER), - &out)); - - EXPECT_EQ(CallStackProfileParams::BROWSER_PROCESS, out.process); - EXPECT_EQ(CallStackProfileParams::MAIN_THREAD, out.thread); - EXPECT_EQ(CallStackProfileParams::PROCESS_STARTUP, out.trigger); - EXPECT_EQ(CallStackProfileParams::PRESERVE_ORDER, out.ordering_spec); + ASSERT_TRUE(out_profile.has_sampling_period_ms()); + EXPECT_EQ(2000, out_profile.sampling_period_ms()); } } // namespace metrics
diff --git a/components/metrics/public/cpp/call_stack_profile_unittest.typemap b/components/metrics/public/cpp/call_stack_profile_unittest.typemap new file mode 100644 index 0000000..5a8cd99 --- /dev/null +++ b/components/metrics/public/cpp/call_stack_profile_unittest.typemap
@@ -0,0 +1,18 @@ +# Copyright 2018 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This file is necessary because without it compiling +# call_stack_profile_struct_traits_unittest produces error below: +# "gen\third_party/metrics_proto/sampled_profile.pb.h(9,10): fatal error: +# 'google/protobuf/stubs/common.h' file not found". + +mojom = "//components/metrics/public/interfaces/call_stack_profile_collector_test.mojom" +public_headers = [ "//third_party/metrics_proto/sampled_profile.pb.h" ] +traits_headers = + [ "//components/metrics/public/cpp/call_stack_profile_struct_traits.h" ] +deps = [ + "//third_party/metrics_proto", +] +type_mappings = + [ "metrics.mojom.SampledProfile=metrics::SampledProfile[move_only]" ]
diff --git a/components/metrics/public/cpp/typemaps.gni b/components/metrics/public/cpp/typemaps.gni index 079917f7..9e4e1db 100644 --- a/components/metrics/public/cpp/typemaps.gni +++ b/components/metrics/public/cpp/typemaps.gni
@@ -2,4 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -typemaps = [ "//components/metrics/public/cpp/call_stack_profile.typemap" ] +typemaps = [ + "//components/metrics/public/cpp/call_stack_profile.typemap", + "//components/metrics/public/cpp/call_stack_profile_unittest.typemap", +]
diff --git a/components/metrics/public/interfaces/call_stack_profile_collector.mojom b/components/metrics/public/interfaces/call_stack_profile_collector.mojom index 8f0031d..51fcf81 100644 --- a/components/metrics/public/interfaces/call_stack_profile_collector.mojom +++ b/components/metrics/public/interfaces/call_stack_profile_collector.mojom
@@ -4,75 +4,18 @@ module metrics.mojom; -import "mojo/public/mojom/base/file_path.mojom"; import "mojo/public/mojom/base/time.mojom"; -// These structs mirror the corresponding types in base::StackSamplingProfiler. - -struct CallStackModule { - uint64 base_address; - string id; - mojo_base.mojom.FilePath filename; -}; - -struct CallStackFrame { - uint64 instruction_pointer; - uint64 module_index; -}; - -struct CallStackSample { - array<CallStackFrame> frames; - uint32 process_milestones; -}; - -struct CallStackProfile { - array<CallStackModule> modules; - array<CallStackSample> samples; - mojo_base.mojom.TimeDelta profile_duration; - mojo_base.mojom.TimeDelta sampling_period; -}; - -enum Process { - UNKNOWN_PROCESS, - BROWSER_PROCESS, - RENDERER_PROCESS, - GPU_PROCESS, - UTILITY_PROCESS, - ZYGOTE_PROCESS, - SANDBOX_HELPER_PROCESS, - PPAPI_PLUGIN_PROCESS, - PPAPI_BROKER_PROCESS, -}; - -enum Thread { - UNKNOWN_THREAD, - MAIN_THREAD, - IO_THREAD, - COMPOSITOR_THREAD, -}; - -enum Trigger { - UNKNOWN, - PROCESS_STARTUP, - JANKY_TASK, - THREAD_HUNG, - PERIODIC_COLLECTION, -}; - -enum SampleOrderingSpec { - MAY_SHUFFLE, - PRESERVE_ORDER, -}; - -struct CallStackProfileParams { - Process process; - Thread thread; - Trigger trigger; - SampleOrderingSpec ordering_spec; +// |contents| is a serialized protobuf from +// src/third_party/metrics_proto/sampled_profile.proto. +// +// We pass this state via serialized protobuf because that is the ultimate +// metrics upload format. +struct SampledProfile { + string contents; }; interface CallStackProfileCollector { - Collect(CallStackProfileParams params, - mojo_base.mojom.TimeTicks start_timestamp, - CallStackProfile profile); + Collect(mojo_base.mojom.TimeTicks start_timestamp, + SampledProfile profile); };
diff --git a/components/metrics/public/interfaces/call_stack_profile_collector_test.mojom b/components/metrics/public/interfaces/call_stack_profile_collector_test.mojom index 2c7f1c1..c7725c67 100644 --- a/components/metrics/public/interfaces/call_stack_profile_collector_test.mojom +++ b/components/metrics/public/interfaces/call_stack_profile_collector_test.mojom
@@ -8,26 +8,5 @@ interface CallStackProfileCollectorTest { [Sync] - BounceFrame(CallStackFrame in) => (CallStackFrame out); - - [Sync] - BounceModule(CallStackModule in) => (CallStackModule out); - - [Sync] - BounceProfile(CallStackProfile in) => (CallStackProfile out); - - [Sync] - BounceProcess(Process in) => (Process out); - - [Sync] - BounceThread(Thread in) => (Thread out); - - [Sync] - BounceTrigger(Trigger in) => (Trigger out); - - [Sync] - BounceSampleOrderingSpec(SampleOrderingSpec in) => (SampleOrderingSpec out); - - [Sync] - BounceCallStackProfileParams(CallStackProfileParams in) => (CallStackProfileParams out); + BounceSampledProfile(SampledProfile in) => (SampledProfile out); };
diff --git a/components/neterror/resources/neterror.css b/components/neterror/resources/neterror.css index 2f1c1c5..b9070185 100644 --- a/components/neterror/resources/neterror.css +++ b/components/neterror/resources/neterror.css
@@ -349,7 +349,7 @@ position: relative; } -.download-button:before { +#download-button:before { background: -webkit-image-set( url(../../resources/default_100_percent/neterror/download.png) 1x, url(../../resources/default_200_percent/neterror/download.png) 2x)
diff --git a/components/offline_pages/core/client_namespace_constants.cc b/components/offline_pages/core/client_namespace_constants.cc index b24b4696..99b2270 100644 --- a/components/offline_pages/core/client_namespace_constants.cc +++ b/components/offline_pages/core/client_namespace_constants.cc
@@ -16,6 +16,7 @@ const char kNTPSuggestionsNamespace[] = "ntp_suggestions"; const char kSuggestedArticlesNamespace[] = "suggested_articles"; const char kBrowserActionsNamespace[] = "browser_actions"; +const char kLivePageSharingNamespace[] = "live_page_sharing"; const char kDefaultNamespace[] = "default";
diff --git a/components/offline_pages/core/client_namespace_constants.h b/components/offline_pages/core/client_namespace_constants.h index ce98319f..c02e371 100644 --- a/components/offline_pages/core/client_namespace_constants.h +++ b/components/offline_pages/core/client_namespace_constants.h
@@ -24,6 +24,7 @@ extern const char kNTPSuggestionsNamespace[]; extern const char kSuggestedArticlesNamespace[]; extern const char kBrowserActionsNamespace[]; +extern const char kLivePageSharingNamespace[]; // Enum of namespaces used by metric collection. // See OfflinePagesNamespaceEnumeration in enums.xml for histogram usages. @@ -39,6 +40,7 @@ NTP_SUGGESTION = 6, SUGGESTED_ARTICLES = 7, BROWSER_ACTIONS = 8, + LIVE_PAGE_SHARING = 9, // NOTE: always keep this entry at the end. Add new result types only // immediately above this line. Make sure to update the corresponding // histogram enum accordingly.
diff --git a/components/offline_pages/core/client_policy_controller.cc b/components/offline_pages/core/client_policy_controller.cc index 5506916..03eb030 100644 --- a/components/offline_pages/core/client_policy_controller.cc +++ b/components/offline_pages/core/client_policy_controller.cc
@@ -82,6 +82,15 @@ .SetIsUserRequestedDownload(true) .SetShouldAllowDownload(true) .Build())); + policies_.insert( + std::make_pair(kLivePageSharingNamespace, + OfflinePageClientPolicyBuilder(kLivePageSharingNamespace, + LifetimeType::TEMPORARY, + kUnlimitedPages, 1) + .SetIsRemovedOnCacheReset(true) + .SetExpirePeriod(base::TimeDelta::FromHours(1)) + .SetIsOnlyShownInOriginalTab(true) + .Build())); // Fallback policy. policies_.insert(std::make_pair(
diff --git a/components/offline_pages/core/client_policy_controller_unittest.cc b/components/offline_pages/core/client_policy_controller_unittest.cc index 85ad560..a88e0be 100644 --- a/components/offline_pages/core/client_policy_controller_unittest.cc +++ b/components/offline_pages/core/client_policy_controller_unittest.cc
@@ -244,6 +244,20 @@ ExpectDisabledWhenPrefetchDisabled(kSuggestedArticlesNamespace, true); } +TEST_F(ClientPolicyControllerTest, CheckLivePageSharingDefined) { + OfflinePageClientPolicy policy = + controller()->GetPolicy(kLivePageSharingNamespace); + EXPECT_EQ(policy.name_space, kLivePageSharingNamespace); + EXPECT_TRUE(isTemporary(policy)); + EXPECT_TRUE(controller()->IsRemovedOnCacheReset(kLivePageSharingNamespace)); + ExpectRemovedOnCacheReset(kLivePageSharingNamespace, true); + ExpectDownloadSupport(kLivePageSharingNamespace, false); + ExpectUserRequestedDownloadSupport(kLivePageSharingNamespace, false); + ExpectRecentTab(kLivePageSharingNamespace, false); + ExpectOnlyOriginalTab(kLivePageSharingNamespace, true); + ExpectDisabledWhenPrefetchDisabled(kLivePageSharingNamespace, false); +} + TEST_F(ClientPolicyControllerTest, GetNamespacesRemovedOnCacheReset) { std::vector<std::string> all_namespaces = controller()->GetAllNamespaces(); const std::vector<std::string>& cache_reset_namespaces_list =
diff --git a/components/offline_pages/core/model/offline_page_model_utils.cc b/components/offline_pages/core/model/offline_page_model_utils.cc index 08632c6d..f6829d14d 100644 --- a/components/offline_pages/core/model/offline_page_model_utils.cc +++ b/components/offline_pages/core/model/offline_page_model_utils.cc
@@ -41,6 +41,8 @@ return OfflinePagesNamespaceEnumeration::SUGGESTED_ARTICLES; else if (name_space == kBrowserActionsNamespace) return OfflinePagesNamespaceEnumeration::BROWSER_ACTIONS; + else if (name_space == kLivePageSharingNamespace) + return OfflinePagesNamespaceEnumeration::LIVE_PAGE_SHARING; NOTREACHED(); return OfflinePagesNamespaceEnumeration::DEFAULT;
diff --git a/components/omnibox/browser/document_provider.cc b/components/omnibox/browser/document_provider.cc index d15d9123..bc0d16e 100644 --- a/components/omnibox/browser/document_provider.cc +++ b/components/omnibox/browser/document_provider.cc
@@ -318,8 +318,12 @@ } AutocompleteMatch match(this, relevance, false, AutocompleteMatchType::DOCUMENT_SUGGESTION); - match.destination_url = GURL(url); - match.contents = title; + base::string16 original_url; + result->GetString("originalUrl", &original_url); // optional. + match.destination_url = GURL(!original_url.empty() ? original_url : url); + match.contents = AutocompleteMatch::SanitizeString(title); + AutocompleteMatch::AddLastClassificationIfNecessary( + &match.contents_class, 0, ACMatchClassification::NONE); match.transition = ui::PAGE_TRANSITION_GENERATED; matches->push_back(match); }
diff --git a/components/omnibox/browser/document_suggestions_service.cc b/components/omnibox/browser/document_suggestions_service.cc index 4b74167fd..0ac9c7e42 100644 --- a/components/omnibox/browser/document_suggestions_service.cc +++ b/components/omnibox/browser/document_suggestions_service.cc
@@ -49,7 +49,8 @@ source_definition.SetPath({"source", "predefinedSource"}, base::Value("GOOGLE_DRIVE")); storage_options_list.emplace_back(std::move(source_definition)); - root.SetKey("sourceOptions", base::Value(std::move(storage_options_list))); + root.SetKey("dataSourceRestrictions", + base::Value(std::move(storage_options_list))); std::string result; base::JSONWriter::Write(root, &result);
diff --git a/components/page_info_strings.grdp b/components/page_info_strings.grdp index 6b5430e..1233f580 100644 --- a/components/page_info_strings.grdp +++ b/components/page_info_strings.grdp
@@ -420,4 +420,12 @@ </message> </if> </if> + + <!-- Billing --> + <message name="IDS_PAGE_INFO_BILLING_SUMMARY" desc="A one-line summary at the top of the Page Info bubble (which shows when you click the security indicator) if the website has been flagged for a billing interstitial"> + The page ahead may try to charge you money + </message> + <message name="IDS_PAGE_INFO_BILLING_DETAILS" desc="A one-line summary at the top of the Page Info bubble (which shows when you click the security indicator) if the website has been flagged for a billing interstitial."> + These charges could be one-time or recurring and may not be obvious. + </message> </grit-part>
diff --git a/components/page_info_strings_grdp/IDS_PAGE_INFO_BILLING_DETAILS.png.sha1 b/components/page_info_strings_grdp/IDS_PAGE_INFO_BILLING_DETAILS.png.sha1 new file mode 100644 index 0000000..7b87011 --- /dev/null +++ b/components/page_info_strings_grdp/IDS_PAGE_INFO_BILLING_DETAILS.png.sha1
@@ -0,0 +1 @@ +f6a8c9fb2f9ea8a760454538cb50604a8b04bcf6 \ No newline at end of file
diff --git a/components/page_info_strings_grdp/IDS_PAGE_INFO_BILLING_SUMMARY.png.sha1 b/components/page_info_strings_grdp/IDS_PAGE_INFO_BILLING_SUMMARY.png.sha1 new file mode 100644 index 0000000..7b87011 --- /dev/null +++ b/components/page_info_strings_grdp/IDS_PAGE_INFO_BILLING_SUMMARY.png.sha1
@@ -0,0 +1 @@ +f6a8c9fb2f9ea8a760454538cb50604a8b04bcf6 \ No newline at end of file
diff --git a/components/password_manager/core/browser/browser_save_password_progress_logger.cc b/components/password_manager/core/browser/browser_save_password_progress_logger.cc index 86a54bd..5524cc6 100644 --- a/components/password_manager/core/browser/browser_save_password_progress_logger.cc +++ b/components/password_manager/core/browser/browser_save_password_progress_logger.cc
@@ -168,10 +168,14 @@ (field->properties_mask & autofill::FieldPropertiesFlags::USER_TYPED) ? "T" : "_"; - field_info += - (field->properties_mask & autofill::FieldPropertiesFlags::AUTOFILLED) - ? "A" - : "_"; + field_info += (field->properties_mask & + autofill::FieldPropertiesFlags::AUTOFILLED_ON_PAGELOAD) + ? "Ap" + : "__"; + field_info += (field->properties_mask & + autofill::FieldPropertiesFlags::AUTOFILLED_ON_USER_TRIGGER) + ? "Au" + : "__"; field_info += (field->properties_mask & autofill::FieldPropertiesFlags::HAD_FOCUS) ? "F"
diff --git a/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc b/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc index 4a2b757..c16d85a 100644 --- a/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc +++ b/components/password_manager/core/browser/form_parsing/form_parser_unittest.cc
@@ -896,13 +896,34 @@ }, { .description_for_logging = "And passwords already filled by user or " - "Chrome are accepted even if " + "Chrome on pageload are accepted even if " "readonly", .fields = { {.role = ElementRole::USERNAME, .form_control_type = "text"}, {.role = ElementRole::CURRENT_PASSWORD, - .properties_mask = FieldPropertiesFlags::AUTOFILLED, + .properties_mask = + FieldPropertiesFlags::AUTOFILLED_ON_PAGELOAD, + .form_control_type = "password", + .is_readonly = true}, + {.role = ElementRole::NEW_PASSWORD, + .properties_mask = FieldPropertiesFlags::USER_TYPED, + .form_control_type = "password", + .is_readonly = true}, + {.form_control_type = "password", .is_readonly = true}, + }, + .number_of_all_possible_passwords = 3, + }, + { + .description_for_logging = "And passwords already filled by user or " + "Chrome with FOAS are accepted even if " + "readonly", + .fields = + { + {.role = ElementRole::USERNAME, .form_control_type = "text"}, + {.role = ElementRole::CURRENT_PASSWORD, + .properties_mask = + FieldPropertiesFlags::AUTOFILLED_ON_USER_TRIGGER, .form_control_type = "password", .is_readonly = true}, {.role = ElementRole::NEW_PASSWORD,
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc index 32bb274b2..b86b146 100644 --- a/components/password_manager/core/browser/password_form_manager.cc +++ b/components/password_manager/core/browser/password_form_manager.cc
@@ -316,12 +316,10 @@ form_saver_->Save(pending_credentials_, best_matches_); } else { ProcessUpdate(); - std::vector<PasswordForm> credentials_to_update; - base::Optional<PasswordForm> old_primary_key = - UpdatePendingAndGetOldKey(&credentials_to_update); + std::vector<PasswordForm> credentials_to_update = + FindOtherCredentialsToUpdate(); form_saver_->Update(pending_credentials_, best_matches_, - &credentials_to_update, - old_primary_key ? &old_primary_key.value() : nullptr); + &credentials_to_update, nullptr); } // This is not in ProcessUpdate() to catch PSL matched credentials. @@ -354,12 +352,10 @@ pending_credentials_.preferred = true; is_new_login_ = false; ProcessUpdate(); - std::vector<PasswordForm> more_credentials_to_update; - base::Optional<PasswordForm> old_primary_key = - UpdatePendingAndGetOldKey(&more_credentials_to_update); + std::vector<PasswordForm> more_credentials_to_update = + FindOtherCredentialsToUpdate(); form_saver_->Update(pending_credentials_, best_matches_, - &more_credentials_to_update, - old_primary_key ? &old_primary_key.value() : nullptr); + &more_credentials_to_update, nullptr); password_manager_->UpdateFormManagers(); } @@ -1018,56 +1014,26 @@ metrics_recorder_->SetUserAction(user_action); } -base::Optional<PasswordForm> PasswordFormManager::UpdatePendingAndGetOldKey( - std::vector<PasswordForm>* credentials_to_update) { - base::Optional<PasswordForm> old_primary_key; - bool update_related_credentials = false; +std::vector<PasswordForm> PasswordFormManager::FindOtherCredentialsToUpdate() { + std::vector<autofill::PasswordForm> credentials_to_update; + if (!pending_credentials_.federation_origin.unique()) + return credentials_to_update; - if (pending_credentials_.federation_origin.unique() && - !IsValidAndroidFacetURI(pending_credentials_.signon_realm) && - (pending_credentials_.password_element.empty() || - pending_credentials_.username_element.empty() || - pending_credentials_.submit_element.empty())) { - // Given that |password_element| and |username_element| are part of Sync and - // PasswordStore primary key, the old primary key must be used in order to - // match and update the existing entry. - old_primary_key = pending_credentials_; - // TODO(crbug.com/833171) It is possible for best_matches to not contain the - // username being updated. Add comments and a test, when we realise why. - auto best_match = best_matches_.find(pending_credentials_.username_value); - if (best_match != best_matches_.end()) { - old_primary_key->username_element = best_match->second->username_element; - old_primary_key->password_element = best_match->second->password_element; - } - pending_credentials_.password_element = observed_form_.password_element; - pending_credentials_.username_element = observed_form_.username_element; - pending_credentials_.submit_element = observed_form_.submit_element; - update_related_credentials = true; - } else { - update_related_credentials = - pending_credentials_.federation_origin.unique(); - } - - // If this was a password update, then update all non-best matches entries - // with the same username and the same old password. - if (update_related_credentials) { - auto updated_password_it = - best_matches_.find(pending_credentials_.username_value); - DCHECK(best_matches_.end() != updated_password_it); - const base::string16& old_password = - updated_password_it->second->password_value; - for (auto* not_best_match : not_best_matches_) { - if (not_best_match->username_value == - pending_credentials_.username_value && - not_best_match->password_value == old_password) { - credentials_to_update->push_back(*not_best_match); - credentials_to_update->back().password_value = - pending_credentials_.password_value; - } + auto updated_password_it = + best_matches_.find(pending_credentials_.username_value); + DCHECK(best_matches_.end() != updated_password_it); + const base::string16& old_password = + updated_password_it->second->password_value; + for (auto* not_best_match : not_best_matches_) { + if (not_best_match->username_value == pending_credentials_.username_value && + not_best_match->password_value == old_password) { + credentials_to_update.push_back(*not_best_match); + credentials_to_update.back().password_value = + pending_credentials_.password_value; } } - return old_primary_key; + return credentials_to_update; } } // namespace password_manager
diff --git a/components/password_manager/core/browser/password_form_manager.h b/components/password_manager/core/browser/password_form_manager.h index 14cbbb41..61e9d41 100644 --- a/components/password_manager/core/browser/password_form_manager.h +++ b/components/password_manager/core/browser/password_form_manager.h
@@ -320,15 +320,11 @@ // Sets |user_action_| and records some metrics. void SetUserAction(UserAction user_action); - // Edits some fields in |pending_credentials_| before it can be used to - // update the password store. It also goes through |not_best_matches|, - // updates the password of those which share the old password and username - // with |pending_credentials_| to the new password of |pending_credentials_|, - // and adds copies of all such modified credentials to - // |credentials_to_update|. If needed, this also returns a PasswordForm to be - // used as the old primary key during the store update. - base::Optional<autofill::PasswordForm> UpdatePendingAndGetOldKey( - std::vector<autofill::PasswordForm>* credentials_to_update); + // Goes through |not_best_matches_|, updates the password of those which share + // the old password and username with |pending_credentials_| to the new + // password of |pending_credentials_|, and returns copies of all such modified + // credentials. + std::vector<autofill::PasswordForm> FindOtherCredentialsToUpdate(); void SetPasswordOverridden(bool password_overridden) { password_overridden_ = password_overridden;
diff --git a/components/password_manager/core/browser/password_form_manager_unittest.cc b/components/password_manager/core/browser/password_form_manager_unittest.cc index 11a1f34..0205a6e 100644 --- a/components/password_manager/core/browser/password_form_manager_unittest.cc +++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
@@ -1603,61 +1603,6 @@ UnorderedElementsAre(pair1, pair2, pair3)); } -// Test that if metadata stored with a form in PasswordStore are incomplete, -// they are updated upon the next encounter. -TEST_F(PasswordFormManagerTest, TestUpdateIncompleteCredentials) { - PasswordForm encountered_form; - encountered_form.origin = GURL("http://accounts.google.com/LoginAuth"); - encountered_form.signon_realm = "http://accounts.google.com/"; - encountered_form.action = GURL("http://accounts.google.com/Login"); - encountered_form.username_element = ASCIIToUTF16("Email"); - encountered_form.password_element = ASCIIToUTF16("Passwd"); - encountered_form.submit_element = ASCIIToUTF16("signIn"); - - EXPECT_CALL(*(client()->mock_driver()), AllowPasswordGenerationForForm(_)); - - FakeFormFetcher fetcher; - fetcher.Fetch(); - PasswordFormManager form_manager(password_manager(), client(), - client()->driver(), encountered_form, - std::make_unique<MockFormSaver>(), &fetcher); - form_manager.Init(nullptr); - - PasswordForm incomplete_form; - incomplete_form.origin = GURL("http://accounts.google.com/LoginAuth"); - incomplete_form.signon_realm = "http://accounts.google.com/"; - incomplete_form.password_value = ASCIIToUTF16("my_password"); - incomplete_form.username_value = ASCIIToUTF16("my_username"); - incomplete_form.preferred = true; - incomplete_form.scheme = PasswordForm::SCHEME_HTML; - - // We expect to see this form eventually sent to the Password store. It - // has password/username values from the store and 'username_element', - // 'password_element', 'submit_element' and 'action' fields copied from - // the encountered form. - PasswordForm complete_form(incomplete_form); - complete_form.action = encountered_form.action; - complete_form.password_element = encountered_form.password_element; - complete_form.username_element = encountered_form.username_element; - complete_form.submit_element = encountered_form.submit_element; - - PasswordForm obsolete_form(incomplete_form); - obsolete_form.action = encountered_form.action; - - // Feed the incomplete credentials to the manager. - fetcher.SetNonFederated({&incomplete_form}, 0u); - - form_manager.ProvisionallySave(complete_form); - // By now that form has been used once. - complete_form.times_used = 1; - obsolete_form.times_used = 1; - - // Check that PasswordStore receives an update request with the complete form. - EXPECT_CALL(MockFormSaver::Get(&form_manager), - Update(complete_form, _, _, Pointee(obsolete_form))); - form_manager.Save(); -} - // Test that public-suffix-matched credentials score lower than same-origin // ones. TEST_F(PasswordFormManagerTest, TestScoringPublicSuffixMatch) {
diff --git a/components/policy/core/browser/cloud/message_util.cc b/components/policy/core/browser/cloud/message_util.cc index b2f8d9f..6821e2e4 100644 --- a/components/policy/core/browser/cloud/message_util.cc +++ b/components/policy/core/browser/cloud/message_util.cc
@@ -84,6 +84,10 @@ return IDS_POLICY_VALIDATION_POLICY_PARSE_ERROR; case CloudPolicyValidatorBase::VALIDATION_BAD_KEY_VERIFICATION_SIGNATURE: return IDS_POLICY_VALIDATION_BAD_KEY_VERIFICATION_SIGNATURE; + case CloudPolicyValidatorBase::VALIDATION_VALUE_WARNING: + return IDS_POLICY_VALIDATION_VALUE_WARNING; + case CloudPolicyValidatorBase::VALIDATION_VALUE_ERROR: + return IDS_POLICY_VALIDATION_VALUE_ERROR; case CloudPolicyValidatorBase::VALIDATION_STATUS_SIZE: NOTREACHED(); }
diff --git a/components/policy/core/browser/policy_error_map.cc b/components/policy/core/browser/policy_error_map.cc index 8312ab9..1af93b9 100644 --- a/components/policy/core/browser/policy_error_map.cc +++ b/components/policy/core/browser/policy_error_map.cc
@@ -221,6 +221,19 @@ void PolicyErrorMap::Clear() { CheckReadyAndConvert(); map_.clear(); + debug_infos_.clear(); +} + +void PolicyErrorMap::SetDebugInfo(const std::string& policy, + const std::string& debug_infos) { + debug_infos_[policy] = debug_infos; +} + +const std::string PolicyErrorMap::GetDebugInfo(const std::string& policy) { + std::map<std::string, std::string>::iterator it = debug_infos_.find(policy); + if (it != debug_infos_.end()) + return it->second; + return std::string(); } void PolicyErrorMap::AddError(std::unique_ptr<PendingError> error) {
diff --git a/components/policy/core/browser/policy_error_map.h b/components/policy/core/browser/policy_error_map.h index 4922ef6..482d723d 100644 --- a/components/policy/core/browser/policy_error_map.h +++ b/components/policy/core/browser/policy_error_map.h
@@ -91,6 +91,15 @@ void Clear(); + // Sets the debug info |debug_info| for the policy with key |policy|. + // This is intended to be developer-friendly, non-localized detailed + // information from validation of |policy|. + void SetDebugInfo(const std::string& policy, const std::string& debug_info); + + // Returns the debug info set for the key |policy| by |SetDebugInfo| or an + // empty string if no debug info was set. + const std::string GetDebugInfo(const std::string& policy); + private: // Maps the error when ready, otherwise adds it to the pending errors list. void AddError(std::unique_ptr<PendingError> error); @@ -104,6 +113,9 @@ std::vector<std::unique_ptr<PendingError>> pending_; PolicyMapType map_; + // Maps policy keys to debug infos set through |SetDebugInfo|. + std::map<std::string, std::string> debug_infos_; + DISALLOW_COPY_AND_ASSIGN(PolicyErrorMap); };
diff --git a/components/policy/core/common/BUILD.gn b/components/policy/core/common/BUILD.gn index 014ca96..51d7c09 100644 --- a/components/policy/core/common/BUILD.gn +++ b/components/policy/core/common/BUILD.gn
@@ -71,6 +71,7 @@ "cloud/machine_level_user_cloud_policy_store.h", "cloud/policy_header_service.cc", "cloud/policy_header_service.h", + "cloud/policy_value_validator.h", "cloud/resource_cache.cc", "cloud/resource_cache.h", "cloud/signing_service.h",
diff --git a/components/policy/core/common/cloud/cloud_policy_client.cc b/components/policy/core/common/cloud/cloud_policy_client.cc index 2674755..049f24d 100644 --- a/components/policy/core/common/cloud/cloud_policy_client.cc +++ b/components/policy/core/common/cloud/cloud_policy_client.cc
@@ -16,6 +16,7 @@ #include "base/logging.h" #include "base/stl_util.h" #include "components/policy/core/common/cloud/cloud_policy_util.h" +#include "components/policy/core/common/cloud/cloud_policy_validator.h" #include "components/policy/core/common/cloud/device_management_service.h" #include "components/policy/core/common/cloud/signing_service.h" #include "google_apis/gaia/gaia_constants.h" @@ -87,6 +88,61 @@ } } +em::PolicyValidationReportRequest::ValidationResultType +TranslatePolicyValidationResult(CloudPolicyValidatorBase::Status status) { + using report = em::PolicyValidationReportRequest; + using policyValidationStatus = CloudPolicyValidatorBase::Status; + switch (status) { + case policyValidationStatus::VALIDATION_OK: + return report::VALIDATION_RESULT_TYPE_SUCCESS; + case policyValidationStatus::VALIDATION_BAD_INITIAL_SIGNATURE: + return report::VALIDATION_RESULT_TYPE_BAD_INITIAL_SIGNATURE; + case policyValidationStatus::VALIDATION_BAD_SIGNATURE: + return report::VALIDATION_RESULT_TYPE_BAD_SIGNATURE; + case policyValidationStatus::VALIDATION_ERROR_CODE_PRESENT: + return report::VALIDATION_RESULT_TYPE_ERROR_CODE_PRESENT; + case policyValidationStatus::VALIDATION_PAYLOAD_PARSE_ERROR: + return report::VALIDATION_RESULT_TYPE_PAYLOAD_PARSE_ERROR; + case policyValidationStatus::VALIDATION_WRONG_POLICY_TYPE: + return report::VALIDATION_RESULT_TYPE_WRONG_POLICY_TYPE; + case policyValidationStatus::VALIDATION_WRONG_SETTINGS_ENTITY_ID: + return report::VALIDATION_RESULT_TYPE_WRONG_SETTINGS_ENTITY_ID; + case policyValidationStatus::VALIDATION_BAD_TIMESTAMP: + return report::VALIDATION_RESULT_TYPE_BAD_TIMESTAMP; + case policyValidationStatus::VALIDATION_BAD_DM_TOKEN: + return report::VALIDATION_RESULT_TYPE_BAD_DM_TOKEN; + case policyValidationStatus::VALIDATION_BAD_DEVICE_ID: + return report::VALIDATION_RESULT_TYPE_BAD_DEVICE_ID; + case policyValidationStatus::VALIDATION_BAD_USER: + return report::VALIDATION_RESULT_TYPE_BAD_USER; + case policyValidationStatus::VALIDATION_POLICY_PARSE_ERROR: + return report::VALIDATION_RESULT_TYPE_POLICY_PARSE_ERROR; + case policyValidationStatus::VALIDATION_BAD_KEY_VERIFICATION_SIGNATURE: + return report::VALIDATION_RESULT_TYPE_BAD_KEY_VERIFICATION_SIGNATURE; + case policyValidationStatus::VALIDATION_VALUE_WARNING: + return report::VALIDATION_RESULT_TYPE_VALUE_WARNING; + case policyValidationStatus::VALIDATION_VALUE_ERROR: + return report::VALIDATION_RESULT_TYPE_VALUE_ERROR; + case policyValidationStatus::VALIDATION_STATUS_SIZE: + return report::VALIDATION_RESULT_TYPE_ERROR_UNSPECIFIED; + } + return report::VALIDATION_RESULT_TYPE_ERROR_UNSPECIFIED; +} + +em::PolicyValueValidationIssue::ValueValidationIssueSeverity +TranslatePolicyValidationResultSeverity( + ValueValidationIssue::Severity severity) { + using issue = em::PolicyValueValidationIssue; + switch (severity) { + case ValueValidationIssue::Severity::kWarning: + return issue::VALUE_VALIDATION_ISSUE_SEVERITY_WARNING; + case ValueValidationIssue::Severity::kError: + return issue::VALUE_VALIDATION_ISSUE_SEVERITY_ERROR; + } + NOTREACHED(); + return issue::VALUE_VALIDATION_ISSUE_SEVERITY_UNSPECIFIED; +} + } // namespace CloudPolicyClient::Observer::~Observer() {} @@ -360,6 +416,47 @@ weak_ptr_factory_.GetWeakPtr())); } +void CloudPolicyClient::UploadPolicyValidationReport( + CloudPolicyValidatorBase::Status status, + const std::vector<ValueValidationIssue>& value_validation_issues, + const std::string& policy_type, + const std::string& policy_token) { + CHECK(is_registered()); + + std::unique_ptr<DeviceManagementRequestJob> request_job(service_->CreateJob( + DeviceManagementRequestJob::TYPE_UPLOAD_POLICY_VALIDATION_REPORT, + GetURLLoaderFactory())); + request_job->SetDMToken(dm_token_); + request_job->SetClientID(client_id_); + + em::DeviceManagementRequest* request = request_job->GetRequest(); + em::PolicyValidationReportRequest* policy_validation_report_request = + request->mutable_policy_validation_report_request(); + + policy_validation_report_request->set_policy_type(policy_type); + policy_validation_report_request->set_policy_token(policy_token); + policy_validation_report_request->set_validation_result_type( + TranslatePolicyValidationResult(status)); + + for (const ValueValidationIssue& issue : value_validation_issues) { + em::PolicyValueValidationIssue* proto_result = + policy_validation_report_request->add_policy_value_validation_issues(); + proto_result->set_policy_name(issue.policy_name); + proto_result->set_severity( + TranslatePolicyValidationResultSeverity(issue.severity)); + proto_result->set_debug_message(issue.message); + } + + const DeviceManagementRequestJob::Callback job_callback = + base::AdaptCallbackForRepeating( + base::BindOnce(&CloudPolicyClient::OnReportUploadCompleted, + weak_ptr_factory_.GetWeakPtr(), request_job.get(), + base::DoNothing())); + + request_jobs_.push_back(std::move(request_job)); + request_jobs_.back()->Start(job_callback); +} + void CloudPolicyClient::FetchRobotAuthCodes(const std::string& auth_token) { CHECK(is_registered());
diff --git a/components/policy/core/common/cloud/cloud_policy_client.h b/components/policy/core/common/cloud/cloud_policy_client.h index 49598e4..e433c5b 100644 --- a/components/policy/core/common/cloud/cloud_policy_client.h +++ b/components/policy/core/common/cloud/cloud_policy_client.h
@@ -21,6 +21,7 @@ #include "base/time/time.h" #include "base/values.h" #include "components/policy/core/common/cloud/cloud_policy_constants.h" +#include "components/policy/core/common/cloud/cloud_policy_validator.h" #include "components/policy/core/common/remote_commands/remote_command_job.h" #include "components/policy/policy_export.h" #include "components/policy/proto/device_management_backend.pb.h" @@ -168,6 +169,16 @@ // requests and the latest request will eventually trigger notifications. virtual void FetchPolicy(); + // Upload a policy validation report to the server. Like FetchPolicy, this + // method requires that the client is in a registered state. This method + // should only be called if the policy was rejected (e.g. validation or + // serialization error). + virtual void UploadPolicyValidationReport( + CloudPolicyValidatorBase::Status status, + const std::vector<ValueValidationIssue>& value_validation_issues, + const std::string& policy_type, + const std::string& policy_token); + // Requests OAuth2 auth codes for the device robot account. The client being // registered is a prerequisite to this operation and this call will CHECK if // the client is not in registered state.
diff --git a/components/policy/core/common/cloud/cloud_policy_client_unittest.cc b/components/policy/core/common/cloud/cloud_policy_client_unittest.cc index 85ba35c..9c62de7 100644 --- a/components/policy/core/common/cloud/cloud_policy_client_unittest.cc +++ b/components/policy/core/common/cloud/cloud_policy_client_unittest.cc
@@ -59,6 +59,9 @@ const char kLocation[] = "fake-location"; const char kGcmID[] = "fake-gcm-id"; const char kPackageName[] = "com.example.app"; +const char kPolicyToken[] = "fake-policy-token"; +const char kPolicyName[] = "fake-policy-name"; +const char kValueValidationMessage[] = "fake-value-validation-message"; #if defined(OS_WIN) || defined(OS_MACOSX) || \ defined(OS_LINUX) && !defined(OS_CHROMEOS) @@ -245,6 +248,22 @@ license_two->set_available_licenses(0); upload_app_install_report_response_.mutable_app_install_report_response(); + + em::PolicyValidationReportRequest* policy_validation_report_request = + upload_policy_validation_report_request_ + .mutable_policy_validation_report_request(); + policy_validation_report_request->set_policy_type(policy_type_); + policy_validation_report_request->set_policy_token(kPolicyToken); + policy_validation_report_request->set_validation_result_type( + em::PolicyValidationReportRequest:: + VALIDATION_RESULT_TYPE_VALUE_WARNING); + em::PolicyValueValidationIssue* policy_value_validation_issue = + policy_validation_report_request->add_policy_value_validation_issues(); + policy_value_validation_issue->set_policy_name(kPolicyName); + policy_value_validation_issue->set_severity( + em::PolicyValueValidationIssue:: + VALUE_VALIDATION_ISSUE_SEVERITY_WARNING); + policy_value_validation_issue->set_debug_message(kValueValidationMessage); } void SetUp() override { @@ -361,6 +380,20 @@ client_id_, MatchProto(upload_status_request_))); } + void ExpectUploadPolicyValidationReport() { + EXPECT_CALL( + service_, + CreateJob( + DeviceManagementRequestJob::TYPE_UPLOAD_POLICY_VALIDATION_REPORT, + shared_url_loader_factory_)) + .WillOnce( + service_.SucceedJob(upload_policy_validation_report_response_)); + EXPECT_CALL(service_, + StartJob(dm_protocol::kValueRequestUploadPolicyValidationReport, + std::string(), std::string(), kDMToken, client_id_, + MatchProto(upload_policy_validation_report_request_))); + } + void ExpectChromeDesktopReport() { EXPECT_CALL( service_, @@ -482,6 +515,7 @@ em::DeviceManagementRequest attribute_update_request_; em::DeviceManagementRequest gcm_id_update_request_; em::DeviceManagementRequest check_device_license_request_; + em::DeviceManagementRequest upload_policy_validation_report_request_; // Protobufs used in successful responses. em::DeviceManagementResponse registration_response_; @@ -497,6 +531,7 @@ em::DeviceManagementResponse check_device_license_response_; em::DeviceManagementResponse check_device_license_broken_response_; em::DeviceManagementResponse upload_app_install_report_response_; + em::DeviceManagementResponse upload_policy_validation_report_response_; base::MessageLoop loop_; std::string client_id_; @@ -1032,6 +1067,19 @@ EXPECT_EQ(DM_STATUS_SUCCESS, client_->status()); } +TEST_F(CloudPolicyClientTest, UploadPolicyValidationReport) { + Register(); + + ExpectUploadPolicyValidationReport(); + std::vector<ValueValidationIssue> issues; + issues.push_back( + {kPolicyName, ValueValidationIssue::kWarning, kValueValidationMessage}); + client_->UploadPolicyValidationReport( + CloudPolicyValidatorBase::VALIDATION_VALUE_WARNING, issues, policy_type_, + kPolicyToken); + EXPECT_EQ(DM_STATUS_SUCCESS, client_->status()); +} + TEST_F(CloudPolicyClientTest, UploadChromeDesktopReport) { Register();
diff --git a/components/policy/core/common/cloud/cloud_policy_constants.cc b/components/policy/core/common/cloud/cloud_policy_constants.cc index 3c3e697..31f8b08 100644 --- a/components/policy/core/common/cloud/cloud_policy_constants.cc +++ b/components/policy/core/common/cloud/cloud_policy_constants.cc
@@ -59,6 +59,8 @@ const char kValueRequestChromeDesktopReport[] = "chrome_desktop_report"; const char kValueRequestInitialEnrollmentStateRetrieval[] = "device_initial_enrollment_state"; +const char kValueRequestUploadPolicyValidationReport[] = + "policy_validation_report"; const char kChromeDevicePolicyType[] = "google/chromeos/device"; #if defined(OS_CHROMEOS)
diff --git a/components/policy/core/common/cloud/cloud_policy_constants.h b/components/policy/core/common/cloud/cloud_policy_constants.h index 2d1cc55..53e0603 100644 --- a/components/policy/core/common/cloud/cloud_policy_constants.h +++ b/components/policy/core/common/cloud/cloud_policy_constants.h
@@ -50,6 +50,7 @@ POLICY_EXPORT extern const char kValueRequestTokenEnrollment[]; POLICY_EXPORT extern const char kValueRequestChromeDesktopReport[]; POLICY_EXPORT extern const char kValueRequestInitialEnrollmentStateRetrieval[]; +POLICY_EXPORT extern const char kValueRequestUploadPolicyValidationReport[]; // Policy type strings for the policy_type field in PolicyFetchRequest. POLICY_EXPORT extern const char kChromeDevicePolicyType[];
diff --git a/components/policy/core/common/cloud/cloud_policy_service.cc b/components/policy/core/common/cloud/cloud_policy_service.cc index dd2af39..a9d7623a 100644 --- a/components/policy/core/common/cloud/cloud_policy_service.cc +++ b/components/policy/core/common/cloud/cloud_policy_service.cc
@@ -81,6 +81,7 @@ if (policy) { if (refresh_state_ != REFRESH_NONE) refresh_state_ = REFRESH_POLICY_STORE; + policy_pending_validation_signature_ = policy->policy_data_signature(); store_->Store(*policy, client->fetched_invalidation_version()); } else { RefreshCompleted(false); @@ -149,12 +150,61 @@ RefreshCompleted(true); CheckInitializationCompleted(); + + ReportValidationResult(store); } void CloudPolicyService::OnStoreError(CloudPolicyStore* store) { if (refresh_state_ == REFRESH_POLICY_STORE) RefreshCompleted(false); CheckInitializationCompleted(); + ReportValidationResult(store); +} + +void CloudPolicyService::ReportValidationResult(CloudPolicyStore* store) { + const CloudPolicyValidatorBase::ValidationResult* validation_result = + store->validation_result(); + if (!validation_result) + return; + + if (policy_pending_validation_signature_.empty() || + policy_pending_validation_signature_ != + validation_result->policy_data_signature) { + return; + } + policy_pending_validation_signature_.clear(); + + if (validation_result->policy_token.empty()) + return; + + if (validation_result->status == + CloudPolicyValidatorBase::Status::VALIDATION_OK && + validation_result->value_validation_issues.empty()) { + return; + } + + // TODO(hendrich,pmarko): https://crbug.com/794848 + // Update the status to reflect value validation errors/warnings. For now we + // don't want to reject policies on value validation errors, therefore the + // validation result will be |VALIDATION_OK| even though we might have value + // validation errors/warnings. + // Also update UploadPolicyValidationReport to only receive |policy_type_| and + // |validation_result|. + CloudPolicyValidatorBase::Status status = validation_result->status; + if (status == CloudPolicyValidatorBase::Status::VALIDATION_OK) { + status = CloudPolicyValidatorBase::Status::VALIDATION_VALUE_WARNING; + for (const ValueValidationIssue& issue : + validation_result->value_validation_issues) { + if (issue.severity == ValueValidationIssue::Severity::kError) { + status = CloudPolicyValidatorBase::Status::VALIDATION_VALUE_ERROR; + break; + } + } + } + + client_->UploadPolicyValidationReport( + status, validation_result->value_validation_issues, policy_type_, + validation_result->policy_token); } void CloudPolicyService::CheckInitializationCompleted() { @@ -173,8 +223,7 @@ refresh_state_ = REFRESH_NONE; for (std::vector<RefreshPolicyCallback>::iterator callback(callbacks.begin()); - callback != callbacks.end(); - ++callback) { + callback != callbacks.end(); ++callback) { callback->Run(success); } }
diff --git a/components/policy/core/common/cloud/cloud_policy_service.h b/components/policy/core/common/cloud/cloud_policy_service.h index beca593c..b4e853b 100644 --- a/components/policy/core/common/cloud/cloud_policy_service.h +++ b/components/policy/core/common/cloud/cloud_policy_service.h
@@ -70,6 +70,8 @@ void OnStoreLoaded(CloudPolicyStore* store) override; void OnStoreError(CloudPolicyStore* store) override; + void ReportValidationResult(CloudPolicyStore* store); + bool IsInitializationComplete() const { return initialization_complete_; } private: @@ -125,6 +127,11 @@ // initializing. base::ObserverList<Observer, true> observers_; + // Identifier from the stored policy. Policy validations results are only + // reported once if the validated policy's data signature matches with this + // one. Will be cleared once we send the validation report. + std::string policy_pending_validation_signature_; + DISALLOW_COPY_AND_ASSIGN(CloudPolicyService); };
diff --git a/components/policy/core/common/cloud/cloud_policy_service_unittest.cc b/components/policy/core/common/cloud/cloud_policy_service_unittest.cc index 6eeecbb..668a34d 100644 --- a/components/policy/core/common/cloud/cloud_policy_service_unittest.cc +++ b/components/policy/core/common/cloud/cloud_policy_service_unittest.cc
@@ -72,6 +72,7 @@ store_.policy_->device_id(), user_affiliation_ids)) .Times(1); + EXPECT_CALL(client_, UploadPolicyValidationReport(_, _, _, _)).Times(0); store_.NotifyStoreLoaded(); EXPECT_EQ(base::Time::FromJavaTime(32), client_.last_policy_timestamp_); EXPECT_TRUE(client_.public_key_version_valid_); @@ -271,4 +272,67 @@ service_.RemoveObserver(&observer); } +TEST_F(CloudPolicyServiceTest, ReportValidationResult) { + // Sync |policy_data_signature| between store and service by fetching a + // policy. + em::PolicyFetchResponse policy; + policy.set_policy_data_signature("fake-policy-data-signature"); + client_.SetPolicy(policy_type_, std::string(), policy); + EXPECT_CALL(store_, Store(ProtoMatches(policy))).Times(1); + EXPECT_CALL(client_, UploadPolicyValidationReport(_, _, _, _)).Times(0); + client_.NotifyPolicyFetched(); + + // Simulate a value validation error from the store and expect a validation + // report to be uploaded. + store_.validation_result_ = + std::make_unique<CloudPolicyValidatorBase::ValidationResult>(); + store_.validation_result_->status = + CloudPolicyValidatorBase::VALIDATION_VALUE_ERROR; + store_.validation_result_->value_validation_issues.push_back( + {"fake-policy-name", ValueValidationIssue::kError, "message"}); + store_.validation_result_->policy_token = "fake-policy-token"; + store_.validation_result_->policy_data_signature = + "fake-policy-data-signature"; + EXPECT_CALL(client_, + UploadPolicyValidationReport( + store_.validation_result_->status, + store_.validation_result_->value_validation_issues, + policy_type_, store_.validation_result_->policy_token)) + .Times(1); + store_.NotifyStoreError(); + + // A second validation of the same policy should not trigger another upload. + EXPECT_CALL(client_, UploadPolicyValidationReport(_, _, _, _)).Times(0); + store_.NotifyStoreError(); + + testing::Mock::VerifyAndClearExpectations(&client_); +} + +TEST_F(CloudPolicyServiceTest, ReportValidationResultWrongSignature) { + // Sync |policy_data_signature| between store and service by fetching a + // policy. + em::PolicyFetchResponse policy; + policy.set_policy_data_signature("fake-policy-data-signature-1"); + client_.SetPolicy(policy_type_, std::string(), policy); + EXPECT_CALL(store_, Store(ProtoMatches(policy))).Times(1); + EXPECT_CALL(client_, UploadPolicyValidationReport(_, _, _, _)).Times(0); + client_.NotifyPolicyFetched(); + + // Simulate a value validation error from the store with a different policy + // data signature. No Validation report should be uploaded in that case. + store_.validation_result_ = + std::make_unique<CloudPolicyValidatorBase::ValidationResult>(); + store_.validation_result_->status = + CloudPolicyValidatorBase::VALIDATION_VALUE_ERROR; + store_.validation_result_->value_validation_issues.push_back( + {"fake-policy-name", ValueValidationIssue::kError, "message"}); + store_.validation_result_->policy_token = "fake-policy-token"; + store_.validation_result_->policy_data_signature = + "fake-policy-data-signature-2"; + EXPECT_CALL(client_, UploadPolicyValidationReport(_, _, _, _)).Times(0); + store_.NotifyStoreError(); + + testing::Mock::VerifyAndClearExpectations(&client_); +} + } // namespace policy
diff --git a/components/policy/core/common/cloud/cloud_policy_store.cc b/components/policy/core/common/cloud/cloud_policy_store.cc index 005161f6..f2022fcc 100644 --- a/components/policy/core/common/cloud/cloud_policy_store.cc +++ b/components/policy/core/common/cloud/cloud_policy_store.cc
@@ -13,7 +13,6 @@ CloudPolicyStore::CloudPolicyStore() : status_(STATUS_OK), - validation_status_(CloudPolicyValidatorBase::VALIDATION_OK), invalidation_version_(0), is_initialized_(false) {}
diff --git a/components/policy/core/common/cloud/cloud_policy_store.h b/components/policy/core/common/cloud/cloud_policy_store.h index e004ed0..57889a0 100644 --- a/components/policy/core/common/cloud/cloud_policy_store.h +++ b/components/policy/core/common/cloud/cloud_policy_store.h
@@ -82,7 +82,11 @@ } Status status() const { return status_; } CloudPolicyValidatorBase::Status validation_status() const { - return validation_status_; + return validation_result_.get() ? validation_result_->status + : CloudPolicyValidatorBase::VALIDATION_OK; + } + const CloudPolicyValidatorBase::ValidationResult* validation_result() const { + return validation_result_.get(); } const std::string& policy_signature_public_key() const { return policy_signature_public_key_; @@ -148,8 +152,9 @@ // Latest status code. Status status_; - // Latest validation status. - CloudPolicyValidatorBase::Status validation_status_; + // Latest validation result. + std::unique_ptr<CloudPolicyValidatorBase::ValidationResult> + validation_result_; // The invalidation version of the last policy stored. int64_t invalidation_version_;
diff --git a/components/policy/core/common/cloud/cloud_policy_validator.cc b/components/policy/core/common/cloud/cloud_policy_validator.cc index 87fe76e..485c526 100644 --- a/components/policy/core/common/cloud/cloud_policy_validator.cc +++ b/components/policy/core/common/cloud/cloud_policy_validator.cc
@@ -64,8 +64,22 @@ } // namespace +CloudPolicyValidatorBase::ValidationResult::ValidationResult() = default; +CloudPolicyValidatorBase::ValidationResult::~ValidationResult() = default; + CloudPolicyValidatorBase::~CloudPolicyValidatorBase() {} +std::unique_ptr<CloudPolicyValidatorBase::ValidationResult> +CloudPolicyValidatorBase::GetValidationResult() const { + std::unique_ptr<ValidationResult> result = + std::make_unique<ValidationResult>(); + result->status = status_; + result->value_validation_issues = value_validation_issues_; + result->policy_token = policy_data_->policy_token(); + result->policy_data_signature = policy_->policy_data_signature(); + return result; +} + void CloudPolicyValidatorBase::ValidateTimestamp( base::Time not_before, ValidateTimestampOption timestamp_option) { @@ -181,9 +195,9 @@ CloudPolicyValidatorBase::CloudPolicyValidatorBase( std::unique_ptr<em::PolicyFetchResponse> policy_response, scoped_refptr<base::SequencedTaskRunner> background_task_runner) - : status_(VALIDATION_OK), + : validation_flags_(0), + status_(VALIDATION_OK), policy_(std::move(policy_response)), - validation_flags_(0), timestamp_not_before_(0), timestamp_option_(TIMESTAMP_VALIDATED), dm_token_option_(DM_TOKEN_REQUIRED), @@ -281,6 +295,7 @@ {VALIDATE_DOMAIN, &CloudPolicyValidatorBase::CheckDomain}, {VALIDATE_TIMESTAMP, &CloudPolicyValidatorBase::CheckTimestamp}, {VALIDATE_PAYLOAD, &CloudPolicyValidatorBase::CheckPayload}, + {VALIDATE_VALUES, &CloudPolicyValidatorBase::CheckValues}, }; for (size_t i = 0; i < arraysize(kCheckFunctions); ++i) {
diff --git a/components/policy/core/common/cloud/cloud_policy_validator.h b/components/policy/core/common/cloud/cloud_policy_validator.h index b7908be..75c167f6 100644 --- a/components/policy/core/common/cloud/cloud_policy_validator.h +++ b/components/policy/core/common/cloud/cloud_policy_validator.h
@@ -21,6 +21,7 @@ #include "base/time/time.h" #include "build/build_config.h" #include "components/account_id/account_id.h" +#include "components/policy/core/common/cloud/policy_value_validator.h" #include "components/policy/policy_export.h" #include "components/policy/proto/cloud_policy.pb.h" @@ -84,6 +85,10 @@ // Policy key signature could not be verified using the hard-coded // verification key. VALIDATION_BAD_KEY_VERIFICATION_SIGNATURE, + // Policy value validation raised warning(s). + VALIDATION_VALUE_WARNING, + // Policy value validation failed with error(s). + VALIDATION_VALUE_ERROR, VALIDATION_STATUS_SIZE // MUST BE LAST }; @@ -118,6 +123,21 @@ TIMESTAMP_NOT_VALIDATED, }; + struct POLICY_EXPORT ValidationResult { + // Validation status. + Status status = VALIDATION_OK; + + // Value validation issues. + std::vector<ValueValidationIssue> value_validation_issues; + + // Policy identifiers. + std::string policy_token; + std::string policy_data_signature; + + ValidationResult(); + ~ValidationResult(); + }; + virtual ~CloudPolicyValidatorBase(); // Validation status which can be read after completion has been signaled. @@ -133,6 +153,9 @@ return policy_data_; } + // ToDo + std::unique_ptr<ValidationResult> GetValidationResult() const; + // Instruct the validator to check that the policy timestamp is present and is // not before |not_before| if |timestamp_option| is TIMESTAMP_VALIDATED, or to // not check the policy timestamp if |timestamp_option| is @@ -225,6 +248,22 @@ void RunValidation(); protected: + // Internal flags indicating what to check. + enum ValidationFlags { + VALIDATE_TIMESTAMP = 1 << 0, + VALIDATE_USER = 1 << 1, + VALIDATE_DOMAIN = 1 << 2, + VALIDATE_DM_TOKEN = 1 << 3, + VALIDATE_POLICY_TYPE = 1 << 4, + VALIDATE_ENTITY_ID = 1 << 5, + VALIDATE_PAYLOAD = 1 << 6, + VALIDATE_SIGNATURE = 1 << 7, + VALIDATE_INITIAL_KEY = 1 << 8, + VALIDATE_CACHED_KEY = 1 << 9, + VALIDATE_DEVICE_ID = 1 << 10, + VALIDATE_VALUES = 1 << 11, + }; + // Create a new validator that checks |policy_response|. CloudPolicyValidatorBase( std::unique_ptr<enterprise_management::PolicyFetchResponse> @@ -242,22 +281,11 @@ // templated). Status CheckProtoPayload(google::protobuf::MessageLite* payload); - private: - // Internal flags indicating what to check. - enum ValidationFlags { - VALIDATE_TIMESTAMP = 1 << 0, - VALIDATE_USER = 1 << 1, - VALIDATE_DOMAIN = 1 << 2, - VALIDATE_DM_TOKEN = 1 << 3, - VALIDATE_POLICY_TYPE = 1 << 4, - VALIDATE_ENTITY_ID = 1 << 5, - VALIDATE_PAYLOAD = 1 << 6, - VALIDATE_SIGNATURE = 1 << 7, - VALIDATE_INITIAL_KEY = 1 << 8, - VALIDATE_CACHED_KEY = 1 << 9, - VALIDATE_DEVICE_ID = 1 << 10, - }; + std::vector<ValueValidationIssue> value_validation_issues_; + int validation_flags_; + + private: enum SignatureType { SHA1, SHA256 }; // Performs validation, called on a background thread. @@ -304,8 +332,10 @@ Status CheckInitialKey(); Status CheckCachedKey(); - // Payload type depends on the validator, checking is part of derived classes. + // Payload type and value validation depends on the validator, checking is + // part of derived classes. virtual Status CheckPayload() = 0; + virtual Status CheckValues() = 0; // Verifies the SHA1/ or SHA256/RSA |signature| on |data| against |key|. // |signature_type| specifies the type of signature (SHA1 or SHA256). @@ -318,7 +348,6 @@ std::unique_ptr<enterprise_management::PolicyFetchResponse> policy_; std::unique_ptr<enterprise_management::PolicyData> policy_data_; - int validation_flags_; int64_t timestamp_not_before_; ValidateTimestampOption timestamp_option_; ValidateDMTokenOption dm_token_option_; @@ -359,6 +388,12 @@ : CloudPolicyValidatorBase(std::move(policy_response), background_task_runner) {} + void ValidateValues( + std::unique_ptr<PolicyValueValidator<PayloadProto>> value_validator) { + validation_flags_ |= VALIDATE_VALUES; + value_validators_.push_back(std::move(value_validator)); + } + std::unique_ptr<PayloadProto>& payload() { return payload_; } // Kicks off asynchronous validation through |validator|. @@ -374,9 +409,23 @@ private: // CloudPolicyValidatorBase: Status CheckPayload() override { return CheckProtoPayload(payload_.get()); } + Status CheckValues() override { + for (const std::unique_ptr<PolicyValueValidator<PayloadProto>>& + value_validator : value_validators_) { + value_validator->ValidateValues(*payload_, &value_validation_issues_); + } + // TODO(hendrich,pmarko): https://crbug.com/794848 + // Always return OK independent of value validation results for now. We only + // want to reject policy blobs on failed value validation sometime in the + // future. + return VALIDATION_OK; + } std::unique_ptr<PayloadProto> payload_ = std::make_unique<PayloadProto>(); + std::vector<std::unique_ptr<PolicyValueValidator<PayloadProto>>> + value_validators_; + DISALLOW_COPY_AND_ASSIGN(CloudPolicyValidator); };
diff --git a/components/policy/core/common/cloud/cloud_policy_validator_unittest.cc b/components/policy/core/common/cloud/cloud_policy_validator_unittest.cc index bbfe04e..7a676bf 100644 --- a/components/policy/core/common/cloud/cloud_policy_validator_unittest.cc +++ b/components/policy/core/common/cloud/cloud_policy_validator_unittest.cc
@@ -39,6 +39,21 @@ EXPECT_EQ(expected_status, arg0->status()); }; +const char kPolicyName[] = "fake-policy-name"; +const ValueValidationIssue::Severity kSeverity = ValueValidationIssue::kError; +const char kMessage[] = "fake-message"; + +class FakeUserPolicyValueValidator + : public PolicyValueValidator<em::CloudPolicySettings> { + public: + bool ValidateValues( + const enterprise_management::CloudPolicySettings& policy_payload, + std::vector<ValueValidationIssue>* validation_issues) const override { + validation_issues->push_back({kPolicyName, kSeverity, kMessage}); + return false; + } +}; + class CloudPolicyValidatorTest : public testing::Test { public: CloudPolicyValidatorTest() @@ -53,7 +68,8 @@ existing_device_id_(PolicyBuilder::kFakeDeviceId), owning_domain_(PolicyBuilder::kFakeDomain), cached_key_signature_(PolicyBuilder::GetTestSigningKeySignature()), - validate_by_gaia_id_(true) { + validate_by_gaia_id_(true), + validate_values_(false) { policy_.SetDefaultNewSigningKey(); } @@ -108,6 +124,12 @@ } else { validator->ValidateSignature(public_key); } + + if (validate_values_) { + validator->ValidateValues( + std::make_unique<FakeUserPolicyValueValidator>()); + } + return validator; } @@ -121,6 +143,17 @@ validator->payload()->SerializeAsString()); } + void CheckValueValidation(UserCloudPolicyValidator* validator) { + std::unique_ptr<CloudPolicyValidatorBase::ValidationResult> + validation_result = validator->GetValidationResult(); + ASSERT_EQ(1u, validation_result->value_validation_issues.size()); + const ValueValidationIssue& result = + validation_result->value_validation_issues[0]; + EXPECT_EQ(kPolicyName, result.policy_name); + EXPECT_EQ(kSeverity, result.severity); + EXPECT_EQ(kMessage, result.message); + } + base::test::ScopedTaskEnvironment scoped_task_environment_; base::Time timestamp_; CloudPolicyValidatorBase::ValidateTimestampOption timestamp_option_; @@ -133,6 +166,7 @@ std::string owning_domain_; std::string cached_key_signature_; bool validate_by_gaia_id_; + bool validate_values_; UserPolicyBuilder policy_; @@ -442,6 +476,11 @@ Validate(CheckStatus(CloudPolicyValidatorBase::VALIDATION_OK)); } +TEST_F(CloudPolicyValidatorTest, ValueValidation) { + validate_values_ = true; + Validate(Invoke(this, &CloudPolicyValidatorTest::CheckValueValidation)); +} + } // namespace } // namespace policy
diff --git a/components/policy/core/common/cloud/device_management_service.cc b/components/policy/core/common/cloud/device_management_service.cc index 1974e4d..fade38e 100644 --- a/components/policy/core/common/cloud/device_management_service.cc +++ b/components/policy/core/common/cloud/device_management_service.cc
@@ -161,6 +161,8 @@ return dm_protocol::kValueRequestChromeDesktopReport; case DeviceManagementRequestJob::TYPE_INITIAL_ENROLLMENT_STATE_RETRIEVAL: return dm_protocol::kValueRequestInitialEnrollmentStateRetrieval; + case DeviceManagementRequestJob::TYPE_UPLOAD_POLICY_VALIDATION_REPORT: + return dm_protocol::kValueRequestUploadPolicyValidationReport; } NOTREACHED() << "Invalid job type " << type; return "";
diff --git a/components/policy/core/common/cloud/device_management_service.h b/components/policy/core/common/cloud/device_management_service.h index dffcd3f7..fc4a9276 100644 --- a/components/policy/core/common/cloud/device_management_service.h +++ b/components/policy/core/common/cloud/device_management_service.h
@@ -67,6 +67,7 @@ TYPE_TOKEN_ENROLLMENT = 18, TYPE_CHROME_DESKTOP_REPORT = 19, TYPE_INITIAL_ENROLLMENT_STATE_RETRIEVAL = 20, + TYPE_UPLOAD_POLICY_VALIDATION_REPORT = 21, }; typedef base::Callback<
diff --git a/components/policy/core/common/cloud/mock_cloud_policy_client.h b/components/policy/core/common/cloud/mock_cloud_policy_client.h index f66216e..957a9dded 100644 --- a/components/policy/core/common/cloud/mock_cloud_policy_client.h +++ b/components/policy/core/common/cloud/mock_cloud_policy_client.h
@@ -57,6 +57,11 @@ const StatusCallback& callback)); MOCK_METHOD0(CancelAppInstallReportUpload, void(void)); MOCK_METHOD2(UpdateGcmId, void(const std::string&, const StatusCallback&)); + MOCK_METHOD4(UploadPolicyValidationReport, + void(CloudPolicyValidatorBase::Status, + const std::vector<ValueValidationIssue>&, + const std::string&, + const std::string&)); // Sets the DMToken. void SetDMToken(const std::string& token);
diff --git a/components/policy/core/common/cloud/mock_cloud_policy_store.h b/components/policy/core/common/cloud/mock_cloud_policy_store.h index 74a7f84..4ddcdeb 100644 --- a/components/policy/core/common/cloud/mock_cloud_policy_store.h +++ b/components/policy/core/common/cloud/mock_cloud_policy_store.h
@@ -28,6 +28,7 @@ using CloudPolicyStore::status_; using CloudPolicyStore::invalidation_version_; using CloudPolicyStore::policy_signature_public_key_; + using CloudPolicyStore::validation_result_; private: DISALLOW_COPY_AND_ASSIGN(MockCloudPolicyStore);
diff --git a/components/policy/core/common/cloud/policy_value_validator.h b/components/policy/core/common/cloud/policy_value_validator.h new file mode 100644 index 0000000..868dd56d --- /dev/null +++ b/components/policy/core/common/cloud/policy_value_validator.h
@@ -0,0 +1,44 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_POLICY_CORE_COMMON_CLOUD_POLICY_VALUE_VALIDATOR_H_ +#define COMPONENTS_POLICY_CORE_COMMON_CLOUD_POLICY_VALUE_VALIDATOR_H_ + +#include <string> + +#include "base/macros.h" + +namespace policy { + +struct ValueValidationIssue { + enum Severity { kWarning, kError }; + + std::string policy_name; + Severity severity = kWarning; + std::string message; + + bool operator==(ValueValidationIssue const& rhs) const { + return policy_name == rhs.policy_name && severity == rhs.severity && + message == rhs.message; + } +}; + +template <typename PayloadProto> +class PolicyValueValidator { + public: + PolicyValueValidator() {} + virtual ~PolicyValueValidator() {} + + // Returns false if the value validation failed with errors. + virtual bool ValidateValues( + const PayloadProto& policy_payload, + std::vector<ValueValidationIssue>* out_validation_issues) const = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(PolicyValueValidator); +}; + +} // namespace policy + +#endif // COMPONENTS_POLICY_CORE_COMMON_CLOUD_POLICY_VALUE_VALIDATOR_H_ \ No newline at end of file
diff --git a/components/policy/core/common/cloud/user_cloud_policy_store.cc b/components/policy/core/common/cloud/user_cloud_policy_store.cc index 4e54cb86..454eb64 100644 --- a/components/policy/core/common/cloud/user_cloud_policy_store.cc +++ b/components/policy/core/common/cloud/user_cloud_policy_store.cc
@@ -329,9 +329,9 @@ UMA_HISTOGRAM_ENUMERATION( "Enterprise.UserCloudPolicyStore.LoadValidationStatus", validator->status(), CloudPolicyValidatorBase::VALIDATION_STATUS_SIZE); - validation_status_ = validator->status(); + validation_result_ = validator->GetValidationResult(); if (!validator->success()) { - DVLOG(1) << "Validation failed: status=" << validation_status_; + DVLOG(1) << "Validation failed: status=" << validator->status(); status_ = STATUS_VALIDATION_ERROR; NotifyStoreError(); return; @@ -358,24 +358,24 @@ } void DesktopCloudPolicyStore::Store(const em::PolicyFetchResponse& policy) { - // Stop any pending requests to store policy, then validate the new policy - // before storing it. + // Cancel all pending requests. weak_factory_.InvalidateWeakPtrs(); + std::unique_ptr<em::PolicyFetchResponse> policy_copy( new em::PolicyFetchResponse(policy)); Validate( std::move(policy_copy), std::unique_ptr<em::PolicySigningKey>(), true, - base::BindRepeating(&DesktopCloudPolicyStore::StorePolicyAfterValidation, + base::BindRepeating(&DesktopCloudPolicyStore::OnPolicyToStoreValidated, weak_factory_.GetWeakPtr())); } -void DesktopCloudPolicyStore::StorePolicyAfterValidation( +void DesktopCloudPolicyStore::OnPolicyToStoreValidated( UserCloudPolicyValidator* validator) { UMA_HISTOGRAM_ENUMERATION( "Enterprise.UserCloudPolicyStore.StoreValidationStatus", validator->status(), CloudPolicyValidatorBase::VALIDATION_STATUS_SIZE); - validation_status_ = validator->status(); - DVLOG(1) << "Policy validation complete: status = " << validation_status_; + validation_result_ = validator->GetValidationResult(); + DVLOG(1) << "Policy validation complete: status = " << validator->status(); if (!validator->success()) { status_ = STATUS_VALIDATION_ERROR; NotifyStoreError();
diff --git a/components/policy/core/common/cloud/user_cloud_policy_store.h b/components/policy/core/common/cloud/user_cloud_policy_store.h index 6fca09c5..d281ab7 100644 --- a/components/policy/core/common/cloud/user_cloud_policy_store.h +++ b/components/policy/core/common/cloud/user_cloud_policy_store.h
@@ -74,7 +74,7 @@ UserCloudPolicyValidator* validator); // Callback invoked to store the policy after validation has finished. - void StorePolicyAfterValidation(UserCloudPolicyValidator* validator); + void OnPolicyToStoreValidated(UserCloudPolicyValidator* validator); // The current key used to verify signatures of policy. This value is // eventually consistent with the one persisted in the key cache file. This
diff --git a/components/policy/core/common/policy_loader_win.cc b/components/policy/core/common/policy_loader_win.cc index 6cdd7af..3d6e82a6 100644 --- a/components/policy/core/common/policy_loader_win.cc +++ b/components/policy/core/common/policy_loader_win.cc
@@ -8,7 +8,6 @@ // <security.h> needs this. #define SECURITY_WIN32 1 #include <security.h> // For GetUserNameEx() -#include <shlwapi.h> // For PathIsUNC() #include <stddef.h> #include <memory> @@ -36,6 +35,7 @@ #include "base/strings/string16.h" #include "base/strings/string_util.h" #include "base/values.h" +#include "base/win/shlwapi.h" // For PathIsUNC() #include "base/win/win_util.h" #include "base/win/windows_version.h" #include "components/json_schema/json_schema_constants.h"
diff --git a/components/policy/proto/device_management_backend.proto b/components/policy/proto/device_management_backend.proto index 71d494e..0938f18 100644 --- a/components/policy/proto/device_management_backend.proto +++ b/components/policy/proto/device_management_backend.proto
@@ -928,90 +928,31 @@ optional BrowserReport browser_report = 4; } -// A validation result from validating a policy value that was contained in +// A validation issue from validating a policy value that was contained in // the payload of the policy fetch response. -message PolicyValueValidationResult { - // Policy proto tag of the policy which caused this validation message. - // For device policy (i.e. when |policy_type| in - // PolicyValidationReportRequest is google/chromeos/device), this is a - // proto tag from ChromeDeviceSettingsProto. Example: proto tag = 1 would mean - // the device_policy_refresh_rate policy in this case. - // For user policy (i.e. when |policy_type| in - // PolicyValidationReportRequest is google/chromeos/user), this is a - // proto tag from ChromeSettingsProto. Example: proto tag = 3 would mean the - // HomepageLocation policy in this case. - // Proto tags are used because they are consistent identifiers shared across - // the server and the client implementation. - optional int32 policy_proto_tag = 1; +message PolicyValueValidationIssue { + // Policy name of the faulty value. + optional string policy_name = 1; - enum ValidationResultSeverity { + enum ValueValidationIssueSeverity { // Default value for when a severity is not specified. - VALIDATION_RESULT_SEVERITY_UNSPECIFIED = 0; + VALUE_VALIDATION_ISSUE_SEVERITY_UNSPECIFIED = 0; // This result is a warning. The policy blob has not been rejected. - VALIDATION_RESULT_SEVERITY_WARNING = 1; + VALUE_VALIDATION_ISSUE_SEVERITY_WARNING = 1; // This result is an error. The policy blob was rejected completely and not // updated on the device. - VALIDATION_RESULT_SEVERITY_ERROR = 2; + VALUE_VALIDATION_ISSUE_SEVERITY_ERROR = 2; } // Severity of this policy value validation result. - optional ValidationResultSeverity severity = 2; + optional ValueValidationIssueSeverity severity = 2; - // If the error occurred in a policy which is a JSON value, this - // is the JSON path to the element where the error was raised. - // For example, if a validation message was raised in an ONC policy and the - // error is that the Security field of the WiFi NetworkConfiguration with guid - // ABC has an invalid value, ErrorType would be ERROR_TYPE_UNKNOWN_ENUM_VALUE - // and detailed_error_path would be: - // "$.NetworkConfigurations[?(@.GUID=='ABC')].WiFi.Security". - // If the error was that a NetworkConfigurations element is missing a GUID, - // ErrorType would be ERROR_TYPE_MISSING_FIELD and the path would be: - // "$.NetworkConfigurations[1].GUID". - optional string detailed_error_path = 3; - - enum ErrorType { - // An enum value was received which is not known in this version of the - // proto. - ERROR_TYPE_UNSPECIFIED = 0; - - // For JSON (e.g. ONC) policies: The JSON blob could not be - // parsed. |detailed_error_path| will be empty. - ERROR_TYPE_PARSE_ERROR = 1; - - // For JSON (e.g. ONC) policies: A field had an invalid type. - // |detailed_error_path| will be set to the path of the field. - ERROR_TYPE_INVALID_TYPE = 3; - - // For JSON (e.g. ONC) policies: A required field was not found. - // |detailed_error_path| will be set to the path of the missing - // field. - ERROR_TYPE_MISSING_FIELD = 4; - - // For ONC policy: An enum field had a value not known by the - // client. |detailed_error_path| will be set to the path of the - // field. - ERROR_TYPE_UNKNOWN_ENUM_VALUE = 5; - - // For ONC policy: The value of a field was out of bounds. - // |detailed_error_path| will be set to the path of the - // field. - ERROR_TYPE_OUT_OF_BOUNDS = 6; - - // For ONC policy: A GUID-referenced element could not be - // resolved. |detailed_error_path| will be set to the reference - // field. - ERROR_TYPE_INVALID_REFERENCE = 7; - } - - // The type of the error message. - optional ErrorType error_type = 4; - - // Debug info about the error message. This will not be presented to the - // administrator. It can give additional clues about what went wrong so the - // developers can diagnose the issue. - optional string error_debug_info = 5; + // Message containing detailed information about the value validation warning + // or error (e.g. type and specific location). This message is intended as + // debug information for developers (not localized). + optional string debug_message = 3; } // This message is used to upload the result of cloud policy validation after a @@ -1074,7 +1015,7 @@ VALIDATION_RESULT_TYPE_BAD_DEVICE_ID = 10; // Username doesn't match. // Client behavior: Policy blob rejected. - VALIDATION_RESULT_TYPE_USER_MISMATCH = 11; + VALIDATION_RESULT_TYPE_BAD_USER = 11; // Policy payload protobuf parse error. // Client behavior: Policy blob rejected. VALIDATION_RESULT_TYPE_POLICY_PARSE_ERROR = 12; @@ -1085,22 +1026,22 @@ // There were validation warnings during validation of policy values in the // payload. See |policy_value_validation_results|. // Client behavior: Policy blob accepted. - VALIDATION_RESULT_TYPE_POLICY_VALUE_WARNINGS = 14; + VALIDATION_RESULT_TYPE_VALUE_WARNING = 14; // There were validation errors during validation of policy values in the // payload. There may also have been warnings. See // |policy_value_validation_results| - that list will contain at least one // payload validation errors, and zero or more payload validation warnings. // Client behavior: Policy blob rejected. - VALIDATION_RESULT_TYPE_POLICY_VALUE_ERRORS = 15; + VALIDATION_RESULT_TYPE_VALUE_ERROR = 15; } // The validation result. optional ValidationResultType validation_result_type = 3; - // Value validation results in the policy payload. Will be filled if - // |validation_result_type| is VALIDATION_RESULT_TYPE_POLICY_VALUE_WARNINGS - // or VALIDATION_RESULT_TYPE_POLICY_VALUE_ERRORS. - repeated PolicyValueValidationResult policy_value_validation_results = 4; + // Value validation issues in the policy payload. Will be filled if + // |validation_result_type| is VALIDATION_RESULT_TYPE_VALUE_WARNING + // or VALIDATION_RESULT_TYPE_VALUE_ERROR. + repeated PolicyValueValidationIssue policy_value_validation_issues = 4; } // Response from DMServer to a policy validation report.
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index b2cfd51..5e6f9cd0 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -29,11 +29,24 @@ # 'string-enum-list' - the user can select a set of string values from a # collection of items # 'main' - a boolean value -# 'list' - a list of string values -# 'dict' - a dictionary value, containing other values indexed by strings +# 'list' - a list of string values. Using this for a list of JSON strings +# is now discouraged, because the 'dict' is better for JSON. +# 'dict' - perhaps should be named JSON. An arbitrarily complex object or +# array, nested objects/arrays, etc. The user defines the value with JSON. # 'external' - a policy that references external data. # NOTE: This type is currently supported on Chrome OS only. # +# NOTE to 'dict' vs 'list' - in the past, 'list' has been used for a policy +# that is an array of objects. The user supplied a list of strings, and each +# of those strings was parsed as JSON, resulting in an array of objects. +# However, there are a couple of reasons why 'dict' is better for these sorts +# of policies. Some interfaces (eg the GPO editor) only allow each list item +# to be a single-line string, which is not great for inputting a complex JSON +# object. It also means any example values shown in the documentation will +# have a hybrid syntax, with both commas and new-lines being used to delimit +# array elements - and these examples will be harder to copy and paste. +# To conclude, prefer 'dict' to 'list' if JSON is involved. +# # Each policy is tagged with risk tags that indicate potential privacy or # security risks. They are defined at the beginning of this file (tag # 'risk_tag_definitions'). @@ -11432,15 +11445,37 @@ 'dynamic_refresh': False, 'per_profile': True, }, - 'example_value': ['http://testserver.example.com/'], + 'example_value': ['http://testserver.example.com/','*.example.org'], 'id': 400, - 'caption': '''Origins to be treated as secure context.''', + 'caption': '''Origins or hostname patterns for which restrictions on + insecure origins should not apply''', 'tags': ['system-security'], - 'desc': '''Deprecated in M69. Use OverrideSecurityRestrictionsOnInsecureOrigin instead. + 'desc': '''Deprecated in M69. Use + OverrideSecurityRestrictionsOnInsecureOrigin instead. - The policy specifies a list of origins (URLs) to be treated as secure context. The intent is to allow organizations to set up a staging server for internal web development, so that their developers can test out features requiring secure contexts without having to deploy TLS on the staging server. - Setting a list of URLs in this policy has the same effect as setting the command-line flag '--unsafely-treat-insecure-origin-as-secure' to a comma-separated list of the same URLs. If the policy is set, it will override the command-line flag. - For more information on secure contexts, see https://www.w3.org/TR/secure-contexts/ + The policy specifies a list of origins (URLs) or hostname patterns (such + as "*.example.com") for which security restrictions on insecure origins + will not apply. + + The intent is to allow organizations to whitelist origins for legacy + applications that cannot deploy TLS, or to set up a staging server for + internal web development so that their developers can test out features + requiring secure contexts without having to deploy TLS on the staging + server. This policy will also prevent the origin from being labeled + "Not Secure" in the omnibox. + + Setting a list of URLs in this policy has the same effect as setting the + command-line flag '--unsafely-treat-insecure-origin-as-secure' to a + comma-separated list of the same URLs. If the policy is set, it will + override the command-line flag. + + This policy is deprecated in M69 in favor of + OverrideSecurityRestrictionsOnInsecureOrigin. If both policies are + present, OverrideSecurityRestrictionsOnInsecureOrigin will override this + policy. + + For more information on secure contexts, see + https://www.w3.org/TR/secure-contexts/ ''' }, { @@ -12505,14 +12540,32 @@ 'dynamic_refresh': False, 'per_profile': True, }, - 'example_value': ['http://testserver.example.com/'], + 'example_value': ['http://testserver.example.com/','*.example.org'], 'id': 457, - 'caption': '''Origins or hostname patterns to be treated as secure context.''', + 'caption': '''Origins or hostname patterns for which restrictions on + insecure origins should not apply''', 'tags': ['system-security'], 'desc': ''' - The policy specifies a list of origins (URLs) or hostname patterns (such as "*.example.com") to be treated as secure contexts. The intent is to allow organizations to set up a staging server for internal web development, so that their developers can test out features requiring secure contexts without having to deploy TLS on the staging server. - Setting a list of URLs in this policy has the same effect as setting the command-line flag '--unsafely-treat-insecure-origin-as-secure' to a comma-separated list of the same URLs. If the policy is set, it will override the command-line flag. - For more information on secure contexts, see https://www.w3.org/TR/secure-contexts/ + The policy specifies a list of origins (URLs) or hostname patterns (such + as "*.example.com") for which security restrictions on insecure origins + will not apply. + + The intent is to allow organizations to set whitelist origins for legacy + applications that cannot deploy TLS, or to set up a staging server for + internal web development so that their developers can test out features + requiring secure contexts without having to deploy TLS on the staging + server. This policy will also prevent the origin from being labeled + "Not Secure" in the omnibox. + + Setting a list of URLs in this policy has the same effect as setting the + command-line flag '--unsafely-treat-insecure-origin-as-secure' to a + comma-separated list of the same URLs. If the policy is set, it will + override the command-line flag. + + This policy will override UnsafelyTreatInsecureOriginAsSecure, if present. + + For more information on secure contexts, see + https://www.w3.org/TR/secure-contexts/. ''' }, { @@ -12665,6 +12718,29 @@ When the screen is about to be dimmed, the smart dim model evaluates if dimming the screen should be deferred. If the smart dim model defers dimming the screen, it effectively extends the time until the screen is dimmed. In this case, the screen off, screen lock and idle delays get adjusted to maintain the same distances from the screen dim delay as originally configured. If this policy is set to True or left not set, the smart dim model will be enabled and allowed to extend the time until the screen is dimmed. If this policy is set to False, the smart dim model will not influence screen dimming.''', }, + { + 'name': 'CoalesceH2ConnectionsWithClientCertificatesForHosts', + 'type': 'list', + 'schema': { + 'type': 'array', + 'items': { 'type': 'string' }, + }, + 'supported_on': ['chrome.*:70-','android:70-','chrome_os:70-'], + 'future': True, + 'features': { + 'dynamic_refresh': True, + 'per_profile': True, + }, + 'example_value': ['example.com'], + 'id': 466, + 'caption': '''Allow coalescing of HTTP/2 connections for these hosts even when client certificates are used''', + 'tags': [], + 'desc': '''This policy allows HTTP/2 connection coalescing when client certificates are in use. In order to coalesce, both the hostname of the potential new connection and the hostname of an existing connection must match one or more patterns described by this policy. The policy is a list of hosts using the URLBlacklist filter format: "example.com" matches "example.com" and all subdomains (e.g. "sub.example.com"), while ".example.net" matches exactly "example.net". + + Coalescing requests to different hosts over connections that use client certificates can create security and privacy issues, as the ambient authority will be conveyed to all requests, even if the user did not explicitly authorize this. This policy is temporary and will be removed in a future release. See https://crbug.com/855690. + + If this policy is left unset, then the default behavior of not allowing any HTTP/2 connection coalescing on connections using client certificates will be used.''', + }, ], 'messages': { @@ -12806,5 +12882,5 @@ }, 'placeholders': [], 'deleted_policy_ids': [412], - 'highest_id_currently_used': 465 + 'highest_id_currently_used': 466 }
diff --git a/components/policy/resources/policy_templates_am.xtb b/components/policy/resources/policy_templates_am.xtb index 6ab3c086a..b8330960 100644 --- a/components/policy/resources/policy_templates_am.xtb +++ b/components/policy/resources/policy_templates_am.xtb
@@ -665,7 +665,6 @@ እያንዳንዱ የዝርዝር ግቤት የተለያዩ የመሣሪያ-አካባቢያዊ መለያዎችን እንዲለዩ በውስጥ የሚያገለግሉ አንድ ለዪ ይገልጻሉ።</translation> <translation id="2769952903507981510">የተፈለገውን የጎራ ስም ለሩቅ መዳረሻ አስተናጋጆች ያዋቅሩ</translation> <translation id="2787173078141616821">ስለAndroid ሁኔታ መረጃን ሪፖርት አድርግ</translation> -<translation id="2793923553868251161">ምንጮች እንደ ደህንነቱ የተጠበቀ አውድ ይስተናገዳሉ።</translation> <translation id="2799297758492717491">ሚዲያ በተፈቀደላቸው የዩአርኤል ስርዓተ-ጥለቶች ዝርዝር ላይ በራስ-ማጫወትን ይፍቀዱ</translation> <translation id="2801230735743888564">መሣሪያው ከመሥመር ውጭ በሚሆን ጊዜ ተጠቃሚዎች የዳይኖሰር ኢስተር ኤግ ጨዋታን እንዲጫወቱ ይፍቅዱ። @@ -1863,12 +1862,6 @@ <translation id="6155936611791017817">የትልቅ ጠቋሚው ነባሪ ሁኔታ በመግቢያ ገጹ ላይ ያዋቅሩት</translation> <translation id="6157537876488211233">በኮማ የተለዩ የተኪ ማለፊያ ደንቦች ዝርዝር</translation> <translation id="6158324314836466367">የንግድ ድርጅት ድር መደብር ስም (የተቋረጠ)</translation> -<translation id="6164955668342404660">በM69 ውስጥ የተቋረጠ። በምትኩ OverrideSecurityRestrictionsOnInsecureOriginን ይጠቀሙ። - - መመሪያው እንደ ደህንነቱ የተጠበቀ አውድ የሚያዙ የምንጮች (ዩአርኤሎች) ዝርዝርን ይገልጻል። ሐሳቡ ድርጅቶች ለውስጣዊ ግንባታ የማዘጋጃ አገልጋይ እንዲያዋቅሩ ለማስቻል ነው፣ በዚህም ገንቢዎቻቸው በማዘጋጃው አገልጋዩ ላይ TLS ማሰማራት ሳይኖርባቸው ደህንነታቸው የተጠበቁ አውዶች የሚያስፈልጋቸው ባህሪዎችን መሞከር ይችላሉ። - በዚህ መመሪያ ውስጥ የዩአርኤሎች ዝርዝርን ማዋቀር ልክ የትዕዛዝ-መስመር ጥቆማውን «--unsafely-treat-insecure-origin-as-secure» ወደ በኮማ የተለዩ የተመሳሳዮቹ ዩአርኤሎች ዝርዝር ማዋቀር ከሚኖረው ውጤት ጋር ተመሳሳይ ነው። መመሪያው ከተዋወረ የትዕዛዝ-መስመር ጥቆማውን ይሽራል። - ደህንነታቸው በተጠበቁ አውዶች ላይ ተጨማሪ መረጃ ለማግኘት https://www.w3.org/TR/secure-contexts/ ይመልከቱ - </translation> <translation id="6181608880636987460">የ<ph name="FLASH_PLUGIN_NAME" /> ተሰኪውን እንዲያሄዱ ያልተፈቀደላቸው ጣቢያዎችን የሚገልጹ የዩአርኤል ስርዓተ ጥለቶችን ዝርዝር እንዲያዋቅሩ ያስችልዎታል። ይህ መመሪያ እንዳልተዋቀረ ከተተወ፣ የ«DefaultPluginsSetting» መመሪያው የተዋቀረ ከሆነ ከእሱ የመጣ ሁለገብ ነባሪ እሴቱ ለሁሉም ጣቢያዎች ስራ ላይ ይውላል፣ አለበለዚያ ደግሞ የተጠቃሚው የግል ውቅረት ስራ ላይ ይውላል።</translation> @@ -2049,11 +2042,6 @@ <translation id="6786967369487349613">የተንዣባቢ መገለጫ ማውጫውን ያዘጋጁ</translation> <translation id="6810445994095397827">JavaScript በእነዚህ ጣቢያዎች ላይ ያግዱ</translation> <translation id="681446116407619279">የተደገፉ የማረጋገጫ መርሐግብሮች</translation> -<translation id="6832455357698286434"> - መመሪያው እንደ ደህንነታቸው የተጠበቁ አውዶች ተደርገው የሚያዙ የምንጮች (ዩአርኤሎች) ወይም የአስተናጋጅ ስም ስርዓተ-ጥለቶች (እንደ «*.example.com») ዝርዝርን ይገልጻል። ሐሳቡ ድርጅቶች ለውስጣዊ ግንባታ የማዘጋጃ አገልጋይ እንዲያዋቅሩ ለማስቻል ነው፣ በዚህም ገንቢዎቻቸው በማዘጋጃው አገልጋዩ ላይ TLS ማሰማራት ሳይኖርባቸው ደህንነታቸው የተጠበቁ አውዶች የሚያስፈልጋቸው ባህሪዎችን መሞከር ይችላሉ። - በዚህ መመሪያ ውስጥ የዩአርኤሎች ዝርዝርን ማዋቀር ልክ የትዕዛዝ-መስመር ጥቆማውን «--unsafely-treat-insecure-origin-as-secure» ወደ በኮማ የተለዩ የተመሳሳዮቹ ዩአርኤሎች ዝርዝር ማዋቀር ከሚኖረው ውጤት ጋር ተመሳሳይ ነው። መመሪያው ከተዋወረ የትዕዛዝ-መስመር ጥቆማውን ይሽራል። - ደህንነታቸው በተጠበቁ አውዶች ላይ ተጨማሪ መረጃ ለማግኘት https://www.w3.org/TR/secure-contexts/ ይመልከቱ - </translation> <translation id="6835883744948188639">ዳግም ማስጀመር የሚመከር መሆኑን የሚያሳይ ተደጋጋሚ ጥያቄ ለተጠቃሚ ያሳዩ</translation> <translation id="6838056959556423778">የ<ph name="PRODUCT_NAME" /> ነባሪ አታሚ ምርጫ ደንቦችን እንዲቆጣጠሩ ያስችላል። @@ -2415,7 +2403,6 @@ <translation id="7617319494457709698">ይህ መመሪያ ለርቀት ማስረገጥ የድርጅት መሣሪያ ስርዓት ቁልፎች ኤፒአዩን <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> ተግባርን <ph name="CHALLENGE_USER_KEY_FUNCTION" /> እንዲጠቀሙ የተፈቀደላቸው ቅጥያዎችን ይገልጻል። ቅጥያዎች ኤፒአዩን ለመጠቀም ወደዚህ ዝርዝር መታከል አለባቸው። አንድ ቅጥያ በዝርዝሩ ውስጥ ከሌለ ወይም ደግሞ ዝርዝሩ ካልተዋቀረ ወደ ኤፒአዩ የሚደረግ ጥሪ ከስህተት ኮድ ጋር አይሳካም።</translation> -<translation id="7620300057302654932">እንደ ደህንነቱ የተጠበቀ አውድ የሚያዙ ምንጮች ወይም የአስተናጋጅ ስም ስርዓተ-ጥለቶች።</translation> <translation id="7625444193696794922">ይህ መሣሪያ አብሮ የሚታሰርበት የሚለቀቀው ሰርጥን ይገልጻል።</translation> <translation id="7632724434767231364">የGSSAPI ቤተ-መጽሐፍት ስም</translation> <translation id="7635471475589566552">በ<ph name="PRODUCT_NAME" /> ውስጥ የመተግበሪያውን አካባቢ የሚያዋቅር እና ተጠቃሚዎች አካባቢውን እንዳይቀይሩት የሚያግድ ነው።
diff --git a/components/policy/resources/policy_templates_ar.xtb b/components/policy/resources/policy_templates_ar.xtb index d02e218..fdeee214 100644 --- a/components/policy/resources/policy_templates_ar.xtb +++ b/components/policy/resources/policy_templates_ar.xtb
@@ -644,7 +644,6 @@ يعمل كل إدخال في القائمة على تحديد معرف، والذي يستخدم داخليًا لاستبعاد الحسابات بخلاف الحسابات المحلية على الجهاز.</translation> <translation id="2769952903507981510">تهيئة اسم النطاق المطلوب لعمليات استضافة الدخول عن بُعد</translation> <translation id="2787173078141616821">إبلاغ المعلومات حول حالة Android</translation> -<translation id="2793923553868251161">الأصول المطلوب التعامل معها كسياق آمن.</translation> <translation id="2799297758492717491">السماح بالتشغيل التلقائي للوسائط في أنماط عناوين URL المُدرجة في القائمة البيضاء</translation> <translation id="2801230735743888564">السماح للمستخدمين بتشغيل لعبة Dinosaur Easter Egg عندما يكون الجهاز بلا اتصال. @@ -1138,13 +1137,13 @@ <translation id="4239720644496144453">لا تُستخدم ذاكرة التخزين المؤقت مع تطبيقات Android. في حالة تثبيت عدة مستخدمين لنفس تطبيق Android، سيتم تنزيله من جديد لكلّ مستخدم.</translation> <translation id="4243336580717651045">تعمل هذه السياسة على تفعيل مجموعة البيانات مجهولة المصدر والمستندة إلى عنوان URL في <ph name="PRODUCT_NAME" /> وتمنع المستخدمين من تغيير هذا الإعداد. - ترسل مجموعة البيانات مجهولة المصدر والمستندة إلى عنوان URL عناوين URL للصفحات التي يزورها المستخدم إلى Google لإجراء عمليات البحث والتصفُّح بشكلٍ أفضل. + ترسل مجموعة البيانات مجهولة المصدر والمستندة إلى عنوان URL عناوين URL للصفحات التي يزورها المستخدم إلى Google لتحسين عمليات البحث والتصفُّح. في حال تفعيل هذه السياسة، ستكون مجموعة البيانات مجهولة المصدر والمستندة إلى عنوان URL نشطة دائمًا. وفي حال إيقاف هذه السياسة، لن تكون مجموعة البيانات مجهولة المصدر والمستندة إلى عنوان URL نشطة مطلقًا. - وفي حال ترك هذه السياسة بدون تحديد، سيتم تفعيل مجموعة البيانات مجهولة المصدر والمستندة إلى عنوان URL، ولكن سيتمكَّن المستخدم من تغييرها.</translation> + وفي حال عدم ضبط هذه السياسة، سيتم تفعيل مجموعة البيانات مجهولة المصدر والمستندة إلى عنوان URL، ولكن سيتمكَّن المستخدم من تغييرها.</translation> <translation id="4250680216510889253">لا</translation> <translation id="4261820385751181068">لغة شاشة تسجيل الدخول إلى الجهاز</translation> <translation id="4264607809747169568">تتحكّم في ميزة "خوادم مشاركة الملفات على الشبكة" لتوفّر نظام التشغيل Chrome</translation> @@ -1765,12 +1764,6 @@ <translation id="6155936611791017817">تعيين الحالة التلقائية للمؤشر الكبير في شاشة تسجيل الدخول</translation> <translation id="6157537876488211233">قائمة مفصولة بفواصل لقواعد تجاوز الخادم الوكيل</translation> <translation id="6158324314836466367">اسم السوق الإلكتروني في Enterprise (إيقاف)</translation> -<translation id="6164955668342404660">تمّ إيقاف هذه السياسة في M69. ويمكنك استخدام OverrideSecurityRestrictionsOnInsecureOrigin بدلاً منها. - -تحدِّد السياسة قائمة أصول (عناوين URL) ليتم معاملتها كسياق آمن، وذلك بهدف السماح للمؤسسات بإعداد خادم مرحلي لعمليات تطوير الويب الداخلية ليتمكّن مطورو البرامج من اختبار الميزات التي تتطلّب سياقات آمنة بدون الحاجة إلى نشر طبقة النقل الآمنة على الخادم المرحلي. - ويكون لإعداد قائمة بعناوين URL في هذه السياسة التأثير نفسه لإعداد علامة سطر الأوامر "--unsafely-treat-insecure-origin-as-secure" كقائمة من عناوين URL نفسها مفصولة بفواصل. وفي حال ضبط هذه السياسة، سيتم إلغاء علامة سطر الأوامر. - لمعرفة مزيد من المعلومات حول السياقات الآمنة، يُرجى الاطّلاع على https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">تتيح لك إعداد قائمة بأنماط عناوين URL التي تحدّد المواقع غير المخوّلة تشغيل المكّون الإضافي <ph name="FLASH_PLUGIN_NAME" />. في حال عدم اختيار هذه السياسة، سيتم استخدام القيمة الأصلية العامة لجميع المواقع إما من سياسة 'DefaultPluginsSetting' إذا تم اختيارها أو من التهيئة الشخصية للمستخدم.</translation> @@ -1934,11 +1927,6 @@ <translation id="6786967369487349613">تعيين دليل الملف الشخصي للتجوال</translation> <translation id="6810445994095397827">حظر جافا سكريبت في هذه المواقع</translation> <translation id="681446116407619279">الأنظمة المعتمدة للمصادقة</translation> -<translation id="6832455357698286434"> - تحدِّد السياسة قائمة أصول (عناوين URL) أو أنماط اسم المضيف (مثل "*.example.com") ليتم معاملتها كسياق آمن، وذلك بهدف السماح للمؤسسات بإعداد خادم مرحلي لعملية تطوير الويب الداخلية ليتمكّن مطورو البرامج من اختبار الميزات التي تتطلب سياقات آمنة بدون الحاجة إلى نشر طبقة النقل الآمنة على الخادم المرحلي. - ويكون لإعداد قائمة بعناوين URL في هذه السياسة التأثير نفسه لإعداد علامة سطر الأوامر "--unsafely-treat-insecure-origin-as-secure" كقائمة عناوين URL نفسها مفصولة بفواصل. وفي حال ضبط هذه السياسة، سيتم إلغاء علامة سطر الأوامر. - لمعرفة مزيد من المعلومات حول السياقات الآمنة، يُرجى الاطّلاع على https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">عرض رسالة مطالبة مكررة للمستخدم تشير إلى أن إعادة التشغيل موصى بها</translation> <translation id="6838056959556423778">لا تلتزم هذه السياسة بقواعد اختيار الطابعة التلقائية في <ph name="PRODUCT_NAME" />، بل تحدّد قواعد اختيار الطابعة التلقائية في <ph name="PRODUCT_NAME" /> وذلك في المرة الأولى التي تُستخدم فيها وظيفة الطابعة مع ملف شخصي. @@ -2292,7 +2280,6 @@ <translation id="7617319494457709698">تحدد هذه السياسة الإضافات المسموح لها استخدام دالة <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> في <ph name="CHALLENGE_USER_KEY_FUNCTION" /> للتأكيد عن بُعد. يجب إدراج هذه الإضافات في هذه القائمة لاستخدام واجهة برمجة التطبيقات. في حال عدم توفر إضافة في القائمة، أو في حالة عدم تعيين القائمة، سيخفق استدعاء واجهة برمجة التطبيقات مع ظهور رمز خطأ.</translation> -<translation id="7620300057302654932">أنماط اسم المضيف أو الأصول المطلوب التعامل معها كسياق آمن.</translation> <translation id="7625444193696794922">لتحديد قناة الإصدار التي يجب أن يتقيد بها هذا الجهاز.</translation> <translation id="7632724434767231364">اسم مكتبة GSSAPI</translation> <translation id="7635471475589566552">لتهيئة لغة التطبيق في <ph name="PRODUCT_NAME" /> ومنع المستخدمين من تغيير اللغة.
diff --git a/components/policy/resources/policy_templates_bg.xtb b/components/policy/resources/policy_templates_bg.xtb index df7cd64..1c1336d 100644 --- a/components/policy/resources/policy_templates_bg.xtb +++ b/components/policy/resources/policy_templates_bg.xtb
@@ -649,7 +649,6 @@ Всеки запис в списъка посочва идентификационен номер, който се използва вътрешно за различаване на съответните профили.</translation> <translation id="2769952903507981510">Конфигуриране на задължителното име на домейна за хостове за отдалечен достъп</translation> <translation id="2787173078141616821">Изпращане на информация за състоянието на приложенията за Android</translation> -<translation id="2793923553868251161">Източници, които да бъдат третирани като надежден контекст.</translation> <translation id="2799297758492717491">Бял списък с образци на URL адреси, за които автоматичното възпроизвеждане на мултимедия да бъде разрешено</translation> <translation id="2801230735743888564">Разрешаване на потребителите да играят скритата игра с динозавъра, когато устройството е офлайн. @@ -1794,12 +1793,6 @@ <translation id="6155936611791017817">Задаване на стандартното състояние на големия курсор на екрана за вход</translation> <translation id="6157537876488211233">Списък с разделени със запетая правила за заобикаляне на прокси сървъра</translation> <translation id="6158324314836466367">Име на корпоративния уеб магазин (оттеглено)</translation> -<translation id="6164955668342404660">Оттеглено в M69. Вместо това използвайте OverrideSecurityRestrictionsOnInsecureOrigin. - - Правилото служи за съставяне на списък с източници (URL адреси), които да бъдат третирани като надежден контекст. Целта е да се даде възможност на организациите да настроят подготвителен сървър за вътрешни уеб разработки, така че програмистите им да могат да тестват функции, изискващи надежден контекст, без да се налага да внедряват TLS в подготвителния сървър. - Посочването на URL адреси в това правило има същия ефект като задаването на разделен със запетаи списък със същите URL адреси чрез флага в командния ред „--unsafely-treat-insecure-origin-as-secure“. Ако правилото бъде зададено, то ще замени този флаг. - За повече информация относно надеждния контекст посетете https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Позволява да зададете списък с образци на URL адреси, посочващи сайтовете, на които не е разрешено да изпълняват приставката <ph name="FLASH_PLUGIN_NAME" />. В случай че това правило не е зададено, за всички сайтове ще се използва глобалната стандартна стойност от правилото DefaultPluginsSetting, ако е зададено, или личната конфигурация на потребителя в противен случай.</translation> @@ -1973,11 +1966,6 @@ <translation id="6786967369487349613">Задаване на директорията за подвижните потребителски профили</translation> <translation id="6810445994095397827">Блокиране на JavaScript на тези сайтове</translation> <translation id="681446116407619279">Поддържани схеми за удостоверяване</translation> -<translation id="6832455357698286434"> - Правилото служи за съставяне на списък с източници (URL адреси) или шаблони за имена на хостове (например *.example.com), които да бъдат третирани като надежден контекст. Целта е да се даде възможност на организациите да настроят подготвителен сървър за вътрешни уеб разработки, така че програмистите им да могат да тестват функции, изискващи надежден контекст, без да се налага да внедряват TLS в подготвителния сървър. - Посочването на URL адреси в това правило има същия ефект като задаването на разделен със запетаи списък със същите URL адреси чрез флага в командния ред „--unsafely-treat-insecure-origin-as-secure“. Ако правилото бъде зададено, то ще замени този флаг. - За повече информация относно надеждния контекст посетете https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Периодично показване на подкана, указваща на потребителя, че повторното стартиране е препоръчително</translation> <translation id="6838056959556423778">Заменя правилата за избиране на стандартен принтер в <ph name="PRODUCT_NAME" />. @@ -2327,7 +2315,6 @@ <translation id="7617319494457709698">Това правило посочва разширенията, за които е разрешено отдалеченото удостоверяване посредством функцията <ph name="CHALLENGE_USER_KEY_FUNCTION" /> на <ph name="ENTERPRISE_PLATFORM_KEYS_API" />. За да ползват приложния програмен интерфейс (API), разширенията трябва да бъдат добавени към този списък. Ако някое от тях не е в списъка или той не е зададен, извикването към API няма да е успешно и ще се изведе код на грешка.</translation> -<translation id="7620300057302654932">Източници или шаблони за имена на хостове, които да бъдат третирани като надежден контекст.</translation> <translation id="7625444193696794922">Посочва канала за пускане, за който това устройство трябва да бъде заключено.</translation> <translation id="7632724434767231364">Име на библиотеката за GSSAPI</translation> <translation id="7635471475589566552">Конфигурира локала на приложенията в <ph name="PRODUCT_NAME" /> и не разрешава на потребителите да го променят. Ако активирате тази настройка, <ph name="PRODUCT_NAME" /> използва посочения локал. Ако той не се поддържа, вместо него се използва „en-US“. Ако настройката е деактивирана или не е зададена, <ph name="PRODUCT_NAME" /> използва предпочитания локал, посочен от потребителя (ако е зададен), системния или резервния локал „en-US“.</translation>
diff --git a/components/policy/resources/policy_templates_bn.xtb b/components/policy/resources/policy_templates_bn.xtb index d98c062..fe899322 100644 --- a/components/policy/resources/policy_templates_bn.xtb +++ b/components/policy/resources/policy_templates_bn.xtb
@@ -763,7 +763,6 @@ প্রতিটি তালিকা এন্ট্রি একটি শনাক্তকারীকে সূচিত করে যা বিভিন্ন যন্ত্র-স্থানীয় অ্যাকাউন্ট আলাদা করে বলতে অভ্যন্তরীণ ভাবে ব্যবহৃত হয়।</translation> <translation id="2769952903507981510">দূরবর্তী অ্যাক্সেস হোস্টের জন্য আবশ্যক ডোমেন নাম কনফিগার করুন</translation> <translation id="2787173078141616821">Android এর স্থিতি সম্পর্কে তথ্য প্রতিবেদন করে</translation> -<translation id="2793923553868251161">উৎসগুলিকে নিরাপদ কন্টেক্সট হিসেবে গণ্য করা হবে।</translation> <translation id="2799297758492717491">URL প্যাটার্নগুলির সাদা তালিকাতে মিডিয়া অটোপ্লে এর অনুমতি দিন</translation> <translation id="2801230735743888564">ডিভাইস অফলাইনে থাকার সময় ব্যবহারকারীদেরকে ডাইনোসর ইস্টার ডিম গেম খেলার অনুমতি দেয়। @@ -2207,12 +2206,6 @@ <translation id="6155936611791017817">লগইন স্ক্রীনে বড় কার্সারের ডিফল্ট স্থিতি সেট করুন</translation> <translation id="6157537876488211233">প্রক্সি বাইপাস বিধিগুলির জন্য কমা দ্বারা পৃথকীকৃত তালিকা</translation> <translation id="6158324314836466367">এন্টারপ্রাইজ ওয়েব স্টোরের নাম (থামানো হয়েছে)</translation> -<translation id="6164955668342404660">M69-এ বন্ধ করে দেওয়া হয়েছে। এর পরিবর্তে OverrideSecurityRestrictionsOnInsecureOrigin ব্যবহার করুন। - - যে উৎসগুলিকে (ইউআরএল) সুরক্ষিত কন্টেক্সট হিসেবে বিবেচনা করা হবে তার একটি তালিকা এই নীতিতে উল্লেখ করা হয়ে থাকে। এটির সাহায্যে কোনও সংস্থা অভ্যন্তরীণ ওয়েব ডেভেলপমেন্টের জন্য স্টেজিং সার্ভার সেট-আপ করতে পারে, যাতে ডেভেলপাররা স্টেজিং সার্ভারে TLS ব্যবহার না করেই এমন বৈশিষ্ট্য পরীক্ষা করে দেখতে পারেন যেগুলিতে সুরক্ষিত কন্টেক্সটের প্রয়োজন হয়। - ইউআরএল-এর কমা-বিভাজিত তালিকায় '--unsafely-treat-insecure-origin-as-secure' কমান্ড-লাইন ফ্ল্যাগ সেট করলে যা হওয়ার কথা, এই নীতিতে ইউআরএল-এর তালিকা সেট করলে ঠিক তাই হবে। এই নীতিটি সেট করা থাকলে কমান্ড-লাইন ফ্ল্যাগকে ওভাররাইড করা হবে। - সুরক্ষিত কন্টেক্সটের বিষয়ে আরও তথ্যের জন্য, https://www.w3.org/TR/secure-contexts/ দেখুন - </translation> <translation id="6178075938488052838"><ph name="PRODUCT_OS_NAME" /> সেশন কে শুরু করতে পারবে তা এই নীতি নিয়ন্ত্রণ করে। এটি ব্যবহারকারীদেরকে Android এর ভেতর অতিরিক্ত Google অ্যাকাউন্টে সাইন-ইন করতে বাধা দেয় না। আপনি যদি বাধা দিতে চান, তাহলে <ph name="ACCOUNT_TYPES_WITH_MANAGEMENT_DISABLED_CLOUDDPC_POLICY_NAME" /> এর অংশ হিসেবে Android নির্দিষ্ট <ph name="ARC_POLICY_POLICY_NAME" /> নীতি কনফিগার করুন।</translation> <translation id="6181608880636987460">যে সমস্ত সাইটকে <ph name="FLASH_PLUGIN_NAME" /> প্লাগ ইন চালানোর অনুমতি দিতে চান না, সেগুলির URL এর একটি তালিকা সেট করতে দেয়। @@ -2391,11 +2384,6 @@ <translation id="6786967369487349613">রোমিং প্রোফাইল ডিরেক্টরি সেট করুন</translation> <translation id="6810445994095397827">এই সাইটগুলিকে জাভাস্ক্রিপ্ট অবরোধ করুন</translation> <translation id="681446116407619279">সমর্থিত প্রমাণীকরণ স্কীম</translation> -<translation id="6832455357698286434"> - যে উৎসগুলিকে (ইউআরএল) অথবা হোস্টনেম প্যাটার্ন (যেমন, "*.example.com") সুরক্ষিত কন্টেক্সট হিসেবে বিবেচনা করা হবে তার একটি তালিকা এই নীতিতে উল্লেখ করা হয়ে থাকে। এটির সাহায্যে কোনও সংস্থা অভ্যন্তরীণ ওয়েব ডেভেলপমেন্টের জন্য স্টেজিং সার্ভার সেট-আপ করতে পারে, যাতে ডেভেলপাররা স্টেজিং সার্ভারে TLS ব্যবহার না করেই এমন বৈশিষ্ট্য পরীক্ষা করে দেখতে পারেন যেগুলিতে সুরক্ষিত কন্টেক্সটের প্রয়োজন হয়। - ইউআরএল-এর কমা-বিভাজিত তালিকায় '--unsafely-treat-insecure-origin-as-secure' কমান্ড-লাইন ফ্ল্যাগ সেট করলে যা হওয়ার কথা, এই নীতিতে ইউআরএল-এর তালিকা সেট করলে ঠিক তাই হবে। এই নীতিটি সেট করা থাকলে কমান্ড-লাইন ফ্ল্যাগকে ওভাররাইড করা হবে। - সুরক্ষিত কন্টেক্সটের বিষয়ে আরও তথ্যের জন্য, https://www.w3.org/TR/secure-contexts/ দেখুন - </translation> <translation id="6835883744948188639">ব্যবহারকারীকে রিলঞ্চ করার যে পরামর্শ দেওয়া হচ্ছে তা বিজ্ঞপ্তি পাঠিয়ে জানান।</translation> <translation id="6838056959556423778"><ph name="PRODUCT_NAME" /> ডিফল্ট প্রিন্টার বেছে নেওয়ার নিয়মগুলি ওভাররাইড করে। @@ -2782,7 +2770,6 @@ <translation id="7617319494457709698">এই নীতিটি দূরবর্তী প্রত্যয়নের জন্য <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> ক্রিয়া <ph name="CHALLENGE_USER_KEY_FUNCTION" /> ব্যবহার করতে মঞ্জুরি প্রাপ্ত এক্সটেনশানগুলি নির্দিষ্ট করে। API ব্যবহার করতে এক্সটেনশানগুলিকে অবশ্যই এই তালিকায় যোগ করতে হবে৷ যদি কোনো এক্সটেনশান তালিকায় না থাকে বা তালিকাটি সেট না থাকে, তাহলে একটি ত্রুটি কোডের মাধ্যমে API এ কলটি ব্যর্থ হয়ে যাবে৷</translation> -<translation id="7620300057302654932">উৎস অথবা হোস্টনেম প্যাটার্নকে সুরক্ষিত কন্টেক্সট হিসেবে গণ্য করা হবে।</translation> <translation id="7625444193696794922">যাতে এই ডিভাইসটি লক করা যায় সেইজন্য প্রকাশনা চ্যানেল নির্দিষ্ট করুন৷</translation> <translation id="7632724434767231364">GSSAPI লাইব্রেরি নাম</translation> <translation id="7635471475589566552"><ph name="PRODUCT_NAME" />-এ অ্যাপ্লিকেশান লোকেলকে কনফিগার করে এবং ব্যবহারকারীদের লোকেল পরিবর্তন করা থেকে আটকায়৷ আপনি এই সেটিং সক্ষম করলে, <ph name="PRODUCT_NAME" /> নির্দিষ্ট করা লোকেলকে ব্যবহার করে৷ কনফিগার করা লোকেল সমর্থিত না হলে, পরিবর্তে 'en-US' ব্যবহৃত হয়৷ এই সেটিং অক্ষম বা সেট না থাকলে, <ph name="PRODUCT_NAME" /> ব্যবহারকারী-নির্দিষ্ট পছন্দসই লোকেল (যদি কনফিগার করা থাকে), সিস্টেম লোকেল অথবা ফলব্যাক লোকেল 'en-US'-এর মধ্যে একটিকে ব্যবহার করে৷</translation>
diff --git a/components/policy/resources/policy_templates_ca.xtb b/components/policy/resources/policy_templates_ca.xtb index 65cc723..96e7a57 100644 --- a/components/policy/resources/policy_templates_ca.xtb +++ b/components/policy/resources/policy_templates_ca.xtb
@@ -645,7 +645,6 @@ Cada entrada de la llista especifica un identificador, que s'utilitza internament per diferenciar els diversos comptes locals del dispositiu.</translation> <translation id="2769952903507981510">Configuració del nom de domini necessari per als amfitrions d'accés remot</translation> <translation id="2787173078141616821">Ofereix informació sobre l'estat d'Android</translation> -<translation id="2793923553868251161">Els orígens es tracten com a context segur.</translation> <translation id="2799297758492717491">Permet la reproducció automàtica de contingut multimèdia en una llista blanca de patrons d'URL</translation> <translation id="2801230735743888564">Permet que els usuaris juguin al joc del dinosaure que apareix per sorpresa quan el dispositiu està sense connexió. @@ -1782,12 +1781,6 @@ <translation id="6155936611791017817">Defineix l'estat predeterminat del cursor gran a la pàgina d'inici de sessió</translation> <translation id="6157537876488211233">Llista de regles d'evitació de servidors intermediaris separada per comes</translation> <translation id="6158324314836466367">Nom de la botiga web de l'empresa (obsolet)</translation> -<translation id="6164955668342404660">Aquesta política es considera obsoleta a M69. Pots fer servir OverrideSecurityRestrictionsOnInsecureOrigin. - - La política especifica una llista d'orígens (URL) que s'han de tractar com a context segur. La intenció és permetre que les organitzacions configurin un servidor de fases per als desenvolupaments web interns, de manera que els desenvolupadors puguin provar funcions que requereixin contexts segurs sense haver d'implementar TLS al servidor de fases. - Definir una llista d'URL d'aquesta política té el mateix efecte que assignar la marca de la línia d'ordres "--unsafely-treat-insecure-origin-as-secure" a una llista d'URL separats per comes. - Per obtenir més informació sobre els contexts segurs, ves a https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6181608880636987460">Permet definir una llista de patrons d'URL que especifiquin llocs que no poden executar el connector <ph name="FLASH_PLUGIN_NAME" />. Si aquesta política no es defineix, s'utilitzarà per a tots els llocs el valor global predeterminat indicat en la política "DefaultPluginsSetting" (si s'ha definit) o el valor personalitzat que hagi definit l'usuari.</translation> @@ -1960,11 +1953,6 @@ <translation id="6786967369487349613">Estableix el directori de perfils itinerants</translation> <translation id="6810445994095397827">Bloqueja JavaScript en aquests llocs</translation> <translation id="681446116407619279">Esquemes d'autenticació compatibles</translation> -<translation id="6832455357698286434"> - La política especifica una llista d'orígens (URLs) o de patrons de nom d'amfitrió (com ara "*.example.com") que s'han de tractar com a contexts segurs. La intenció és permetre que les organitzacions configurin un servidor de fases per als desenvolupaments web interns, de manera que els desenvolupadors puguin provar funcions que requereixin contexts segurs sense haver d'implementar TLS al servidor de fases. - Definir una llista d'URL d'aquesta política té el mateix efecte que assignar la marca de la línia d'ordres "--unsafely-treat-insecure-origin-as-secure" a una llista d'URL separats per comes. Si la política es defineix, substituirà la marca de la línia d'ordres. - Per obtenir més informació sobre els contexts segurs, ves a https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6835883744948188639">Mostra una sol·licitud periòdica a l'usuari per indicar-li que es recomana reiniciar el navegador</translation> <translation id="6838056959556423778">Substitueix les regles de selecció de la impressora predeterminada a <ph name="PRODUCT_NAME" />. @@ -2308,7 +2296,6 @@ <translation id="7617319494457709698">Aquesta política especifica les extensions que tenen permís per utilitzar la funció <ph name="CHALLENGE_USER_KEY_FUNCTION" /> de l'<ph name="ENTERPRISE_PLATFORM_KEYS_API" /> per a la confirmació remota. Les extensions s'han d'afegir a aquesta llista per poder utilitzar l'API. Si no s'estableix la llista o no s'hi inclou alguna extensió, les crides a l'API tornaran un codi d'error.</translation> -<translation id="7620300057302654932">Orígens o patrons de nom d'amfitrió que s'han de tractar com a context segur.</translation> <translation id="7625444193696794922">Especifica el canal de llançament al qual aquest dispositiu s'hauria de bloquejar.</translation> <translation id="7632724434767231364">Nom de la biblioteca GSSAPI</translation> <translation id="7635471475589566552">Defineix la configuració regional de les aplicacions a <ph name="PRODUCT_NAME" /> i impedeix que els usuaris la modifiquin. Si activeu aquest paràmetre, <ph name="PRODUCT_NAME" /> fa servir la configuració regional especificada. Si aquesta configuració regional no és compatible, es fa servir "en-US" en lloc seu. Si aquest paràmetre està desactivat o bé si no està configurat, <ph name="PRODUCT_NAME" /> fa servir la configuració regional preferida que hagi especificat l'usuari (en cas que n'hagi configurat cap), la configuració regional del sistema o bé la configuració regional alternativa "en-US".</translation>
diff --git a/components/policy/resources/policy_templates_cs.xtb b/components/policy/resources/policy_templates_cs.xtb index fe3296ae..f5ec13e2 100644 --- a/components/policy/resources/policy_templates_cs.xtb +++ b/components/policy/resources/policy_templates_cs.xtb
@@ -644,7 +644,6 @@ Každá položka v seznamu uvádí identifikátor, který se používá k internímu rozlišení různých místních účtů v zařízení.</translation> <translation id="2769952903507981510">Konfigurovat povinný název domény pro hostitele vzdáleného přístupu</translation> <translation id="2787173078141616821">Hlásit informace o stavu systému Android</translation> -<translation id="2793923553868251161">Zdroje, které mají být považovány za bezpečný kontext.</translation> <translation id="2799297758492717491">Povolit automatické přehrávání médií zahrnutých v seznamu vzorů povolených adres URL</translation> <translation id="2801230735743888564">Povolit uživatelům hrát hru s dinosaurem, když je zařízení offline. @@ -1830,12 +1829,6 @@ <translation id="6155936611791017817">Nastavení výchozího stavu velkého kurzoru na přihlašovací obrazovce</translation> <translation id="6157537876488211233">Seznam pravidel vynechání proxy serveru oddělených čárkami</translation> <translation id="6158324314836466367">Název podnikového úložiště aplikací (podpora ukončena)</translation> -<translation id="6164955668342404660">Od verze M69 tato zásada již není podporována. Použijte namísto ní zásadu OverrideSecurityRestrictionsOnInsecureOrigin. - - Tato zásada udává seznam zdrojů (adres URL), které mají být považovány za bezpečný kontext. Cílem je umožnit organizacím nastavení zkušebního serveru pro vývoj interních webových stránek, aby vývojáři mohli testovat funkce, které vyžadují zabezpečené kontexty, aniž by na testovacím serveru museli implementovat protokol TLS. - Nastavení seznamu adres URL v této zásadě má stejný dopad jako nastavení příznaku příkazového řádku --unsafely-treat-insecure-origin-as-secure na čárkami oddělený seznam adres URL. Je-li nastavena tato zásada, bude jí příznak příkazového řádku přepsán. - Další informace o bezpečných kontextech naleznete na stránce https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6181608880636987460">Umožňuje nastavit seznam vzorů adres URL webů, které nemají povoleno spouštět plugin <ph name="FLASH_PLUGIN_NAME" />. Pokud tuto zásadu nenastavíte, použije se pro všechny weby globální výchozí hodnota buď ze zásady DefaultPluginsSetting (pokud je nastavena), nebo z osobní konfigurace uživatele.</translation> @@ -2015,11 +2008,6 @@ <translation id="6786967369487349613">Nastavit adresář cestovního profilu</translation> <translation id="6810445994095397827">Blokovat JavaScript na těchto stránkách</translation> <translation id="681446116407619279">Podporovaná schémata ověření</translation> -<translation id="6832455357698286434"> - Tato zásada udává seznam zdrojů (adres URL) nebo vzorů názvů hostitelů (například „*.example.com“), které mají být považovány za bezpečný kontext. Cílem je umožnit organizacím nastavení zkušebního serveru pro vývoj interních webových stránek, aby vývojáři mohli testovat funkce, které vyžadují zabezpečené kontexty, aniž by na testovacím serveru museli implementovat protokol TLS. - Nastavení seznamu adres URL v této zásadě má stejný dopad jako nastavení příznaku příkazového řádku --unsafely-treat-insecure-origin-as-secure na čárkami oddělený seznam adres URL. Je-li nastavena tato zásada, bude jí příznak příkazového řádku přepsán. - Další informace o bezpečných kontextech naleznete na stránce https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6835883744948188639">Zobrazovat uživateli opakovaně výzvu s oznámením, že je doporučen restart</translation> <translation id="6838056959556423778">Přepíše v prohlížeči <ph name="PRODUCT_NAME" /> pravidla výběru výchozí tiskárny. @@ -2378,7 +2366,6 @@ <translation id="7617319494457709698">Tato zásada udává, která rozšíření mohou ke vzdálenému ověření používat funkci <ph name="CHALLENGE_USER_KEY_FUNCTION" /> rozhraní <ph name="ENTERPRISE_PLATFORM_KEYS_API" />. Aby rozšíření toto rozhraní API mohla používat, musí být přidána do tohoto seznamu. Pokud rozšíření v seznamu není nebo seznam není nastaven, volání tohoto rozhraní API se nezdaří a bude vrácen kód chyby.</translation> -<translation id="7620300057302654932">Zdroje nebo vzory názvů hostitelů, které mají být považovány za bezpečný kontext.</translation> <translation id="7625444193696794922">Určuje, jaký kanál verzí by měl být v zařízení nastaven a uzamčen.</translation> <translation id="7632724434767231364">Název knihovny GSSAPI</translation> <translation id="7635471475589566552">Slouží ke konfiguraci jazyka aplikace <ph name="PRODUCT_NAME" /> a brání uživatelům, aby nastavený jazyk změnili.
diff --git a/components/policy/resources/policy_templates_da.xtb b/components/policy/resources/policy_templates_da.xtb index bda1805..09958a8 100644 --- a/components/policy/resources/policy_templates_da.xtb +++ b/components/policy/resources/policy_templates_da.xtb
@@ -653,7 +653,6 @@ Hver post på listen angiver et id, som bruges internt til at skelne mellem de forskellige enhedslokale konti.</translation> <translation id="2769952903507981510">Konfigurer det påkrævede domænenavn for værter med fjernadgang</translation> <translation id="2787173078141616821">Rapportér oplysninger om status for Android</translation> -<translation id="2793923553868251161">Kilder skal behandles som sikkert indhold.</translation> <translation id="2799297758492717491">Tillad automatisk afspilning af medier på en hvidliste over webadressemønstre</translation> <translation id="2801230735743888564">Giv brugerne mulighed for at spille det ekstra dinosaurspil, når enheden er offline. @@ -1803,12 +1802,6 @@ <translation id="6155936611791017817">Indstil standardtilstand for den store markør på loginskærmen</translation> <translation id="6157537876488211233">Kommasepareret liste over regler for omgåelse af proxy</translation> <translation id="6158324314836466367">Navn på virksomhedens webshop (udfaset)</translation> -<translation id="6164955668342404660">Udfaset i M69. Brug OverrideSecurityRestrictionsOnInsecureOrigin i stedet. - - Denne politik angiver en liste over kilder (webadresser), der skal behandles som sikkert indhold. Formålet er, at organisationer kan konfigurere en testserver til intern webudvikling, så deres udviklere kan teste funktioner, der kræver sikre kontekster, uden at skulle anvende TLS på testserveren. - Angivelse af en liste over webadresser i denne politik har den samme effekt som indstilling af kommandolinjemarkeringen "--unsafely-treat-insecure-origin-as-secure" på en kommasepareret liste over de samme webadresser. Hvis politikken er angivet, tilsidesætter den kommandolinjemarkeringen. - Du kan få flere oplysninger om sikre kontekster på https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Giver dig mulighed for at angive en liste med webadressemønstre, der angiver websites, som ikke har tilladelse til at køre <ph name="FLASH_PLUGIN_NAME" />-pluginnet. Hvis denne politik ikke angives, anvendes den globale standardværdi for alle websites enten fra politikken "DefaultPluginsSetting", hvis denne er angivet, og ellers fra brugerens personlige konfiguration.</translation> @@ -1981,11 +1974,6 @@ <translation id="6786967369487349613">Angiv placeringen af roamingprofilen</translation> <translation id="6810445994095397827">Bloker JavaScript på disse websites</translation> <translation id="681446116407619279">Understøttede godkendelsesskemaer</translation> -<translation id="6832455357698286434"> - Denne politik angiver en liste over kilder (webadresser) eller mønstre (f.eks. "*example.com") for hostnames, der skal behandles som sikkert indhold. Formålet er, at organisationer kan konfigurere en testserver til intern webudvikling, så deres udviklere kan teste funktioner, der kræver sikre kontekster, uden at skulle anvende TLS på testserveren. - Angivelse af en liste over webadresser i denne politik har den samme effekt som indstilling af kommandolinjemarkeringen "--unsafely-treat-insecure-origin-as-secure" på en kommasepareret liste over de samme webadresser. Hvis politikken er angivet, tilsidesætter den kommandolinjemarkeringen. - Du kan få flere oplysninger om sikre kontekster på https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Vis brugeren en fast meddelelse, som indikerer, at en genstart anbefales</translation> <translation id="6838056959556423778">Tilsidesætter regler for valg af standardprinter i <ph name="PRODUCT_NAME" />. @@ -2332,7 +2320,6 @@ <translation id="7617319494457709698">Denne politik angiver de udvidelser, der har tilladelse til at bruge <ph name="ENTERPRISE_PLATFORM_KEYS_API" />-funktionen <ph name="CHALLENGE_USER_KEY_FUNCTION" /> til fjernbekræftelse. Udvidelser skal føjes til denne liste for at kunne anvende API'en. Hvis en udvidelse ikke findes på listen, eller listen ikke er angivet, vil kaldet til API'en mislykkes og returnere en fejlkode.</translation> -<translation id="7620300057302654932">Kilder eller mønstre for hostname, der skal behandles som sikkert indhold.</translation> <translation id="7625444193696794922">Angiver den udgivelseskanal, som denne enhed skal være låst til.</translation> <translation id="7632724434767231364">Navn på GSSAPI-samling</translation> <translation id="7635471475589566552">Konfigurerer applikationens landestandard i <ph name="PRODUCT_NAME" /> og forhindrer brugerne i at ændre landestandarden. Hvis du aktiverer denne indstilling, anvender <ph name="PRODUCT_NAME" /> den angivne landestandard. Hvis den konfigurerede landestandard ikke understøttes, bruges "en-US" i stedet. Hvis denne indstilling er deaktiveret eller ikke konfigureret, bruger <ph name="PRODUCT_NAME" /> enten den brugerdefinerede landestandard (hvis denne er konfigureret), systemets landestandard eller reservelandestandarden "en-US".</translation>
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index 6268ad03..d62f821 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -647,7 +647,6 @@ Jeder Listeneintrag besteht aus einer Kennung, die intern dazu verwendet wird, die verschiedenen lokalen Gerätekonten auseinanderzuhalten.</translation> <translation id="2769952903507981510">Erforderlichen Domain-Namen für Remotezugriff-Hosts konfigurieren</translation> <translation id="2787173078141616821">Informationen zum Status von Android senden</translation> -<translation id="2793923553868251161">Quellen als sicheren Kontext einstufen.</translation> <translation id="2799297758492717491">Autoplay von Medien für eine weiße Liste mit URL-Mustern erlauben</translation> <translation id="2801230735743888564">Nutzern erlauben, das Easter Egg-Dinosaurierspiel zu spielen, wenn das Gerät offline ist. @@ -1788,12 +1787,6 @@ <translation id="6155936611791017817">Standardstatus für den großen Cursor auf der Anmeldeseite festlegen</translation> <translation id="6157537876488211233">Kommagetrennte Liste der Proxy-Umgehungsregeln</translation> <translation id="6158324314836466367">Unternehmens-Web-Store-Name (veraltet)</translation> -<translation id="6164955668342404660">Eingestellt in M69. Verwenden Sie stattdessen "OverrideSecurityRestrictionsOnInsecureOrigin". - - Mit dieser Richtlinie wird eine Liste aller Quellen (URLs) festgelegt, die als sicherer Kontext eingestuft werden sollen. Auf diese Weise können Organisationen einen Testserver für interne Webentwicklungen einrichten, damit ihre Entwickler Funktionen testen können, die einen sicheren Kontext voraussetzen, ohne TLS auf dem Testserver bereitstellen zu müssen. - Das Festlegen einer Liste von URLs in dieser Richtlinie hat den gleichen Effekt wie das Festlegen des Befehlszeilenparameters "--unsafely-treat-insecure-origin-as-secure" für eine durch Kommas getrennte Liste mit denselben URLs. Ein Festlegen dieser Richtlinie überschreibt den Befehlszeilenparameter. - Weitere Informationen zu sicherem Kontext finden Sie unter https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6181608880636987460">Ermöglicht die Zusammenstellung einer Liste mit URL-Mustern, die Websites angeben, denen die Ausführung des Plug-ins "<ph name="FLASH_PLUGIN_NAME" />" nicht gestattet ist. Ist diese Richtlinie nicht festgelegt, kommt für alle Websites entweder der globale Standardwert der Richtlinie "DefaultPluginsSetting", sofern konfiguriert, oder die persönliche Konfiguration des Nutzers zum Einsatz.</translation> @@ -1967,11 +1960,6 @@ <translation id="6786967369487349613">Roaming-Profilverzeichnis festlegen</translation> <translation id="6810445994095397827">JavaScript auf diesen Websites blockieren</translation> <translation id="681446116407619279">Unterstützte Authentifizierungsschemas</translation> -<translation id="6832455357698286434"> - Mit dieser Richtlinie wird eine Liste aller Quellen (URLs) oder Hostnamenmuster (wie "*.example.com") festgelegt, die als sicherer Kontext eingestuft werden sollen. Auf diese Weise können Organisationen einen Testserver für interne Webentwicklungen einrichten, damit ihre Entwickler Funktionen testen können, die einen sicheren Kontext voraussetzen, ohne TLS auf dem Testserver bereitstellen zu müssen. - Das Festlegen einer Liste von URLs in dieser Richtlinie hat den gleichen Effekt wie das Festlegen des Befehlszeilenparameters "--unsafely-treat-insecure-origin-as-secure" für eine durch Kommas getrennte Liste mit denselben URLs. Ein Festlegen dieser Richtlinie überschreibt den Befehlszeilenparameter. - Weitere Informationen zu sicherem Kontext finden Sie unter https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6835883744948188639">Dem Nutzer eine wiederkehrende Aufforderung anzeigen, dass ein Neustart empfohlen wird</translation> <translation id="6838056959556423778">Überschreibt die Regeln von <ph name="PRODUCT_NAME" /> zur Auswahl des Standarddruckers. @@ -2324,7 +2312,6 @@ <translation id="7617319494457709698">Mit dieser Richtlinie wird festgelegt, welche Erweiterungen zum Zweck der Remote-Bestätigung mithilfe der <ph name="CHALLENGE_USER_KEY_FUNCTION" /> die <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> verwenden dürfen. Damit eine Erweiterung die API verwenden darf, muss sie zu dieser Liste hinzugefügt werden. Wenn eine Erweiterung nicht in der Liste enthalten ist oder keine Liste festgelegt wurde, treten beim API-Aufruf Fehler auf und ein Fehlercode wird angezeigt.</translation> -<translation id="7620300057302654932">Quellen oder Hostnamenmuster als sicheren Kontext einstufen.</translation> <translation id="7625444193696794922">Gibt den Release-Kanal an, an den dieses Gerät gebunden werden soll.</translation> <translation id="7632724434767231364">Name der GSSAPI-Bibliothek</translation> <translation id="7635471475589566552">Konfiguriert das App-Gebietsschema in <ph name="PRODUCT_NAME" /> und verhindert, dass Nutzer das Gebietsschema ändern. Wenn Sie diese Einstellung aktivieren, verwendet <ph name="PRODUCT_NAME" /> das angegebene Gebietsschema. Wird das konfigurierte Gebietsschema nicht unterstützt, kommt stattdessen "en-US" zum Einsatz. Ist diese Einstellung deaktiviert oder nicht konfiguriert, verwendet <ph name="PRODUCT_NAME" /> das vom Nutzer angegebene bevorzugte Gebietsschema (sofern konfiguriert), das Gebietsschema des Systems oder das Ersatz-Gebietsschema "en-US".</translation>
diff --git a/components/policy/resources/policy_templates_el.xtb b/components/policy/resources/policy_templates_el.xtb index a009bd9..f3705bab 100644 --- a/components/policy/resources/policy_templates_el.xtb +++ b/components/policy/resources/policy_templates_el.xtb
@@ -670,7 +670,6 @@ Κάθε καταχώριση λίστας καθορίζει ένα αναγνωριστικό, το οποίο χρησιμοποιείται εσωτερικά για το διαχωρισμό των διαφορετικών τοπικών λογαριασμών μιας συσκευής.</translation> <translation id="2769952903507981510">Διαμόρφωση του υποχρεωτικού ονόματος τομέα για κεντρικούς υπολογιστές απομακρυσμένης πρόσβασης</translation> <translation id="2787173078141616821">Αναφορά πληροφοριών σχετικά με την κατάσταση του Android</translation> -<translation id="2793923553868251161">Προελεύσεις που πρόκειται να αντιμετωπιστούν ως ασφαλές περιβάλλον.</translation> <translation id="2799297758492717491">Επιτρέπει την αυτόματη αναπαραγωγή πολυμέσων σε μια λίστα επιτρεπόμενων μοτίβων URL</translation> <translation id="2801230735743888564">Επιτρέπει στους χρήστες να παίξουν το κρυφό παιχνίδι με τον δεινόσαυρο όταν η συσκευή είναι εκτός σύνδεσης. @@ -1868,12 +1867,6 @@ <translation id="6155936611791017817">Ορισμός προεπιλεγμένης κατάσταση του μεγάλου δείκτη στην οθόνη σύνδεσης</translation> <translation id="6157537876488211233">Λίστα κανόνων παράβλεψης διακομιστή μεσολάβησης διαχωρισμένων με κόμματα</translation> <translation id="6158324314836466367">Όνομα διαδικτυακού αποθηκευτικού χώρου επιχείρησης (καταργήθηκε)</translation> -<translation id="6164955668342404660">Καταργήθηκε στο M69. Χρησιμοποιήστε το OverrideSecurityRestrictionsOnInsecureOrigin. - - Η πολιτική καθορίζει μια λίστα προελεύσεων (URL) που πρόκειται να αντιμετωπιστούν ως ασφαλές περιβάλλον. Στόχος είναι να επιτρέπεται στους οργανισμούς να ρυθμίσουν έναν διακομιστή προετοιμασίας για εσωτερική ανάπτυξη ιστού, προκειμένου να μπορούν οι προγραμματιστές τους να ελέγχουν λειτουργίες που απαιτούν ασφαλή περιβάλλοντα χωρίς να απαιτείται η ανάπτυξη TLS στον διακομιστή προετοιμασίας. - Η ρύθμιση μιας λίστας URL σε αυτήν την πολιτική έχει την ίδια επίδραση με τη ρύθμιση μιας μεταβλητής γραμμής εντολών "--unsafely-treat-insecure-origin-as-secure" σε μια λίστα διαχωρισμένη με κόμματα, η οποία περιλαμβάνει τα ίδια URL. Εάν η πολιτική έχει οριστεί, θα παρακάμψει τη μεταβλητή γραμμής εντολών. - Για περισσότερες πληροφορίες σχετικά με ασφαλή περιβάλλοντα, ανατρέξτε στη διεύθυνση https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Σας επιτρέπει να ορίσετε μια λίστα μοτίβων URL που καθορίζουν ιστοτόπους οι οποίοι δεν επιτρέπεται να εκτελούν την προσθήκη <ph name="FLASH_PLUGIN_NAME" />. Εάν αυτή η πολιτική δεν οριστεί, η καθολική προεπιλεγμένη τιμή θα χρησιμοποιείται για όλους τους ιστοτόπους είτε μέσω της πολιτικής "DefaultPluginsSetting", εάν έχει οριστεί, είτε μέσω της προσωπικής διαμόρφωσης του χρήστη.</translation> @@ -2050,11 +2043,6 @@ <translation id="6786967369487349613">Ορίστε τον κατάλογο του προφίλ περιαγωγής</translation> <translation id="6810445994095397827">Αποκλεισμός JavaScript σε αυτούς τους ιστότοπους</translation> <translation id="681446116407619279">Υποστηριζόμενοι συνδυασμοί ελέγχου ταυτότητας</translation> -<translation id="6832455357698286434"> - Η πολιτική καθορίζει μια λίστα προελεύσεων (URL) ή μοτίβων ονόματος κεντρικού υπολογιστή (όπως "*.example.com") που πρόκειται να αντιμετωπιστούν ως ασφαλές περιβάλλον. Η πρόθεση είναι να επιτρέπεται στους οργανισμούς να ρυθμίσουν έναν διακομιστή προετοιμασίας για εσωτερική ανάπτυξη ιστού, προκειμένου να μπορούν οι προγραμματιστές τους να ελέγχουν λειτουργίες οι οποίες απαιτούν ασφαλή περιβάλλοντα, χωρίς να απαιτείται η ανάπτυξη TLS στον διακομιστή προετοιμασίας. - Η ρύθμιση μιας λίστας URL σε αυτήν την πολιτική έχει την ίδια επίδραση με τη ρύθμιση μιας μεταβλητής γραμμής εντολών "--unsafely-treat-insecure-origin-as-secure" σε μια λίστα διαχωρισμένη με κόμματα, η οποία περιλαμβάνει τα ίδια URL. Εάν η πολιτική έχει οριστεί, θα παρακάμψει τη μεταβλητή γραμμής εντολών. - Για περισσότερες πληροφορίες σχετικά τα με ασφαλή περιβάλλοντα, ανατρέξτε στη διεύθυνση https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Εμφάνιση μιας επαναλαμβανόμενης προτροπής στον χρήστη, η οποία υποδεικνύει ότι συνιστάται επανεκκίνηση</translation> <translation id="6838056959556423778">Παρακάμπτει τους προεπιλεγμένους κανόνες για την επιλογή εκτυπωτή στο <ph name="PRODUCT_NAME" />. @@ -2423,7 +2411,6 @@ <translation id="7617319494457709698">Η παρούσα πολιτική καθορίζει τις επιτρεπόμενες επεκτάσεις για τη χρήση της λειτουργίας <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" /> για απομακρυσμένη διαβεβαίωση. Για τη χρήση του API, οι επεκτάσεις θα πρέπει να προστίθενται σε αυτήν τη λίστα. Εάν μια επέκταση δεν περιλαμβάνεται στη λίστα, ή εάν δεν έχει οριστεί η λίστα, η κλήση προς το API θα αποτυγχάνει εμφανίζοντας έναν κωδικό σφάλματος.</translation> -<translation id="7620300057302654932">Οι προελεύσεις ή τα μοτίβα ονόματος κεντρικού υπολογιστή πρόκειται να αντιμετωπιστούν ως ασφαλές περιβάλλον.</translation> <translation id="7625444193696794922">Καθορίζει το κανάλι κυκλοφορίας στο οποίο θα πρέπει να είναι κλειδωμένη αυτή η συσκευή.</translation> <translation id="7632724434767231364">Όνομα βιβλιοθήκης GSSAPI</translation> <translation id="7635471475589566552">Διαμορφώνει τις τοπικές ρυθμίσεις της εφαρμογής στο <ph name="PRODUCT_NAME" /> και αποτρέπει την αλλαγή των τοπικών ρυθμίσεων από τους χρήστες.
diff --git a/components/policy/resources/policy_templates_en-GB.xtb b/components/policy/resources/policy_templates_en-GB.xtb index 6b8b078e..45d449c 100644 --- a/components/policy/resources/policy_templates_en-GB.xtb +++ b/components/policy/resources/policy_templates_en-GB.xtb
@@ -677,7 +677,6 @@ Every list entry specifies an identifier, which is used internally to tell the different device-local accounts apart.</translation> <translation id="2769952903507981510">Configure the required domain name for remote access hosts</translation> <translation id="2787173078141616821">Report information about status of Android</translation> -<translation id="2793923553868251161">Origins to be treated as secure context.</translation> <translation id="2799297758492717491">Allow media auto-play on a whitelist of URL patterns</translation> <translation id="2801230735743888564">Allow users to play dinosaur easter egg game when device is offline. @@ -1879,12 +1878,6 @@ <translation id="6155936611791017817">Set default state of the large cursor on the login screen</translation> <translation id="6157537876488211233">Comma-separated list of proxy bypass rules</translation> <translation id="6158324314836466367">Enterprise web store name (deprecated)</translation> -<translation id="6164955668342404660">Deprecated in M69. Use OverrideSecurityRestrictionsOnInsecureOrigin instead. - - The policy specifies a list of origins (URLs) to be treated as secure context. The intent is to allow organisations to set up a staging server for internal web development, so that their developers can test out features requiring secure contexts without having to deploy TLS on the staging server. - Setting a list of URLs in this policy has the same effect as setting the command-line flag '--unsafely-treat-insecure-origin-as-secure' to a comma-separated list of the same URLs. If the policy is set, it will override the command-line flag. - For more information on secure contexts, see https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Allows you to set a list of URL patterns that specify sites which are not allowed to run the <ph name="FLASH_PLUGIN_NAME" /> plug-in. If this policy is left not set the global default value will be used for all sites either from the 'DefaultPluginsSetting' policy if it is set, or the user's personal configuration otherwise.</translation> @@ -2061,11 +2054,6 @@ <translation id="6786967369487349613">Set the roaming profile directory</translation> <translation id="6810445994095397827">Block JavaScript on these sites</translation> <translation id="681446116407619279">Supported authentication schemes</translation> -<translation id="6832455357698286434"> - The policy specifies a list of origins (URLs) or hostname patterns (such as '*.example.com') to be treated as secure contexts. The intent is to allow organisations to set up a staging server for internal web development, so that their developers can test out features requiring secure contexts without having to deploy TLS on the staging server. - Setting a list of URLs in this policy has the same effect as setting the command-line flag '--unsafely-treat-insecure-origin-as-secure' to a comma-separated list of the same URLs. If the policy is set, it will override the command-line flag. - For more information on secure contexts, see https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Show a recurring prompt to the user indicating that a relaunch is recommended</translation> <translation id="6838056959556423778">Overrides <ph name="PRODUCT_NAME" /> default printer selection rules. @@ -2435,7 +2423,6 @@ <translation id="7617319494457709698">This policy specifies the allowed extensions to use the <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> function <ph name="CHALLENGE_USER_KEY_FUNCTION" /> for remote attestation. Extensions must be added to this list to use the API. If an extension is not in the list, or the list is not set, the call to the API will fail with an error code.</translation> -<translation id="7620300057302654932">Origins or hostname patterns to be treated as secure context.</translation> <translation id="7625444193696794922">Specifies the release channel that this device should be locked to.</translation> <translation id="7632724434767231364">GSSAPI library name</translation> <translation id="7635471475589566552">Configures the application locale in <ph name="PRODUCT_NAME" /> and prevents users from changing the locale.
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index 987228e..fb56b7bb 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -266,6 +266,7 @@ Si el valor se establece como falso, se inhabilitará el envío de datos de diagnóstico y métricas. Si esta política no se configura, el envío de datos de diagnóstico y métricas se inhabilitará en los dispositivos no administrados y se habilitará en los dispositivos administrados.</translation> +<translation id="1920046221095339924">Permitir las sesiones administradas en el dispositivo</translation> <translation id="1929709556673267855">Proporciona configuraciones para las impresoras empresariales vinculadas a dispositivos. Esta política te permite proporcionar configuraciones de impresoras a dispositivos <ph name="PRODUCT_OS_NAME" />. El formato es el mismo que el del diccionario NativePrinters, con un campo adicional "id" o "guid" obligatorio por impresora para la lista blanca o negra. @@ -299,6 +300,7 @@ Si se habilita esta configuración o no se establece ningún valor, el usuario podrá controlar la función "Autocompletar" para las direcciones en la IU.</translation> <translation id="1960840544413786116">Permitir o no los certificados emitidos por los anclajes de confianza locales que no tienen la extensión subjectAlternativeName</translation> +<translation id="1962273523772270623">Permitir la recopilación de registro de acontecimientos de WebRTC que provienen de los servicios de Google</translation> <translation id="1964634611280150550">Modo incógnito inhabilitado</translation> <translation id="1964802606569741174">Esta política no tiene efecto en la app de YouTube de Android. Si se debe aplicar el modo de seguridad en YouTube, se debe inhabilitar la instalación de la app de YouTube de Android.</translation> <translation id="1969212217917526199">Anula las políticas en compilaciones de depuración del host de acceso remoto. @@ -643,7 +645,6 @@ Cada entrada de la lista especifica un identificador, que se utiliza de forma interna para diferenciar las cuentas locales del dispositivo.</translation> <translation id="2769952903507981510">Configura el nombre de dominio requerido para los hosts de acceso remoto.</translation> <translation id="2787173078141616821">Informar datos sobre el estado de Android</translation> -<translation id="2793923553868251161">Los orígenes se considerarán como contexto seguro.</translation> <translation id="2799297758492717491">Permitir la reproducción automática de contenido multimedia en una lista blanca de patrones de URL</translation> <translation id="2801230735743888564">Permitir que los usuarios jueguen con el huevo de pascua del dinosaurio cuando el dispositivo se encuentra sin conexión @@ -1784,12 +1785,6 @@ <translation id="6155936611791017817">Establece el estado predeterminado del cursor grande en la pantalla de acceso.</translation> <translation id="6157537876488211233">Lista separada por comas de las normas de omisión de proxy</translation> <translation id="6158324314836466367">Indica el nombre de la tienda web de la empresa (en desuso).</translation> -<translation id="6164955668342404660">Dejó de estar disponible en M69. Usa OverrideSecurityRestrictionsOnInsecureOrigin en su lugar. - - La política especifica una lista de orígenes (URL) que se considerarán como contexto seguro. El objetivo es permitir que las organizaciones configuren un servidor de etapas de pruebas para desarrollos web internos, a fin de que sus desarrolladores puedan probar las funciones que requieren contextos seguros sin la necesidad de implementar TLS en el servidor de etapas de pruebas. - Configurar una lista de URL en esta política tiene el mismo efecto que configurar la marca de línea de comandos "--unsafely-treat-insecure-origin-as-secure" en una lista de elementos separados por comas de las mismas URL. Si se establece la política, anulará la marca de línea de comandos. - Para obtener más información sobre contextos seguros, consulta https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Te permite establecer una lista de patrones de URL que especifican los sitios que no tienen permitido ejecutar el complemento <ph name="FLASH_PLUGIN_NAME" />. Si esta política no se establece, el valor predeterminado global se usará para todos los sitios, ya sea desde la política "DefaultPluginsSetting", si está configurada, o desde otro tipo de configuración personal del usuario.</translation> @@ -1908,6 +1903,11 @@ Si no se establece esta política o si la lista está vacía, se podrá acceder a todos los esquemas en <ph name="PRODUCT_NAME" />.</translation> <translation id="6652197835259177259">Configuración de los usuarios administrados localmente</translation> <translation id="6658245400435704251">Especifica la cantidad máxima de segundos que un dispositivo puede retrasar aleatoriamente la descarga de una actualización desde el momento en el que la descarga se envío al servidor por primera vez. El dispositivo puede dedicar una parte de este tiempo al proceso de actualización y el resto a realizar las comprobaciones necesarias. En cualquier caso, el límite superior de la dispersión es un período de tiempo constante, para que el dispositivo no se quede bloqueado mientras espera descargar una actualización.</translation> +<translation id="6665599130599311250">Si esta política se establece como falsa o no se establece, las sesiones de invitado administradas se comportarán como se indica en https://support.google.com/chrome/a/answer/3017014, la "sesión pública" estándar. + + Si esta política se establece como verdadera, las sesiones de invitado administradas se comportarán como "sesiones administradas", que no incluyen muchas de las restricciones que se aplican a las "sesiones públicas" estándar. + + Si no se establece, el usuario no puede cambiarla ni anularla.</translation> <translation id="6665670272107384733">Establecer la frecuencia con la que el usuario debe ingresar la contraseña para usar el desbloqueo rápido</translation> <translation id="6681229465468164801">Te permite establecer una lista de patrones de URL que especifica los sitios que no pueden solicitarle al usuario acceso a un dispositivo USB. @@ -1957,11 +1957,6 @@ <translation id="6786967369487349613">Establecer el directorio del perfil de itinerancia</translation> <translation id="6810445994095397827">Bloquear JavaScript en estos sitios</translation> <translation id="681446116407619279">Esquemas de autenticación compatibles</translation> -<translation id="6832455357698286434"> - La política especifica una lista de orígenes (URL) o patrones de nombres de host (como "*.ejemplo.com") que se considerarán como contexto seguro. El objetivo es permitir que las organizaciones configuren un servidor de etapas de pruebas para desarrollos web internos, a fin de que sus programadores puedan probar las funciones que requieren contextos seguros sin la necesidad de implementar TLS en el servidor de etapas de pruebas. - Configurar una lista de URL en esta política tiene el mismo efecto que configurar la marca de línea de comandos "--unsafely-treat-insecure-origin-as-secure" en una lista de elementos separados por comas de las mismas URL. Si se establece la política, se anulará la marca de línea de comandos. - Para obtener más información sobre contextos seguros, consulta https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Mostrar un mensaje recurrente al usuario para indicarle que se recomienda llevar a cabo el reinicio</translation> <translation id="6838056959556423778">Anula las reglas predeterminadas de selección de impresora de <ph name="PRODUCT_NAME" />. @@ -2074,6 +2069,17 @@ <translation id="6943577887654905793">Nombre de preferencia de Mac/Linux:</translation> <translation id="69525503251220566">Parámetro que proporciona una función de búsqueda por imagen para el proveedor de búsquedas predeterminado</translation> <translation id="6956272732789158625">No permitir que los sitios utilicen la generación de claves</translation> +<translation id="6982028490425791294"> + Si la política se establece como verdadera, <ph name="PRODUCT_NAME" /> puede recopilar registros de acontecimientos de WebRTC provenientes de los servicios de Google (p. ej., Google Meet) y cargarlos a Google. + + Si se establece como falsa, o no se establece, <ph name="PRODUCT_NAME" /> no puede recopilar estos registros ni cargarlos. + + Estos registros contienen información como el momento en que se enviaron o recibieron paquetes RTP, el tamaño de estos paquetes, comentarios sobre la congestión de la red y metadatos sobre el tiempo y la calidad de los cuadros de video y audio. Esta información es útil para depurar problemas con llamadas de audio o videollamadas en Chrome, como los problemas relacionados con la estimación del ancho de banda, etc. Los registros no incluyen contenido de audio o video de la llamada. + + Esta recopilación de datos solo se puede activar mediante servicios web de Google, como Google Hangouts o Google Meet. + + Es posible que estos registros se asocien (mediante un ID de sesión) con otros registros que recopila el mismo servicio de Google a fin de facilitar la depuración. + </translation> <translation id="6994082778848658360">Especifica la forma en que los elementos de hardware de seguridad integrados se usan para la autenticación de dos factores, si son compatibles con esta función. El botón de encendido de la máquina se usa para detectar la presencia física del usuario. Si se selecciona "Inhabilitada", no se proporciona un segundo factor. @@ -2304,7 +2310,6 @@ <translation id="7617319494457709698">Esta política especifica las extensiones con permiso para usar la API <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> con la función <ph name="CHALLENGE_USER_KEY_FUNCTION" /> para la verificación remota. Para poder usar la API, las extensiones deben agregarse a esta lista. Si una extensión no está en la lista o no se establece la lista, las llamadas a la API fallarán y se mostrará un código de error.</translation> -<translation id="7620300057302654932">Los orígenes o patrones de nombres de host se considerarán como contexto seguro.</translation> <translation id="7625444193696794922">Especifica el canal de publicaciones al que debe conectarse este dispositivo.</translation> <translation id="7632724434767231364">Nombre de la biblioteca GSSAPI</translation> <translation id="7635471475589566552">Si se establece la configuración regional de la aplicación en <ph name="PRODUCT_NAME" />, los usuarios no podrán cambiarla. Si se habilita esta configuración, <ph name="PRODUCT_NAME" /> usará aquella que se especificó. Si la configuración regional no es compatible, se usará "en-US" en su lugar. Si esta opción se inhabilita o no se configura, <ph name="PRODUCT_NAME" /> usará la configuración regional preferida que haya especificado el usuario (si está configurada), la configuración regional del sistema o la configuración regional alternativa "en-US".</translation>
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index 691c07bd..be32be10 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -675,7 +675,6 @@ Cada entrada de la lista especifica un identificador, que se utiliza de forma interna para diferenciar las cuentas locales del dispositivo.</translation> <translation id="2769952903507981510">Configurar el nombre de dominio obligatorio para hosts de acceso remoto</translation> <translation id="2787173078141616821">Proporcionar información sobre el estado de Android</translation> -<translation id="2793923553868251161">Orígenes que se deben considerar contexto seguro.</translation> <translation id="2799297758492717491">Permitir reproducción automática de contenido multimedia en una lista blanca de patrones de URL</translation> <translation id="2801230735743888564">Permite que los usuarios jueguen al juego del huevo de pascua de dinosaurio sin conexión. @@ -1877,12 +1876,6 @@ <translation id="6155936611791017817">Establecer el estado predeterminado del cursor grande en la pantalla de inicio de sesión</translation> <translation id="6157537876488211233">Lista de reglas de omisión de proxy separadas por comas</translation> <translation id="6158324314836466367">Nombre de la tienda online de la empresa (política obsoleta)</translation> -<translation id="6164955668342404660">Obsoleta en M69. Usa OverrideSecurityRestrictionsOnInsecureOrigin en su lugar. - - La política define una lista de orígenes (URLs) que se deben considerar contexto seguro. La intención es permitir que las organizaciones configuren un servidor provisional para desarrollar web internas y conseguir que los desarrolladores puedan probar las funciones que necesiten en contextos seguros sin tener que implementar TLS en el servidor provisional. - Definir la lista de URLs de esta política tiene el mismo resultado que asignar el indicador de línea de comandos "--unsafely-treat-insecure-origin-as-secure" a una lista de URL separadas por comas. Al habilitar la política, se anula el indicador de línea de comandos. - Para obtener más información sobre los contextos seguros, consulta la página https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Permite configurar una lista de patrones de URL que especifican los sitios web que no pueden ejecutar el complemento <ph name="FLASH_PLUGIN_NAME" />. Si esta política no se configura, se usará para todos los sitios web el valor general predeterminado que se indique en la política "DefaultPluginsSetting" (si se ha configurado) o las preferencias personales del usuario (en caso contrario).</translation> @@ -2064,11 +2057,6 @@ <translation id="6786967369487349613">Especificar el directorio de perfiles de itinerancia</translation> <translation id="6810445994095397827">Bloquear JavaScript en estos sitios</translation> <translation id="681446116407619279">Esquemas de autenticación admitidos</translation> -<translation id="6832455357698286434"> - La política define una lista de orígenes (URLs) o de patrones de nombre de host (como "*.example.com") que se deben considerar contextos seguros. La intención es permitir que las organizaciones configuren un servidor provisional para desarrollar web internas y conseguir que los desarrolladores puedan probar las funciones que necesiten en contextos seguros sin tener que implementar TLS en el servidor provisional. - Definir la lista de URLs de esta política tiene el mismo resultado que asignar el indicador de línea de comandos "--unsafely-treat-insecure-origin-as-secure" a una lista de URL separadas por comas. Al habilitar la política, se anula el indicador de línea de comandos. - Para obtener más información sobre los contextos seguros, consulta la página https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Mostrar un mensaje periódico al usuario indicando que se recomienda reiniciar el navegador</translation> <translation id="6838056959556423778">Anula las reglas para seleccionar la impresora predeterminada de <ph name="PRODUCT_NAME" />. @@ -2437,7 +2425,6 @@ <translation id="7617319494457709698">Esta política especifica las extensiones que pueden usar la función <ph name="CHALLENGE_USER_KEY_FUNCTION" /> de la API <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> para la confirmación remota. Las extensiones se deben añadir a esta lista para usar la API. Si la lista no se ha configurado o si una extensión no está incluida en ella, aparecerá un código de error en la llamada a la API.</translation> -<translation id="7620300057302654932">Orígenes o patrones de nombre de host que se deben considerar contextos seguros.</translation> <translation id="7625444193696794922">Permite especificar el canal de versiones al que se vinculará este dispositivo.</translation> <translation id="7632724434767231364">Nombre de biblioteca GSSAPI</translation> <translation id="7635471475589566552">Establece la configuración regional de la aplicación en <ph name="PRODUCT_NAME" /> e impide que los usuarios la modifiquen.
diff --git a/components/policy/resources/policy_templates_et.xtb b/components/policy/resources/policy_templates_et.xtb index db1198e..06f65ba 100644 --- a/components/policy/resources/policy_templates_et.xtb +++ b/components/policy/resources/policy_templates_et.xtb
@@ -675,7 +675,6 @@ Loendi iga kirje määrab identifikaatori, mida kasutatakse seesmiselt seadmepõhiste kontode eristamiseks.</translation> <translation id="2769952903507981510">Kaugjuurdepääsu hostidele nõutava domeeninime seadistamine</translation> <translation id="2787173078141616821">Saada teavet Androidi oleku kohta</translation> -<translation id="2793923553868251161">Lähtekohti käsitletakse turvalise kontekstina.</translation> <translation id="2799297758492717491">Lubatud loendisse lisatud URL-i mustrite puhul meediasisu automaatesituse lubamine</translation> <translation id="2801230735743888564">Luba kasutajal mängida dinosauruse üllatusmängu, kui seade pole võrguga ühendatud. @@ -1864,12 +1863,6 @@ <translation id="6155936611791017817">Sisselogimisekraanil suure kursori vaikeoleku määramine</translation> <translation id="6157537876488211233">Puhverserveri möödumisreeglite komadega eraldatud loend</translation> <translation id="6158324314836466367">Ettevõtte veebipoe nimi (tugi on katkestatud)</translation> -<translation id="6164955668342404660">Reegli tugi on M69-s katkestatud. Kasutage selle asemel reeglit OverrideSecurityRestrictionsOnInsecureOrigin. - - Reegel määrab allikate (URL-ide) loendi, mida käsitletakse turvalise kontekstina. Reegli eesmärk on võimaldada organisatsioonidel seadistada kontrollserver siseseks veebiarenduseks, et arendajad saaksid testida turvalist konteksti nõudvaid funktsioone, ilma et oleks vaja kontrollserveris TLS-i juurutada. - Reeglis URL-ide loendi määramisel on sama mõju mis käsureamärgistuse „--unsafely-treat-insecure-origin-as-secure” lisamine samadest URL-idest koosnevasse komaeraldusega loendisse. Kui reegel on määratud, alistab see käsureamärgistuse. - Turvaliste kontekstide lisateavet leiate aadressilt https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Võimaldab määrata URL-i mustrite loendi, mis määrab saidid, millel ei ole lubatud pistikprogrammi <ph name="FLASH_PLUGIN_NAME" /> käitada. Kui jätate selle reegli määramata, kasutatakse kõikide saitide puhul globaalset vaikeväärtust, mis pärineb reeglist „DefaultPluginsSetting” (kui see on määratud) või kasutaja isiklikust seadistusest.</translation> @@ -2050,11 +2043,6 @@ <translation id="6786967369487349613">Rändlusprofiili kataloogi määramine</translation> <translation id="6810445994095397827">Blokeeri JavaScript nendel saitidel</translation> <translation id="681446116407619279">Toetatud autentimisskeemid</translation> -<translation id="6832455357698286434"> - See reegel määrab loendi lähtekohtadest (URL-id) või hostinime mustritest (nt „*.example.com”), mida käsitletakse turvalise kontekstina. Selle eesmärk on lubada organisatsioonidel seadistada kontrollserver sisemiseks veebiarenduseks, mis võimaldab arendajatel testida turvalist konteksti nõudvaid funktsioone, ilma et nad peaksid kontrollserverisse TLS-i juurutama. - Reegliga URL-ide loendi määramine toimib samamoodi kui samade URL-ide komaeraldusega loendisse käsurealmärgistuse „--unsafely-treat-insecure-origin-as-secure” lisamine. - Lisateavet turvaliste kontekstide kohta leiate saidilt https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Kuva kasutajale korduv viip, mis näitab, et taaskäivitamine on soovitatav</translation> <translation id="6838056959556423778">Alistatakse rakenduse <ph name="PRODUCT_NAME" /> vaikeprinteri valimise reeglid. @@ -2426,7 +2414,6 @@ <translation id="7617319494457709698">Reegel määrab lubatud laiendused, mis kasutavad kaugatesteerimisel API <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> funktsiooni <ph name="CHALLENGE_USER_KEY_FUNCTION" />. API kasutamiseks tuleb laiendused sellesse loendisse lisada. Kui laiendust loendis pole või loendit pole koostatud, siis kõne API-le ebaõnnestub ja saate vastuseks veakoodi.</translation> -<translation id="7620300057302654932">Lähtekohad või hostinimede mustrid, mida käsitletakse turvalise kontekstina.</translation> <translation id="7625444193696794922">Määrab väljalaskekanali, millele seade tuleks lukustada.</translation> <translation id="7632724434767231364">GSSAPI-teegi nimi</translation> <translation id="7635471475589566552">Seadistab rakenduse lokaadi rakenduses <ph name="PRODUCT_NAME" /> ja takistab kasutajatel lokaadi muutmist.
diff --git a/components/policy/resources/policy_templates_fa.xtb b/components/policy/resources/policy_templates_fa.xtb index 5c76d26f..994132d9 100644 --- a/components/policy/resources/policy_templates_fa.xtb +++ b/components/policy/resources/policy_templates_fa.xtb
@@ -647,7 +647,6 @@ هر ورودی فهرست شناسهای را مشخص میکند که بصورت داخلی استفاده میشود تا حسابهای داخل دستگاه را متمایز سازد.</translation> <translation id="2769952903507981510">پیکربندی نام دامنه مورد نیاز برای میزبانهای دسترسی ازراهدور</translation> <translation id="2787173078141616821">گزارش اطلاعات درباره وضعیت Android</translation> -<translation id="2793923553868251161">منابع اصلی که بافت ایمن محسوب میشوند.</translation> <translation id="2799297758492717491">مجاز کردن پخش خودکار رسانه در فهرست مجازی از الگوهای نشانی وب</translation> <translation id="2801230735743888564">به کاربران امکان داده میشود وقتی دستگاهشان آفلاین است بازی dinosaur easter egg را انجام دهند. @@ -1785,12 +1784,6 @@ <translation id="6155936611791017817">تنظیم حالت پیشفرض نشانگر موشواره بزرگ در صفحه ورود به سیستم</translation> <translation id="6157537876488211233">فهرست قوانین رد شدن از پروکسی جدا شده با کاما</translation> <translation id="6158324314836466367">نام فروشگاه وب سازمان (منسوخشده)</translation> -<translation id="6164955668342404660">در M69 منسوخ شده است. بهجای آن از OverrideSecurityRestrictionsOnInsecureOrigin استفاده کنید. - -این خطمشی فهرستی از مبدأها (نشانیهای وب) را مشخص میکند که بهعنوان بافت ایمن محسوب میشوند. هدف این است که سازمانها بتوانند سرور محیط پیش از محصول نهایی (سرور شبهعملیاتی) برای توسعه وب داخلی راهاندازی کنند تا برنامهنویسهای این سازمانها بدون اجبار به پیادهسازی TLS در سرور شبهعملیاتی، بتوانند ویژگیهایی را که نیازمند بافت ایمن هستند آزمایش کنند. - تنظیم کردن فهرست نشانیهای وب در این خطمشی همان اثری را دارد که تنظیم پرچم خط فرمان «--unsafely-treat-insecure-origin-as-secure» بر فهرست جداشده با ویرگول از این نشانیهای وب دارد. اگر این خطمشی تنظیم شود، پرچم خط فرمان لغو میشود. - برای اطلاعات بیشتر درباره بافتهای ایمن، به https://www.w3.org/TR/secure-contexts/ بروید. - </translation> <translation id="6181608880636987460">به شما امکان میدهد فهرستی از الگوهای نشانی وب را تنظیم کنید که سایتهایی را مشخص میکند که برای اجرای افزایه <ph name="FLASH_PLUGIN_NAME" /> مجاز نیستند. اگر این خطمشی تنظیم نشود، مقدار پیشفرض کلی برای همه سایتها استفاده میشود، خواه از خطمشی 'DefaultPluginsSetting' (اگر تنظیم شده باشد) یا پیکربندی شخصی کاربر.</translation> @@ -1961,11 +1954,6 @@ <translation id="6786967369487349613">تنظیم فهرست راهنمای نمایه رومینگ</translation> <translation id="6810445994095397827">مسدود کردن جاوا اسکریپت برای این سایتها</translation> <translation id="681446116407619279">طرحهای راستیآزمایی پشتیبانی شده</translation> -<translation id="6832455357698286434"> - این خطمشی فهرستی از مبدأها (نشانیهای وب) یا الگوهای نام میزبان (مانند «*.example.com») را مشخص میکند که بهعنوان بافت ایمن محسوب میشوند. هدف این است که سازمانها بتوانند سرور محیط پیش از محصول نهایی (سرور شبهعملیاتی) برای توسعه وب داخلی راهاندازی کنند تا برنامهنویسهای این سازمانها بدون اجبار به پیادهسازی TLS در سرور شبهعملیاتی، بتوانند ویژگیهایی را که نیازمند بافت ایمن هستند آزمایش کنند. - تنظیم کردن فهرست نشانیهای وب در این خطمشی همان اثری را دارد که تنظیم پرچم خط فرمان «--unsafely-treat-insecure-origin-as-secure» بر فهرست جداشده با ویرگول از این نشانیهای وب دارد. اگر این خطمشی تنظیم شود، پرچم خط فرمان لغو میشود. - برای اطلاعات بیشتر درباره بافتهای ایمن، به https://www.w3.org/TR/secure-contexts/ بروید. - </translation> <translation id="6835883744948188639">نمایش درخواست تکرارشوندهای که به کاربران نشان میدهد راهاندازی مجدد توصیه شده است</translation> <translation id="6838056959556423778">قوانین انتخاب چاپگر پیشفرض <ph name="PRODUCT_NAME" /> را لغو میکند. @@ -2318,7 +2306,6 @@ <translation id="7617319494457709698">این خطمشی افزونههایی را که مجازند از عملکرد <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" /> برای تصدیق ازراهدور استفاده کنند، مشخص میکند. افزونهها برای استفاده از API باید به این فهرست اضافه شوند. اگر افزونهای در این فهرست نباشد یا فهرست تنظیم نشده باشد، فراخوانی API با کد خطا همراه خواهد بود.</translation> -<translation id="7620300057302654932">مبدأها یا الگوهای نام میزبان که بهعنوان بافت ایمن محسوب میشوند.</translation> <translation id="7625444193696794922">کانال نشری را تعیین میکند که این دستگاه باید بر روی آن قفل باشد.</translation> <translation id="7632724434767231364">نام کتابخانه GSSAPI</translation> <translation id="7635471475589566552">زبان محلی برنامه را در <ph name="PRODUCT_NAME" /> تعیین میکند و از تغییر آن توسط کاربران جلوگیری میکند. اگر فعال شود، <ph name="PRODUCT_NAME" /> از زبان محلی تعیین شده استفاده میکند. اگر زبان محلی تعیین شده پشتیبانی نشود، به جای آن از "en-US" استفاده میشود. اگر این گزینه غیرفعال شود یا تنظیمات آن دست نخورده باقی بماند، <ph name="PRODUCT_NAME" /> یا از زبان محلی ترجیحی تعیین شده توسط کاربر (در صورت وجود)، زبان محلی سیستم، یا از زبان محلی پیشفرض "en-US" استفاده میکند.</translation>
diff --git a/components/policy/resources/policy_templates_fi.xtb b/components/policy/resources/policy_templates_fi.xtb index c3ac16f..eb9e20a 100644 --- a/components/policy/resources/policy_templates_fi.xtb +++ b/components/policy/resources/policy_templates_fi.xtb
@@ -267,6 +267,7 @@ Jos arvo on epätosi tai sitä ei määritetä, käyttötilastoja ja diagnostiikkadataa ei lähetetä. Jos käytäntöä ei ole määritetty, käyttötilastojen ja diagnostiikkadatan raportointi poistetaan käytöstä hallinnoimattomilla laitteilla, ja se otetaan käyttöön hallinnoiduilla laitteilla.</translation> +<translation id="1920046221095339924">Salli hallinnoidut käyttökerrat laitteella</translation> <translation id="1929709556673267855">Määritä laitteisiin yhdistettyjen yritystulostimien asetuksia. Tämän käytännön avulla voit määrittää tulostinasetuksia laitteille, joiden käyttöjärjestelmä on <ph name="PRODUCT_OS_NAME" />. Siinä käytettävä muoto on muuten sama kuin NativePrinters-hakemistossa, mutta kullakin tulostimella on lisäksi pakollinen id- tai guid-kenttä, jota käytetään sallittujen luetteloon tai mustalle listalle merkitsemistä varten. @@ -300,6 +301,7 @@ Jos tämä asetus on käytössä tai sille ei ole määritetty arvoa, käyttäjä voi hallita osoitteiden automaattista täyttöä käyttöliittymässä.</translation> <translation id="1960840544413786116">Hyväksytäänkö paikallisen luottamusankkurin myöntämä varmenne, jos siitä puuttuu subjectAlternativeName-laajennus</translation> +<translation id="1962273523772270623">Salli WebRTC-tapahtumalokien kerääminen Googlen palveluista</translation> <translation id="1964634611280150550">Incognito-tila poistettu käytöstä</translation> <translation id="1964802606569741174">Tällä käytännöllä ei ole mitään vaikutusta Androidin YouTube-sovellukseen. Jos YouTuben suojattu tila on käytössä, Androidin YouTube-sovelluksen asentamisen ei pitäisi olla sallittua.</translation> <translation id="1969212217917526199">Ohittaa käytännöt etäkäytön isännän vianetsintäversioissa. @@ -650,7 +652,6 @@ Kaikki luettelon kohteet ovat tunnuksia, joiden perusteella erotetaan laitteeseen lisätyt tilit toisistaan.</translation> <translation id="2769952903507981510">Määritä vaadittu verkkotunnuksen nimi etäisännille</translation> <translation id="2787173078141616821">Raportoi tietoja Androidin tilasta</translation> -<translation id="2793923553868251161">Turvallisena kontekstina kohdeltavat alkuperät</translation> <translation id="2799297758492717491">Salli mediasisällön automaattinen toisto sallittujen luetteloon kuuluvissa URL-osoitemalleissa</translation> <translation id="2801230735743888564">Anna käyttäjien pelata dinosauruspeliä laitteen ollessa offline-tilassa. @@ -1793,12 +1794,6 @@ <translation id="6155936611791017817">Aseta suuren osoittimen oletustila kirjautumisnäytössä</translation> <translation id="6157537876488211233">Välityspalvelimen ohitussääntöjen pilkuilla erotettu luettelo</translation> <translation id="6158324314836466367">Enterprise-verkkomyymälän nimi (ei enää käytössä)</translation> -<translation id="6164955668342404660">Poistettu käytöstä M69:ssä. Käytä OverrideSecurityRestrictionsOnInsecureOrigin-käytäntöä sen sijaan. - - Käytäntö määrittelee ne alkuperät (URL-osoitteet), joita kohdellaan turvallisena kontekstina. Tällöin organisaatiot voivat määrittää valmistelupalvelimen sisäistä verkkokehitystä varten ja kehittäjät voivat testata turvallista kontekstia edellyttäviä ominaisuuksia ilman TLS:n käyttöä valmistelupalvelimella. - Kun URL-osoitteita määritetään tällä käytännöllä, tämä vastaa --unsafely-treat-insecure-origin-as-secure‑merkinnän antamista pilkuilla erotetuille osoitteille komentorivillä. Jos tämä käytäntö on määritetty, se ohittaa komentorivimerkinnän. - Lisätietoja turvallisista konteksteista on osoitteessa https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6181608880636987460">Voit määrittää URL-osoitemalleja, joiden määrittämät sivustot eivät saa suorittaa <ph name="FLASH_PLUGIN_NAME" />-laajennusta. Jos tätä käytäntöä ei ole määritetty, kaikkiin sivustoihin sovelletaan DefaultPluginsSetting-käytäntöä (jos se on määritetty) tai käyttäjän omien asetusten mukaista yleistä oletusarvoa.</translation> @@ -1917,6 +1912,11 @@ Jos tätä käytäntöä ei määritetä tai luettelo on tyhjä, kaikkia tuotteen <ph name="PRODUCT_NAME" /> järjestelmiä voidaan käyttää.</translation> <translation id="6652197835259177259">Paikallisesti hallinnoitujen käyttäjien asetukset</translation> <translation id="6658245400435704251">Määrittää sekunteina ajan, jonka laite voi viivyttää päivityksen lataamista siitä hetkestä, kun päivitys on lähetetty palvelimelle. Osa odotusajasta voidaan määrittää aikana ja loput päivitystarkistusten määränä. Hajonnalle on kuitenkin yläraja, joten laite ei koskaan jää odottamaan päivityksen lataamista loputtomasti.</translation> +<translation id="6665599130599311250">Jos tämän käytännön arvo on epätosi tai sitä ei ole määritetty, hallinnoidut vierailijakäyttökerrat toimivat kuten tavalliset julkiset käyttökerrat, joista kerrotaan artikkelissa https://support.google.com/chrome/a/answer/3017014. + + Jos tämän käytännön arvo on tosi, hallinnoituja vierailijakäyttökertoja käsitellään hallinnoitujen käyttökertojen sääntöjen mukaisesti, jolloin monet julkisia käyttökertoja koskevat rajoitukset poistetaan. + + Jos tämä käytäntö on määritetty, käyttäjä ei voi muuttaa tai ohittaa sitä.</translation> <translation id="6665670272107384733">Määritä, kuinka usein käyttäjän on kirjoitettava salasana, jotta hän voi käyttää lukituksen pika-avaamista</translation> <translation id="6681229465468164801">Antaa sinun määrittää luettelon URL-osoitemalleja, joiden määrittämät sivustot eivät saa pyytää käyttäjältä USB-laitteen käyttöoikeutta. @@ -1966,11 +1966,6 @@ <translation id="6786967369487349613">Määritä roaming-profiilihakemisto</translation> <translation id="6810445994095397827">Estä JavaScript näissä sivustoissa</translation> <translation id="681446116407619279">Tuetut todennusjärjestelmät</translation> -<translation id="6832455357698286434"> - Käytäntö määrittelee ne alkuperät (URL-osoitteet) tai isäntänimimallit (esim. "*.example.com"), joita kohdellaan turvallisina konteksteina. Tällöin organisaatiot voivat määrittää valmistelupalvelimen sisäistä verkkokehitystä varten ja kehittäjät voivat testata turvallista kontekstia edellyttäviä ominaisuuksia ilman TLS:n käyttöä valmistelupalvelimella. - Kun URL-osoitteita määritetään tällä käytännöllä, tämä vastaa --unsafely-treat-insecure-origin-as-secure‑merkinnän antamista pilkuilla erotetuille osoitteille komentorivillä. Jos tämä käytäntö on määritetty, se ohittaa komentorivimerkinnän. - Lisätietoja turvallisista konteksteista on osoitteessa https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6835883744948188639">Näytä käyttäjälle toistuva kehote suositellusta uudelleenkäynnistyksestä</translation> <translation id="6838056959556423778">Ohittaa tuotteen <ph name="PRODUCT_NAME" /> oletustulostimen valinnan säännöt. @@ -2080,6 +2075,17 @@ <translation id="6943577887654905793">Mac/Linux-asetuksen nimi:</translation> <translation id="69525503251220566">Parametri, joka tarjoaa kuvan perusteella haku -ominaisuuden oletushakupalvelulle</translation> <translation id="6956272732789158625">Älä salli sivustojen käyttää avainten luomistoimintoa.</translation> +<translation id="6982028490425791294"> + Jos tämän käytännön arvo on tosi, <ph name="PRODUCT_NAME" /> saa kerätä WebRTC-tapahtumalokeja Googlen palveluista (esim. Google Meet) ja lähettää niitä Googlelle. + + Jos tämän käytännön arvo on epätosi tai sitä ei ole määritetty, <ph name="PRODUCT_NAME" /> ei saa kerätä tai lähettää kyseisiä lokeja. + + Lokit sisältävät tietoa esimerkiksi lähetettyjen ja vastaanotettujen RTP-pakettien koko- ja ajankohtatietoja, palautetta verkon ruuhkautumisesta ja ääni- ja videokehysten käyttöaikaan ja laatuun liittyviä sisällönkuvaustietoja. Nämä tiedot auttavat korjaamaan Chromen ääni- ja videopuheluihin liittyviä ongelmia, kuten kaistanleveyden arviointivirheitä. Lokeihin ei tallenneta puhelujen ääni- tai videosisältöä. + + Tämän datan keräyksen voi käynnistää vain Googlen verkkopalvelu, kuten Google Hangouts tai Google Meet. + + Nämä lokit voidaan yhdistää käyttökertatunnuksen avulla muihin lokeihin, jotka kyseessä oleva Googlen palvelu on kerännyt. Tämän tarkoituksena on helpottaa virheenkorjausta. + </translation> <translation id="6994082778848658360">Määrittää laitteen Secure Element ‑komponentin tarjoaman monitasoisen todennuksen käytön, jos se on yhteensopiva tämän ominaisuuden kanssa. Käyttäjän läsnäolo havaitaan laitteen virtapainikkeen avulla. Jos valittuna on Ei käytössä, toista todennustasoa ei käytetä. @@ -2310,7 +2316,6 @@ <translation id="7617319494457709698">Tämä käytäntö määrittää laajennukset, joilla on oikeus käyttää <ph name="ENTERPRISE_PLATFORM_KEYS_API" />n funktiota <ph name="CHALLENGE_USER_KEY_FUNCTION" /> etätodennukseen. Vain tässä luettelossa olevat laajennukset voivat käyttää sovellusliittymää. Jos laajennus ei ole luettelossa tai luetteloa ei ole määritetty, kutsujen lähettäminen sovellusliittymälle epäonnistuu ja palauttaa virhekoodin.</translation> -<translation id="7620300057302654932">Turvallisena kontekstina kohdeltavat alkuperät tai isäntänimimallit</translation> <translation id="7625444193696794922">Määrittää julkaisuversion, jota tämän laitteen tulee käyttää.</translation> <translation id="7632724434767231364">GSSAPI-kirjaston nimi</translation> <translation id="7635471475589566552">Määrittää tuotteen <ph name="PRODUCT_NAME" /> sovelluksen kielen ja estää käyttäjiä muuttamasta sitä. Jos otat tämän asetuksen käyttöön, <ph name="PRODUCT_NAME" /> käyttää määritettyä kieltä. Jos tätä kieltä ei tueta, käytetään kieltä en-US. Jos asetus poistetaan käytöstä tai valintaa ei tehdä, <ph name="PRODUCT_NAME" /> käyttää joko käyttäjän määrittämää kieltä (jos valittu), järjestelmän kieltä tai kieltä en-US, jos näitä kieliä ei tueta.</translation>
diff --git a/components/policy/resources/policy_templates_fil.xtb b/components/policy/resources/policy_templates_fil.xtb index baecfaf..389b1b4 100644 --- a/components/policy/resources/policy_templates_fil.xtb +++ b/components/policy/resources/policy_templates_fil.xtb
@@ -273,6 +273,7 @@ Kung itatakda sa false, madi-disable ang pag-uulat ng mga sukatan at diagnostic na data. Kung hindi iko-configure, idi-disable ang pag-uulat ng mga sukatan at diagnostic na data sa mga hindi pinamamahalaang device at ie-enable ito sa mga pinamamahalaang device.</translation> +<translation id="1920046221095339924">Payagan ang pinapamahalaang session sa device</translation> <translation id="1929709556673267855">Nagbibigay ng mga configuration para sa mga printer ng enterprise na naka-bind sa mga device. Nabibigyang-daan ka ng patakarang ito na magbigay ng mga configuration ng printer sa mga <ph name="PRODUCT_OS_NAME" /> device. Pareho ang format sa diksyunaryo ng NativePrinters, nang may karagdagang kinakailangang field na "id" o "guid" bawat printer para sa pag-whitelist o pag-blacklist. @@ -306,6 +307,7 @@ Kung naka-enable o walang value ang setting na ito, makokontrol ng user ang AutoFill para sa mga address sa UI.</translation> <translation id="1960840544413786116">Kung papayagan ba ang mga certificate na naisyu ng mga lokal na trust anchor na walang subjectAlternativeName na extension</translation> +<translation id="1962273523772270623">Payagan ang pagkolekta ng mga log ng event sa WebRTC mula sa mga serbisyo ng Google</translation> <translation id="1964634611280150550">Hindi pinagana ang mode na incognito</translation> <translation id="1964802606569741174">Walang epekto ang patakarang ito sa YouTube app sa Android. Kung dapat ipatupad ang Safety Mode sa YouTube, hindi dapat payagan ang pag-install ng YouTube app sa Android.</translation> <translation id="1969212217917526199">Ino-override ang mga patakaran sa Mga build para sa pag-debug ng host ng malayuang access. @@ -671,7 +673,6 @@ Tumutukoy ng identifier ang bawat entry sa listahan, na panloob na ginagamit upang hiwalay na tukuyin ang iba't ibang mga account na lokal sa device.</translation> <translation id="2769952903507981510">I-configure ang kinakailangang domain name para sa mga host ng malayuang pag-access</translation> <translation id="2787173078141616821">Ulat ng impormasyon tungkol sa status ng Android</translation> -<translation id="2793923553868251161">Ituturing bilang secure na konteksto ang mga pinagmulan.</translation> <translation id="2799297758492717491">Payagan ang pag-autoplay ng media sa isang whitelist ng mga pattern ng URL</translation> <translation id="2801230735743888564">Nagbibigay-daan sa mga user na makapaglaro ng dinosaur easter egg game kapag offline ang device. @@ -1862,12 +1863,6 @@ <translation id="6155936611791017817">Itakda ang default na katayuan ng malaking cursor sa screen ng pag-login</translation> <translation id="6157537876488211233">Listahang pinaghihiwalay ng kuwit ng mga panuntunan sa pag-bypass ng proxy</translation> <translation id="6158324314836466367">Pangalan ng web store na enterprise (hindi na ginagamit)</translation> -<translation id="6164955668342404660">Hindi na magagamit sa M69. Gamitin na lang ang OverrideSecurityRestrictionsOnInsecureOrigin. - - Tumutukoy ang patakaran ng listahan ng mga pinagmulan (mga URL) na ituturing na secure na konteksto. Ang layunin ay payagan ang mga organisasyong mag-set up ng staging server para sa internal na pag-develop sa web, nang sa gayon ay masubukan ng mga developer ng mga ito ang mga feature na nangangailangan ng mga secure na konteksto nang hindi kinakailangang i-deploy ang TLS sa staging server. - Ang pagtatakda ng listahan ng mga URL sa patakarang ito ay may epektong katulad sa pagtatakda sa command-line flag na '--unsafely-treat-insecure-origin-as-secure' sa isang listahan ng mga parehong URL na pinaghihiwa-hiwalay ng kuwit. Kung nakatakda ang patakaran, io-override nito ang command-line flag. - Para sa higit pang impormasyon tungkol sa mga secure na konteksto, tingnan ang https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Nagbibigay-daan sa iyo na magtakda ng isang listahan ng mga pattern ng url na tumutukoy sa mga site na hindi pinapahintulutang magpatakbo sa plugin na <ph name="FLASH_PLUGIN_NAME" />. Kung hahayaang hindi nakatakda ang patakarang ito, ang pangkalahatang default na value ang gagamitin para sa lahat ng site na magmumula sa patakarang 'DefaultPluginsSetting' kung nakatakda ito, o kung hindi, sa personal na configuration ng user.</translation> @@ -1994,6 +1989,11 @@ Kung iiwanang hindi nakatakda ang patakarang ito o kung walang laman ang listahan, maa-access ang lahat ng scheme sa <ph name="PRODUCT_NAME" />.</translation> <translation id="6652197835259177259">Mga setting ng mga lokal na pinapamahalaang user</translation> <translation id="6658245400435704251">Tinutukoy ang bilang ng mga segundo kung kailan maaaring random na antalahin ng device ang pag-download ng isang update mula sa panahon kung kailan unang na-push out ang update sa server. Maaaring hintayin ng device ang isang bahagi ng panahong ito sa pamamagitan ng oras sa orasan at ng mga natitirang bahagi sa pamamagitan ng dami ng mga pagtingin ng update. Sa anumang sitwasyon, ang scatter ay nililimitahan sa itaas sa iisang parehong tagal ng panahon upang hindi maantala nang matagal ang isang device sa paghihintay na mag-download ng isang update.</translation> +<translation id="6665599130599311250">Kung nakatakda ang patakarang ito sa false o hinayaang hindi nakatakda, gagana ang pinapamahalaang session ng bisita gaya ng nakasaad sa https://support.google.com/chrome/a/answer/3017014 - ang karaniwang "Pampublikong Session." + + Kung nakatakda ang patakarang ito sa true, gagana ang pinapamahalaang session ng bisita ayon sa "Pinapamahalaang Session" kung saan pansamantalang inaalis ang maraming paghihigpit na ipinapatupad para sa karaniwang "Mga Pampublikong Session." + + Kung nakatakda ang patakarang ito, hindi ito mababago o mao-override ng user.</translation> <translation id="6665670272107384733">Itakda kung gaano kadalas kailangang ilagay ng user ang password para magamit ang mabilisang pag-unlock</translation> <translation id="6681229465468164801">Nagbibigay-daan sa iyo na magtakda ng listahan ng mga pattern ng url na tumutukoy sa mga site na pinipigilang magtanong sa user na bigyan siya ng access sa isang USB device. @@ -2043,11 +2043,6 @@ <translation id="6786967369487349613">Itakda ang direktoryo ng roaming na profile</translation> <translation id="6810445994095397827">I-block ang JavaScript sa mga site na ito</translation> <translation id="681446116407619279">Mga suportadong scheme ng pagpapatotoo</translation> -<translation id="6832455357698286434"> - Tumutukoy ang patakaran ng listahan ng mga pinagmulan (mga URL) o mga pattern ng hostname na ituturing na mga secure na konteksto. Ang layunin ay payagan ang mga organisasyong mag-set up ng staging server para sa internal na pag-develop sa web, nang sa gayon ay masubukan ng mga developer ng mga ito ang mga feature na nangangailangan ng mga secure na konteksto nang hindi kinakailangang i-deploy ang TLS sa staging server. - Ang pagtatakda ng listahan ng mga URL sa patakarang ito ay may epektong katulad sa pagtatakda sa command-line flag na '--unsafely-treat-insecure-origin-as-secure' sa isang listahan ng mga parehong URL na pinaghihiwa-hiwalay ng kuwit. Kung nakatakda ang patakaran, io-override nito ang command-line flag. - Para sa higit pang impormasyon tungkol sa mga secure na konteksto, tingnan ang https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Magpakita sa user ng umuulit na prompt na nagsasaad na inirerekomenda ang muling paglulunsad</translation> <translation id="6838056959556423778">Ino-override ang mga default na panuntunan sa pagpili ng printer ng <ph name="PRODUCT_NAME" />. @@ -2160,6 +2155,17 @@ <translation id="6943577887654905793">Kagustuhang pangalan ng Mac/Linux:</translation> <translation id="69525503251220566">Parameter na nagbibigay ng tampok na maghanap sa pamamagitan ng larawan para sa default na provider ng paghahanap</translation> <translation id="6956272732789158625">Huwag payagan ang anumang site na gumamit ng pagbuo ng key</translation> +<translation id="6982028490425791294"> + Kung nakatakda ang patakaran sa true, pinapayagan ang <ph name="PRODUCT_NAME" /> na kolektahin ang mga log ng event sa WebRTC mula sa mga serbisyo ng Google (hal. Google Meet), at i-upload ang mga log na iyon sa Google. + + Kung nakatakda ang patakaran sa false, o hindi ito nakatakda, hindi maaaring kolektahin o i-upload ng <ph name="PRODUCT_NAME" /> ang mga nasabing log. + + Makikita sa mga log na ito ang impormasyon gaya ng oras at laki ng mga naipadala at natanggap na RTP packet, feedback tungkol sa pagdami ng gumagamit sa network, at metadata tungkol sa oras at kalidad ng mga audio at video frame. Makakatulong ang impormasyong ito kapag nagde-debug ng mga isyu sa mga audio o video call sa Chrome, gaya ng mga isyu sa pagtantya ng bandwidth, atbp. Ang mga log ay hindi naglalaman ng audio o video content mula sa tawag. + + Mati-trigger lang ang ganitong pagkolekta ng data sa pamamagitan ng mga serbisyo sa web ng Google, gaya ng Google Hangouts o Google Meet. + + Maiuugnay ang mga log na ito, sa pamamagitan ng session ID, sa iba pang log na nakolekta mismo ng serbisyo ng Google; layunin nitong mas padaliin ang pag-debug. + </translation> <translation id="6994082778848658360">Tinutukoy kung paano magagamit ang kasamang hardware ng secure na elemento upang magbigay ng pangalawang factor ng pag-authenticate kung tugma ito sa feature na ito. Ginagamit ang power button ng machine upang tukuyin ang aktwal na presensya ng user. Kung pinili ang 'Naka-disable,' walang pangalawang factor na ibibigay. @@ -2406,7 +2412,6 @@ <translation id="7617319494457709698">Tinutukoy ng patakarang ito ang mga pinapahintulutang extension upang magamit ang <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> function <ph name="CHALLENGE_USER_KEY_FUNCTION" /> para sa malayuang pagpapatunay. Dapat magdagdag ng mga extension sa listahang ito upang magamit ang API. Kung wala sa listahan ang isang extension, o hindi nakatakda ang listahan, papalya ang call sa API na may code ng error.</translation> -<translation id="7620300057302654932">Ituturing na secure na konteksto ang mga pinagmulan o pattern ng hostname.</translation> <translation id="7625444193696794922">Tinutukoy ang channel ng paglabas kung saan dapat naka-lock ang device.</translation> <translation id="7632724434767231364">Pangalan ng GSSAPI library</translation> <translation id="7635471475589566552">Kino-configure ang lokal ng application sa <ph name="PRODUCT_NAME" /> at pinipigilan ang mga user na baguhin ang lokal.
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index 88e3ebf..690a55e 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb
@@ -685,7 +685,6 @@ Chaque entrée de la liste indique un identifiant, qui est utilisé de façon interne pour différencier les comptes locaux de l'appareil.</translation> <translation id="2769952903507981510">Configurer le nom de domaine requis pour les hôtes d'accès à distance</translation> <translation id="2787173078141616821">Transmettre des informations sur l'état d'Android</translation> -<translation id="2793923553868251161">Origines à considérer comme contexte sécurisé.</translation> <translation id="2799297758492717491">Autoriser la lecture automatique des contenus multimédias pour les formats d'URL sur liste blanche</translation> <translation id="2801230735743888564">Autoriser les utilisateurs à jouer au jeu Easter Egg du dinosaure lorsque l'appareil est déconnecté. @@ -1888,12 +1887,6 @@ <translation id="6155936611791017817">Définir l'état par défaut du grand curseur sur l'écran de connexion</translation> <translation id="6157537876488211233">Liste de règles de contournement de proxy séparées par des virgules</translation> <translation id="6158324314836466367">Nom de boutique en ligne d'entreprise (abandonné)</translation> -<translation id="6164955668342404660">Règle abandonnée pour M69. Utilisez plutôt la règle OverrideSecurityRestrictionsOnInsecureOrigin. - - Cette règle répertorie les origines (URL) à considérer comme contexte sécurisé. L'objectif est de permettre aux organisations de configurer un serveur de test pour les développements Web internes. Cela permet aux développeurs de tester les fonctionnalités nécessitant des contextes sécurisés sans avoir à déployer TLS sur le serveur de test. - Définir une liste d'URL dans cette règle a le même effet qu'utiliser l'indicateur de ligne de commande "--unsafely-treat-insecure-origin-as-secure" avec une liste des URL en question séparées par une virgule. Si la règle est définie, elle remplace l'indicateur de ligne de commande. - Pour en savoir plus sur les contextes sécurisés, consultez https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Cette règle permet de définir une liste de formats d'URL spécifiant les sites qui ne sont pas autorisés à exécuter le plug-in "<ph name="FLASH_PLUGIN_NAME" />". Si cette règle n'est pas configurée, la valeur par défaut globale sera utilisée pour tous les sites à partir de la règle "DefaultPluginsSetting", si elle est définie, ou à défaut, à partir de la configuration personnelle de l'utilisateur.</translation> @@ -2074,11 +2067,6 @@ <translation id="6786967369487349613">Définir le répertoire des profils itinérants</translation> <translation id="6810445994095397827">Bloquer JavaScript sur ces sites</translation> <translation id="681446116407619279">Modèles d'authentification compatibles</translation> -<translation id="6832455357698286434"> - Cette règle répertorie les origines (URL) ou les modèles de nom d'hôte (par exemple, "*.example.com") à considérer comme contextes sécurisés. L'objectif est de permettre aux organisations de configurer un serveur de test pour les développements Web internes. Cela permet aux développeurs de tester les fonctionnalités nécessitant des contextes sécurisés sans avoir à déployer TLS sur le serveur de test. - Définir une liste d'URL dans cette règle a le même effet qu'utiliser l'indicateur de ligne de commande "--unsafely-treat-insecure-origin-as-secure" avec une liste des URL en question séparées par une virgule. Si la règle est définie, elle remplace l'indicateur de ligne de commande. - Pour en savoir plus sur les contextes sécurisés, consultez https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Afficher une invite récurrente indiquant qu'un redémarrage est recommandé</translation> <translation id="6838056959556423778">Remplace les instructions de sélection de l'imprimante par défaut pour <ph name="PRODUCT_NAME" />. @@ -2449,7 +2437,6 @@ <translation id="7617319494457709698">Cette règle définit les extensions autorisées à utiliser la fonction <ph name="CHALLENGE_USER_KEY_FUNCTION" /> de l'<ph name="ENTERPRISE_PLATFORM_KEYS_API" /> pour l'attestation à distance. Pour pouvoir utiliser cette API, les extensions doivent être ajoutées à cette liste. Si une extension ne figure pas dans la liste, ou si la liste n'est pas définie, l'appel vers l'API échoue, et un code d'erreur est renvoyé.</translation> -<translation id="7620300057302654932">Origines ou modèles de nom d'hôte à considérer comme contexte sécurisé.</translation> <translation id="7625444193696794922">Indique le canal de distribution sur lequel cet appareil devrait être verrouillé.</translation> <translation id="7632724434767231364">Nom de la bibliothèque GSSAPI</translation> <translation id="7635471475589566552">Configure les paramètres régionaux de l'application dans <ph name="PRODUCT_NAME" /> et empêche les utilisateurs de modifier ces paramètres.
diff --git a/components/policy/resources/policy_templates_gu.xtb b/components/policy/resources/policy_templates_gu.xtb index 8c6b969f..4661656a 100644 --- a/components/policy/resources/policy_templates_gu.xtb +++ b/components/policy/resources/policy_templates_gu.xtb
@@ -318,6 +318,7 @@ <translation id="1914840757300882918">જો આ નીતિ સેટ કરવામાં આવી હોય, તો હોસ્ટ RemoteAccessHostTokenValidationUrl પર પ્રમાણિત કરવા માટે આપેલ ઇસ્યુઅર CN ધરાવતાં ક્લાઇન્ટ પ્રમાણપત્રનો ઉપયોગ કરશે. કોઈપણ ઉપલબ્ધ ક્લાઇન્ટ પ્રમાણપત્રનો ઉપયોગ કરવા માટે તેને "*" પર સેટ કરો. આ સુવિધા હાલમાં સર્વર તરફથી અક્ષમ કરવામાં આવેલી છે.</translation> +<translation id="1920046221095339924">ઉપકરણ પર મેનેજ કરાયેલ સત્રને મંજૂરી આપો</translation> <translation id="1929709556673267855">ઉપકરણો સાથે જોડેલ એન્ટરપ્રાઇઝ પ્રિન્ટર માટે ગોઠવણો પૂરી પાડે છે. આ નીતિ તમને <ph name="PRODUCT_OS_NAME" />ના ઉપકરણોને પ્રિન્ટરની ગોઠવણો પૂરી પાડવાની મંજૂરી આપે છે. આ ફૉર્મેટ NativePrinters ડિક્શનરી જેવું છે, જેમાં પ્રિન્ટરને વ્હાઇટલિસ્ટ કે બ્લૅકલિસ્ટ કરવા માટે "id" અથવા "guid" નામના વધારાના ફીલ્ડની જરૂર પડે છે. @@ -351,6 +352,7 @@ જો આ સેટિંગ ચાલુ કરેલ હશે અથવા તેમાં કોઈ મૂલ્ય નહીં હોય, તો વપરાશકર્તા UIમાંના સરનામા માટે આપમેળે ભરાવાની સુવિધાનું નિયંત્રણ કરી શકશે.</translation> <translation id="1960840544413786116">સ્થાનિક વિશ્વનીય એન્કર દ્વારા જારી કરાયેલ તે પ્રમાણપત્રોને મંજૂરી આપવામાં આવે કે નહીં કે જેમાં subjectAlternativeName એક્સ્ટેન્શન ખૂટે છે</translation> +<translation id="1962273523772270623">Google સેવાઓમાંથી WebRTC ઇવેન્ટ લૉગના સંગ્રહને મંજૂરી આપો</translation> <translation id="1964634611280150550">છુપો મોડ અક્ષમ કર્યો</translation> <translation id="1964802606569741174">આ નીતિનો Android YouTube ઍપ્લિકેશન પર કોઈ પ્રભાવ પડતો નથી. જો YouTube પર સુરક્ષા મોડ લાગુ કરવો જોઈએ, તો Android YouTube ઍપ્લિકેશનનું ઇન્સ્ટૉલેશન નામંજૂર કરી દેવું જોઈએ.</translation> <translation id="1969212217917526199">રિમોટ ઍક્સેસ હોસ્ટના ડીબગ બિલ્ડ્સ પર નીતિઓને ઓવરરાઇડ કરે છે. @@ -752,7 +754,6 @@ દરેક સૂચિ એન્ટ્રી એક ઓળખકર્તાનો ઉલ્લેખ કરે છે, જેનો આંતરિક રીતે ઉપકરણનાં વિભિન્ન સ્થાનિક એકાઉન્ટ્સને અલગ અલગ બતાવવા માટે ઉપયોગમાં લેવાય છે.</translation> <translation id="2769952903507981510">રીમોટ ઍક્સેસ હોસ્ટ્સ માટે આવશ્યક ડોમેન નામ ગોઠવે છે</translation> <translation id="2787173078141616821">Android ની સ્થિતિ વિશે માહિતીની જાણ કરો</translation> -<translation id="2793923553868251161">સુરક્ષિત સંદર્ભ તરીકે ગણવામાં આવતા મૂળ.</translation> <translation id="2799297758492717491">URL પૅટર્નના વ્હાઇટલિસ્ટ પર મીડિયા ઑટોપ્લેને મંજૂરી આપો</translation> <translation id="2801230735743888564">જ્યારે ઉપકરણ ઓફલાઇન હોય ત્યારે વપરાશકર્તાઓને ડાઇનોસોર ઈસ્ટર એગ રમત રમવાની મંજૂરી આપો. @@ -2124,12 +2125,6 @@ <translation id="6155936611791017817">લોગિન સ્ક્રીન પર મોટા કર્સરની ડિફોલ્ટ સ્થિતિ સેટ કરો</translation> <translation id="6157537876488211233">પ્રોક્સી બાયપાસ-નિયમોની અલ્પવિરામ-વિભાજીત સૂચિ </translation> <translation id="6158324314836466367">એન્ટરપ્રાઇઝ વેબ સ્ટોર નામ (ટાળેલ)</translation> -<translation id="6164955668342404660">M69માં ટાળવામાં આવેલ. તેના બદલે OverrideSecurityRestrictionsOnInsecureOriginનો ઉપયોગ કરો. - - આ નીતિ સુરક્ષિત સંદર્ભ તરીકે લેવાના હોય તે ઑરિજિનની સૂચિ (URLs)નો ઉલ્લેખ કરે છે. આનો હેતુ એ છે કે સંસ્થાઓને આંતરિક વેબ ડેવલપમેન્ટ માટે સ્ટેજિંગ સર્વર સેટ અપ કરવાની મંજૂરી આપવી, જેથી તેમના ડેવલપરો સ્ટેજિંગ સર્વર પર TLS ગોઠવ્યા વિના સુરક્ષિત સંદર્ભોની આવશ્યકતાવાળી સુવિધાઓ તપાસી શકે. - આ નીતિમાં URLsની સૂચિ સેટ કરવાથી એ જ URLsની અલ્પવિરામ દ્વારા વિભાજિત સૂચિ પર સેટ કરેલ કમાન્ડ-લાઇન ફ્લૅગ '--unsafely-treat-insecure-origin-as-secure'ને સમાન અસર થાય છે. જો આ નીતિ સેટ કરેલી હશે, તો તે કમાન્ડ-લાઇન ફ્લૅગને ઓવરરાઇડ કરશે. - સુરક્ષિત સંદર્ભો વિશે વધુ માહિતી માટે, https://www.w3.org/TR/secure-contexts/ જુઓ - </translation> <translation id="6178075938488052838">આ નીતિ <ph name="PRODUCT_OS_NAME" /> સત્રને કોણ શરૂ કરી શકે છે તેને આ નીતિ નિયંત્રિત કરે છે. તે વપરાશકર્તાઓને Androidમાં અતિરિક્ત Google એકાઉન્ટમાં સાઇન ઇન કરવાથી અટકાવતું નથી. જો તમે આને અટકાવવા માગતા હો, તો <ph name="ARC_POLICY_POLICY_NAME" />ના ભાગરૂપે Android-વિશિષ્ટ <ph name="ACCOUNT_TYPES_WITH_MANAGEMENT_DISABLED_CLOUDDPC_POLICY_NAME" /> નીતિ ગોઠવો.</translation> <translation id="6181608880636987460">તમને તે URLપેટર્નની સૂચિ સેટ કરવાની મંજૂરી આપે છે કે જેમાં <ph name="FLASH_PLUGIN_NAME" /> પ્લગ-ઇન ચલાવવાની મંજૂરી ન હોય તેવી સાઇટનો ઉલ્લેખ કરેલો હોય. @@ -2258,6 +2253,11 @@ જો આ નીતિ સેટ કર્યા વિના છોડેલી છે અથવા સૂચિ ખાલી છે, તો <ph name="PRODUCT_NAME" /> માં બધી યોજના ઍક્સેસ કરવા યોગ્ય હશે.</translation> <translation id="6652197835259177259">સ્થાનિક રીતે સંચાલિત વપરાશકર્તાઓની સેટિંગ્સ</translation> <translation id="6658245400435704251">સર્વરથી અપડેટ પ્રથમ મોકલવામાં આવ્યું હતું તે સમયથી ઉપકરણ અપડેટનાં તેના ડાઉનલોડમાં રેન્ડમલી વિલંબ કરી શકે છે તેટલી સેકન્ડ્સ નિર્દિષ્ટ કરે છે. ઉપકરણ વૉલ-ક્લોક-સમયનાં શરતોમાં આ સમયના ભાગની અને અપડેટ તપાસોની સંખ્યાની શરતોમાં બાકી ભાગની રાહ જોઈ શકે છે. કોઈ પણ કેસમાં, સ્કેટર સમયના નિરંતર મૂલ્યમાં અપર બાઉન્ડ કરે છે જેથી ઉપકરણ ક્યારે પણ કોઈ અપડેટનાં ડાઉનલોડ થવાની રાહ જોવામાં હમેશ માટે અટકી જતું નથી.</translation> +<translation id="6665599130599311250">જો આ નીતિને false પર સેટ કરી હોય અથવા સેટ કર્યા વિના છોડી હોય, તો મેનેજ કરવામાં આવેલ અતિથિ સત્ર https://support.google.com/chrome/a/answer/3017014 - માનક "સાર્વજનિક સત્ર"માં કરવામાં આવેલ દસ્તાવેજીકરણ પ્રમાણે વર્તણૂક કરશે. + + જો આ નીતિને true પર સેટ કરી હોય, તો મેનેજ કરેલ અતિથિ સત્રને "મેનેજ કરેલ સત્ર" વર્તણૂક પર લઈ જવામાં આવશે, જે નિયમિત "સાર્વજનિક સત્રો" માટે લાદવામાં આવેલ હોય તેવા ઘણા પ્રતિબંધોને દૂર કરે છે. + + જો આ નીતિ સેટ કરી હોય, તો વપરાશકર્તા તેને બદલી કે ઓવરરાઇડ કરી શકતા નથી.</translation> <translation id="6665670272107384733">ઝડપી અનલૉકનો ઉપયોગ કરવા માટે વપરાશકર્તાએ કેટલી વાર પાસવર્ડ દાખલ કરવો આવશ્યક થશે તે સેટ કરો</translation> <translation id="6681229465468164801">તમને તે URL પેટર્નની સૂચિ સેટ કરવાની મંજૂરી આપે છે કે જેમાં વપરાશકર્તાને USB ઉપકરણ પર ઍક્સેસ આપવા માટે પૂછવાથી અટકાવે તેવી સાઇટનો ઉલ્લેખ કરેલો હોય. @@ -2307,11 +2307,6 @@ <translation id="6786967369487349613">રોમિંગ પ્રોફાઇલ નિર્દેશિકા સેટ કરો</translation> <translation id="6810445994095397827">આ સાઇટ્સ પર JavaScript ને અવરોધિત કરો</translation> <translation id="681446116407619279">સપોર્ટેડ પ્રમાણીકરણ યોજનાઓ </translation> -<translation id="6832455357698286434"> - આ નીતિ સુરક્ષિત સંદર્ભ તરીકે લેવાના હોય તે ઑરિજિનની સૂચિ (URLs)નો અથવા હોસ્ટના નામની પૅટર્ન (જેમકે "*.example.com")નો ઉલ્લેખ કરે છે. આનો હેતુ એ છે કે સંસ્થાઓને આંતરિક વેબ ડેવલપમેન્ટ માટે સ્ટેજિંગ સર્વર સેટ અપ કરવાની મંજૂરી આપવી, જેથી તેમના ડેવલપરો સ્ટેજિંગ સર્વર પર TLS ગોઠવ્યા વિના સુરક્ષિત સંદર્ભોની આવશ્યકતાવાળી સુવિધાઓ તપાસી શકે. - આ નીતિમાં URLsની સૂચિ સેટ કરવાથી એ જ URLsની અલ્પવિરામ દ્વારા વિભાજિત સૂચિ પર સેટ કરેલ કમાન્ડ-લાઇન ફ્લૅગ '--unsafely-treat-insecure-origin-as-secure'ને સમાન અસર થાય છે. જો આ નીતિ સેટ કરેલી હશે, તો તે કમાન્ડ-લાઇન ફ્લૅગને ઓવરરાઇડ કરશે. - સુરક્ષિત સંદર્ભો વિશે વધુ માહિતી માટે, https://www.w3.org/TR/secure-contexts/ જુઓ - </translation> <translation id="6835883744948188639">વપરાશકર્તાને રીલૉન્ચ કરવાનો સુઝાવ આપેલ છે તેવું વારંવાર દર્શાવતો સંકેત બતાવો</translation> <translation id="6838056959556423778"><ph name="PRODUCT_NAME" /> ડિફૉલ્ટ પ્રિન્ટર પસંદગી નિયમોને ઓવરરાઇડ કરે છે. @@ -2423,6 +2418,17 @@ <translation id="6943577887654905793">Mac/Linux પસંદગી નામ:</translation> <translation id="69525503251220566">ડિફોલ્ટ શોધ પ્રદાતા માટે છબી દ્વારા શોધ સુવિધા પ્રદાન કરતું પેરામીટર</translation> <translation id="6956272732789158625">કોઈપણ સાઇટને કી જનરેશનનો ઉપયોગ કરવાની મંજૂરી આપશો નહીં</translation> +<translation id="6982028490425791294"> + જો નીતિને true પર સેટ કરી હોય, તો <ph name="PRODUCT_NAME" /> Google સેવાઓ (દા.ત. Google Meet)માંથી WebRTC ઇવેન્ટ લૉગને એકત્ર કરવાની મંજૂરી આપે છે. + + જો નીતિને false પર સેટ કરી હોય અથવા સેટ કર્યા વિના છોડી હોય, તો <ph name="PRODUCT_NAME" /> કદાચ આવા લૉગને એકત્ર કે અપલોડ કરી શકશે નહીં. + + આ લૉગમાં મોકલાવેલ અને પ્રાપ્ત કરેલ RTP પૅકેટના સમય અને કદ, નેટવર્ક પરના ધસારાનો પ્રતિસાદ અને સમય વિશેના મેટાડેટા તેમજ ઑડિઓ અને વીડિઓ ફ્રેમની ક્વૉલિટી વગેરે જેવી માહિતી હોય છે. જ્યારે Chromeમાં ઑડિઓ અને વીડિઓ કૉલમાં ડિબગિંગની સમસ્યા આવે ત્યારે આ માહિતી સહાયક બને છે, જેમ કે બૅન્ડવિડ્થના અનુમાનની સમસ્યાઓ વગેરે. આ લૉગમાં કૉલના ઑડિઓ અથવા વીડિઓ કન્ટેન્ટ શામેલ હોતા નથી. + + આ ડેટા સંગ્રહ માત્ર Googleની વેબ સેવા દ્વારા ટ્રિગર કરવામાં આવેલ હોઈ શકે છે, જેમ કે Google Hangouts અથવા Google Meet. + + આ લૉગ સત્ર ID, પોતાની જ Google સેવા દ્વારા સંગ્રહ કરવામાં અાવેલા અન્ય લૉગ સાથે સંકળાયેલ હોઈ શકે છે; આનો હેતુ ડિબગિંગને સરળ બનાવવાનો છે. + </translation> <translation id="6994082778848658360">જો તે આ સુવિધા સાથે સુસંગત હોય, તો દ્વિતીય-ફેક્ટર પ્રમાણીકરણ પૂરું પાડવા માટે ઑન-બોર્ડ સુરક્ષિત તત્વ હાર્ડવેરનો કઈ રીતે ઉપયોગ કરી શકાય તે ઉલ્લેખિત કરે છે. વપરાશકર્તા ભૌતિક હાજરી શોધવા માટે મશીન પાવર બટનનો ઉપયોગ થાય છે. જો 'અક્ષમ કરેલ' પસંદ કરેલ હોય, તો કોઈ દ્વિતીય ફેક્ટર પૂરું પાડવામાં આવતું નથી. @@ -2695,7 +2701,6 @@ <translation id="7617319494457709698">આ નીતિ રિમોટ પ્રમાણન માટે <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> ફંક્શન <ph name="CHALLENGE_USER_KEY_FUNCTION" /> ને ઉપયોગમાં લેવા માટે મંજૂર એક્સ્ટેન્શન્સનો ઉલ્લેખ કરે છે. API નો ઉપયોગ કરવા માટે એક્સ્ટેન્શન્સને આ સૂચિમાં ઉમેરવા આવશ્યક છે. જો કોઈ એક્સ્ટેન્શન સૂચિમાં ન હોય અથવા તો સૂચિ સેટ કરેલ ન હોય, તો API પરનો કૉલ એક ભૂલ કોડ સાથે નિષ્ફળ થશે.</translation> -<translation id="7620300057302654932">ઑરિજિન અથવા હોસ્ટના નામની પૅટર્ન સુરક્ષિત સંદર્ભ તરીકે લેવામાં આવે છે.</translation> <translation id="7625444193696794922">તે રીલિઝ ચૅનલનો ઉલ્લેખ કરે છે કે જેના પર આ ઉપકરણ લૉક હોવું જોઈએ.</translation> <translation id="7632724434767231364">GSSAPI લાઇબ્રેરી નામ</translation> <translation id="7635471475589566552"><ph name="PRODUCT_NAME" /> માં ઍપ્લિકેશન લોકૅલને ગોઠવે છે અને વપરાશકર્તાઓને લોકૅલ બદલવાથી રોકે છે. જો તમે આ સેટિંગ્સને સક્ષમ કરો છો, તો <ph name="PRODUCT_NAME" /> ઉલ્લેખિત લોકૅલનો ઉપયોગ કરે છે. જો તમે ગોઠવેલા લોકૅલ સપોર્ટ નથી કરતા, તો તેને બદલે 'en-US' નો ઉપયોગ કરવામાં આવે છે. જો આ સેટિંગ અક્ષમ કરેલી છે અથવાસેટ કરેલી નથી, તો <ph name="PRODUCT_NAME" /> વપરાશકર્તા-ઉલ્લેખિત પસંદીદા લોકૅલ (જો ગોઠવેલ છે)નો, સિસ્ટમ લોકૅલનો અથવા ફૉલબૅક લોકૅલ 'en-US' નો ઉપયોગ કરે છે.</translation>
diff --git a/components/policy/resources/policy_templates_hi.xtb b/components/policy/resources/policy_templates_hi.xtb index 535b1b2..7f1fcd93 100644 --- a/components/policy/resources/policy_templates_hi.xtb +++ b/components/policy/resources/policy_templates_hi.xtb
@@ -677,7 +677,6 @@ प्रत्येक सूची प्रविष्टि किसी पहचानकर्ता को निर्दिष्ट करती है, जिसका उपयोग आंतरिक रूप से भिन्न डिवाइस-स्थानीय खातों को अलग-अलग बताने के लिए किया जाता है.</translation> <translation id="2769952903507981510">दूरस्थ पहुंच होस्ट के लिए आवश्यक डोमेन नाम को कॉन्फ़िगर करें</translation> <translation id="2787173078141616821">Android की स्थिति के बारे में जानकारी की रिपोर्ट करना</translation> -<translation id="2793923553868251161">मूल को सुरक्षित प्रसंग माना जाएगा.</translation> <translation id="2799297758492717491">यूआरएल पैटर्न की श्वेतसूची पर मौजूद मीडिया को अपने आप चलने देती है</translation> <translation id="2801230735743888564">डिवाइस के ऑफ़लाइन होने पर उपयोगकर्ताओं को डाइनासोर ईस्टर एग गेम खेलने दें. @@ -1882,12 +1881,6 @@ <translation id="6155936611791017817">प्रवेश स्क्रीन पर बड़े कर्सर की डिफ़ॉल्ट स्थिति सेट करें</translation> <translation id="6157537876488211233">प्रॉक्सी को अनदेखा करने के नियमों की विरामचिह्न द्वारा अलग की गई सूची</translation> <translation id="6158324314836466367">Enterprise वेब स्टोर नाम (बहिष्कृत)</translation> -<translation id="6164955668342404660">M69 में हटा दिया गया. उसके बजाय OverrideSecurityRestrictionsOnInsecureOrigin का इस्तेमाल करें. - - यह नीति शुरुआत की ऐसी जगहों (यूआरएल) की सूची तय करती है जिन्हें सुरक्षित संदर्भ माना जाएगा. इसका मकसद यह है कि आंतरिक वेब डेवलपमेंट के लिए संस्थान एक स्टेजिंग सर्वर सेट अप कर सकें ताकि उनके डेवलपर, स्टेजिंग सर्वर पर TLS लागू किए बिना सुरक्षित संदर्भों की ज़रूरत वाली सुविधाओं की जांच कर सकें. - इस नीति में यूआरएल की सूची सेट करने का वही असर होगा जो कमांड-लाइन फ़्लैग '--unsafely-treat-insecure-origin-as-secure' को उन्हीं यूआरएल की किसी 'कॉमा-सेपरेटेड लिस्ट' पर सेट करने पर होता है. अगर नीति सेट की जाती है, तो वह कमांड-लाइन फ़्लैग को बदल देगी. - सुरक्षित संदर्भों पर ज़्यादा जानकारी के लिए https://www.w3.org/TR/secure-contexts/ देखें - </translation> <translation id="6181608880636987460">यह नीति आपको उन 'यूआरएल पैटर्न' की सूची सेट करने देती है जो ऐसी साइटें बताते हैं जिन्हें <ph name="FLASH_PLUGIN_NAME" /> प्लग इन चलाने की अनुमति नहीं है. अगर यह नीति सेट नहीं की जाती है तो, सभी साइटों के लिए 'ग्लोबल डिफ़ॉल्ट मान' का उपयोग किया जाएगा. यह मान, 'DefaultPluginsSetting' नीति सेट होने पर उससे लिया जाएगा वरना उपयोगकर्ता के निजी कॉन्फ़िगरेशन से लिया जाएगा.</translation> @@ -2068,11 +2061,6 @@ <translation id="6786967369487349613">रोमिंग प्रोफ़ाइल निर्देशिका सेट करें</translation> <translation id="6810445994095397827">इन साइटों पर JavaScript अवरुद्ध करें</translation> <translation id="681446116407619279">समर्थित प्रमाणीकरण स्कीम</translation> -<translation id="6832455357698286434"> - यह नीति शुरुआत की ऐसी जगहों (यूआरएल) और होस्टनाम पैटर्न (जैसे "*.example.com") की सूची तय करती है जिन्हें सुरक्षित संदर्भ माना जाएगा. इसका मकसद यह है कि आंतरिक वेब डेवलपमेंट के लिए संस्थान एक स्टेजिंग सर्वर सेट अप कर सकें ताकि उनके डेवलपर, स्टेजिंग सर्वर पर TLS लागू किए बिना सुरक्षित संदर्भों की ज़रूरत वाली सुविधाओं की जांच कर सकें. - इस नीति में यूआरएल की सूची सेट करने का वही असर होगा जो कमांड-लाइन फ़्लैग '--unsafely-treat-insecure-origin-as-secure' को उन्हीं यूआरएल की किसी 'कॉमा-सेपरेटेड लिस्ट' पर सेट करने पर होता है. अगर नीति सेट की जाती है, तो वह कमांड-लाइन फ़्लैग को बदल देगी. - सुरक्षित संदर्भों पर ज़्यादा जानकारी के लिए, https://www.w3.org/TR/secure-contexts/ देखें - </translation> <translation id="6835883744948188639">उपयोगकर्ता को बार-बार यह सूचित करने वाला संकेत दिखाता है कि फिर से लॉन्च करने का सुझाव दिया गया है</translation> <translation id="6838056959556423778"><ph name="PRODUCT_NAME" /> डिफ़ॉल्ट प्रिंटर चुनने के नियमों को ओवरराइड करती है. @@ -2440,7 +2428,6 @@ <translation id="7617319494457709698">यह नीति उन एक्सटेंशन के बारे में बताती है जिन्हें दूर से ही प्रमाणित करने के लिए <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> के फ़ंक्शन <ph name="CHALLENGE_USER_KEY_FUNCTION" /> का उपयोग करने की मंज़ूरी मिली हुई है. API (एपीआई) का उपयोग करने के लिए एक्सटेंशन इस सूची में ज़रूर जोड़े जाने चाहिए. अगर कोई एक्सटेंशन सूची में नहीं होता है या सूची सेट नहीं की जाती है तो, API (एपीआई) को कॉल नहीं किया जा सकेगा और एक गड़बड़ी कोड मिलेगा.</translation> -<translation id="7620300057302654932">मूल या होस्टनाम पैटर्न को सुरक्षित प्रसंग माना जाए.</translation> <translation id="7625444193696794922">उस रिलीज़ चैनल को निर्दिष्ट करती है, जिससे यह डिवाइस लॉक किया जाना चाहिए.</translation> <translation id="7632724434767231364">GSSAPI लाइब्रेरी नाम</translation> <translation id="7635471475589566552"><ph name="PRODUCT_NAME" /> में ऐप्लिकेशन की स्थान-भाषा कॉन्फ़िगर करता है और उपयोगकर्ताओं को इसे बदलने से रोकता है.
diff --git a/components/policy/resources/policy_templates_hr.xtb b/components/policy/resources/policy_templates_hr.xtb index 43601724..4f08255 100644 --- a/components/policy/resources/policy_templates_hr.xtb +++ b/components/policy/resources/policy_templates_hr.xtb
@@ -655,7 +655,6 @@ Svaki unos na popisu navodi identifikator, koji se upotrebljava interno da bi se razlikovali lokalni računi na uređaju.</translation> <translation id="2769952903507981510">Konfiguriraj traženi naziv domene za hostove daljinskog pristupa</translation> <translation id="2787173078141616821">Prijavi informacije o statusu Androida</translation> -<translation id="2793923553868251161">Izvori se tretiraju kao siguran kontekst.</translation> <translation id="2799297758492717491">Dopusti automatsku reprodukciju medija na popisu dopuštenih uzoraka URL-a</translation> <translation id="2801230735743888564">Dopusti korisnicima igranje skrivene igre s dinosaurom kada je uređaj izvan mreže. @@ -1803,12 +1802,6 @@ <translation id="6155936611791017817">Postavljanje zadanog stanja velikog pokazivača na zaslonu za prijavu</translation> <translation id="6157537876488211233">Popis pravila zaobilaženja proxyja odvojenih zarezima</translation> <translation id="6158324314836466367">Naziv web-trgovine tvrtke (obustavljeno)</translation> -<translation id="6164955668342404660">Obustavljeno u verziji M69. Umjesto toga upotrijebite OverrideSecurityRestrictionsOnInsecureOrigin. - - To pravilo određuje popis izvora (URL-ova) koji se tretiraju kao siguran kontekst. Namjera je dopustiti organizacijama postavljanje poslužitelja u pokusne svrhe za interni razvoj na webu kako bi njihovi razvojni programeri mogli testirati značajke koje zahtijevaju siguran kontekst bez primjene TLS-a na poslužitelju za pokusne svrhe. - Postavljanje popisa URL-ova u tom pravilu ima isti učinak kao i postavljanje oznake naredbenog retka "--unsafely-treat-insecure-origin-as-secure" na popis istih URL-ova odijeljen zarezima. Ako se to pravilo postavi, nadjačat će oznaku naredbenog retka. - Više informacija o sigurnim kontekstima potražite na stranici https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Omogućuje vam postavljanje popisa uzoraka URL-ova koji navode web-lokacije kojima nije dopušteno pokretanje dodatka <ph name="FLASH_PLUGIN_NAME" />. Ako se to pravilo ne postavi, za sve web-lokacije upotrebljavat će se globalna zadana vrijednost iz pravila "DefaultPluginsSetting", ako je to pravilo postavljeno, ili vrijednost iz korisnikove osobne konfiguracije.</translation> @@ -1981,11 +1974,6 @@ <translation id="6786967369487349613">Postavljanje direktorija roaming profila</translation> <translation id="6810445994095397827">Blok JavaScript na ovim web-lokacijama</translation> <translation id="681446116407619279">Podržane sheme autentifikacije</translation> -<translation id="6832455357698286434"> - To pravilo određuje popis izvora (URL-ova) ili uzoraka naziva hosta (kao što je "*.example.com") koji se tretiraju kao siguran kontekst. Namjera je dopustiti organizacijama postavljanje poslužitelja u pokusne svrhe za interni razvoj na webu kako bi njihovi razvojni programeri mogli testirati značajke koje zahtijevaju siguran kontekst bez primjene TLS-a na poslužitelju za pokusne svrhe. - Postavljanje popisa URL-ova u tom pravilu ima isti učinak kao i postavljanje oznake naredbenog retka "--unsafely-treat-insecure-origin-as-secure" na popis istih URL-ova odijeljen zarezima. Ako se to pravilo postavi, nadjačat će oznaku naredbenog retka. - Više informacija o sigurnim kontekstima potražite na stranici https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Prikaži korisniku ponavljajuću obavijest o preporučenom ponovnom pokretanju</translation> <translation id="6838056959556423778">Nadjačava zadana pravila za odabir pisača u proizvodu <ph name="PRODUCT_NAME" />. @@ -2329,7 +2317,6 @@ <translation id="7617319494457709698">To pravilo određuje dopuštena proširenja za upotrebu funkcije <ph name="CHALLENGE_USER_KEY_FUNCTION" /> API-ja <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> za daljinsko atestiranje. Proširenja se moraju dodati na taj popis da bi upotrebljavala taj API. Ako proširenje nije na popisu ili ako popis nije postavljen, poziv API-ju vratit će kôd pogreške.</translation> -<translation id="7620300057302654932">Izvori ili uzorci naziva hosta koji se tretiraju kao siguran kontekst.</translation> <translation id="7625444193696794922">Određuje kanal za izdavanje na koji bi ovaj uređaj trebao biti priključen.</translation> <translation id="7632724434767231364">Naziv GSSAPI biblioteke</translation> <translation id="7635471475589566552">Konfigurira oznaku zemlje/jezika aplikacije u proizvodu <ph name="PRODUCT_NAME" /> i sprječava korisnike da promijene oznaku zemlje/jezika. Ako omogućite ovu postavku, <ph name="PRODUCT_NAME" /> upotrebljavat će navedenu oznaku zemlje/jezika. Ako konfigurirana oznaka zemlje/jezika nije podržana, upotrebljavat će se "en-US". Ako je ova postavka onemogućena ili nije postavljena, <ph name="PRODUCT_NAME" /> upotrebljavat će oznaku zemlje/jezika koju odredi korisnik (ako je konfigurirana), oznaku zemlje/jezika sustava ili standardnu oznaku zemlje/jezika "en-US".</translation>
diff --git a/components/policy/resources/policy_templates_hu.xtb b/components/policy/resources/policy_templates_hu.xtb index 27a50b3c..29ed56b 100644 --- a/components/policy/resources/policy_templates_hu.xtb +++ b/components/policy/resources/policy_templates_hu.xtb
@@ -267,6 +267,7 @@ Ha az értéke hamis, akkor a rendszer letiltja a használati statisztikák és diagnosztikai adatok jelentését. Ha nincs beállítva, akkor a rendszer letiltja a használati és diagnosztikai adatok jelentését a nem felügyelt eszközökön, míg engedélyezi a felügyelt eszközökön.</translation> +<translation id="1920046221095339924">Kezelt munkamenet engedélyezése az eszközön</translation> <translation id="1929709556673267855">Eszközökhöz kötött vállalati nyomtatókhoz biztosít beállításokat. Ez a házirend lehetővé teszi, hogy nyomtatóbeállításokat adjon meg <ph name="PRODUCT_OS_NAME" /> rendszerű eszközökhöz. A formátum megegyezik a NativePrinters szótáréval, továbbá meg kell adni az „id” vagy „guid” mezőt az egyes nyomtatókhoz az engedélyező-, illetve tiltólistára helyezéshez. @@ -300,6 +301,7 @@ Ha engedélyezve van ez a beállítás, vagy nincs értéke, a felhasználó vezérelheti az Automatikus kitöltés funkció címekkel kapcsolatos használatát a kezelőfelületen.</translation> <translation id="1960840544413786116">A helyi bizalmi horgonyok által nyújtott, de a subjectAlternativeName bővítménnyel nem rendelkező tanúsítványok engedélyezése</translation> +<translation id="1962273523772270623">A WebRTC-eseménynaplók Google-szolgáltatásokból történő begyűjtésének engedélyezése</translation> <translation id="1964634611280150550">Inkognitómód letiltva</translation> <translation id="1964802606569741174">A házirend nincs hatással az androidos YouTube alkalmazásra. Ha a YouTube-on kényszeríteni kell a Biztonságos módot, akkor az androidos YouTube alkalmazás telepítését nem szabad megengedni.</translation> <translation id="1969212217917526199">Felülírja a távoli elérésű gazdagép hibakeresést végző buildjein lévő házirendeket. @@ -651,7 +653,6 @@ A lista minden bejegyzése egy azonosítót ad meg, amely az eszköz különböző helyi fiókjainak belső megkülönböztetésére szolgál.</translation> <translation id="2769952903507981510">Beállítja a távoli hozzáférésű gazdagép szükséges domainnevét</translation> <translation id="2787173078141616821">Az Android állapotával kapcsolatos információk jelentése</translation> -<translation id="2793923553868251161">Biztonságos környezetként kezelendő eredetek.</translation> <translation id="2799297758492717491">A médiatartalmak automatikus lejátszásának engedélyezése az engedélyezőlistán található URL-minták számára</translation> <translation id="2801230735743888564">A felhasználók játszhatnak a rejtett dinoszauruszos játékkal, amikor az eszköz offline állapotban van. @@ -1792,12 +1793,6 @@ <translation id="6155936611791017817">A nagy egérmutató alapértelmezett állapotának beállítása a bejelentkezési képernyőn</translation> <translation id="6157537876488211233">Proxy figyelmen kívül hagyásával kapcsolatos szabályok vesszővel elválasztott listája</translation> <translation id="6158324314836466367">Vállalati internetes áruház neve (megszűnt)</translation> -<translation id="6164955668342404660">Megszűnt az M69 verzióban. Használja helyette az OverrideSecurityRestrictionsOnInsecureOrigin házirendet. - - Ez a házirend megadja a biztonságos környezetként kezelendő eredetek (URL-ek) listáját. Célja, hogy a szervezetek tesztszervert tudjanak beállítani a belső webfejlesztési munkákhoz, így a fejlesztők tesztelhetik a biztonságos környezetet igénylő funkciókat anélkül, hogy TLS-t kellene használniuk a tesztszerveren. - Ha beállítja az URL-ek listáját a házirendben, ugyanazt a hatást éri el, mintha az „--unsafely-treat-insecure-origin-as-secure” parancssori jelzőt használná ugyanazon URL-ek vesszővel elválasztott listájánál. Ha be van állítva a házirend, felülírja a parancssori jelzőt. - További információ a biztonságos környezetekről: https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6181608880636987460">Lehetővé teszi URL-minták olyan listájának megadását, amely meghatározza, hogy mely webhelyek nem futtathatják a(z) <ph name="FLASH_PLUGIN_NAME" /> beépülő modult. Ha nem állítja be ezt a házirendet, akkor a böngésző valamennyi webhelyre vonatkozóan a globális alapértelmezett értéket használja a „DefaultPluginsSetting” házirend (ha be van állítva) vagy a felhasználó személyes konfigurációja alapján.</translation> @@ -1916,6 +1911,11 @@ Ha ez a házirend nincs beállítva, vagy ha a lista üres, akkor minden séma elérhető lesz a(z) <ph name="PRODUCT_NAME" /> termékben.</translation> <translation id="6652197835259177259">Helyi felügyeletű felhasználói beállítások</translation> <translation id="6658245400435704251">Meghatározza a másodpercek számát, amely alatt egy eszköz véletlenszerűen késleltetheti egy frissítés letöltését annak első megjelenésétől a szerveren. Az eszköz ennek az időnek egy részét kivárhatja normál idő szerint, a hátralévő részét pedig a frissítések keresésének száma szerint. A szórás felső határa konstans időmennyiség, így az eszköz soha nem ragad le örökre arra várva, hogy letöltsön egy frissítést.</translation> +<translation id="6665599130599311250">Ha a házirend értéke hamis vagy nincs beállítva, a kezelt vendég-munkafolyamat a https://support.google.com/chrome/a/answer/3017014 oldalon a szabványos „Nyilvános munkamenet” leírásnak megfelelően működik majd. + + Ha a házirend értéke igaz, a kezelt vendég-munkafolyamat a „Kezelt munkamenet” leírása szerint működik, amelynek során az általában használt „Nyilvános munkamenet” esetén előírt korlátozások nagy részét nem kell betartani. + + Ha a házirend be van állítva, akkor a felhasználó nem képes módosítani vagy felülírni.</translation> <translation id="6665670272107384733">Annak szabályozása, hogy a felhasználónak milyen gyakran kell megadnia jelszavát a gyorsfeloldás használatához.</translation> <translation id="6681229465468164801">Lehetővé teszi URL-minták olyan listájának megadását, amely meghatározza, hogy mely webhelyek nem kérdezhetik meg a felhasználótól, hogy engedélyezi-e számukra a hozzáférést egy USB-eszközhöz. @@ -1965,11 +1965,6 @@ <translation id="6786967369487349613">Barangolási profilcímtár beállítása</translation> <translation id="6810445994095397827">JavaScript letiltása ezeken a webhelyeken</translation> <translation id="681446116407619279">Támogatott hitelesítési sémák</translation> -<translation id="6832455357698286434"> - Ez a házirend megadja a biztonságos környezetként kezelendő eredetek (URL-ek) vagy gazdagépnévminták (például „*.example.com”) listáját. Célja, hogy a szervezetek tesztszervert tudjanak beállítani a belső webfejlesztési munkákhoz, így a fejlesztők tesztelhetik a biztonságos környezetet igénylő funkciókat anélkül, hogy TLS-t kellene használniuk a tesztszerveren. - Ha beállítja az URL-ek listáját a házirendben, ugyanazt a hatást éri el, mintha az „--unsafely-treat-insecure-origin-as-secure” parancssori jelzőt használná ugyanazon URL-ek vesszővel elválasztott listájánál. Ha be van állítva a házirend, felülírja a parancssori jelzőt. - További információ a biztonságos környezetekről: https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6835883744948188639">Ismétlődő értesítés megjelenítése a felhasználónak arról, hogy ajánlott az újraindítás</translation> <translation id="6838056959556423778">Felülbírálja a <ph name="PRODUCT_NAME" /> alapértelmezett nyomtatókiválasztási szabályait. @@ -2080,6 +2075,17 @@ <translation id="6943577887654905793">Mac/Linux preferencia neve:</translation> <translation id="69525503251220566">Paraméter az alapértelmezett keresési szolgáltatóval végezhető képalapú keresési funkció biztosításához</translation> <translation id="6956272732789158625">A kulcsgenerálás használatának letiltása minden webhelyen</translation> +<translation id="6982028490425791294"> + Ha a házirend értéke igaz, a(z) <ph name="PRODUCT_NAME" /> engedélyt kap a WebRTC-eseménynaplók begyűjtésére a Google-szolgáltatásokból (pl. a Google Meet felületéről), valamint azok feltöltésére a Google rendszerébe. + + Ha a házirend értéke hamis vagy nincs beállítva, a(z) <ph name="PRODUCT_NAME" /> nem gyűjtheti vagy töltheti fel a naplókat. + + A naplókban olyan különböző információk kerülnek rögzítésre, mint a küldött és fogadott RTP-csomagok ideje vagy mérete, a hálózat túlterheltségéről szóló visszajelzés vagy az audió- és videókeretek idejéről és minőségéről szóló metaadatok. Az említett információk rendkívül hasznosak a Chrome-ban folytatott audió-vagy videóhívásokkal kapcsolatos hibakeresés során, például sávszélesség-becslési problémák stb. esetén. + + Az adatgyűjtést csak a Google internetes szolgáltatásai kezdeményezhetik, mind például a Google Hangouts vagy a Google Meet. + + A naplókat a Google összekapcsolhatja a munkamenet azonosítója alapján a saját maga által gyűjtött naplókkal, ezáltal egyszerűsítve hibakeresés folyamatát. + </translation> <translation id="6994082778848658360">Meghatározza, hogyan használható az integrált biztonságos hardverelem a kétlépcsős azonosítás biztosítására, amennyiben kompatibilis ezzel a funkcióval. A készülék bekapcsológombja használható a felhasználó fizikai jelenlétének észlelésére. A „Letiltva” érték kiválasztása esetén nincs használatban kétlépcsős azonosítás. @@ -2310,7 +2316,6 @@ <translation id="7617319494457709698">Ez a házirend adja meg, hogy mely bővítmények számára engedélyezett az <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" /> funkciójának használata távoli tanúsításhoz. Az API használatához fel kell vennie a bővítményeket erre a listára. Ha valamelyik bővítmény nincs a listán, vagy a lista nincs beállítva, akkor az API hívása hibakóddal leáll.</translation> -<translation id="7620300057302654932">Biztonságos környezetként kezelendő eredetek vagy gazdagépnévminták.</translation> <translation id="7625444193696794922">Azt a kiadási csatornát határozza meg, amelyhez az eszközt hozzá kell kötni.</translation> <translation id="7632724434767231364">GSSAPI könyvtár neve</translation> <translation id="7635471475589566552">Beállítja az alkalmazás nyelv- és országkódját a következőben: <ph name="PRODUCT_NAME" />, és megakadályozza, hogy a felhasználók megváltoztassák a kódot. Ha engedélyezi ezt a beállítást, a(z) <ph name="PRODUCT_NAME" /> a megadott nyelv- és országkódot fogja használni. Ha a megadott nyelv- és országkód nem támogatott, az "en-US" lehetőséget használja helyette. Ha ez a beállítás ki van kapcsolva, vagy nincs beállítva, a(z) <ph name="PRODUCT_NAME" /> vagy a felhasználó által meghatározott nyelv- és országkódot használja (ha konfigurálva van), vagy a tartalék "en-US" lehetőséget.</translation>
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index 4d4f4118..1d2066a0 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -647,7 +647,6 @@ Setiap entri daftar menentukan pengenal, yang digunakan secara internal untuk menunjukkan akun lokal perangkat yang berbeda secara terpisah.</translation> <translation id="2769952903507981510">Mengonfigurasi nama domain yang dibutuhkan untuk hosting akses jarak jauh</translation> <translation id="2787173078141616821">Informasi laporan tentang status Android</translation> -<translation id="2793923553868251161">Asal yang akan diperlakukan sebagai konteks yang aman.</translation> <translation id="2799297758492717491">Izinkan pemutaran otomatis media pada pola URL yang diizinkan</translation> <translation id="2801230735743888564">Mengizinkan pengguna memainkan game dinosaur easter egg saat perangkat offline. @@ -1793,12 +1792,6 @@ <translation id="6155936611791017817">Setel status default kursor besar di layar masuk</translation> <translation id="6157537876488211233">Peraturan mengabaikan proxy yang dipisahkan koma</translation> <translation id="6158324314836466367">Nama toko web perusahaan (tidak digunakan)</translation> -<translation id="6164955668342404660">Tidak digunakan lagi di M69. Menggunakan OverrideSecurityRestrictionsOnInsecureOrigin. - - Kebijakan tersebut menentukan daftar asal (URL) yang akan diperlakukan sebagai konteks aman. Tujuannya untuk mengizinkan organisasi menyiapkan server persiapan untuk pengembangan web internal, agar developer dapat menguji fitur yang memerlukan konteks aman tanpa harus menerapkan TLS di server persiapan. - Menyetel daftar URL di kebijakan ini memiliki efek yang sama seperti menyetel tanda baris perintah '--unsafely-treat-insecure-origin-as-secure' menjadi daftar yang dipisahkan koma yang berisi URL yang sama. Jika disetel, kebijakan tersebut akan mengganti tanda baris perintah. - Untuk informasi selengkapnya tentang konteks aman, lihat https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Memungkinkan Anda menetapkan daftar pola URL yang menentukan situs yang tidak diizinkan untuk menjalankan plugin <ph name="FLASH_PLUGIN_NAME" />. Jika kebijakan ini tidak disetel, nilai default global akan digunakan untuk semua situs, baik dari kebijakan 'DefaultPluginsSetting' jika disetel, atau konfigurasi pribadi pengguna.</translation> @@ -1971,11 +1964,6 @@ <translation id="6786967369487349613">Menyetel direktori profil roaming</translation> <translation id="6810445994095397827">Cekal JavaScript di situs ini</translation> <translation id="681446116407619279">Skema autentikasi yang didukung</translation> -<translation id="6832455357698286434"> - Kebijakan tersebut menentukan daftar asal (URL) atau pola hostname (misalnya "*.example.com") yang akan diperlakukan sebagai konten aman. Tujuannya untuk mengizinkan organisasi menyiapkan server persiapan untuk pengembangan web internal, agar developer dapat menguji fitur yang memerlukan konteks aman tanpa harus menerapkan TLS di server persiapan. - Menyetel daftar URL di kebijakan ini memiliki efek yang sama seperti menyetel tanda baris perintah '--unsafely-treat-insecure-origin-as-secure' menjadi daftar yang dipisahkan koma yang berisi URL yang sama. Jika disetel, kebijakan tersebut akan mengganti tanda baris perintah. - Untuk informasi selengkapnya tentang konteks aman, lihat https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Tampilkan permintaan berulang kepada pengguna yang menunjukkan bahwa peluncuran ulang direkomendasikan</translation> <translation id="6838056959556423778">Mengganti aturan pemilihan printer default <ph name="PRODUCT_NAME" />. @@ -2327,7 +2315,6 @@ <translation id="7617319494457709698">Kebijakan ini menentukan ekstensi yang diizinkan untuk menggunakan fungsi <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" /> untuk pengesahan jarak jauh. Ekstensi harus ditambahkan ke daftar ini untuk menggunakan API. Jika ekstensi tidak ada dalam daftar, atau daftar tidak disetel, panggilan ke API akan gagal yang disertai kode error.</translation> -<translation id="7620300057302654932">Asal atau pola hostname diperlakukan sebagai konteks yang aman.</translation> <translation id="7625444193696794922">Menentukan saluran rilis yang harus dikunci oleh perangkat ini.</translation> <translation id="7632724434767231364">Nama pustaka GSSAPI</translation> <translation id="7635471475589566552">Mengonfigurasi lokal aplikasi di <ph name="PRODUCT_NAME" /> dan mencegah pengguna mengubah lokal tersebut. Jika Anda mengaktifkan setelan ini, <ph name="PRODUCT_NAME" /> akan menggunakan lokal yang ditentukan. Jika lokal terkonfigurasi tidak didukung, 'en-US' akan digunakan. Jika setelan ini dinonaktifkan atau tidak disetel, <ph name="PRODUCT_NAME" /> akan menggunakan lokal terpilih yang ditentukan pengguna (jika dikonfigurasi), lokal sistem, atau lokal pengganti 'en-US'.</translation>
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index c8fa7a8..62cdf7b 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb
@@ -636,7 +636,6 @@ Ogni voce in elenco specifica un identificatore che viene utilizzato internamente per distinguere i vari account del dispositivo.</translation> <translation id="2769952903507981510">Configura il nome di dominio richiesto per gli host di accesso remoto</translation> <translation id="2787173078141616821">Segnala informazioni sullo stato di Android</translation> -<translation id="2793923553868251161">Origini da considerare contesto sicuro.</translation> <translation id="2799297758492717491">Consenti la riproduzione automatica dei contenuti multimediali per una whitelist di pattern URL</translation> <translation id="2801230735743888564">Consente di attivare il gioco del dinosauro quando il dispositivo è offline. @@ -1763,12 +1762,6 @@ <translation id="6155936611791017817">Impostazione stato predefinito del puntatore grande nella schermata di accesso</translation> <translation id="6157537876488211233">Elenco separato da virgole delle regole di bypass proxy</translation> <translation id="6158324314836466367">Nome del web store dell'azienda (obsoleta)</translation> -<translation id="6164955668342404660">Ritirata nella versione M69. Usa la norma OverrideSecurityRestrictionsOnInsecureOrigin. - - Questa norma consente di specificare un elenco di origini (URL) da considerare come contesto sicuro. Lo scopo è consentire alle organizzazioni di configurare un server di gestione temporanea per gli sviluppi web interni, affinché gli sviluppatori possano testare le funzioni che richiedono contesti sicuri senza dover implementare TLS sul server di gestione temporanea. - L'impostazione di un elenco di URL in questa norma ha lo stesso effetto dell'impostazione del flag della riga di comando "--unsafely-treat-insecure-origin-as-secure" su un elenco separato da virgole degli stessi URL. Se viene impostata, questa norma sostituisce il flag della riga di comando. - Per ulteriori informazioni sui contesti sicuri, visita il sito https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Consente di impostare un elenco di pattern URL che specificano i siti che non possono eseguire il plug-in <ph name="FLASH_PLUGIN_NAME" />. Se questa norma non viene impostata, per tutti i siti verrà utilizzato il valore predefinito globale della norma "DefaultPluginsSetting", se impostata, oppure la configurazione personale dell'utente.</translation> @@ -1937,11 +1930,6 @@ <translation id="6786967369487349613">Imposta la directory profilo di roaming</translation> <translation id="6810445994095397827">Blocca Javascript in questi siti</translation> <translation id="681446116407619279">Schemi di autenticazione supportati</translation> -<translation id="6832455357698286434"> - Questa norma consente di specificare un elenco di origini (URL) o di schemi di nomi host (ad esempio "*.example.com") da considerare come contesto sicuro. Lo scopo è consentire alle organizzazioni di configurare un server di gestione temporanea per gli sviluppi web interni, affinché gli sviluppatori possano testare le funzioni che richiedono contesti sicuri senza dover implementare TLS sul server di gestione temporanea. - L'impostazione di un elenco di URL in questa norma ha lo stesso effetto dell'impostazione del flag della riga di comando "--unsafely-treat-insecure-origin-as-secure" su un elenco separato da virgole degli stessi URL. Se viene impostata, questa norma sostituisce il flag della riga di comando. - Per ulteriori informazioni sui contesti sicuri, visita il sito https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Mostra un messaggio ricorrente all'utente in cui indica che è consigliato eseguire un riavvio</translation> <translation id="6838056959556423778">Consente di sostituire le regole di selezione della stampante predefinita di <ph name="PRODUCT_NAME" />. @@ -2283,7 +2271,6 @@ <translation id="7617319494457709698">Questa norma consente di specificare le estensioni autorizzate a usare la funzione <ph name="CHALLENGE_USER_KEY_FUNCTION" /> dell'<ph name="ENTERPRISE_PLATFORM_KEYS_API" /> per l'attestazione da remoto. Le estensioni devono essere aggiunte a questo elenco per utilizzare l'API. Se un'estensione non è presente nell'elenco o l'elenco non è impostato, la chiamata all'API non va a buon fine e viene generato un codice di errore.</translation> -<translation id="7620300057302654932">Origini o schemi di nomi host da considerare come contesto sicuro.</translation> <translation id="7625444193696794922">Consente di specificare il canale di rilascio su cui deve essere bloccato questo dispositivo.</translation> <translation id="7632724434767231364">Nome della libreria GSSAPI</translation> <translation id="7635471475589566552">Consente di configurare in <ph name="PRODUCT_NAME" /> le impostazioni della lingua e di impedirne la modifica agli utenti. Se attivi questa impostazione, <ph name="PRODUCT_NAME" /> utilizzerà le impostazioni della lingua specificate. Se la lingua configurata non è supportata, verrà utilizzata la lingua "en-US". Se questa impostazione viene disattivata o non viene impostata, <ph name="PRODUCT_NAME" /> utilizzerà la lingua preferita specificata dall'utente (se configurata), quella del sistema o la lingua di fallback "en-US".</translation>
diff --git a/components/policy/resources/policy_templates_iw.xtb b/components/policy/resources/policy_templates_iw.xtb index 2b828bc..d83f3d56 100644 --- a/components/policy/resources/policy_templates_iw.xtb +++ b/components/policy/resources/policy_templates_iw.xtb
@@ -645,7 +645,6 @@ כל רשומה ברשימה מציינת מזהה, המשמש באופן פנימי להבחנה בין החשבונות המקומיים השונים במכשיר.</translation> <translation id="2769952903507981510">הגדר את שם הדומיין הנדרש עבור מארחים של גישה מרחוק</translation> <translation id="2787173078141616821">דיווח מידע על סטטוס של Android</translation> -<translation id="2793923553868251161">מקורות שיטופלו כהקשר מאובטח.</translation> <translation id="2799297758492717491">אישור להפעלה אוטומטית של מדיה ברשימת היתרים של דפוסי כתובת אתר</translation> <translation id="2801230735743888564">המדיניות מאפשרת למשתמשים לשחק במשחק ביצי הפסחא של הדינוזאורים (Dinosaur Easter Egg) כשהמכשיר במצב לא מקוון. @@ -1783,12 +1782,6 @@ <translation id="6155936611791017817">הגדר מצב ברירת מחדל של הסמן הגדול במסך ההתחברות</translation> <translation id="6157537876488211233">רשימה מופרדת בפסיקים של כללי עקיפת Proxy</translation> <translation id="6158324314836466367">שם חנות אינטרנט של ארגון (הוצא משימוש)</translation> -<translation id="6164955668342404660">הוצאה משימוש ב-M69. יש להשתמש במקומה ב-OverrideSecurityRestrictionsOnInsecureOrigin. - - המדיניות הזו מגדירה רשימת מקורות (כתובות אתרים) שיש להתייחס אליהם כאל הקשר מאובטח. המטרה היא להתיר לארגונים להגדיר שרת ביניים לפיתוח אינטרנט פנימי כדי שהמפתחים יוכלו לבדוק תכונות שנחוץ להן הקשר מאובטח, ללא צורך בפריסה של TLS (אבטחת שכבת התעבורה) בשרת הביניים. - להגדרת רשימה של כתובות אתרים במדיניות הזו יש השפעה זהה לזו של הגדרת הסימון בשורת הפקודות '--unsafely-treat-insecure-origin-as-secure' כרשימה המופרדת בפסיקים שכוללת את אותן כתובות אתרים. אם המדיניות מוגדרת, היא תעקוף את הסימון בשורת הפקודות. - מידע נוסף על הקשרים מאובטחים זמין בכתובת https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">המדיניות הזו מאפשרת לך להגדיר רשימת תבניות של כתובות אתרים שמציינות אתרים שלא רשאים להריץ את הפלאגין <ph name="FLASH_PLUGIN_NAME" />. אם לא מגדירים את המדיניות הזו, הערך הגלובלי שמוגדר כברירת מחדל ישמש בכל האתרים - מהמדיניות DefaultPluginsSetting, או מהתצורה האישית של המשתמש אם המדיניות DefaultPluginsSetting לא הוגדרה.</translation> @@ -1956,11 +1949,6 @@ <translation id="6786967369487349613">הגדרת ספריית הפרופיל לנדידה</translation> <translation id="6810445994095397827">חסום JavaScript באתרים אלה</translation> <translation id="681446116407619279">סכימות אימות נתמכות</translation> -<translation id="6832455357698286434"> - המדיניות הזו מגדירה רשימת מקורות (כתובות אתרים) או דפוסים של שמות מארחים (כמו "*.example.com") שיש להתייחס אליהם כאל הקשר מאובטח. המטרה היא להתיר לארגונים להגדיר שרת ביניים לפיתוח אינטרנט פנימי כדי שהמפתחים יוכלו לבדוק תכונות שנחוץ להן הקשר מאובטח, ללא צורך בפריסה של TLS (אבטחת שכבת התעבורה) בשרת הביניים. - להגדרת רשימה של כתובות אתרים במדיניות הזו יש השפעה זהה לזו של הגדרת הסימון בשורת הפקודות '--unsafely-treat-insecure-origin-as-secure' כרשימה המופרדת בפסיקים שכוללת את אותן כתובות אתרים. אם המדיניות מוגדרת, היא תעקוף את הסימון בשורת הפקודות. - מידע נוסף על הקשרים מאובטחים זמין בכתובת https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">הצגת הודעה חוזרת למשתמש המציינת שמומלץ להפעיל מחדש</translation> <translation id="6838056959556423778">מבטלת את הכללים לבחירת מדפסת ברירת מחדל של <ph name="PRODUCT_NAME" />. @@ -2300,7 +2288,6 @@ <translation id="7617319494457709698">מדיניות זו מציינת את התוספים המורשים להשתמש בפונקציה <ph name="CHALLENGE_USER_KEY_FUNCTION" /> של <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> להזדהות מרחוק. כדי שאפשר יהיה להשתמש ב-API יש להוסיף את התוספים לרשימה הזו. אם תוסף אינו כלול ברשימה, או אם הרשימה אינה מוגדרת, הקריאה ל-API תיכשל ויוצג קוד שגיאה.</translation> -<translation id="7620300057302654932">מקורות או דפוסי שמות מארח שיש להתייחס אליהם כאל הקשר מאובטח.</translation> <translation id="7625444193696794922">מציין את אמצעי השחרור שלפיו יינעל מכשיר זה.</translation> <translation id="7632724434767231364">שם ספריית GSSAPI</translation> <translation id="7635471475589566552">המדיניות מגדירה את אזור היישום ב-<ph name="PRODUCT_NAME" /> ומונעת מהמשתמשים לשנות זאת. אם תהפוך הגדרה זו לפעילה, <ph name="PRODUCT_NAME" /> ישתמש באזור שצוין. אם האזור המוגדר אינו נתמך, המערכת תשתמש ב-'en-US' במקום זאת. אם הגדרה זו מושבתת או לא מוגדרת, <ph name="PRODUCT_NAME" /> משתמש באזור המועדף שציין המשתמש (אם הוגדר), באזור המערכת או באזור הגיבוי 'en-US'.</translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index bf205712..e2a1e39 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -268,6 +268,7 @@ このポリシーが false に設定されている場合、統計情報と診断データは送信されません。 このポリシーが未設定の場合、管理対象ではない端末では統計情報と診断データは送信されません。管理対象の端末では統計情報と診断データが送信されます。</translation> +<translation id="1920046221095339924">端末で管理対象のセッションを許可する</translation> <translation id="1929709556673267855">デバイスに接続された企業プリンタの設定を指定します。 このポリシーを使用すると、<ph name="PRODUCT_OS_NAME" /> デバイスのプリンタ設定を指定できます。フォーマットは NativePrinters ディクショナリと同じですが、ホワイトリストまたはブラックリストに登録するプリンタごとに「id」または「guid」フィールドを追加で指定する必要があります。 @@ -301,6 +302,7 @@ この設定を有効にするか、値を設定しない場合、ユーザーは UI で住所の自動入力を制御できます。</translation> <translation id="1960840544413786116">ローカルの信頼済みアンカーが発行した、subjectAlternativeName 拡張がない証明書の許可</translation> +<translation id="1962273523772270623">Google サービスからの WebRTC イベントログの収集を許可する</translation> <translation id="1964634611280150550">シークレット モードを無効にする</translation> <translation id="1964802606569741174">このポリシーは Android YouTube アプリには適用されません。YouTube でセーフモードを有効にする場合は、Android YouTube アプリのインストールを禁止する必要があります。</translation> <translation id="1969212217917526199">リモート アクセス ホストの Debug ビルドでポリシーをオーバーライドします。 @@ -646,7 +648,6 @@ リストの各エントリは識別子を示します。これらの識別子は、デバイスのローカル アカウントを区別するために内部で使用されます。</translation> <translation id="2769952903507981510">リモート アクセス ホストの必須のドメイン名を設定する</translation> <translation id="2787173078141616821">Android のステータスに関する情報を報告する</translation> -<translation id="2793923553868251161">安全なコンテキストとして扱われる発行元です。</translation> <translation id="2799297758492717491">メディアの自動再生を許可する URL パターンのホワイトリストを指定する</translation> <translation id="2801230735743888564">デバイスがオフラインのときに、ユーザーが恐竜のイースター エッグゲームをプレイすることを許可します。 @@ -1791,12 +1792,6 @@ <translation id="6155936611791017817">ログイン画面での大きいカーソルのデフォルト状態を設定する</translation> <translation id="6157537876488211233">プロキシ バイパス ルールのカンマ区切りリスト</translation> <translation id="6158324314836466367">エンタープライズ ウェブストア名(サポート終了)</translation> -<translation id="6164955668342404660">M69 で廃止されました。代わりに「OverrideSecurityRestrictionsOnInsecureOrigin」を使用してください。 - - 安全なコンテキストとして扱われる発行元(URL)のリストを指定します。このポリシーの目的は、組織で内部ウェブ開発用のステージング サーバーをセットアップできるようにすることです。この方法で、デベロッパーはステージング サーバーに TLS を実装しなくても、安全なコンテキストを必要とする機能をテストできます。 - このポリシーで URL のリストを設定すると、コマンドライン フラグ「--unsafely-treat-insecure-origin-as-secure」で同じ URL をカンマ区切りリストで設定した場合と同じ効果が得られます。このポリシーが設定されている場合、コマンドライン フラグはオーバーライドされます。 - 安全なコンテキストについて詳しくは、https://www.w3.org/TR/secure-contexts/ をご覧ください。 - </translation> <translation id="6181608880636987460"><ph name="FLASH_PLUGIN_NAME" /> プラグインの実行を許可しないサイトを表す URL パターンのリストを設定します。 このポリシーが未設定の場合は、すべてのサイトでグローバルなデフォルト値(「DefaultPluginsSetting」ポリシーで値が設定されている場合はその値、設定されていない場合はユーザーの個人設定の値)が使用されます。</translation> @@ -1915,6 +1910,11 @@ このポリシーが未設定の場合やリストが空の場合は、すべてのスキームが <ph name="PRODUCT_NAME" /> でアクセス可能になります。</translation> <translation id="6652197835259177259">ローカルの管理対象ユーザーの設定</translation> <translation id="6658245400435704251">最初にアップデートがサーバーにプッシュされた時刻から、デバイスによるアップデートのダウンロードをランダムに遅延できる最大時間を秒数で指定します。デバイスは、この時間の一部を実際の経過時間として、残りの時間をアップデート チェックとして待機できます。どのような場合でも、係数にはある一定の時間の上限があるため、アップデートのダウンロードを永遠に待機してデバイスが停止し続けることはありません。</translation> +<translation id="6665599130599311250">このポリシーが false に設定されているか未設定の場合、管理対象のゲスト セッションは、https://support.google.com/chrome/a/answer/3017014 に記事に記載されているとおりに動作します(標準の「公開セッション」)。 + + このポリシーが true に設定されている場合、管理対象のゲスト セッションは、通常の「公開セッション」で設けられている制限の多くが解除された「管理対象のセッション」として動作します。 + + このポリシーが設定されている場合、ユーザーは設定内容を変更したり他の設定を優先して適用したりすることはできません。</translation> <translation id="6665670272107384733">ロックのクイック解除機能を使用するために必要なパスワード入力の頻度を設定する</translation> <translation id="6681229465468164801">ユーザーに対する USB デバイスへのアクセス リクエストを許可しないサイトを表す URL パターンのリストを設定します。 @@ -1964,11 +1964,6 @@ <translation id="6786967369487349613">ローミング プロフィール ディレクトリの設定</translation> <translation id="6810445994095397827">これらのサイトの Javascript をブロックする</translation> <translation id="681446116407619279">サポートされる認証スキーム</translation> -<translation id="6832455357698286434"> - 安全なコンテキストとして扱われる発行元(URL)またはホスト名のパターン(「*.example.com」など)のリストを指定します。このポリシーの目的は、組織で内部ウェブ開発用のステージング サーバーをセットアップできるようにすることです。この方法で、デベロッパーはステージング サーバーに TLS を実装しなくても、安全なコンテキストを必要とする機能をテストできます。 - このポリシーで URL のリストを設定すると、コマンドライン フラグ「--unsafely-treat-insecure-origin-as-secure」で同じ URL をカンマ区切りリストで設定した場合と同じ効果が得られます。このポリシーが設定されている場合、コマンドライン フラグはオーバーライドされます。 - 安全なコンテキストについて詳しくは、https://www.w3.org/TR/secure-contexts/ をご覧ください。 - </translation> <translation id="6835883744948188639">再起動が推奨されることを示すメッセージをユーザーに繰り返し表示する</translation> <translation id="6838056959556423778"><ph name="PRODUCT_NAME" /> のデフォルト プリンタ選択ルールをオーバーライドします。 @@ -2079,6 +2074,17 @@ <translation id="6943577887654905793">Mac/Linux 設定名:</translation> <translation id="69525503251220566">既定の検索プロバイダに画像検索機能を提供するパラメータ</translation> <translation id="6956272732789158625">すべてのサイトにキー生成の使用を許可しない</translation> +<translation id="6982028490425791294"> + このポリシーが true に設定されている場合は、<ph name="PRODUCT_NAME" /> に対して、Google サービス(Google Meet など)からの WebRTC イベントログの収集と、Google へのそれらのログのアップロードが許可されます。 + + このポリシーが false に設定されているか未設定の場合、<ph name="PRODUCT_NAME" /> によるログの収集とアップロードは行われません。 + + これらのログには、送受信された RTP パケットの時間とサイズ、ネットワークの輻輳に関するフィードバック、音声および動画フレームの時間と品質に関するメタデータなどの情報が含まれます。これらの情報は、Chrome での音声や動画の呼び出しに関する問題(帯域幅の推定に関する問題など)をデバッグする際に役立ちます。なお、ログには、呼び出された音声や動画のコンテンツは含まれません。 + + このデータ収集は、Google のウェブサービス(Google ハングアウト、Google Meet など)からのみ行われます。 + + これらのログは、Google サービス自体により収集される別のログと、セッション ID を介して関連付けられることがあります。この関連付けは、デバッグを容易にする目的で行われます。 + </translation> <translation id="6994082778848658360">搭載されているセキュア エレメント ハードウェアが 2 段階認証プロセスに対応している場合に、このプロセスを適用するためにハードウェアをどのように使用できるかを指定します。ユーザーの所在地を検出するには本体の電源ボタンを使用します。 [無効にする] を選択した場合、2 段階認証プロセスは適用されません。 @@ -2309,7 +2315,6 @@ <translation id="7617319494457709698">このポリシーでは、<ph name="ENTERPRISE_PLATFORM_KEYS_API" /> の関数 <ph name="CHALLENGE_USER_KEY_FUNCTION" /> を使用してリモート認証を行うことを許可する拡張機能を指定します。この API を使用するには、このリストに拡張機能を追加する必要があります。 拡張機能がリストに追加されていないか、リストが設定されていない場合、API 呼び出しは失敗し、エラーコードが返されます。</translation> -<translation id="7620300057302654932">安全なコンテキストとして扱われる発行元またはホスト名のパターンです。</translation> <translation id="7625444193696794922">この端末を固定するリリース チャンネルを指定します。</translation> <translation id="7632724434767231364">GSSAPI ライブラリ名</translation> <translation id="7635471475589566552"><ph name="PRODUCT_NAME" /> のアプリケーションの言語/地域を設定し、ユーザーが言語/地域を変更できないようにします。この設定を有効にすると、<ph name="PRODUCT_NAME" /> では指定された言語/地域が使用されます。設定した言語/地域がサポートされない場合、「en-US」が使用されます。この設定を無効にするか設定しないと、<ph name="PRODUCT_NAME" /> ではユーザー指定の適切な言語/地域(設定されている場合)、システムの言語/地域、代替の言語/地域「en-US」のいずれかが使用されます。</translation>
diff --git a/components/policy/resources/policy_templates_kn.xtb b/components/policy/resources/policy_templates_kn.xtb index 655fcb40..67e3ecd8 100644 --- a/components/policy/resources/policy_templates_kn.xtb +++ b/components/policy/resources/policy_templates_kn.xtb
@@ -293,6 +293,7 @@ <translation id="1914840757300882918">ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸಿದ್ದರೆ, RemoteAccessHostTokenValidationUrl ಗೆ ಪ್ರಮಾಣೀಕರಿಸಲು ನೀಡಲಾಗಿರುವ ನೀಡುವವರ CN ಜೊತೆಯಲ್ಲಿ ಕ್ಲೈಂಟ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಹೋಸ್ಟ್ ಬಳಸುತ್ತದೆ. ಯಾವುದೇ ಲಭ್ಯ ಕ್ಲೈಂಟ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಬಳಸಲು ಅದನ್ನು "*" ಗೆ ಹೊಂದಿಸಿ. ಪ್ರಸ್ತುತ ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಸರ್ವರ್ನಲ್ಲಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿರುತ್ತದೆ.</translation> +<translation id="1920046221095339924">ನಿರ್ವಹಿಸಿದ ಸೆಶನ್ ಅನ್ನು ಸಾಧನದಲ್ಲಿ ಅನುಮತಿಸಿ</translation> <translation id="1929709556673267855">ಸಾಧನಗಳಿಗೆ ಬದ್ಧವಾಗಿರುವ ಎಂಟರ್ಪ್ರೈಸ್ ಪ್ರಿಂಟರ್ಗಳಿಗಾಗಿ ಕಾನ್ಫಿಗರೇಶನ್ಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ. ಈ ಕಾರ್ಯನೀತಿಯು <ph name="PRODUCT_OS_NAME" /> ಸಾಧನಗಳಿಗಾಗಿ ಪ್ರಿಂಟರ್ ಕಾನ್ಫಿಗರೇಶನ್ಗಳನ್ನು ಒದಗಿಸಲು ನಿಮಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಫಾರ್ಮ್ಯಾಟ್ NativePrinters ಪದಕೋಶದಂತೆಯೇ ಇರುತ್ತದೆ, ಶ್ವೇತಪಟ್ಟಿ ಅಥವಾ ಕಪ್ಪುಪಟ್ಟಿಗೆ ಸೇರಿಸಲು ಪ್ರತಿ ಪ್ರಿಂಟರ್ಗೆ "ಐಡಿ" ಅಥವಾ "ಜಿಯುಐಡಿ" ಕ್ಷೇತ್ರದ ಹೆಚ್ಚುವರಿ ಅಗತ್ಯವಿರುತ್ತದೆ. @@ -324,6 +325,7 @@ ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಸ್ವಯಂಭರ್ತಿ ಎಂದಿಗೂ ಸೂಚಿಸುವುದಿಲ್ಲ ಅಥವಾ ವಿಳಾಸ ಮಾಹಿತಿಯನ್ನು ತುಂಬುವುದಿಲ್ಲ ಅಥವಾ ವೆಬ್ ಬ್ರೌಸ್ ಮಾಡುವಾಗ ಬಳಕೆದಾರರು ಸಲ್ಲಿಸಬಹುದಾದ ವಿಳಾಸಗಳ ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ವಿಳಾಸ ಮಾಹಿತಿಯನ್ನು ಉಳಿಸಿಕೊಳ್ಳುವುದಿಲ್ಲ. ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದ್ದರೆ ಅಥವಾ ಯಾವುದೇ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿಲ್ಲದಿದ್ದರೆ, ಬಳಕೆದಾರರು UI ನಲ್ಲಿರುವ ವಿಳಾಸಗಳಿಗೆ ಸ್ವಯಂಭರ್ತಿಯನ್ನು ನಿಯಂತ್ರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.</translation> <translation id="1960840544413786116">subjectAlternativeName ವಿಸ್ತರಣೆ ತಪ್ಪಿಹೋದ ಸ್ಥಳೀಯ ಟ್ರಸ್ಟ್ ಆಂಕರ್ಗಳು ನೀಡಿದ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಅನುಮತಿಸಬೇಕೇ</translation> +<translation id="1962273523772270623">Google ಸೇವೆಗಳಿಂದ WebRTC ಈವೆಂಟ್ ಲಾಗ್ಗಳ ಸಂಗ್ರಹವನ್ನು ಅನುಮತಿಸಿ</translation> <translation id="1964634611280150550">ಅದೃಶ್ಯ ಮೋಡ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation> <translation id="1964802606569741174">ಈ ನೀತಿಯು Android YouTube ಅಪ್ಲಿಕೇಶನ್ ಮೇಲೆ ಯಾವುದೇ ಪರಿಣಾಮ ಹೊಂದಿರುವುದಿಲ್ಲ. ಒಂದು ವೇಳೆ YouTube ನಲ್ಲಿ ಸುರಕ್ಷತೆ ಮೋಡ್ ಜಾರಿಗೊಳಿಸಬೇಕಿದ್ದರೆ, Android YouTube ಅಪ್ಲಿಕೇಶನ್ನ ಸ್ಥಾಪನೆಗೆ ಅನುಮತಿಸಬಾರದು.</translation> <translation id="1969212217917526199">ರಿಮೋಟ್ ಪ್ರವೇಶ ಹೋಸ್ಟ್ನ ಡೀಬಗ್ ಬಿಲ್ಡ್ಗಳ ಮೇಲೆ ನೀತಿಗಳನ್ನು ಅತಿಕ್ರಮಿಸುತ್ತದೆ. @@ -697,7 +699,6 @@ ಪ್ರತಿ ಪಟ್ಟಿಯ ನಮೂದು ಗುರುತಿಸುವಿಕೆಯನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ, ಇದನ್ನು ವಿಭಿನ್ನ ಸಾಧನಗಳ-ಸ್ಥಳೀಯ ಖಾತೆಗಳನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ಹೇಳಲು ಆಂತರಿಕವಾಗಿ ಬಳಸಬಹುದಾಗಿರುತ್ತದೆ.</translation> <translation id="2769952903507981510">ರಿಮೋಟ್ ಪ್ರವೇಶ ಹೋಸ್ಟ್ಗಳಿಗೆ ಅಗತ್ಯವಿರುವ ಡೊಮೇನ್ ಹೆಸರನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ</translation> <translation id="2787173078141616821">Android ಸ್ಥಿತಿ ಕುರಿತು ಮಾಹಿತಿಯನ್ನು ವರದಿ ಮಾಡಿ</translation> -<translation id="2793923553868251161">ಮೂಲಗಳನ್ನು ಸುರಕ್ಷಿತ ಸಂದರ್ಭದಂತೆ ಪರಿಗಣಿಸಬೇಕು.</translation> <translation id="2799297758492717491">URL ಪ್ಯಾಟರ್ನ್ಗಳ ಅನುಮತಿ ಪಟ್ಟಿಯಲ್ಲಿ ಮಾಧ್ಯಮವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಪ್ಲೇ ಆಗಲು ಅನುಮತಿಸಿ</translation> <translation id="2801230735743888564">ಸಾಧನವು ಆಫ್ಲೈನ್ನಲ್ಲಿದ್ದಾಗ ಡೈನೋಸಾರ್ ಈಸ್ಟರ್ ಎಗ್ ಆಟವನ್ನು ಆಡಲು ಬಳಕೆದಾರರಿಗೆ ಅನುಮತಿಸಿ. @@ -1963,12 +1964,6 @@ <translation id="6155936611791017817">ಲಾಗಿನ್ ಪರದೆಯಲ್ಲಿ ದೊಡ್ಡ ಕರ್ಸರ್ನ ಡಿಫಾಲ್ಟ್ ಸ್ಥಿತಿಯನ್ನು ಹೊಂದಿಸಿ</translation> <translation id="6157537876488211233">ಪ್ರಾಕ್ಸಿ ಬೈಪಾಸ್ ನಿಯಮಗಳ ಅಲ್ಪವಿರಾಮದಿಂದ ಬೇರ್ಪಡಿಸಲಾದ ಪಟ್ಟಿ</translation> <translation id="6158324314836466367">ಎಂಟರ್ಪ್ರೈಸ್ ವೆಬ್ ಸ್ಟೋರ್ ಹೆಸರು (ಅಸಮ್ಮತಿಸಲಾಗಿದೆ)</translation> -<translation id="6164955668342404660">M69 ನಲ್ಲಿ ತಡೆಹಿಡಿಯಲಾಗಿದೆ. ಬದಲಿಗೆ OverrideSecurityRestrictionsOnInsecureOrigin ಅನ್ನು ಬಳಸಿ. - -ಸುರಕ್ಷಿತ ಸಂದರ್ಭವೆಂದು ಪರಿಗಣಿಸಲಾಗುವ ಮೂಲಗಳ (URLಗಳ) ಪಟ್ಟಿಯನ್ನು ಕಾರ್ಯನೀತಿಯು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ. ಇದರ ಉದ್ದೇಶ, ಆಂತರಿಕ ವೆಬ್ ಅಭಿವೃದ್ಧಿಗೆ ಸ್ಟೇಜಿಂಗ್ ಸರ್ವರ್ ಒಂದನ್ನು ಸೆಟಪ್ ಮಾಡಲು ಸಂಸ್ಥೆಗಳಿಗೆ ಅವಕಾಶ ಕಲ್ಪಿಸುವುದು. ಏಕೆಂದರೆ ಇದರಿಂದಾಗಿ ಅವರ ಡೆವಲಪರ್ಗಳಿಗೆ, TLS ಅನ್ನು ಸ್ಟೇಜಿಂಗ್ ಸರ್ವರ್ನಲ್ಲಿ ನಿಯೋಜಿಸದೆಯೇ ಸುರಕ್ಷಿತ ಸಂದರ್ಭಗಳಲ್ಲಿ ಅಗತ್ಯವಿರುವ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಪರೀಕ್ಷಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ. -ಈ ಕಾರ್ಯನೀತಿಯಲ್ಲಿರುವ URL ಗಳ ಪಟ್ಟಿಯನ್ನು ಹೊಂದಿಸುವುದರ ಪರಿಣಾಮವೂ, ಮತ್ತು '--unsafely-treat-insecure-origin-as-secure' ಎಂಬ ಕಮಾಂಡ್-ಲೈನ್ ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ಅದೇ URL ಗಳ ಅಲ್ಪವಿರಾಮದಿಂದ ಬೇರ್ಪಡಿಸಿದ ಪಟ್ಟಿಗೆ ಹೊಂದಿಸುವ ಪರಿಣಾಮವೂ ಒಂದೇ ಆಗಿದೆ. ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಹೊಂದಿಸಿದರೆ, ಅದು ಕಮಾಂಡ್-ಲೈನ್ ಫ್ಲಾಗ್ ಅನ್ನು ಅತಿಕ್ರಮಿಸುತ್ತದೆ. -ಸುರಕ್ಷಿತ ಸಂದರ್ಭಗಳ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, https://www.w3.org/TR/secure-contexts/ ಅನ್ನು ನೋಡಿ. - </translation> <translation id="6178075938488052838"><ph name="PRODUCT_OS_NAME" /> ಸೆಷನ್ ಅನ್ನು ಯಾರು ಪ್ರಾರಂಭಿಸಬಹುದು ಎಂಬುದನ್ನು ಈ ನೀತಿಯು ನಿಯಂತ್ರಿಸುತ್ತದೆ. ಇದು Android ನಲ್ಲಿನ ಹೆಚ್ಚುವರಿ Google ಖಾತೆಗಳಿಗೆ ಬಳಕೆದಾರರು ಸೈನ್ ಇನ್ ಆಗುವುದನ್ನು ತಡೆಗಟ್ಟುವುದಿಲ್ಲ. ಇದನ್ನು ತಡೆಗಟ್ಟಲು ನೀವು ಬಯಸಿದರೆ,<ph name="ACCOUNT_TYPES_WITH_MANAGEMENT_DISABLED_CLOUDDPC_POLICY_NAME" /> ಭಾಗವಾಗಿ Android-ನಿರ್ದಿಷ್ಟ <ph name="ARC_POLICY_POLICY_NAME" /> ನೀತಿಯನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ.</translation> <translation id="6181608880636987460"><ph name="FLASH_PLUGIN_NAME" /> ಪ್ಲಗ್ಇನ್ ರನ್ಮಾಡಲು ಅನುಮತಿಸಲಾರದ ನಿರ್ದಿಷ್ಟ ಸೈಟ್ಗಳ url ಮಾದರಿಗಳ ಪಟ್ಟಿಯನ್ನು ಹೊಂದಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. @@ -2092,6 +2087,11 @@ ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೆಯೇ ಬಿಟ್ಟರೆ ಅಥವಾ ಪಟ್ಟಿಯು ಖಾಲಿಯಾಗಿದ್ದರೆ ಎಲ್ಲಾ ಸ್ಕೀಮ್ಗಳನ್ನು <ph name="PRODUCT_NAME" /> ನಲ್ಲಿ ಪ್ರವೇಶಿಸಬಹುದಾಗಿದೆ.</translation> <translation id="6652197835259177259">ಸ್ಥಳೀಯವಾಗಿ ನಿರ್ವಹಿಸಲಾದ ಬಳಕೆದಾರರ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="6658245400435704251">ಸರ್ವರ್ಗೆ ಮೊದಲು ಅಪ್ಡೇಟ್ವನ್ನು ದೂಡಿದಲ್ಲಿಂದ ಸಾಧನವು ಅಪ್ಡೇಟ್ದ ಡೌನ್ಲೋಡ್ ಅನ್ನು ಯಾದೃಚ್ಛಿಕವಾಗಿ ವಿಳಂಬ ಮಾಡಬಹುದಾದವರೆಗಿನ ಸೆಕೆಂಡುಗಳ ಸಂಖ್ಯೆಯನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ. ಗೋಡೆ-ಗಡಿಯಾರದ ಸಮಯದಲ್ಲಿ ಹಾಗೂ ಅಪ್ಡೇಟ್ ಪರಿಶೀಲನೆಗಳ ಸಂಖ್ಯೆಯಲ್ಲಿ ಸಾಧನವು ನಿರೀಕ್ಷಿಸುತ್ತದೆ. ಯಾವುದೇ ಸಂದರ್ಭದಲ್ಲಿ, ಆಗಾಗ್ಗೆ ಬದಲಾಗುವ ಸಮಯದ ಹದ್ದುಬಸ್ತಿನಲ್ಲಿ ಚದುರಿರುತ್ತದೆ ಆದ್ದರಿಂದ ಡೌನ್ಲೋಡ್ಗೆ ನಿರೀಕ್ಷಿಸುತ್ತಿರುವಾಗ ಸಾಧನವು ಮಧ್ಯೆ ಸಿಲುಕಿಹಾಕಿಕೊಳ್ಳುವುದಿಲ್ಲ ಯಾವಾಗಲೂ ನವೀಕರಿಸುತ್ತದೆ.</translation> +<translation id="6665599130599311250">ಈ ನೀತಿಯನ್ನು ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದ್ದರೆ ಅಥವಾ ಹೊಂದಿಸದೇ ಇದ್ದಲ್ಲಿ, ನಿರ್ವಹಿಸಲಾದ ಅತಿಥಿ ಸೆಶನ್ https://support.google.com/chrome/a/answer/3017014 ನಲ್ಲಿ ದಾಖಲಿಸಿದಂತೆ ಪ್ರಮಾಣಿತ "ಸಾರ್ವಜನಿಕ ಸೆಶನ್" ನಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. + + ಈ ನೀತಿಯನ್ನು ಸರಿ ಎಂದು ಹೊಂದಿಸಿದರೆ, ನಿರ್ವಹಿಸಲಾದ ಅತಿಥಿ ಸೆಶನ್ "ನಿರ್ವಹಿತ ಸೆಶನ್" ಆಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ, ಇದು ಸಾಮಾನ್ಯ "ಸಾರ್ವಜನಿಕ ಸೆಶನ್ಗಳು" ಹೊಂದಿರುವ ಹಲವು ಮಿತಿಗಳನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ. + + ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸಿದರೆ, ಬಳಕೆದಾರರು ಅದನ್ನು ಬದಲಾಯಿಸಲು ಅಥವಾ ಅತಿಕ್ರಮಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation> <translation id="6665670272107384733">ತ್ವರಿತ ಅನ್ಲಾಕ್ ಬಳಸಲು ಬಳಕೆದಾರರು ಎಷ್ಟು ಬಾರಿ ಪಾಸ್ವರ್ಡ್ ನಮೂದಿಸಬೇಕು ಎಂಬುದನ್ನು ಸೆಟ್ ಮಾಡಿ</translation> <translation id="6681229465468164801">USB ಸಾಧನಕ್ಕೆ ಪ್ರವೇಶ ನೀಡಬೇಕೆಂದು ಬಳಕೆದಾರರನ್ನು ಕೇಳದಂತೆ ತಡೆಯಲಾಗಿರುವ ಸೈಟ್ಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವ URL ಮಾದರಿಗಳ ಪಟ್ಟಿಯನ್ನು ಹೊಂದಿಸಲು ಇದು ನಿಮಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ. @@ -2142,11 +2142,6 @@ <translation id="6786967369487349613">ರೋಮಿಂಗ್ ಪ್ರೊಫೈಲ್ ಡೈರೆಕ್ಟರಿಯನ್ನು ಹೊಂದಿಸಿ</translation> <translation id="6810445994095397827">ಈ ಸೈಟ್ಗಳಲ್ಲಿ JavaScript ನಿರ್ಬಂಧಿಸು</translation> <translation id="681446116407619279">ಬೆಂಬಲಿತ ಪ್ರಮಾಣೀಕರಣ ಯೋಜನೆಗಳು</translation> -<translation id="6832455357698286434"> - ಸುರಕ್ಷಿತ ಸಂದರ್ಭವೆಂದು ಪರಿಗಣಿಸಲಾಗುವ ಮೂಲಗಳ (URLಗಳ) ಪಟ್ಟಿಯನ್ನು ಅಥವಾ ಹೋಸ್ಟ್ ಹೆಸರಿನ ಪ್ಯಾಟರ್ನ್ಗಳನ್ನು ("*.example.com" ನಂತಹ) ಈ ಕಾರ್ಯನೀತಿಯು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ. ಇದರ ಉದ್ದೇಶ, ಆಂತರಿಕ ವೆಬ್ ಅಭಿವೃದ್ಧಿಗೆ ಸ್ಟೇಜಿಂಗ್ ಸರ್ವರ್ ಒಂದನ್ನು ಸೆಟಪ್ ಮಾಡಲು ಸಂಸ್ಥೆಗಳಿಗೆ ಅವಕಾಶ ಕಲ್ಪಿಸುವುದು. ಏಕೆಂದರೆ ಇದರಿಂದಾಗಿ ಅವರ ಡೆವಲಪರ್ಗಳಿಗೆ, TLS ಅನ್ನು ಸ್ಟೇಜಿಂಗ್ ಸರ್ವರ್ನಲ್ಲಿ ನಿಯೋಜಿಸದೆಯೇ ಸುರಕ್ಷಿತ ಸಂದರ್ಭಗಳಲ್ಲಿ ಅಗತ್ಯವಿರುವ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಪರೀಕ್ಷಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ. -ಈ ಕಾರ್ಯನೀತಿಯಲ್ಲಿರುವ URL ಗಳ ಪಟ್ಟಿಯನ್ನು ಹೊಂದಿಸುವುದರ ಪರಿಣಾಮವೂ, ಮತ್ತು '--unsafely-treat-insecure-origin-as-secure' ಎಂಬ ಕಮಾಂಡ್-ಲೈನ್ ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ಅದೇ URL ಗಳ ಅಲ್ಪವಿರಾಮದಿಂದ ಬೇರ್ಪಡಿಸಿದ ಪಟ್ಟಿಗೆ ಹೊಂದಿಸುವ ಪರಿಣಾಮವೂ ಒಂದೇ ಆಗಿದೆ. ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಹೊಂದಿಸಿದರೆ, ಅದು ಕಮಾಂಡ್-ಲೈನ್ ಫ್ಲಾಗ್ ಅನ್ನು ಅತಿಕ್ರಮಿಸುತ್ತದೆ. -ಸುರಕ್ಷಿತ ಸಂದರ್ಭಗಳ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ, https://www.w3.org/TR/secure-contexts/ ಅನ್ನು ನೋಡಿ. - </translation> <translation id="6835883744948188639">ಪುನರಾರಂಭಿಸಲು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ ಎಂದು ಬಳಕೆದಾರರಿಗೆ ಸೂಚಿಸಲು, ಮರುಕಳಿಸುವ ಪ್ರಾಂಪ್ಟ್ ಅನ್ನು ತೋರಿಸಿ</translation> <translation id="6838056959556423778"><ph name="PRODUCT_NAME" /> ಡಿಫಾಲ್ಟ್ ಪ್ರಿಂಟರ್ ಆಯ್ಕೆಯ ನಿಯಮಗಳನ್ನು ಅತಿಕ್ರಮಿಸುತ್ತದೆ. @@ -2246,6 +2241,17 @@ <translation id="6943577887654905793">Mac/Linux ಆದ್ಯತೆಯ ಹೆಸರು:</translation> <translation id="69525503251220566">ಡಿಫಾಲ್ಟ್ ಹುಟುಕಾಟ ಪೂರೈಕೆದಾರರಿಗಾಗಿ ಚಿತ್ರದ ಮೂಲಕ ಹುಟುಕಾಟದ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಪೂರೈಸುವ ಮಾನದಂಡ</translation> <translation id="6956272732789158625">ಕೀ ರಚನೆ ಬಳಸಲು ಯಾವುದೇ ಸೈಟ್ ಅನುಮತಿಸಬೇಡಿ</translation> +<translation id="6982028490425791294"> + ಈ ನೀತಿಯನ್ನು ಸರಿ ಎಂದು ಹೊಂದಿಸಿದ್ದರೆ, Google ಸೇವೆಗಳಿಂದ (ಉದಾ., Google Meet) WebRTC ಈವೆಂಟ್ ಲಾಗ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ಮತ್ತು ಆ ಲಾಗ್ಗಳನ್ನು Google ಗೆ ಅಪ್ಲೋಡ್ ಮಾಡಲು <ph name="PRODUCT_NAME" /> ಗೆ ಅನುಮತಿಸಲಾಗಿದೆ. + + ಈ ನೀತಿಯನ್ನು ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದ್ದರೆ ಅಥವಾ ಹೊಂದಿಸದೇ ಇದ್ದಲ್ಲಿ, <ph name="PRODUCT_NAME" /> ಇಂತಹ ಲಾಗ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸದಿರಬಹುದು ಅಥವಾ ಅಪ್ಲೋಡ್ ಮಾಡದಿರಬಹುದು. + + ಈ ಲಾಗ್ಗಳು ಕಳುಹಿಸಿದ ಮತ್ತು ಸ್ವೀಕರಿಸಿದ RTP ಪ್ಯಾಕೆಟ್ಗಳ ಸಮಯ ಮತ್ತು ಗಾತ್ರ, ನೆಟ್ವರ್ಕ್ ದಟ್ಟಣೆ ಕುರಿತು ಪ್ರತಿಕ್ರಿಯೆ ಹಾಗೂ ಆಡಿಯೋ ಮತ್ತು ವೀಡಿಯೊ ಫ್ರೇಮ್ಗಳ ಸಮಯ ಮತ್ತು ಗುಣಮಟ್ಟ ಮೆಟಾಡೇಟಾದಂತಹ ಮಾಹಿತಿಯನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ. ಬ್ಯಾಂಡ್ವಿಡ್ತ್ ಅಂದಾಜು ಸಮಸ್ಯೆಗಳಂತಹ Chrome ನಲ್ಲಿನ ಆಡಿಯೋ ಮತ್ತು ವೀಡಿಯೊ ಕರೆಗಳ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸುವಾಗ ಈ ಮಾಹಿತಿಯು ಉಪಯುಕ್ತವಾಗಿದೆ. ಲಾಗ್ಗಳು ಕರೆಯ ಆಡಿಯೋ ಅಥವಾ ವೀಡಿಯೊ ವಿಷಯಗಳನ್ನು ಒಳಗೊಂಡಿರುವುದಿಲ್ಲ. + + ಈ ಡೇಟಾ ಸಂಗ್ರಹಣೆಯನ್ನು, Google Hangouts ಅಥವಾ Google Meet ನಂತಹ Google ನ ವೆಬ್ ಸೇವೆಗಳಿಂದ ಮಾತ್ರ ಸಕ್ರಿಯಗೊಳಿಸಬಹುದು. + + Google ಸೇವೆಯಿಂದಲೇ ಸಂಗ್ರಹಿಸಿದ ಇತರ ಲಾಗ್ಗಳೊಂದಿಗೆ ಅಂದರೆ ಸೆಷನ್ ಐಡಿ ಮೂಲಕ ಈ ಲಾಗ್ಗಳನ್ನು ಲಿಂಕ್ ಮಾಡಬಹುದು; ತಪ್ಪುಗಳ ತಿದ್ದುಪಡಿಯನ್ನು ಸುಲಭಗೊಳಿಸಲು ಇದನ್ನು ಮಾಡಲಾಗುತ್ತದೆ. + </translation> <translation id="6994082778848658360">ಈ ವೈಶಿಷ್ಟ್ಯದ ಜೊತೆ ಹೊಂದಾಣಿಕೆಯಾಗುವುದಾದರೆ, ಎರಡನೆಯ ಅಂಶದ ದೃಢೀಕರಣವನ್ನು ಒದಗಿಸಲು ಅಂತರ್ಗತ ಸುರಕ್ಷಿತ ಅಂಶವುಳ್ಳ ಹಾರ್ಡ್ವೇರ್ ಅನ್ನು ಹೇಗೆ ಬಳಸಬಹುದು ಎಂಬುದನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ. ಬಳಕೆದಾರರ ದೈಹಿಕ ಉಪಸ್ಥಿತಿಯನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಯಂತ್ರದ ಪವರ್ ಬಟನ್ ಅನ್ನು ಉಪಯೋಗಿಸಲಾಗುತ್ತದೆ. 'ನಿಷ್ಕಿಯಗೊಳಿಸಿ' ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದರೆ, ಎರಡನೆಯ ಅಂಶವನ್ನು ಒದಗಿಸಲಾಗುವುದಿಲ್ಲ. @@ -2498,7 +2504,6 @@ <translation id="7617319494457709698">ರಿಮೋಟ್ ದೃಢೀಕರಣಕ್ಕಾಗಿ <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> ಕಾರ್ಯ <ph name="CHALLENGE_USER_KEY_FUNCTION" /> ಬಳಸಲು ಅನುಮತಿಸಿದ ವಿಸ್ತರಣೆಗಳನ್ನು ಈ ನೀತಿ ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ. API ಬಳಸಲು ಈ ಪಟ್ಟಿಗೆ ವಿಸ್ತರಣೆಗಳನ್ನು ಸೇರಿಸುವ ಅಗತ್ಯವಿದೆ. ವಿಸ್ತರಣೆಯು ಪಟ್ಟಿಯಲ್ಲಿರದಿದ್ದರೆ ಅಥವಾ ಪಟ್ಟಿಯನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ, API ಗೆ ಮಾಡುವ ಕರೆಯು ದೋಷದ ಕೋಡ್ ಮೂಲಕ ವಿಫಲವಾಗುತ್ತದೆ.</translation> -<translation id="7620300057302654932">ಮೂಲಗಳು ಅಥವಾ ಹೋಸ್ಟ್ ಹೆಸರಿನ ಪ್ಯಾಟರ್ನ್ಗಳನ್ನು ಸುರಕ್ಷಿತ ಸಂದರ್ಭವೆಂದು ಪರಿಗಣಿಸಬೇಕು.</translation> <translation id="7625444193696794922">ಈ ಸಾಧನವನ್ನು ಲಾಕ್ ಮಾಡಬೇಕಾದ ಬಿಡುಗಡೆ ಚಾನಲ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ.</translation> <translation id="7632724434767231364">GSSAPI ಲೈಬ್ರರಿ ಹೆಸರು</translation> <translation id="7635471475589566552"><ph name="PRODUCT_NAME" /> ರಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್ನ ಸ್ಥಳವನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಬಳಕೆದಾರರು ಸ್ಥಳವನ್ನು ಬದಲಿಸುವುದರಿಂದ ತಡೆಯುತ್ತದೆ. ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನೀವು ಸಕ್ರಿಯಗೊಳಿಸಿದಲ್ಲಿ, <ph name="PRODUCT_NAME" /> ನಿರ್ದಿಷ್ಟ ಸ್ಥಳವನ್ನು ಬಳಸುತ್ತದೆ. ಕಾನ್ಫಿಗರ್ ಮಾಡಿದ ಸ್ಥಳವನ್ನು ಬೆಂಬಲಿಸದಿದ್ದರೆ, ಬದಲಿಗೆ 'en-US' ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದರೆ ಅಥವಾ ಹೊಂದಿಸದಿದ್ದಲ್ಲಿ, ಬಳಕೆದಾರ ನಿರ್ದಿಷ್ಟ ಪಡಿಸಿದ ಪ್ರಾಶಸ್ತ್ಯ ಸ್ಥಳವನ್ನು (ಕಾನ್ಫಿಗರ್ ಮಾಡಿದರೆ) <ph name="PRODUCT_NAME" /> ಬಳಸುತ್ತದೆ, ಸಿಸ್ಟಂ ಸ್ಥಳ ಅಥವಾ 'en-US' ನ ಹಿನ್ನೆಲೆಯ ಸ್ಥಳವನ್ನು ಬಳಸುತ್ತದೆ.</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index 3fc58e5..f47d448b 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -275,6 +275,7 @@ false로 설정하면 통계 및 진단 데이터 보고가 사용 중지됩니다. 설정하지 않으면 관리되지 않는 기기에서는 통계 및 진단 데이터 보고가 사용 중지되고 관리 기기에서는 사용 설정됩니다.</translation> +<translation id="1920046221095339924">기기에서 관리 세션 허용</translation> <translation id="1929709556673267855">기기에 적용되는 엔터프라이즈 프린터 설정을 제공합니다. 이 정책을 통해 <ph name="PRODUCT_OS_NAME" /> 기기에 프린터 설정을 제공할 수 있습니다. 정책 형식은 NativePrinters 사전과 같으며, 허용 목록 또는 차단 목록을 사용하려면 프린터별로 'id' 또는 'guid' 입력란을 추가해야 합니다. @@ -308,6 +309,7 @@ 설정이 사용되거나 값이 지정되지 않으면 사용자가 UI에서 주소 정보 자동 완성 기능을 관리할 수 있게 됩니다.</translation> <translation id="1960840544413786116">subjectAlternativeName 확장 필드가 누락되었으나 로컬 트러스트 앵커에서 발급된 인증서 허용 여부</translation> +<translation id="1962273523772270623">Google 서비스의 WebRTC 이벤트 로그 수집 허용</translation> <translation id="1964634611280150550">시크릿 모드 사용이 중지됨</translation> <translation id="1964802606569741174">이 정책은 Android YouTube 앱에 아무런 영향도 미치지 않습니다. YouTube의 안전 모드를 실행해야 하는 경우 Android YouTube 앱 설치를 허용하지 않아야 합니다.</translation> <translation id="1969212217917526199">원격 액세스 호스트의 디버그 빌드 관련 정책을 재정의합니다. @@ -673,7 +675,6 @@ 모든 목록 항목은 다른 기기 로컬 계정을 구별하기 위해 내부적으로 사용되는 식별자를 지정합니다.</translation> <translation id="2769952903507981510">원격 액세스 호스트에 대한 필수 도메인 이름 구성</translation> <translation id="2787173078141616821">Android 상태에 관한 정보 보고</translation> -<translation id="2793923553868251161">보안 컨텍스트로 처리될 출처입니다.</translation> <translation id="2799297758492717491">URL 패턴의 허용 목록에서 미디어 자동 재생 허용</translation> <translation id="2801230735743888564">기기가 오프라인일 때 사용자가 공룡 부활절 달걀 게임을 플레이할 수 있도록 허용합니다. @@ -1865,12 +1866,6 @@ <translation id="6155936611791017817">로그인 화면에서 큰 커서의 기본 상태를 설정</translation> <translation id="6157537876488211233">쉼표로 구분된 프록시 우회 규칙 목록</translation> <translation id="6158324314836466367">엔터프라이즈 웹 스토어 이름(지원 중단됨)</translation> -<translation id="6164955668342404660">M69에서 지원이 중단되었습니다. 대신 OverrideSecurityRestrictionsOnInsecureOrigin을 사용하세요. - - 이 정책에서는 안전한 컨텍스트로 처리될 출처(URL)의 목록을 지정합니다. 이 정책을 통해 조직은 내부 웹 개발을 위한 스테이징 서버를 설정하여 개발자가 스테이징 서버에서 TLS를 배포하지 않고도 안전한 컨텍스트에 필요한 기능을 테스트할 수 있도록 구성할 수 있습니다. - 이 정책에서 URL 목록을 설정하면 같은 URL의 쉼표로 구분된 목록에 명령줄 플래그 '--unsafely-treat-insecure-origin-as-secure'를 설정하는 것과 같은 효과를 가집니다. 이 정책이 설정되면 명령줄 플래그를 재정의합니다. - 안전한 컨텍스트에 관해 자세히 알아보려면 https://www.w3.org/TR/secure-contexts/를 참조하세요. - </translation> <translation id="6181608880636987460"><ph name="FLASH_PLUGIN_NAME" /> 플러그인 실행을 허용하지 않을 사이트를 지정하는 URL 패턴 목록을 설정하도록 허용합니다. 이 정책을 설정하지 않으면 'DefaultPluginsSetting' 정책(설정된 경우) 또는 사용자 개인 설정의 전체 기본값이 모든 사이트에 사용됩니다.</translation> @@ -1997,6 +1992,11 @@ 이 정책이 설정되지 않았거나 목록이 비어있는 경우 <ph name="PRODUCT_NAME" />의 모든 스키마에 액세스할 수 있습니다.</translation> <translation id="6652197835259177259">로컬 관리 사용자 설정</translation> <translation id="6658245400435704251">업데이트를 처음 서버로 푸시한 시점부터 기기가 몇 초까지 임의로 업데이트의 다운로드를 지연시킬 수 있는지 지정합니다. 기기가 이 시간의 일부를 일반 시계 시간 기준으로, 그리고 나머지 시간을 업데이트 확인 횟수 기준으로 지연시킵니다. 모든 경우, 기기가 고착되어 업데이트 다운로드를 계속 기다리지 않도록 분산의 상한이 일정 시간으로 제한되어 있습니다.</translation> +<translation id="6665599130599311250">이 정책이 false로 설정되어 있거나 설정되어 있지 않으면 관리 손님 세션은 https://support.google.com/chrome/a/answer/3017014에 설명된 대로 표준 '공개 세션'으로 작동합니다. + + 이 정책이 true로 설정되어 있으면 관리 손님 세션은 '관리 세션'으로 작동하여 일반 '공개 세션'에 적용된 여러 제한을 해제합니다. + + 이 정책이 설정되어 있으면 사용자가 변경하거나 재정의할 수 없습니다.</translation> <translation id="6665670272107384733">빠른 잠금 해제를 사용하기 위해 사용자가 비밀번호를 얼마나 자주 입력해야 하는지 설정</translation> <translation id="6681229465468164801">사용자에게 USB 기기 액세스 권한 허용을 요청하지 못하도록 차단된 사이트를 지정하는 URL 패턴 목록을 설정하도록 허용합니다. @@ -2046,11 +2046,6 @@ <translation id="6786967369487349613">로밍 프로필 디렉토리를 설정합니다.</translation> <translation id="6810445994095397827">이 사이트에서 자바스크립트 차단</translation> <translation id="681446116407619279">지원되는 인증 스키마</translation> -<translation id="6832455357698286434"> - 이 정책에서는 안전한 컨텍스트로 처리될 출처(URL) 또는 호스트 이름 패턴('*.example.com' 등)의 목록을 지정합니다. 이 정책을 통해 조직은 내부 웹 개발을 위한 스테이징 서버를 설정하여 개발자가 스테이징 서버에서 TLS를 배포하지 않고도 안전한 컨텍스트에 필요한 기능을 테스트할 수 있도록 구성할 수 있습니다. - 이 정책에서 URL 목록을 설정하면 같은 URL의 쉼표로 구분된 목록에 명령줄 플래그 '--unsafely-treat-insecure-origin-as-secure'를 설정하는 것과 같은 효과를 가집니다. 이 정책이 설정되면 명령줄 플래그를 재정의합니다. - 안전한 컨텍스트에 관해 자세히 알아보려면 https://www.w3.org/TR/secure-contexts/를 참조하세요. - </translation> <translation id="6835883744948188639">사용자에게 재실행하는 것이 좋다는 메시지를 반복하여 표시</translation> <translation id="6838056959556423778"><ph name="PRODUCT_NAME" /> 기본 프린터 선택 규칙을 재정의합니다. @@ -2162,6 +2157,17 @@ <translation id="6943577887654905793">Mac 및 Linux 환경설정 이름:</translation> <translation id="69525503251220566">기본 검색엔진에 이미지로 검색 기능을 제공하는 매개변수</translation> <translation id="6956272732789158625">모든 사이트에서 키 생성 사용 허용 안함</translation> +<translation id="6982028490425791294"> + 이 정책이 true로 설정되어 있으면 <ph name="PRODUCT_NAME" />에서 Google 서비스(예: Google Meet)에서 WebRTC 이벤트 로그를 수집하고 이러한 로그를 Google로 업로드할 수 있도록 허용합니다. + + 이 정책이 false로 설정되어 있거나 설정되어 있지 않으면 <ph name="PRODUCT_NAME" />에서 이러한 로그를 수집하거나 업로드할 수 없습니다. + + 이러한 로그에는 주고받는 RTP 패킷의 시간 및 크기, 네트워크 혼잡에 관한 의견, 오디오/동영상 프레임의 시간 및 품질에 관한 메타데이터 등과 같은 정보가 포함됩니다. 이 정보는 대역폭 예상 문제 등과 같은 Chrome에서 음성/화상 통화 시 문제를 디버깅할 때 유용합니다. 로그에는 통화의 음성 또는 동영상 콘텐츠가 포함되어 있지 않습니다. + + 이 데이터 수집은 Google 행아웃, Google Meet와 같은 Google 웹 서비스에 의해서만 실행됩니다. + + 이러한 로그는 세션 ID를 통해 Google 서비스 자체에서 수집한 다른 로그와 연결될 수 있습니다. 이는 디버깅을 더 쉽게 하기 위해서입니다. + </translation> <translation id="6994082778848658360">내장된 보안 요소 하드웨어가 2단계 인증과 호환될 경우, 2단계 인증을 제공하는 데 어떻게 사용할지 지정합니다. 기기 전원 버튼은 사용자가 실제로 있는지 감지하는 데 사용됩니다. '사용 안함'을 선택하면 2차 요소가 제공되지 않습니다. @@ -2408,7 +2414,6 @@ <translation id="7617319494457709698">이 정책은 원격 인증에 <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> 기능 <ph name="CHALLENGE_USER_KEY_FUNCTION" />을(를) 사용하도록 허용된 확장 프로그램을 지정합니다. API를 사용하려면 확장 프로그램을 이 목록에 추가해야 합니다. 확장 프로그램이 목록에 없거나 목록이 설정되지 않은 경우, API에 호출 시 오류 코드가 표시되며 호출에 실패합니다.</translation> -<translation id="7620300057302654932">안전한 컨텍스트로 처리될 출처 또는 호스트 이름 패턴입니다.</translation> <translation id="7625444193696794922">기기에서 사용해야 할 특정 배포 채널을 지정합니다.</translation> <translation id="7632724434767231364">GSSAPI 라이브러리 이름</translation> <translation id="7635471475589566552"><ph name="PRODUCT_NAME" />에서 애플리케이션 언어를 설정하고 사용자가 언어를 변경할 수 없게 합니다.
diff --git a/components/policy/resources/policy_templates_lt.xtb b/components/policy/resources/policy_templates_lt.xtb index 0ecf2d3..6b5eafd0 100644 --- a/components/policy/resources/policy_templates_lt.xtb +++ b/components/policy/resources/policy_templates_lt.xtb
@@ -275,6 +275,7 @@ Jei nustatyta kaip „false“, metrikos ir diagnostikos duomenų ataskaitų teikimas bus išjungtas. Jei nesukonfigūruota, metrikos ir diagnostikos duomenų ataskaitos bus išjungtos netvarkomuose įrenginiuose ir įgalintos tvarkomuose įrenginiuose.</translation> +<translation id="1920046221095339924">Įrenginio valdomų seansų leidimas</translation> <translation id="1929709556673267855">Nurodoma su įrenginiais susietų įmonės spausdintuvų konfigūracija. Pagal šią politiką leidžiama nurodyti „<ph name="PRODUCT_OS_NAME" />“ įrenginių spausdintuvų konfigūraciją. Toks pats formatas nurodytas „NativePrinters“ žodyne su papildomu būtinu kiekvieno spausdintuvo lauku „id“ arba „guid“, kad juos būtų galima įtraukti į baltąjį arba juodąjį sąrašą. @@ -308,6 +309,7 @@ Jei šis nustatymas įgalintas arba vertė nenustatyta, naudotojas galės valdyti adreso informacijos Automatinio pildymo funkciją naudotojo sąsajoje.</translation> <translation id="1960840544413786116">Ar leidžiami sertifikatai, išduoti naudojant vietinius patikimus prieraišus, kuriuose nėra plėtinio „subjectAlternativeName“</translation> +<translation id="1962273523772270623">„WebRTC“ įvykių žurnalų rinkimo iš „Google“ paslaugų leidimas</translation> <translation id="1964634611280150550">Inkognito režimas neleidžiamas</translation> <translation id="1964802606569741174">Ši politika neturi įtakos „Android“ skirtai „YouTube“ programai. Jei turėtų būti taikomi „YouTube“ saugos nustatymai, „Android“ skirtos „YouTube“ programos diegimas turėtų būti neleidžiamas.</translation> <translation id="1969212217917526199">Pakeičiama nuotolinės prieigos prieglobos derinimo versijų politika. @@ -675,7 +677,6 @@ Kiekvienas sąrašo įrašas nurodo identifikatorių, naudojamą vidiniais tikslais siekiant atskirti skirtingas vietines įrenginio paskyras.</translation> <translation id="2769952903507981510">Konfigūruoti reikiamą nuotolinės prieigos prieglobų domeno pavadinimą</translation> <translation id="2787173078141616821">Informacijos apie „Android“ būseną ataskaita</translation> -<translation id="2793923553868251161">Šaltiniai, kurie turi būti laikomi saugiu kontekstu.</translation> <translation id="2799297758492717491">Leisti automatinį medijos, atitinkančios į baltąjį sąrašą įtrauktus URL šablonus, paleidimą</translation> <translation id="2801230735743888564">Leidžiama naudotojams žaisti dinozaurų Velykų kiaušinių žaidimą, kai įrenginys neprijungtas prie interneto. @@ -1873,12 +1874,6 @@ <translation id="6155936611791017817">Nustatyti numatytąją didelio žymeklio prisijungimo ekrane būklę</translation> <translation id="6157537876488211233">Kableliais atskirtų tarpinio serverio apėjimo taisyklių sąrašas</translation> <translation id="6158324314836466367">Įmonės internetinės parduotuvės pavadinimas (nebenaudojama)</translation> -<translation id="6164955668342404660">Nebenaudojama M69 versijos programoje. Vietoje to naudokite „OverrideSecurityRestrictionsOnInsecureOrigin“. - - Politika nurodo šaltinių (URL), kurie turi būti laikomi saugiu kontekstu, sąrašą. Siekiama leisti organizacijoms nustatyti darbinį serverį vidiniams žiniatinklio kūrimo darbams atlikti, kad kūrėjai galėtų išbandyti funkcijas, kurioms reikia saugaus konteksto, ir darbiniame serveryje nereikėtų diegti TLS. - Šioje politikoje nustačius URL sąrašą poveikis toks pat, kaip nustačius komandinės eilutės žymą „--unsafely-treat-insecure-origin-as-secure“ į kableliais atskirtų tų pačių URL sąrašą. Jei ši politika nustatyta, bus nepaisoma komandinės eilutės žymos. - Daugiau informacijos apie saugius kontekstus pateikiama adresu https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Galima nustatyti URL šablonų, kuriuose nurodomos svetainės, kurioms neleidžiama paleisti papildinio „<ph name="FLASH_PLUGIN_NAME" />“, sąrašą. Jei ši politika nenustatyta, visose svetainėse bus naudojama visuotinė numatytoji vertė iš politikos „DefaultPluginsSetting“ (jei ji nustatyta) arba naudotojo asmeninės konfigūracijos (kitu atveju).</translation> @@ -2005,6 +2000,11 @@ Jei ši politika nenustatyta ar sąrašas yra tuščias, visos schemos bus pasiekiamos „<ph name="PRODUCT_NAME" />“.</translation> <translation id="6652197835259177259">Vietoje tvarkomų naudotojų paskyrų nustatymai</translation> <translation id="6658245400435704251">Nurodoma, iki kiek sekundžių įrenginys gali atsitiktinai atidėti naujinio atsisiuntimą nuo tada, kai naujinys buvo pirmąkart išsiųstas iš serverio. Įrenginys gali laukti dalį šio laiko pagal realųjį laiką, o likusią dalį – pagal naujinio tikrinimo kartus. Bet kuriuo atveju yra nustatyta viršutinė sklaidos riba (tam tikra trukmė), kad įrenginys nelauktų atsisiuntimo be galo.</translation> +<translation id="6665599130599311250">Jei ši politika nustatyta kaip „False“ arba palikta nenustatyta, tvarkomas svečių seansas bus dokumentuojamas https://support.google.com/chrome/a/answer/3017014 – įprastas viešas seansas. + + Jei ši politika nustatyta kaip „True“, tvarkomas svečių seansas vyks kaip tvarkomas seansas, kuris padidins daugelį apribojimų, taikomų įprastiems viešiems seansams. + + Jei ši politika nustatyta, naudotojas negali jos keisti ar nepaisyti.</translation> <translation id="6665670272107384733">Nustatyti, kaip dažnai naudotojas turi įvesti slaptažodį, kad galėtų naudoti spartųjį atrakinimą</translation> <translation id="6681229465468164801">Galite nustatyti URL šablonų, kuriuose nurodomos svetainės, kurioms neleidžiama prašyti naudotojo suteikti jiems galimybės pasiekti USB įrenginį, sąrašą. @@ -2054,11 +2054,6 @@ <translation id="6786967369487349613">Nustatyti tarptinklinio ryšio profilio katalogą</translation> <translation id="6810445994095397827">Blokuoti „JavaScript“ šiose svetainėse</translation> <translation id="681446116407619279">Palaikomos tapatumo nustatymo schemos</translation> -<translation id="6832455357698286434"> - Politika nurodo šaltinių (URL) arba prieglobos serverio pavadinimo šablonų (pvz., „*.example.com“), kurie turi būti laikomi saugiu kontekstu, sąrašą. Siekiama leisti organizacijoms nustatyti darbinį serverį vidiniams žiniatinklio kūrimo darbams atlikti, kad kūrėjai galėtų išbandyti funkcijas, kurioms reikia saugaus konteksto, ir darbiniame serveryje nereikėtų diegti TLS. - Šioje politikoje nustačius URL sąrašą poveikis toks pat, kaip nustačius komandinės eilutės žymą „--unsafely-treat-insecure-origin-as-secure“ į kableliais atskirtų tų pačių URL sąrašą. Jei ši politika nustatyta, bus nepaisoma komandinės eilutės žymos. - Daugiau informacijos apie saugius kontekstus pateikiama adresu https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Pasikartojančio raginimo, kuriame nurodoma, kad rekomenduojama paleisti iš naujo, rodymas naudotojui</translation> <translation id="6838056959556423778">Nepaisoma „<ph name="PRODUCT_NAME" />“ numatytojo spausdintuvo pasirinkimo taisyklių. @@ -2170,6 +2165,17 @@ <translation id="6943577887654905793">„Mac“ / „Linux“ nuostatos pavadinimas:</translation> <translation id="69525503251220566">Parametras, nurodantis paieškos pagal vaizdą funkciją numatytajam paieškos teikėjui</translation> <translation id="6956272732789158625">Neleisti jokiai svetainei naudoti rakto generavimo</translation> +<translation id="6982028490425791294"> + Jei ši politika nustatyta kaip „True“, „<ph name="PRODUCT_NAME" />“ leidžiama rinkti „WebRTC“ įvykių žurnalus iš „Google“ paslaugų (pvz., „Google Meet“) ir įkelti šiuos žurnalus į „Google“. + + Jei ši politika nustatyta kaip „False“ arba nenustatyta, „<ph name="PRODUCT_NAME" />“ nerinks ir neįkels tokių žurnalų. + + Šiuose žurnaluose yra tokios informacijos kaip išsiųstų ir gautų RTP paketų laikas ir dydis, atsiliepimai apie tinklo perpildymą ir metaduomenys apie garso ir vaizdo įrašų kadrų laiką ir kokybę. Ši informacija naudinga derinant problemas dėl garso ir vaizdo skambučių „Chrome“, pavyzdžiui, siuntimo spartos vertinimo problemas ir kt. Žurnaluose nėra skambučių garso ir vaizdo turinio. + + Šį duomenų rinkimą gali suaktyvinti tik „Google“ žiniatinklio paslaugos, pvz., „Google Hangouts“ ar „Google Meet“. + + Šie žurnalai naudojantis seanso ID gali būti susieti su kitais žurnalais, kuriuos surinko pačios „Google“ paslaugos; tai skirta lengvesniam derinimui. + </translation> <translation id="6994082778848658360">Nurodoma, kaip vidinė saugi elemento aparatinė įranga gali būti naudojama teikiant tapatybės nustatymą dviem veiksniais, jei ji suderinama su šia funkcija. Įrenginio maitinimo mygtukas naudojamas naudotojo buvimo vietai aptikti. Jei pasirinkta „Išjungta“, neteikiamas joks antras veiksnys. @@ -2416,7 +2422,6 @@ <translation id="7617319494457709698">Pagal šią politiką nustatomi plėtiniai, kuriems leidžiama naudoti „<ph name="ENTERPRISE_PLATFORM_KEYS_API" />“ funkciją „<ph name="CHALLENGE_USER_KEY_FUNCTION" />“ patvirtinant nuotoliniu būdu. Plėtiniai turi būti pridėti prie šio sąrašo, kad būtų galima naudoti API. Jei plėtinio nėra sąraše arba sąrašas nenustatytas, iškviečiant API įvyks klaida ir bus pateiktas jos kodas.</translation> -<translation id="7620300057302654932">Šaltiniai arba prieglobos serverio pavadinimo šablonai laikomi kaip saugus kontekstas.</translation> <translation id="7625444193696794922">Nurodomas leidimo kanalas, su kuriuo šis įrenginys turėtų būti sujungtas.</translation> <translation id="7632724434767231364">GSSAPI bibliotekos pavadinimas</translation> <translation id="7635471475589566552">„<ph name="PRODUCT_NAME" />“ konfigūruojama programos lokalė ir naudotojams neleidžiama jos keisti.
diff --git a/components/policy/resources/policy_templates_lv.xtb b/components/policy/resources/policy_templates_lv.xtb index 1f6da0b..63292eb 100644 --- a/components/policy/resources/policy_templates_lv.xtb +++ b/components/policy/resources/policy_templates_lv.xtb
@@ -678,7 +678,6 @@ Katrs saraksta ieraksts apzīmē identifikatoru, kas tiek izmantots iekšēji, lai atšķirtu dažādus ierīces lokālos kontus.</translation> <translation id="2769952903507981510">Attālās piekļuves saimniekdatoru obligātā domēna nosaukuma konfigurēšana</translation> <translation id="2787173078141616821">Sniegt informāciju par Android statusu</translation> -<translation id="2793923553868251161">Avoti, kas jāapstrādā kā drošs konteksts</translation> <translation id="2799297758492717491">Atļauja automātiski atskaņot multivides saturu, ja URL paraugs ir iekļauts baltajā sarakstā</translation> <translation id="2801230735743888564">Ļaujiet lietotājiem spēlēt dinozauru spēli, kad ierīce ir bezsaistē. @@ -1874,12 +1873,6 @@ <translation id="6155936611791017817">Lielā kursora noklusējuma stāvokļa iestatīšana pieteikšanās ekrānā</translation> <translation id="6157537876488211233">Ar komatu atdalītu starpniekserveru apiešanas kārtulu saraksts</translation> <translation id="6158324314836466367">Uzņēmuma interneta veikala nosaukums (darbība ir pārtraukta)</translation> -<translation id="6164955668342404660">Novecojusi versijā M69. Izmantojiet “OverrideSecurityRestrictionsOnInsecureOrigin”. - - Šī politika nosaka tādu avotu (vietrāžu URL) sarakstu, kuri ir jāapstrādā kā drošs konteksts. Nolūks ir atļaut organizācijām iestatīt izstādīšanas serveri iekšējai tīmekļa izstrādei, lai organizācijas izstrādātāji varētu izmēģināt funkcijas, kuru darbībai nepieciešams drošs konteksts, izvairoties no TLS izmantošanas izstādīšanas serverī. - Politikas vietrāžu URL saraksta noteikšanai ir tāds pats rezultāts kā komandrindas atzīmes “--unsafely-treat-insecure-origin-as-secure” mainīšanai uz komatatdalītu sarakstu, kurā ietverti tie paši URL. Ja politika ir iestatīta, tiks ignorēta komandrindas atzīme. - Plašāku informāciju par drošu kontekstu skatiet vietnē https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6181608880636987460">Ļauj iestatīt to vietrāžu URL struktūru sarakstu, kas norāda vietnes, kurās nav atļauts izpildīt spraudni <ph name="FLASH_PLUGIN_NAME" />. Ja šī politika nav iestatīta, visām vietnēm tiks izmantota vispārējā noklusējuma vērtība no politikas “DefaultPluginsSetting” (ja tā ir iestatīta) vai lietotāja personiskās konfigurācijas.</translation> @@ -2002,9 +1995,9 @@ Ja šī politika nav iestatīta vai saraksts ir tukšs, pārlūkā <ph name="PRODUCT_NAME" /> varēs piekļūt visām shēmām.</translation> <translation id="6652197835259177259">Lokāli pārvaldītu lietotāju iestatījumi</translation> <translation id="6658245400435704251">Norāda sekunžu skaitu, kuru laikā ierīce var nejaušā secībā atlikt atjauninājuma lejupielādi, sākot ar laiku, kad serveris pirmo reizi nosūtīja atjauninājumu. Daļa no šī ierīces gaidīšanas laika var būt pulksteņa laiks, un daļa — atjauninājuma pārbaužu skaits. Jebkurā gadījumā izkliede ir saistīta ar noteiktu laika periodu, lai ierīces nebūtu bezgalīgi jāgaida atjauninājuma lejupielāde.</translation> -<translation id="6665599130599311250">Ja politikai ir iestatīta vērtība “False” vai tā nav iestatīta, pārvaldītā viesa sesija rīkosies kā dokumentēts https://support.google.com/chrome/a/answer/3017014 — standarta “Publiskā sesija”. +<translation id="6665599130599311250">Ja politikai ir iestatīta vērtība “False” vai tā nav iestatīta, pārvaldītā viesa sesija tiks dokumentēta kā https://support.google.com/chrome/a/answer/3017014 — standarta “Publiskā sesija”. - Ja šai politikai ir iestatīta vērtība “True”, pārvaldītā viesa sesija pieņems “Pārvaldītās sesijas” rīcību, kas atceļ daudzus ierobežojumus, kuri ir spēkā parastai “Publiskajai sesijai”. + Ja šai politikai ir iestatīta vērtība “True”, pārvaldītā viesa sesija norisināsies kā "Pārvaldītā sesija", kas atceļ daudzus ierobežojumus, kuri ir spēkā parastai “Publiskajai sesijai”. Ja šī politika ir iestatīta, lietotājs to nevar mainīt vai ignorēt.</translation> <translation id="6665670272107384733">Paroles ievadīšanas biežuma iestatīšana, lai varētu izmantot ātro atbloķēšanu</translation> @@ -2055,11 +2048,6 @@ <translation id="6786967369487349613">Iestatīt viesabonēšanas profila direktoriju</translation> <translation id="6810445994095397827">Bloķēt JavaScript šajās vietnēs</translation> <translation id="681446116407619279">Atbalstītās autentifikācijas shēmas</translation> -<translation id="6832455357698286434"> - Šī politika nosaka tādu avotu (vietrāžu URL) vai saimniekdatora nosaukuma rakstu sarakstu (piemēram, *.example.com), kuri ir jāapstrādā kā drošs konteksts. Nolūks ir atļaut organizācijām iestatīt izstādīšanas serveri iekšējai tīmekļa izstrādei, lai organizācijas izstrādātāji varētu izmēģināt funkcijas, kuru darbībai nepieciešams drošs konteksts, izvairoties no TLS izmantošanas izstādīšanas serverī. - Politikas vietrāžu URL saraksta noteikšanai ir tāds pats rezultāts kā komandrindas atzīmes “--unsafely-treat-insecure-origin-as-secure” mainīšanai uz komatatdalītu sarakstu, kurā ietverti tie paši URL. Ja politika ir iestatīta, tā ignorēs komandrindas atzīmi. - Plašāku informāciju par drošu kontekstu skatiet vietnē https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6835883744948188639">Periodiski rādīt lietotājam uzvedni par ieteicamu atkārtotu palaišanu</translation> <translation id="6838056959556423778">Tiek ignorētas <ph name="PRODUCT_NAME" /> noklusējuma printera atlasīšanas kārtulas. @@ -2173,16 +2161,17 @@ <translation id="69525503251220566">Parametrs, kas noklusējuma meklēšanas pakalpojumu sniedzējam nodrošina funkciju Meklēšana pēc attēla</translation> <translation id="6956272732789158625">Neatļaut izmantot atslēgu ģenerēšanu nevienā vietnē</translation> <translation id="6982028490425791294"> - Ja šai politikai ir iestatīta vērtība “True”, <ph name="PRODUCT_NAME" /> ir atļauts apkopot WebRTC notikumu žurnālus no Google pakalpojumiem (piem., Google Meet) un augšupielādēt šos žurnālus uzņēmumam Google. + Ja šai politikai ir iestatīta vērtība “True”, <ph name="PRODUCT_NAME" /> ir atļauts apkopot WebRTC notikumu žurnālus no Google pakalpojumiem (piem., Google Meet) un augšupielādēt šos žurnālus Google. Ja šai politikai ir iestatīta vērtība “False” vai vērtība nav iestatīta, <ph name="PRODUCT_NAME" /> nedrīkst apkopot vai augšupielādēt tādus žurnālus. - Šie žurnāli satur informāciju, piemēram, nosūtīto un saņemto RTP paku laiku un izmēru, atsauksmes par pārslodzi tīklā un metadatus par audio un video ietvaru laiku un kvalitāti. Šī informācija ir noderīga, atkļūdojot problēmas ar audio vai video zvaniem pārlūkā Chrome, piemēram, joslas platuma novērtējuma problēmas utt. Žurnāli nesatur audio vai video saturu no zvana. + + Šie žurnāli satur informāciju, piemēram, nosūtīto un saņemto RTP paku laiks un izmērs, dati par pārslodzi tīklā un metadati par audio un video laiku un kvalitāti. Šī informācija ir noderīga, risinot audio vai video zvanu problēmas pārlūkā Chrome, piemēram, joslas platuma novērtējuma problēmas utt. Žurnāli nesatur zvana audio vai video saturu. Šo datu apkopošanu var aktivizēt tikai Google tīmekļa pakalpojumi, piemēram, Google Hangouts vai Google Meet. - Šos žurnālus, izmantojot sesijas ID, var saistīt ar citiem žurnāliem, kurus apkopo pats Google pakalpojums; tas ir paredzēts, lai atvieglotu atkļūdošanu + Šos žurnālus, izmantojot sesijas ID, var saistīt ar citiem žurnāliem, kurus apkopo pats Google pakalpojums; tas ir paredzēts, lai atvieglotu atkļūdošanu. </translation> <translation id="6994082778848658360">Norāda, kā var izmantot pievienoto drošības elementa aparatūru divfaktoru autentificēšanai, ja tā ir saderīga ar šo funkciju. Lietotāja fiziskās klātbūtnes noteikšanai tiek izmantota ierīces barošanas poga. @@ -2430,7 +2419,6 @@ <translation id="7617319494457709698">Šajā politikā ir norādīti paplašinājumi, kuros atļauts attālajai apstiprināšanai izmantot platformas <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> funkciju <ph name="CHALLENGE_USER_KEY_FUNCTION" />. Lai varētu izmantot API, šim sarakstam ir jāpievieno paplašinājumi. Ja paplašinājums nav iekļauts sarakstā vai ja saraksts nav iestatīts, API izsaukums neizdosies un tiks rādīts kļūdas kods.</translation> -<translation id="7620300057302654932">Avoti vai saimniekdatora nosaukuma raksti, kas jāapstrādā kā drošs konteksts.</translation> <translation id="7625444193696794922">Norāda atbrīvošanas kanālu, pie kura jābūt piesaistītai šai ierīcei.</translation> <translation id="7632724434767231364">GSSAPI bibliotēkas nosaukums</translation> <translation id="7635471475589566552">Konfigurē produktā <ph name="PRODUCT_NAME" /> izmantoto lietojumprogrammas lokalizāciju un neļauj lietotājiem mainīt šo lokalizāciju.
diff --git a/components/policy/resources/policy_templates_ml.xtb b/components/policy/resources/policy_templates_ml.xtb index 1592cbf..9803cdb 100644 --- a/components/policy/resources/policy_templates_ml.xtb +++ b/components/policy/resources/policy_templates_ml.xtb
@@ -315,6 +315,7 @@ <translation id="1914840757300882918">ഈ നയം സജ്ജമാക്കുകയാണെങ്കിൽ, RemoteAccessHostTokenValidationUrl എന്നത് പ്രാമാണീകരിക്കാൻ നൽകിയിരിക്കുന്ന ഇഷ്യൂവർ CN ഉള്ള ഒരു ക്ലയന്റ് സർട്ടിഫിക്കറ്റ് ഹോസ്റ്റ് ഉപയോഗിക്കും. ലഭ്യമായിട്ടുള്ള ഏതൊരു ക്ലയന്റ് സർട്ടിഫിക്കറ്റും ഉപയോഗിക്കാൻ അത് "*" എന്നതാക്കി സജ്ജമാക്കുക. ഈ ഫീച്ചർ നിലവിൽ സെർവറിന്റെ ഭാഗത്തുനിന്ന് പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു.</translation> +<translation id="1920046221095339924">ഉപകരണത്തിൽ, മാനേജ് ചെയ്യപ്പെടുന്ന സെഷൻ അനുവദിക്കുക</translation> <translation id="1929709556673267855">ഉപകരണങ്ങളുമായി ബന്ധിപ്പിച്ചിട്ടുള്ള എന്റർപ്രൈസ് പ്രിന്ററുകൾക്ക് കോൺഫിഗറേഷനുകൾ നൽകുന്നു. <ph name="PRODUCT_OS_NAME" /> ഉപകരണങ്ങൾക്ക് പ്രിന്റർ കോൺഫിഗറേഷൻ നൽകാൻ ഈ നയം നിങ്ങളെ അനുവദിക്കുന്നു. NativePrinters നിഘണ്ടുവിന്റേത് പോലെ തന്നെയാണ് ഫോർമാറ്റ്, ഒപ്പം തന്നെ വൈറ്റ്ലിസ്റ്റ് ചെയ്യാനോ ബ്ലാക്ക്ലിസ്റ്റ് ചെയ്യാനോ ഓരോ പ്രിന്ററിനും ആവശ്യമായ അധിക "id" അല്ലെങ്കിൽ "guid" ഫീൽഡ് ഉണ്ടായിരിക്കും എന്ന് മാത്രം. @@ -348,6 +349,7 @@ ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കിയാലോ അതിന് മൂല്യം ഇല്ലെങ്കിലോ, UI-യിൽ വിലാസത്തിനായുള്ള സ്വമേധയാ പൂരിപ്പിക്കൽ നിയന്ത്രിക്കാൻ ഉപയോക്താവിന് കഴിയും.</translation> <translation id="1960840544413786116">subjectAlternativeName വിപുലീകരണം ലഭ്യമല്ലാത്ത ലോക്കൽ ട്രസ്റ്റ് ആങ്കറുകൾ നൽകുന്ന സർട്ടിഫിക്കറ്റുകൾ അനുവദിക്കണോ</translation> +<translation id="1962273523772270623">Google സേവനങ്ങളിൽ നിന്നുള്ള WebRTC ഇവന്റ് ലോഗുകളുടെ ശേഖരം അനുവദിക്കുക</translation> <translation id="1964634611280150550">ആൾമാറാട്ട മോഡ് പ്രവർത്തനരഹിതമാക്കി</translation> <translation id="1964802606569741174">ഈ നയം Android YouTube ആപ്പിന് ബാധകമല്ല. YouTube-ലെ സുരക്ഷാ മോഡ് നടപ്പിലാക്കണമെങ്കിൽ, Android YouTube ആപ്പിന്റെ ഇൻസ്റ്റലേഷൻ അനുവദിക്കരുത്.</translation> <translation id="1969212217917526199">റിമോട്ട് ആക്സസ്സ് ഹോസ്റ്റിന്റെ ഡീബഗ് ബിൽഡുകളിലെ നയങ്ങൾ അസാധുവാക്കുന്നു. @@ -749,7 +751,6 @@ ഓരോ ലിസ്റ്റ് എൻട്രിയും ഐഡന്റിഫയർ വ്യക്തമാക്കുന്നു, അത് വ്യത്യസ്തമായ ഉപകരണ-പ്രാദേശിക അക്കൗണ്ടുകളെ വേറിട്ടുനിർത്തുന്നതിനായി ആന്തരികമായി ഉപയോഗിക്കുന്നു.</translation> <translation id="2769952903507981510">വിദൂര ആക്സസ്സ് ഹോസ്റ്റിന് ആവശ്യമായുള്ള ഡൊമെയ്ൻ പേര് കോൺഫിഗർ ചെയ്യുക</translation> <translation id="2787173078141616821">Android-ന്റെ നിലയെ കുറിച്ചുള്ള വിവരം റിപ്പോർട്ടുചെയ്യുക</translation> -<translation id="2793923553868251161">ഉത്ഭവങ്ങൾ സുരക്ഷിത സന്ദർഭമായി പരിഗണിക്കപ്പെടും.</translation> <translation id="2799297758492717491">URL പാറ്റേണുകളുടെ ഒരു വൈറ്റ്ലിസ്റ്റിൽ, മീഡിയ സ്വമേധയാ പ്ലേ ചെയ്യൽ അനുവദിക്കുക</translation> <translation id="2801230735743888564">ഉപകരണം ഓഫ്ലൈനായിരിക്കുമ്പോൾ ദിനോസർ ഈസ്റ്റർ എഗ്ഗ് ഗെയിം പ്ലേ ചെയ്യുന്നതിന് ഉപയോക്താക്കളെ അനുവദിക്കുക. @@ -2108,13 +2109,6 @@ <translation id="6155936611791017817">ലോഗിൻ സ്ക്രീനിലെ വലിയ കഴ്സറിന്റെ സ്ഥിര നില സജ്ജമാക്കുക</translation> <translation id="6157537876488211233">പ്രോക്സിയെ മറികടക്കുന്ന നിയമങ്ങളുടെ കോമ കൊണ്ട് വേര്തിരിച്ച ലിസ്റ്റ്</translation> <translation id="6158324314836466367">എന്റർപ്രൈസ് വെബ് സ്റ്റോർ പേര് (ഒഴിവാക്കി)</translation> -<translation id="6164955668342404660">M69-ൽ അവസാനിപ്പിച്ചിരിക്കുന്നു. പകരം OverrideSecurityRestrictionsOnInsecureOrigin ഉപയോഗിക്കുക. - - സുരക്ഷിത സന്ദർഭങ്ങളായി പരിഗണിക്കാവുന്ന -ഉറവിടങ്ങളുടെ (URL-കൾ) ഒരു ലിസ്റ്റ്, നയം നിർദ്ദേശിക്കുന്നു. ഇന്റേണൽ വെബ് ഡെവലപ്പ്മെന്റിനായി സ്റ്റേജിംഗ് സെർവർ സജ്ജീകരിക്കാൻ സ്ഥാപനങ്ങളെ അനുവദിക്കുക എന്നതാണ് ഉദ്ദേശ്യം,ഇതുവഴി, സുരക്ഷിത സന്ദർഭങ്ങൾ ആവശ്യമായ ഫീച്ചറുകളെ, സ്റ്റേജിംഗ് സെർവറിൽ TLS വിന്യസിക്കേണ്ടതിന്റെ ആവശ്യകതയില്ലാതെ ടെസ്റ്റ് ചെയ്യാൻ സ്ഥാപനങ്ങളുടെ ഡെവലപ്പർമാർക്കാകും. - ഈ നയത്തിൽ URL-കളുടെ ഒരു ലിസ്റ്റ് സജ്ജമാക്കുന്നത്, അതേ URL-കളുടെ കോമ കൊണ്ട് വേർതിരിച്ചിട്ടുള്ള ഒരു ലിസ്റ്റിലേക്ക് '--unsafely-treat-insecure-origin-as-secure' എന്ന കമാൻഡ്-ലൈൻ ഫ്ലാഗ് സജ്ജമാക്കുന്നതിന് തുല്യമാണ്. നയം സജ്ജമാക്കിയിട്ടുണ്ടെങ്കിൽ, കമാൻഡ്-ലൈൻ ഫ്ലാഗിനെ ഈ നയം അസാധുവാക്കും. - സുരക്ഷിത സന്ദർഭങ്ങളെ കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക് https://www.w3.org/TR/secure-contexts/ കാണുക - </translation> <translation id="6178075938488052838">ഈ നയം, ആർക്കൊക്കെ <ph name="PRODUCT_OS_NAME" /> സെഷൻ ആരംഭിക്കാനാവും എന്നതിനെ നിയന്ത്രിക്കുന്നു. ഇത് Android-ൽ തന്നെ കൂടുതൽ Google അക്കൗണ്ടുകളിൽ സൈൻ ഇൻ ചെയ്യുന്നതിൽ നിന്ന് ഉപയോക്താക്കളെ തടയുന്നില്ല. ഇത് തടയണമെങ്കിൽ, <ph name="ARC_POLICY_POLICY_NAME" /> എന്നതിന്റെ ഭാഗമായി പ്രത്യേക Android <ph name="ACCOUNT_TYPES_WITH_MANAGEMENT_DISABLED_CLOUDDPC_POLICY_NAME" /> നയം കോൺഫിഗർ ചെയ്യുക.</translation> <translation id="6181608880636987460"><ph name="FLASH_PLUGIN_NAME" /> പ്ലഗിൻ റൺ ചെയ്യാൻ അനുവദിക്കപ്പെടാത്ത സൈറ്റുകൾ വ്യക്തമാക്കുന്ന url പാറ്റേണുകളുടെ ഒരു ലിസ്റ്റ് സജ്ജീകരിക്കുന്നതിന് നിങ്ങളെ അനുവദിക്കുന്നു. @@ -2251,6 +2245,11 @@ ഈ നയം സജ്ജമാക്കാതെ വിടുകയോ ലിസ്റ്റ് ശൂന്യമാണെങ്കിലോ എല്ലാ സ്കീമുകളും <ph name="PRODUCT_NAME" />-ൽ ആക്സസ്സുചെയ്യാനാകും.</translation> <translation id="6652197835259177259">പ്രാദേശികമായി നിയന്ത്രിക്കപ്പെടുന്ന ഉപയോക്താക്കളുടെ ക്രമീകരണങ്ങൾ</translation> <translation id="6658245400435704251">സെർവറിലേക്ക് ആദ്യമായി അപ്ഡേറ്റ് നീക്കപ്പെട്ട സമയത്തിന് ശേഷം, ആ അപ്ഡേറ്റിന്റെ ഡൗൺലോഡിനെ യാദൃശ്ചികമായി ഒരു ഉപകരണം, എത്ര നിമിഷങ്ങളോളം കാലതാമസം വരുത്താം എന്ന് സൂചിപ്പിക്കുന്നു. ഉപകരണം, ഈ കാലതാമസ സമയത്തിന്റെ ഒരു ഭാഗം ചുവർ ഘടികാരത്തിന്റെ അടിസ്ഥാനത്തിൽ കാലതാമസം വരുത്താം, അപ്ഡേറ്റ് പരിശോധനകളുടെ എണ്ണത്തെ അടിസ്ഥാനമാക്കിയാണ് ഉപകരണം ബാക്കിയുള്ള ഭാഗം കാലതാമസം വരുത്തുന്നത്. എന്ത് സാഹചര്യമായാലും, ശാശ്വതമായി ഒരു അപ്ഡേറ്റ് ഡൗൺലോഡ് ചെയ്യുന്നതിനായി കാത്തിരിക്കുന്ന തരത്തിൽ ഉപകരണം സ്തംഭിച്ചുപോകാതിരിക്കുന്നതിനായി ഒരു സ്ഥിര അളവ് സമയത്തിലേക്ക് സ്കാറ്റർ നിർബന്ധിതമാക്കപ്പെടുന്നു.</translation> +<translation id="6665599130599311250">ഈ നയം 'ഫാൾസ്' ആയി സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിലോ സജ്ജീകരിക്കാതെ വിട്ടിരിക്കുന്നുവെങ്കിലോ, https://support.google.com/chrome/a/answer/3017014 - മാനക "പബ്ലിക് സെഷൻ" എന്നതിൽ വിവരിച്ചിരിക്കുന്നത് പോലെ, മാനേജ് ചെയ്യപ്പെടുന്ന അതിഥി സെഷൻ പ്രവർത്തിക്കും. + + ഈ നയം 'ട്രൂ' എന്നായി സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, "മാനേജ് ചെയ്യപ്പെടുന്ന സെഷ"ന്റെ പ്രവർത്തനത്തെ, മാനേജ് ചെയ്യപ്പെടുന്ന അതിഥി സെഷൻ ഏറ്റെടുക്കും, ഇങ്ങനെ സംഭവിച്ചാൽ പതിവ് "പബ്ലിക് സെഷനുകൾ"ക്കായി സജ്ജീകരിച്ച്ട്ടുള്ള പല നിയന്ത്രണങ്ങളെയും ഇത് എടുത്തുമാറ്റും. + + ഈ നയം സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, ഉപയോക്താവിന് ഇത് മാറ്റാനോ അസാധുവാക്കാനോ കഴിയില്ല.</translation> <translation id="6665670272107384733">അതിവേഗ അൺലോക്ക് ഉപയോഗിക്കാൻ ഉപയോക്താവ് എത്രതവണ പാസ്വേഡ് നൽകണമെന്നത് സജ്ജീകരിക്കുക</translation> <translation id="6681229465468164801">ഒരു USB ഉപകരണത്തിലേക്ക് ആക്സസ് അനുവദിക്കാൻ ഉപയോക്താവിനോട് ചോദിക്കുന്നതിൽ നിന്ന് തടയപ്പെടുന്ന സൈറ്റുകൾ വ്യക്തമാക്കുന്ന url പാറ്റേണുകളുടെ ഒരു ലിസ്റ്റ് സജ്ജീകരിക്കുന്നതിന് നിങ്ങളെ അനുവദിക്കുന്നു. @@ -2301,13 +2300,6 @@ <translation id="6786967369487349613">റോമിംഗ് പ്രൊഫൈൽ ഡയറക്റ്ററി സജ്ജമാക്കുക</translation> <translation id="6810445994095397827">ഈ സൈറ്റുകളില് JavaScript തടയുക</translation> <translation id="681446116407619279">പ്രാമാണീകരണ സ്കീമുകള് പിന്തുണയ്ക്കുന്നു</translation> -<translation id="6832455357698286434"> - സുരക്ഷിത സന്ദർഭങ്ങളായി പരിഗണിക്കാവുന്ന ഉറവിടങ്ങളുടെ (URL-കൾ) അല്ലെങ്കിൽ ഹോസ്റ്റ് നാമ പാറ്റേണുകളുടെ - ("*.example.com" പോലെയുള്ള) ഒരു ലിസ്റ്റ് നയം നിർദ്ദേശിക്കുന്നു. -ഇന്റേണൽ വെബ് ഡെവലപ്പ്മെന്റുകൾക്കായി സ്റ്റേജിംഗ് സെർവർ സജ്ജീകരിക്കാൻ സ്ഥാപനങ്ങളെ അനുവദിക്കുക എന്നതാണ് ഉദ്ദേശ്യം, ഇതുവഴി, സുരക്ഷിത സന്ദർഭങ്ങൾ ആവശ്യമായ ഫീച്ചറുകളെ, സ്റ്റേജിംഗ് സെർവറിൽ TLS വിന്യസിക്കേണ്ടതിന്റെ ആവശ്യകതയില്ലാതെ ടെസ്റ്റ് ചെയ്യാൻ സ്ഥാപനങ്ങളുടെ ഡെവലപ്പർമാർക്കാകും. - നയത്തിൽ URL-കളുടെ ഒരു ലിസ്റ്റ് ക്രമീകരിക്കുന്നത്, അതേ URL-കളുടെ കോമ കൊണ്ട് വേർതിരിച്ചിട്ടുള്ള ഒരു ലിസ്റ്റിലേക്ക് '--unsafely-treat-insecure-origin-as-secure' എന്ന കമാൻഡ്-ലൈൻ ഫ്ലാഗ് സജ്ജമാക്കുന്നതിന് തുല്യമാണ്. നയം സജ്ജമാക്കിയിട്ടുണ്ടെങ്കിൽ, കമാൻഡ്-ലൈൻ ഫ്ലാഗിനെ ഈ നയം അസാധുവാക്കും. - സുരക്ഷിത സന്ദർഭങ്ങളെ കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക് https://www.w3.org/TR/secure-contexts/ കാണുക - </translation> <translation id="6835883744948188639">വീണ്ടും സമാരംഭിക്കൽ ശുപാർശ ചെയ്തിരിക്കുന്നു എന്ന് സൂചിപ്പിക്കുന്ന ആവർത്തിച്ചുള്ള നിര്ദ്ദേശം ഉപയോക്താവിനെ കാണിക്കുക</translation> <translation id="6838056959556423778"><ph name="PRODUCT_NAME" /> ഡിഫോൾട്ട് പ്രിന്റർ തിരഞ്ഞെടുക്കൽ നയങ്ങളെ അസാധുവാക്കുന്നു. @@ -2420,6 +2412,17 @@ <translation id="6943577887654905793">Mac/Linux മുന്ഗണന പേര്:</translation> <translation id="69525503251220566">സ്ഥിര തിരയൽ ദാതാവിനായി പാരാമീറ്റർ, ഇമേജ് പ്രകാരമുള്ള തിരയൽ സവിശേഷത നൽകുന്നു</translation> <translation id="6956272732789158625">കീ സൃഷ്ടിക്കൽ ഉപയോഗിക്കാൻ ഒരു സൈറ്റിനെയും അനുവദിക്കരുത്</translation> +<translation id="6982028490425791294"> + നയം 'ട്രൂ' ആയി സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, Google സേവനങ്ങളിൽ (ഉദാഹരണത്തിന് Google Meet) നിന്ന് WebRTC ഇവന്റ് ലോഗുകളെ ശേഖരിക്കുന്നതിനും ആ ലോഗുകൾ Google-ലേക്ക് അപ്ലോഡ് ചെയ്യുന്നതിനും <ph name="PRODUCT_NAME" /> അനുവദിക്കപ്പെടും. + + ഈ നയം 'ഫാൾസ്' ആയി സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിലോ സജ്ജീകരിക്കാതെ വിട്ടിരിക്കുന്നുവെങ്കിലോ, അത്തരം ലോഗുകളെ <ph name="PRODUCT_NAME" /> ശേഖരിച്ചേക്കില്ല അല്ലെങ്കിൽ അപ്ലോഡ് ചെയ്തേക്കില്ല. + + അയയ്ക്കുകയും സ്വീകരിക്കുകയും ചെയ്യുന്ന RTP പാക്കറ്റുകളുടെ സമയത്തെയും വലുപ്പത്തെയും കുറിച്ചുള്ള വിവരങ്ങൾ, നെറ്റ്വർക്കിലെ തിക്കും തിരക്കിനെയും കുറിച്ചുള്ള ഫീഡ്ബാക്ക്, ഓഡിയോ - വീഡിയോ ഫ്രെയിമുകളുടെ സമയത്തെയും ഗുണനിലവാരത്തെയും കുറിച്ചുള്ള മെറ്റാഡാറ്റ എന്നിവയൊക്കെ ഈ ലോഗുകളിൽ അടങ്ങിയിരിക്കുന്നു. ബാൻഡ്വിഡ്ത്ത് കണക്കാക്കൽ പ്രശ്നങ്ങൾ പോലെ, Chrome-ലെ ഓഡിയോ - വീഡിയോ കോളുകളുമായി ബന്ധപ്പെട്ട പ്രശ്നങ്ങൾ ഡീബഗ് ചെയ്യുന്ന സമയത്ത് ഈ വിവരങ്ങൾ സഹായകരമാകും. ഈ ലോഗുകളിൽ, ഓഡിയോ അല്ലെങ്കിൽ വീഡിയോ കോളിൽ നിന്നുള്ള ഉള്ളടക്കം അടങ്ങിയിരിക്കില്ല. + + Google Hangouts അല്ലെങ്കിൽ Google Meet പോലെയുള്ള Google വെബ് സേവനങ്ങൾക്ക് മാത്രമാണ് ഈ ഡാറ്റാ ശേഖരണത്തിന് തുടക്കമിടാനാവുക. + + ഈ ലോഗുകളെ, Google സേവനം സ്വയം ശേഖരിക്കുന്ന മറ്റ് ലോഗുകളുമായി, ഒരു സെഷൻ ഐഡി മുഖേന ബന്ധപ്പെടുത്തിയേക്കാം. + </translation> <translation id="6994082778848658360">ഈ ഫീച്ചറിന് അനുയോജ്യമാണെങ്കിൽ, രണ്ടാം ഫാക്ടർ വിശ്വാസ്യത ഉറപ്പിക്കൽ നൽകുന്നതിന്, ഓൺ-ബോർഡ് സുരക്ഷിത എലമെന്റ് ഹാർഡ്വെയർ എങ്ങനെ ഉപയോഗിക്കാൻ കഴിയുമെന്ന് വ്യക്തമാക്കുന്നു. ഉപയോക്താവിന്റെ ഭൗതിക സാന്നിധ്യം തിരിച്ചറിയുന്നതിന് മെഷീൻ പവർ ബട്ടൺ ഉപയോഗിക്കുന്നു. 'പ്രവർത്തനരഹിതമാക്കി' തിരഞ്ഞെടുത്തിട്ടുണ്ടെങ്കിൽ രണ്ടാം ഫാക്ടർ നൽകുകയില്ല. @@ -2689,7 +2692,6 @@ <translation id="7617319494457709698">ഈ നയം വിദൂര അറ്റസ്റ്റേഷന് വേണ്ടി, <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> ഫംഗ്ഷൻ <ph name="CHALLENGE_USER_KEY_FUNCTION" /> ഉപയോഗിക്കാൻ അനുവദനീയമായ വിപുലീകരണങ്ങൾ വ്യക്തമാക്കുന്നു. API ഉപയോഗിക്കുന്നതിന് ഈ ലിസ്റ്റിൽ വിപുലീകരണങ്ങൾ ചേർക്കേണ്ടതുണ്ട്. വിപുലീകരണം ലിസ്റ്റിൽ ഇല്ലെങ്കിലോ ലിസ്റ്റ് സജ്ജമാക്കിയിട്ടില്ലെങ്കിലോ ഒരു പിശക് കോഡ് നൽകി, API-യിലേക്കുള്ള കോൾ പരാജയപ്പെടുന്നതാണ്.</translation> -<translation id="7620300057302654932">ഉറവിടങ്ങൾ അല്ലെങ്കിൽ ഹോസ്റ്റ് നാമ പാറ്റേണുകൾ സുരക്ഷിത സന്ദർഭമായി പരിഗണിക്കപ്പെടും.</translation> <translation id="7625444193696794922">ഈ ഉപകരണം ലോക്കുചെയ്യുന്ന റിലീസ് ചാനൽ നിർദ്ദേശിക്കുന്നു.</translation> <translation id="7632724434767231364">GSSAPI ലൈബ്രറി പേര്</translation> <translation id="7635471475589566552"><ph name="PRODUCT_NAME" /> എന്നതില് അപ്ലിക്കേഷന് ലോക്കെൽ കോണ്ഫിഗര് ചെയ്യുന്നു, ഒപ്പം ലോക്കെൽ മാറ്റുന്നതില് നിന്ന് ഉപയോക്താക്കളെ തടയുന്നു.
diff --git a/components/policy/resources/policy_templates_mr.xtb b/components/policy/resources/policy_templates_mr.xtb index 4b30f37..0706398 100644 --- a/components/policy/resources/policy_templates_mr.xtb +++ b/components/policy/resources/policy_templates_mr.xtb
@@ -299,6 +299,7 @@ कॉन्फिगर न केल्यास अव्यवस्थापित डिव्हाइसवर वापर मेट्रिक्स आणि निदान केलेल्या डेटाचा अहवाल देणे बंद केले जाईल आणि व्यवस्थापित डिव्हाइसवर अहवाल देणे चालू केले जाईल.</translation> <translation id="1914840757300882918">हे धोरण सेट केले असल्यास, होस्ट RemoteAccessHostTokenValidationUrl प्रमाणित करण्यासाठी दिलेला जारीकर्ता CNसह एक क्लायंट प्रमाणपत्र वापरतो. कोणतेही उपलब्ध क्लायंट प्रमाणपत्र वापरण्यासाठी यास "*" वर सेट करा. हे वैशिष्ट्य सध्या सर्व्हरकडून बंद केले आहे.</translation> +<translation id="1920046221095339924">डिव्हाइसवरील व्यवस्थापित केलेल्या सत्राला अनुमती द्या</translation> <translation id="1929709556673267855">एंटरप्राइझ प्रिंटरसाठी कॉन्फिगरेशन पुरवते. हे धोरण तुम्हाला <ph name="PRODUCT_OS_NAME" /> डिव्हाइसना प्रिंटर कॉन्फिगरेशन पुरवू देते. व्हाइटलिस्ट किंवा ब्लॅकलिस्ट करण्यासाठी फॉरमॅट NativePrinters निर्देशिकेप्रमाणेच आहे ज्यात "आयडी" किंवा "मार्गदर्शक" फील्ड प्रति प्रिंटरचा अतिरिक्त समावेश आहे. @@ -332,6 +333,7 @@ हे सेटिंग सुरू केल्यास किंवा मूल्य नसल्यास, वापरकर्त्याला UI मध्ये पत्त्यांसाठी ऑटोफिल नियंत्रित करता येईल.</translation> <translation id="1960840544413786116">स्थानिक विश्वासू अँकरनी जारी केलेल्या subjectAlternativeName विस्तार गहाळ असलेल्या प्रमाणपत्रांना अनुमती द्यावी किंवा देऊ नये</translation> +<translation id="1962273523772270623">Google सेवांवरून WebRTC कार्यक्रम नोंदींच्या संकलनास अनुमती देते</translation> <translation id="1964634611280150550">गुप्त मोड अक्षम</translation> <translation id="1964802606569741174">या धोरणाचा Android YouTube अॅपवर प्रभाव नसतो. YouTube वर सुरक्षितता मोडची सक्ती केल्यास, Android YouTube अॅपच्या स्थापनेची अनुमती रद्द केली जावी.</translation> <translation id="1969212217917526199">दूरस्थ प्रवेश होस्टच्या डीबग बिल्डवर धोरणे अधिशून्य करेल. @@ -726,7 +728,6 @@ प्रत्येक सूची प्रविष्टी एखादा अभिज्ञापक निर्दिष्ट करते, जो वेगवेगळी डिव्हाइस-स्थानिक खात्यांना सांगण्यासाठी अंतर्गतरितीने वापरला जातो.</translation> <translation id="2769952903507981510">दूरस्थ प्रवेश होस्टसाठी आवश्यक डोमेन नाव कॉन्फिगर करा</translation> <translation id="2787173078141616821">Android च्या स्थितीविषयी माहितीचा अहवाल द्या</translation> -<translation id="2793923553868251161">सुरक्षित संदर्भ म्हणून मानले जाणारे मूळ.</translation> <translation id="2799297758492717491">URL पॅटर्नच्या व्हाइटलिस्टवर मीडिया ऑटोप्लेला अनुमती द्या</translation> <translation id="2801230735743888564">डिव्हाइस ऑफलाइन असते तेव्हा वापरकर्त्यांना डायनासोर इस्टर एग गेम खेळण्याची अनुमती द्या. @@ -1570,7 +1571,7 @@ वापरकर्त्याने या नमुन्याशी न जुळणार्या वापरकर्तानावासह लॉग इन करण्याचा प्रयत्न केल्यास अचूक एरर प्रदर्शित केली जाते. हे धोरण सेट न करता रिक्त सोडल्यास कोणताही वापरकर्ता <ph name="PRODUCT_NAME" /> मध्ये साइन इन करू शकतो.</translation> -<translation id="4858735034935305895">पूर्णस्क्रीन मोड ला अनुमती द्या</translation> +<translation id="4858735034935305895">क्षेत्रे मोड ला अनुमती द्या</translation> <translation id="4861767323695239729">वापरकर्ता सेशनमध्ये अनुमती असलेल्या इनपुट पद्धती कॉन्फिगर करा</translation> <translation id="4869787217450099946">स्क्रीन वेक लॉक अनुमत आहेत किंवा नाही हे निर्दिष्ट करते. उर्जा व्यवस्थापन विस्तार API द्वारे स्क्रीन वेक लॉक विस्तारांद्वारे विनंती करू शकतात. @@ -1855,11 +1856,11 @@ निर्दिष्ट न केल्यास, व्हेरिएशन सीड URL सुधारित होणार नाही.</translation> <translation id="5561811616825571914">साइन-इन स्क्रीनवर या साइटसाठी क्लायंट प्रमाणपत्रे आपोआप निवडा</translation> -<translation id="556865034069957245">हे धोरण पूर्णस्क्रीन मोडची उपलब्धता नियंत्रित करते ज्यामध्ये सर्व <ph name="PRODUCT_NAME" /> UI लपलेले असते आणि फक्त वेब सामग्री दृश्यमान असते. +<translation id="556865034069957245">हे धोरण क्षेत्रे मोडची उपलब्धता नियंत्रित करते ज्यामध्ये सर्व <ph name="PRODUCT_NAME" /> UI लपलेले असते आणि फक्त वेब सामग्री दृश्यमान असते. - हे धोरण सत्य वर सेट केले असल्यास किंवा कॉन्फिगर न केल्यास, योग्य परवानग्या असलेले वापरकर्ता, अॅप्स आणि विस्तार पूर्णस्क्रीन मोडमध्ये प्रवेश करू शकतात. + हे धोरण सत्य वर सेट केले असल्यास किंवा कॉन्फिगर न केल्यास, योग्य परवानग्या असलेले वापरकर्ता, अॅप्स आणि विस्तार क्षेत्रे मोडमध्ये प्रवेश करू शकतात. - हे धोरण असत्य वर सेट केले असल्यास, पूर्णस्क्रीन मोडमध्ये कोणताही वापरकर्ता कोणतेही अॅप्स किंवा विस्तार प्रवेश करू शकत नाहीत. + हे धोरण असत्य वर सेट केले असल्यास, क्षेत्रे मोडमध्ये कोणताही वापरकर्ता कोणतेही अॅप्स किंवा विस्तार प्रवेश करू शकत नाहीत. <ph name="PRODUCT_OS_NAME" /> शिवाय सर्व प्लॅटफॉर्मवर पू्र्णस्क्रीन मोड बंद असतो, तेव्हा कियोस्क मोड अनुपलब्ध असतो.</translation> <translation id="556941986578702361"><ph name="PRODUCT_OS_NAME" /> शेल्फचे स्वयं-लपविणे नियंत्रित करा. @@ -2092,12 +2093,6 @@ <translation id="6155936611791017817">लॉगिन स्क्रीनवरील मोठ्या कर्सरची डीफॉल्ट स्थिती सेट करा</translation> <translation id="6157537876488211233">प्रॉक्सी स्थलांतर नियमांची स्वल्पविरामाने-विभक्त केलेली सूची</translation> <translation id="6158324314836466367">एंटरप्राइज वेब स्टोअर नाव (बहिष्कृत केलेले)</translation> -<translation id="6164955668342404660">M69 मध्ये कालबाह्य झाले. त्याऐवजी OverrideSecurityRestrictionsOnInsecureOrigin वापरा. - - हे धोरण सुरक्षित संदर्भ म्हणून मानल्या जाणाऱ्या मूळ (URL) ची सूची नमूद करते. याचा उद्देश संघटनांना अंतर्गत वेब डेव्हलपमेंटसाठी स्टेजिंग सर्व्हर सेट करण्याची अनुमती देणे हा आहे, जेणेकरून त्यांचे डेव्हलपर स्टेजिंग सर्व्हरवर TLS चे उपयोजन न करता सुरक्षित संदर्भांना आवश्यक वैशिष्ट्यांची चाचणी करू शकतील. - या धोरणामध्ये URL ची सूची सेट करणे हे त्याच URL च्या स्वल्पविरामाने-विभक्त केलेल्या सूचीवर कमांड-लाइन फ्लॅग '--असुरक्षित मूळ URL ला असुरक्षितरीत्या सुरक्षित समजणे' सेट करण्याइतकेच प्रभावी आहे. धोरण सेट केलेले असल्यास, कमांड-लाइन फ्लॅग ओव्हरराइड होईल. - सुरक्षित संदर्भांच्या अधिक माहितीसाठी, https://www.w3.org/TR/secure-contexts/ पहा - </translation> <translation id="6178075938488052838">हे धोरण <ph name="PRODUCT_OS_NAME" /> सत्र कोण सुरू करू शकते ते नियंत्रित करते. हे वापरकर्त्यांना Android मध्ये अतिरिक्त Google खात्यांमध्ये साइन इन करण्यापासून प्रतिबंधित करत नाही. आपण हे प्रतिबंधित करू इच्छित असल्यास, Android-विशिष्ट <ph name="ACCOUNT_TYPES_WITH_MANAGEMENT_DISABLED_CLOUDDPC_POLICY_NAME" /> धोरणास <ph name="ARC_POLICY_POLICY_NAME" /> चा भाग म्हणून कॉन्फिगर करा.</translation> <translation id="6181608880636987460"><ph name="FLASH_PLUGIN_NAME" /> प्लगइन चालवण्याची परवानगी नसलेल्या साइटचा उल्लेख करणार्या url पॅटर्नची सूची सेट करण्याची तुम्हाला परवानगी देते. @@ -2222,6 +2217,11 @@ हे धोरण सेट न करता सोडल्यास किंवा सूची रिक्त असल्यास <ph name="PRODUCT_NAME" /> मधील सर्व योजना प्रवेशयोग्य होतील.</translation> <translation id="6652197835259177259">स्थानिकपणे व्यवस्थापित केलेल्या वापरकर्ते सेटिंग्ज</translation> <translation id="6658245400435704251">डिव्हाइसने प्रथम अपडेट सर्व्हरवर टाकल्यानंतर त्याच्या अपडेटाच्या डाउनलोडला यादृच्छिकपणे विलंब करते तोपर्यंतच्या सेकंदांची संख्या निर्दिष्ट करते. डिव्हाइस या भागाच्या वेळेची भिंतीवरील घड्याळाच्या वेळेनुसार आणि उर्वरीत भागात अपडेट तपासणीच्या संख्येची प्रतीक्षा करू शकते. एखाद्या बाबतीत, स्कॅटर निश्चित वेळेसाठी बांधील असेल ज्यामुळे डिव्हाइसला अपडेट कायमचे डाउनलोड करण्यासाठी कधीही प्रतीक्षा करावी लागणार नाही.</translation> +<translation id="6665599130599311250">हे धोरण असत्यवर सेट केल्यास किंवा सेट न करता सोडल्यास, व्यवस्थापित केलेले अतिथी सत्र https://support.google.com/chrome/a/answer/3017014 - साधारण "सार्वजनिक सत्र" यामध्ये नमूद केल्याप्रमाणे वर्तन करेल. + + हे धोरण सत्यवर सेट केल्यास, व्यवस्थापित केलेले अतिथी सत्र "व्यवस्थापित सत्र" याप्रमाणे वर्तन करेल जे साधारण "सार्वजनिक सत्र" यामध्ये लागू असलेली अनेक प्रतिबंधने काढून टाकते. + + हे धोरण सेट केल्यास, वापरकर्ता ते बदलू किंवा अधिशून्य करू शकत नाही.</translation> <translation id="6665670272107384733">जलद अनलॉक वापरण्यासाठी वापरकर्त्याला किती वेळा पासवर्ड एंटर करावा लागू शकतो हे सेट करा</translation> <translation id="6681229465468164801">वापरकर्त्याला USB डिव्हाइसकरता अॅक्सेस देण्याची परवानगी मागण्यापासून रोखण्यात आलेल्या साइटना स्पष्ट करणाऱ्या url पॅटर्नची यादी सेट करण्याची तुम्हाला अनुमती देते. @@ -2271,11 +2271,6 @@ <translation id="6786967369487349613">रोमिंग प्रोफाइल निर्देशिका सेट करा</translation> <translation id="6810445994095397827">या साइटवरील JavaScript अवरोधित करा </translation> <translation id="681446116407619279">समर्थित प्रमाणीकरण योजना</translation> -<translation id="6832455357698286434"> - हे धोरण सुरक्षित संदर्भ म्हणून मानल्या जाणाऱ्या मूळ (URL) किंवा होस्ट नाव पॅटर्न (जसे की "*.example.com") ची सूची नमूद करते. याचा उद्देश संघटनांना अंतर्गत वेब डेव्हलपमेंटसाठी स्टेजिंग सर्व्हर सेट करण्याची अनुमती देणे हा आहे, जेणेकरून त्यांचे डेव्हलपर स्टेजिंग सर्व्हरवर TLS चे उपयोजन न करता सुरक्षित संदर्भांना आवश्यक वैशिष्ट्यांची चाचणी करू शकतील. - या धोरणामध्ये URL ची सूची सेट करणे हे त्याच URL च्या स्वल्पविरामाने-विभक्त केलेल्या सूचीवर कमांड-लाइन फ्लॅग '--असुरक्षित मूळ URL ला असुरक्षितरीत्या सुरक्षित समजणे' सेट करण्या इतकेच प्रभावी आहे. धोरण सेट केलेले असल्यास, कमांड-लाइन फ्लॅग ओव्हरराइड होईल. - सुरक्षित संदर्भांच्या अधिक माहितीसाठी, https://www.w3.org/TR/secure-contexts/ पाहा - </translation> <translation id="6835883744948188639">रीलाँच करण्याची शिफारस केली असल्याचे दाखवणार्या वापरकर्त्यास एक आवर्त सूचना दाखवा</translation> <translation id="6838056959556423778"><ph name="PRODUCT_NAME" /> डीफॉल्ट प्रिंटर निवड नियम ओव्हरराइड करते. @@ -2387,6 +2382,22 @@ <translation id="6943577887654905793">Mac/Linux प्राधान्य नाव:</translation> <translation id="69525503251220566">डीफॉल्ट शोध प्रदात्याकरिता प्रतिमे-नुसार-शोध प्रदान करणारा प्राचल</translation> <translation id="6956272732789158625">कोणत्याही साइटला की निर्मिती वापरण्याची अनुमती देऊ नका</translation> +<translation id="6982028490425791294"> + हे धोरण सत्यवर सेट केल्यास, Google सेवांवरून (उदा. Google Meet) कार्यक्रम नोंदी संग्रहित करण्याची आणि त्या नोंदी Google वर अपलोड करण्याची <ph name="PRODUCT_NAME" /> ला अनुमती आहे. + + + हे धोरण असत्यवर सेट केल्यास किंवा सेट केलेले नसल्यास, <ph name="PRODUCT_NAME" /> कदाचित अशा नोंदी संग्रहित करणार नाही तसेच अपलोडदेखील करणार नाही. + + + + या नोंदींमध्ये आरटीपी पॅकेट पाठवल्याची आणि मिळवल्याची वेळ आणि त्यांचा आकार, नेटवर्कमधील अडथळ्यांबद्दलचा फीडबॅक आणि ऑडिओ आणि व्हिडिओ फ्रेमच्या वेळेचा आणि गुणवत्तेबद्दलचा मेटाडेटा अशा माहितीचा समावेश आहे. बँडविड्थ अंदाजाच्या समस्या इत्यादी यासारख्या Chrome मधील ऑडिओ किंवा व्हिडिओ कॉलच्या समस्या डीबग करताना या माहितीचा उपयोग होतो. नोंदीमध्ये कॉलमधील ऑडिओ किंवा व्हिडिओ आशयाचा समावेश नाही. + + + Google Hangouts किंवा Google Meet .यासारख्या Google सेवांनी हा डेटा संग्रह ट्रिगर केला जाऊ शकतो. + + + या नोंदी स्वतः Google सेवेने गोळा केलेल्या इतर नोंदींशी सत्र अायडीमार्फत संबंधित असू शकतात, याचा हेतू डीबगिंग सोपे करणे हा आहे. + </translation> <translation id="6994082778848658360">ऑन-बोर्ड सुरक्षित घटक हार्डवेअर या वैशिष्ट्यासोबत सुसंगत असल्यास, दुसरा फॅक्टर प्रमाणीकरण करण्यासाठी कसे वापरता येईल त्याबद्दल सांगते. मशीन पॉवर बटण हे वापरकर्त्याच्या प्रत्यक्ष उपस्थिती शोधण्यात वापरले जाते. 'बंद करा' निवडल्यास, कोणताही दुसरा फॅक्टर देण्यात येत नाही. @@ -2648,7 +2659,6 @@ <translation id="7614663184588396421">अक्षम केलेल्या प्रोटोकॉल योजनांची सूची</translation> <translation id="7617319494457709698">हे धोरण दूरस्थ अनुप्रमाणानासाठी <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> कार्य <ph name="CHALLENGE_USER_KEY_FUNCTION" /> वापरण्याकरिता अनुमती दिलेले विस्तार निर्दिष्ट करते. API वापरण्यासाठी या सूचीमध्ये विस्तार जोडले जाणे आवश्यक आहे. विस्तार सूचीमध्ये नसल्यास किंवा सूची सेट केली नसल्यास, API वरील कॉल एरर कोडसह अयशस्वी होईल.</translation> -<translation id="7620300057302654932">सुरक्षित संदर्भ म्हणून मानले जाणारे मूळ किंवा होस्ट नाव पॅटर्न.</translation> <translation id="7625444193696794922">हे डिव्हाइस ज्यात लॉक करायला हवे तो रिलीज चॅनेल निर्दिष्ट करते.</translation> <translation id="7632724434767231364">GSSAPI लायब्ररी नाव</translation> <translation id="7635471475589566552"><ph name="PRODUCT_NAME" /> मध्ये अॅप्लिकेशन लोकॅल कॉन्फिगर करते आणि वापरकर्त्यांना लोकॅल बदलण्यापासून प्रतिबंधित करते. आपण हे सेटिंग सक्षम केल्यास, <ph name="PRODUCT_NAME" /> निर्दिष्ट केलेले लोकॅल वापरते. कॉन्फिगर केलेले लोकॅल समर्थित नसल्यास, त्याऐवजी 'en-US' वापरले जाते. हे सेटिंग अक्षम केलेले किंवा कॉन्फिगर केलेले नसल्यास, <ph name="PRODUCT_NAME" /> वापरकर्त्याने-निर्दिष्ट केलेले लोकॅल (कॉन्फिगर असल्यास), सिस्टम लोकॅल किंवा फॉलबॅक लोकॅल 'en-US' पैकी एक वापरेल.</translation>
diff --git a/components/policy/resources/policy_templates_ms.xtb b/components/policy/resources/policy_templates_ms.xtb index 56f4e89..eab653b3f 100644 --- a/components/policy/resources/policy_templates_ms.xtb +++ b/components/policy/resources/policy_templates_ms.xtb
@@ -675,7 +675,6 @@ Setiap masukan senarai menetapkan pengecam, yang digunakan secara dalaman untuk membezakan akaun setempat peranti.</translation> <translation id="2769952903507981510">Konfigurasi nama domain yang diperlukan untuk hos akses jauh</translation> <translation id="2787173078141616821">Laporkan maklumat tentang status Android</translation> -<translation id="2793923553868251161">Asalan akan dianggap sebagai konteks selamat.</translation> <translation id="2799297758492717491">Benarkan automain media pada senarai putih corak URL</translation> <translation id="2801230735743888564">Membolehkan pengguna bermain permainan telur easter dinosaur apabila peranti di luar talian. @@ -1871,12 +1870,6 @@ <translation id="6155936611791017817">Tetapkan keadaan lalai kursor besar pada skrin log masuk</translation> <translation id="6157537876488211233">Senarai diasingkan koma bagi peraturan memintas proksi</translation> <translation id="6158324314836466367">Nama kedai web perusahaan (tidak akan digunakan lagi)</translation> -<translation id="6164955668342404660">Ditamatkan dalam M69. Sebagai ganti, gunakan OverrideSecurityRestrictionsOnInsecureOrigin. - - Dasar ini menentukan senarai asalan (URL) yang perlu dikendalikan sebagai konteks selamat. Tujuannya adalah untuk membenarkan organisasi menyediakan pelayan pemeringkatan untuk pembangunan web dalaman supaya pembangun mereka boleh menguji ciri-ciri yang memerlukan konteks selamat tanpa perlu menggunakan TLS pada pelayan pemeringkatan. - Proses penetapan senarai URL dalam dasar ini mempunyai kesan yang sama seperti menetapkan bendera baris perintah '--unsafely-treat-insecure-origin-as-secure' kepada senarai yang dipisahkan koma bagi URL yang sama. Jika dasar ditetapkan, dasar ini akan mengatasi bendera baris perintah. - Untuk mendapatkan maklumat lanjut tentang konteks selamat, lihat https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Membolehkan anda menetapkan senarai corak url bagi menentukan tapak yang tidak dibenarkan menjalankan pemalam <ph name="FLASH_PLUGIN_NAME" />. Jika dasar ini dibiarkan tanpa ditetapkan, nilai lalai global akan digunakan untuk semua tapak sama ada daripada dasar 'DefaultPluginsSetting' jika dasar ini ditetapkan atau konfigurasi peribadi pengguna akan digunakan.</translation> @@ -2057,11 +2050,6 @@ <translation id="6786967369487349613">Tetapkan direktori profil perayauan</translation> <translation id="6810445994095397827">Sekat JavaScript pada tapak ini</translation> <translation id="681446116407619279">Skim pengesahan yang disokong</translation> -<translation id="6832455357698286434"> - Dasar ini menentukan senarai asalan (URL) atau corak nama hos (seperti "*.contoh.com") yang perlu dikendalikan sebagai konteks selamat. Tujuannya adalah untuk membenarkan organisasi menyediakan pelayan pemeringkatan untuk pembangunan web dalaman supaya pembangun mereka boleh menguji ciri-ciri yang memerlukan konteks selamat tanpa perlu menggunakan TLS pada pelayan pemeringkatan. - Proses penetapan senarai URL dalam dasar ini mempunyai kesan yang sama seperti menetapkan bendera baris perintah '--unsafely-treat-insecure-origin-as-secure' kepada senarai yang dipisahkan koma bagi URL yang sama. Jika dasar ditetapkan, dasar ini akan mengatasi bendera baris perintah. - Untuk mendapatkan maklumat lanjut tentang konteks selamat, lihat https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Tunjukkan gesaan berulang kepada pengguna yang menunjukkan pelancaran semula disyorkan</translation> <translation id="6838056959556423778">Membatalkan peraturan pilihan pencetak lalai <ph name="PRODUCT_NAME" />. @@ -2431,7 +2419,6 @@ <translation id="7617319494457709698">Dasar ini menentukan sambungan yang boleh menggunakan fungsi <ph name="CHALLENGE_USER_KEY_FUNCTION" /> <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> untuk pembuktian jauh. Sambungan hendaklah ditambahkan pada senarai ini supaya boleh menggunakan API tersebut. Jika sambungan tidak tersenarai atau senarai tidak ditetapkan, panggilan kepada API tersebut akan gagal dengan kod ralat.</translation> -<translation id="7620300057302654932">Asalan atau corak nama hos yang perlu dikendalikan sebagai konteks selamat.</translation> <translation id="7625444193696794922">Menetapkan saluran pelepasan yang harus mengunci peranti ini.</translation> <translation id="7632724434767231364">Nama perpustakaan GSSAPI</translation> <translation id="7635471475589566552">Mengkonfigurasi penempatan aplikasi dalam <ph name="PRODUCT_NAME" /> dan menghalang pengguna daripada menukar penempatan.
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index d82a13f..8f7d123 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -662,7 +662,6 @@ Elke lijstvermelding specificeert een ID die intern wordt gebruikt om de verschillende lokale accounts van het apparaat te onderscheiden.</translation> <translation id="2769952903507981510">De vereiste domeinnaam configureren voor hosts voor externe toegang</translation> <translation id="2787173078141616821">Informatie over de status van Android rapporteren</translation> -<translation id="2793923553868251161">Beginpunten moeten worden behandeld als beveiligde context.</translation> <translation id="2799297758492717491">Automatisch afspelen van media toestaan op een witte lijst met URL-patronen</translation> <translation id="2801230735743888564">Toestaan dat gebruikers de easter egg-dinosaurusgame spelen wanneer het apparaat offline is. @@ -1858,12 +1857,6 @@ <translation id="6155936611791017817">De standaardstatus van de grote muisaanwijzer op het inlogscherm instellen</translation> <translation id="6157537876488211233">Door komma's gescheiden lijst van regels voor proxyomzeiling</translation> <translation id="6158324314836466367">Naam van zakelijke webwinkel (verouderd)</translation> -<translation id="6164955668342404660">Beëindigd in M69. Gebruik in plaats daarvan OverrideSecurityRestrictionsOnInsecureOrigin. - - Dit beleid specificeert een lijst met herkomsten (URL's) die moeten worden behandeld als beveiligde context. Het is de bedoeling dat organisaties hiermee een staging-server kunnen instellen voor interne webontwikkeling, zodat hun ontwikkelaars functies kunnen testen die een beveiligde context vereisen, zonder dat ze TLS op de staging-server hoeven te implementeren. - Wanneer er een lijst met URL's wordt ingesteld in dit beleid, heeft dit hetzelfde effect als wanneer de opdrachtregelmarkering '--unsafely-treat-insecure-origin-as-secure' wordt ingesteld op een door komma's gescheiden lijst met dezelfde URL's. Als het beleid is ingesteld, wordt de opdrachtregelmarkering overschreven. - Ga naar https://www.w3.org/TR/secure-contexts/ voor meer informatie over beveiligde contexten. - </translation> <translation id="6181608880636987460">Hiermee kun je een lijst met URL-patronen opgeven voor sites die de <ph name="FLASH_PLUGIN_NAME" />-plug-in niet mogen uitvoeren. Als dit beleid niet wordt ingesteld, wordt de algemene standaardwaarde gebruikt voor alle sites. Je vindt deze in het beleid 'DefaultPluginsSetting' (als dit is ingesteld), of in de persoonlijke configuratie van de gebruiker.</translation> @@ -2044,11 +2037,6 @@ <translation id="6786967369487349613">De map voor roaming-profielen instellen</translation> <translation id="6810445994095397827">JavaScript blokkeren op deze sites</translation> <translation id="681446116407619279">Ondersteunde authenticatieschema's</translation> -<translation id="6832455357698286434"> - Dit beleid specificeert een lijst met herkomsten (URL's) of hostnaampatronen (zoals '*.example.com') die moeten worden behandeld als beveiligde context. Het is de bedoeling dat organisaties hiermee een staging-server kunnen instellen voor interne webontwikkeling, zodat hun ontwikkelaars functies kunnen testen die een beveiligde context vereisen, zonder dat ze TLS op de staging-server hoeven te implementeren. - Wanneer er een lijst met URL's wordt ingesteld in dit beleid, heeft dit hetzelfde effect als wanneer de opdrachtregelmarkering '--unsafely-treat-insecure-origin-as-secure' wordt ingesteld op een door komma's gescheiden lijst met dezelfde URL's. Als het beleid is ingesteld, wordt de opdrachtregelmarkering overschreven. - Ga naar https://www.w3.org/TR/secure-contexts/ voor meer informatie over beveiligde contexten. - </translation> <translation id="6835883744948188639">Toon de gebruiker een terugkerende prompt om aan te geven dat opnieuw opstarten wordt aanbevolen</translation> <translation id="6838056959556423778">Hiermee negeer je de regels van <ph name="PRODUCT_NAME" /> voor selectie van de standaardprinter. @@ -2408,7 +2396,6 @@ <translation id="7617319494457709698">Dit beleid geeft aan welke extensies de <ph name="ENTERPRISE_PLATFORM_KEYS_API" />-functie <ph name="CHALLENGE_USER_KEY_FUNCTION" /> mogen gebruiken voor externe bevestiging. Je moet extensies aan deze lijst toevoegen om de API te kunnen gebruiken. Als een extensie niet in de lijst voorkomt of als de lijst niet is ingesteld, mislukt het aanroepen van de API en wordt er een foutcode weergegeven.</translation> -<translation id="7620300057302654932">Herkomsten of hostnaampatronen die moeten worden behandeld als beveiligde context.</translation> <translation id="7625444193696794922">Hiermee wordt het releasekanaal gespecificeerd waarmee dit apparaat moet worden vergrendeld.</translation> <translation id="7632724434767231364">Naam van GSSAPI-bibliotheek</translation> <translation id="7635471475589566552">Hiermee wordt de landinstelling voor de applicatie geconfigureerd in <ph name="PRODUCT_NAME" /> en wordt voorkomen dat gebruikers de landinstelling kunnen wijzigen.
diff --git a/components/policy/resources/policy_templates_no.xtb b/components/policy/resources/policy_templates_no.xtb index 287f8de..87e9acf6 100644 --- a/components/policy/resources/policy_templates_no.xtb +++ b/components/policy/resources/policy_templates_no.xtb
@@ -666,7 +666,6 @@ Hvert bidrag på listen spesifiserer en identifikator, som brukes internt for å skille de ulike lokale kontoene på enheten fra hverandre.</translation> <translation id="2769952903507981510">Konfigurer det ønskede domenenavnet for verter med ekstern adgang</translation> <translation id="2787173078141616821">Rapportér informasjon om Android-status</translation> -<translation id="2793923553868251161">Opprinnelser som skal behandles som sikker kontekst.</translation> <translation id="2799297758492717491">Tillat automatisk avspilling av medier fra en godkjenningsliste for nettadressemønstre</translation> <translation id="2801230735743888564">Gir brukerne mulighet til å spille dinosaurspill-påskeegget når enheten ikke er koblet til. @@ -1849,12 +1848,6 @@ <translation id="6155936611791017817">Angi standard tilstand for stor musepeker på påloggingssiden</translation> <translation id="6157537876488211233">Kommadelt liste over regler for å omgå proxy-tjener</translation> <translation id="6158324314836466367">Navn på bedriftens nettbutikk (avviklet)</translation> -<translation id="6164955668342404660">Utdatert i M69. Bruk OverrideSecurityRestrictionsOnInsecureOrigin i stedet. - - Denne regelen spesifiserer en liste med opprinnelser (nettadresser) som blir behandlet som sikker kontekst. Hensikten er å la organisasjoner sette opp en testtjener for intern webutvikling, slik at utviklerne kan teste ut funksjoner som krever sikre kontekster uten å måtte distribuere TLS på testtjeneren. - Når en liste med nettadresser angis i denne regelen, har det samme effekt som å angi kommandolinjeflagget «--unsafely-treat-unsecure-origin-as-secure» til en kommaseparert liste med de samme nettadressene. Hvis regelen er angitt, overstyrer den kommandolinjeflagget. - For mer informasjon om sikkert innhold, se https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Lar deg angi en liste med nettadressemønstre for å spesifisere nettsteder hvor <ph name="FLASH_PLUGIN_NAME" />-programtillegget ikke skal kunne kjøres automatisk. Hvis denne regelen ikke angis, brukes den globale standardverdien for alle nettsteder. Denne verdien hentes fra «DefaultPluginsSetting»-regelen hvis den er angitt, eller fra brukerens personlige konfigurasjon hvis den ikke er angitt.</translation> @@ -2031,11 +2024,6 @@ <translation id="6786967369487349613">Angir katalogen for roamingprofiler</translation> <translation id="6810445994095397827">Blokkér JavaScript på disse nettstedene</translation> <translation id="681446116407619279">Støttede autentiseringssystemer</translation> -<translation id="6832455357698286434"> - Regelen spesifiserer en liste med opprinnelser (nettadresser) eller vertsnavnmønstre (f.eks. "*.example.com") som blir behandlet som sikre kontekster. Hensikten er å la organisasjoner sette opp en testtjener for intern webutvikling, slik at utviklerne kan teste ut funksjoner som krever sikre kontekster uten å måtte distribuere TLS på testtjeneren. - Når en liste med nettadresser angis i denne regelen, har det samme effekt som å angi kommandolinjeflagget «--unsafely-treat-unsecure-origin-as-secure» til en kommaseparert liste med de samme nettadressene. Hvis regelen er angitt, overstyrer den kommandolinjeflagget. - For mer informasjon om sikkert innhold, se https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Vis brukeren en gjentakende melding om at omstart anbefales</translation> <translation id="6838056959556423778">Overstyrer reglene for valg av standardskriver i <ph name="PRODUCT_NAME" />. @@ -2389,7 +2377,6 @@ <translation id="7617319494457709698">Med denne retningslinjen kan du spesifisere hvilke utvidelser som kan bruke <ph name="ENTERPRISE_PLATFORM_KEYS_API" />-funksjonen <ph name="CHALLENGE_USER_KEY_FUNCTION" /> til ekstern attestering. Utvidelser må legges til i denne listen for å kunne bruke API-et. Hvis en utvidelse ikke er på listen, eller hvis listen ikke er angitt, kan ikke API-et kalles opp – i stedet vises en feilkode.</translation> -<translation id="7620300057302654932">Opprinnelser eller vertsnavnmønstre skal behandles som sikker kontekst.</translation> <translation id="7625444193696794922">Angir den frigivende kanalen som denne enheten skal låses til.</translation> <translation id="7632724434767231364">Navn på GSSAPI-bibliotek</translation> <translation id="7635471475589566552">Konfigurerer programmets språk i <ph name="PRODUCT_NAME" />, og hindrer brukeren i å endre på språket.
diff --git a/components/policy/resources/policy_templates_pl.xtb b/components/policy/resources/policy_templates_pl.xtb index 48fdb7c2..3c4a5354 100644 --- a/components/policy/resources/policy_templates_pl.xtb +++ b/components/policy/resources/policy_templates_pl.xtb
@@ -512,11 +512,11 @@ Jeśli pozostanie ono nieokreślone, użytkownik będzie mógł zdecydować, czy chce używać tej funkcji. Ustawienie zostało usunięte z <ph name="PRODUCT_NAME" /> 29 i nowszych wersji.</translation> -<translation id="2433412232489478893">Ta zasada określa, czy użytkownicy mogą używać Sieciowych udziałów plików w <ph name="PRODUCT_NAME" />. +<translation id="2433412232489478893">Ta zasada określa, czy użytkownicy mogą używać sieciowych magazynów plików w <ph name="PRODUCT_NAME" />. - Gdy ta zasada jest nieskonfigurowana lub ma wartość prawda, użytkownicy mogą używać Sieciowych udziałów plików. + Gdy ta zasada jest nieskonfigurowana lub ma wartość prawda, użytkownicy mogą używać sieciowych magazynów plików. - Gdy ta zasada ma wartość fałsz, użytkownicy nie mogą używać Sieciowych udziałów plików.</translation> + Gdy ta zasada ma wartość fałsz, użytkownicy nie mogą używać sieciowych magazynów plików.</translation> <translation id="2438609638493026652">Włącza raportowanie do Google najważniejszych zdarzeń podczas instalowania aplikacji na Androida. Zdarzenia są rejestrowane tylko w przypadku aplikacji, których instalacja została spowodowana przez zasadę. Jeśli zasada ma wartość prawda, zdarzenia będą rejestrowane. @@ -594,7 +594,7 @@ <translation id="2598508021807251719">Określa języki, w których można wyświetlać <ph name="PRODUCT_OS_NAME" />. Jeśli ta zasada jest skonfigurowana, użytkownik może skonfigurować wyświetlanie <ph name="PRODUCT_OS_NAME" /> tylko w jednym z języków określonych w tej zasadzie. Jeśli zasada jest nieskonfigurowana lub jest ustawiona na pustą listę, <ph name="PRODUCT_OS_NAME" /> można wyświetlać we wszystkich obsługiwanych językach. Jeśli ustawiona lista zawiera nieprawidłowe wartości, będą one ignorowane. Jeśli użytkownik wcześniej skonfigurował wyświetlanie <ph name="PRODUCT_OS_NAME" /> w języku niedozwolonym przez tę zasadę, język wyświetlania zostanie przełączony na dozwolony po następnym zalogowaniu się użytkownika. Jeśli użytkownik skonfigurował preferowane języki i jeden z nich jest dozwolony przez tę zasadę, <ph name="PRODUCT_OS_NAME" /> przełączy się na ten język. W przeciwnym razie <ph name="PRODUCT_OS_NAME" /> przełączy się na język odpowiadający pierwszej prawidłowej wartości z listy, a jeśli lista zawiera same nieprawidłowe wartości – na język zastępczy (obecnie en-US).</translation> -<translation id="2604182581880595781">Umożliwia skonfigurowanie zasad związanych z Sieciowymi udziałami plików.</translation> +<translation id="2604182581880595781">Umożliwia skonfigurowanie zasad związanych z sieciowymi magazynami plików.</translation> <translation id="2623014935069176671">Poczekaj na początkową aktywność użytkownika</translation> <translation id="262740370354162807">Włącz wysyłanie dokumentów do <ph name="CLOUD_PRINT_NAME" />.</translation> <translation id="2627554163382448569">Udostępnia konfiguracje drukarek firmowych. @@ -652,7 +652,6 @@ Każdy wpis określa identyfikator używany wewnętrznie do rozróżniania lokalnych kont na urządzeniu.</translation> <translation id="2769952903507981510">Konfiguracja wymaganej nazwy domeny dla hostów zdalnego dostępu</translation> <translation id="2787173078141616821">Przesyłaj informacje o stanie Androida</translation> -<translation id="2793923553868251161">Źródła uznawane za kontekst bezpieczny.</translation> <translation id="2799297758492717491">Zezwalaj na automatyczne odtwarzanie multimediów na podstawie wzorców adresów URL na białej liście</translation> <translation id="2801230735743888564">Daje użytkownikom dostęp do ukrytej gry-żartu z dinozaurem, gdy urządzenie jest offline. @@ -674,7 +673,7 @@ <translation id="2823870601012066791">Lokalizacja w rejestrze systemu Windows dla klientów <ph name="PRODUCT_OS_NAME" />:</translation> <translation id="2824715612115726353">Włącz tryb incognito</translation> <translation id="2838830882081735096">Nie zezwalaj na migrację danych ani na działanie ARC</translation> -<translation id="2839294585867804686">Ustawienia Sieciowych udziałów plików</translation> +<translation id="2839294585867804686">Ustawienia sieciowych magazynów plików</translation> <translation id="2840269525054388612">Określa drukarki, z których może korzystać użytkownik. Ta zasada jest używana tylko wtedy, gdy dla zasady <ph name="DEVICE_PRINTERS_ACCESS_MODE" /> wybrano ustawienie <ph name="PRINTERS_WHITELIST" />. @@ -1150,7 +1149,7 @@ Jeśli ta zasada nie została skonfigurowana, zbieranie zanonimizowanych danych z URL-em jako kluczem będzie włączone, ale użytkownik może to zmienić.</translation> <translation id="4250680216510889253">Nie</translation> <translation id="4261820385751181068">Ustawienia regionalne na ekranie logowania na urządzeniu</translation> -<translation id="4264607809747169568">Określa dostępność funkcji Sieciowe udziały plików w Chrome OS</translation> +<translation id="4264607809747169568">Określa dostępność sieciowych magazynów plików w Chrome OS</translation> <translation id="427220754384423013">Określa drukarki, z których może korzystać użytkownik. Ta zasada jest używana tylko wtedy, gdy dla zasady <ph name="BULK_PRINTERS_ACCESS_MODE" /> wybrano ustawienie <ph name="PRINTERS_WHITELIST" />. @@ -1786,12 +1785,6 @@ <translation id="6155936611791017817">Ustaw domyślny stan dużego kursora na ekranie logowania</translation> <translation id="6157537876488211233">Lista rozdzielonych przecinkami reguł omijania serwera proxy</translation> <translation id="6158324314836466367">Nazwa firmowego sklepu internetowego (wycofana)</translation> -<translation id="6164955668342404660">Wycofana w wersji M69. Zamiast niej użyj OverrideSecurityRestrictionsOnInsecureOrigin. - -Ta zasada określa listę źródeł (adresów URL), które będą traktowane jako bezpieczne konteksty. Dzięki temu organizacje mogą skonfigurować wewnętrzny serwer do testowania własnych stron internetowych, a programiści mają możliwość testowania funkcji, które wymagają bezpiecznych kontekstów, bez wdrażania zabezpieczeń TLS na serwerze testowym. - Określenie listy adresów URL w tej zasadzie działa tak samo jak podanie tych adresów, oddzielonych przecinkami, we fladze wiersza poleceń „--unsafely-treat-insecure-origin-as-secure”. Jeśli ta zasada jest skonfigurowana, zastępuje flagę wiersza poleceń. - Więcej informacji o bezpiecznych kontekstach znajdziesz na stronie https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Pozwala utworzyć listę wzorców URL-i określających witryny, które nie mogą uruchamiać wtyczki <ph name="FLASH_PLUGIN_NAME" />. Jeśli ta zasada nie zostanie skonfigurowana, będzie używana wartość domyślna pobrana z zasady „DefaultPluginsSetting” (jeśli jest określona) lub z osobistej konfiguracji użytkownika.</translation> @@ -1964,11 +1957,6 @@ <translation id="6786967369487349613">Ustaw katalog profilu przenośnego</translation> <translation id="6810445994095397827">Blokuj kod JavaScript w tych witrynach</translation> <translation id="681446116407619279">Obsługiwane schematy uwierzytelniania</translation> -<translation id="6832455357698286434"> - Ta zasada określa listę źródeł (adresów URL) lub wzorców nazw hosta (np. „*.example.com”), które będą traktowane jako bezpieczne konteksty. Dzięki temu organizacje mogą skonfigurować wewnętrzny serwer do testowania własnych stron internetowych, a programiści mają możliwość testowania funkcji, które wymagają bezpiecznych kontekstów, bez wdrażania zabezpieczeń TLS na serwerze testowym. - Określenie listy adresów URL w tej zasadzie działa tak samo jak podanie tych adresów, oddzielonych przecinkami, we fladze wiersza poleceń „--unsafely-treat-insecure-origin-as-secure”. Jeśli ta zasada jest skonfigurowana, zastępuje flagę wiersza poleceń. - Więcej informacji o bezpiecznych kontekstach znajdziesz na stronie https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Wyświetlaj cyklicznie komunikat o tym, że zalecane jest ponowne uruchomienie</translation> <translation id="6838056959556423778">Zastępuje reguły wybierania domyślnej drukarki w <ph name="PRODUCT_NAME" />. @@ -2313,7 +2301,6 @@ <translation id="7617319494457709698">Ta zasada określa dozwolone rozszerzenia do użycia z funkcją <ph name="CHALLENGE_USER_KEY_FUNCTION" /> interfejsu <ph name="ENTERPRISE_PLATFORM_KEYS_API" />. Rozszerzenia muszą zostać dodane do tej listy, by były używane z interfejsem API. Jeśli rozszerzenie nie znajduje się na liście lub lista nie jest ustawiona, wywołanie interfejsu API zakończy się błędem.</translation> -<translation id="7620300057302654932">Źródła lub wzorce nazw hosta, które mają być traktowane jako bezpieczny kontekst.</translation> <translation id="7625444193696794922">Określa kanał wersji, z którym to urządzenie powinno być powiązane na stałe.</translation> <translation id="7632724434767231364">Nazwa biblioteki GSSAPI</translation> <translation id="7635471475589566552">Pozwala skonfigurować język w przeglądarce <ph name="PRODUCT_NAME" /> i uniemożliwia użytkownikom jego zmianę. Jeśli włączysz to ustawienie, w <ph name="PRODUCT_NAME" /> będzie używany określony język. W przypadku, gdy skonfigurowany język nie jest obsługiwany, wybierana jest opcja „en-US”. Jeśli ustawienie jest wyłączone lub nieskonfigurowane, w <ph name="PRODUCT_NAME" /> używany jest preferowany język określony przez użytkownika (jeśli został skonfigurowany), język ustawiony w systemie lub zastępcza opcja „en-US”.</translation>
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index 137a2eb..0e1e36f 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -647,7 +647,6 @@ Cada entrada da lista especifica um identificador, que é usado internamente para diferenciar as contas locais de dispositivo.</translation> <translation id="2769952903507981510">Configurar o nome de domínio obrigatório para hosts de acesso remoto</translation> <translation id="2787173078141616821">Informações de relatório sobre o status do Android</translation> -<translation id="2793923553868251161">Origens a serem tratadas como um contexto seguro.</translation> <translation id="2799297758492717491">Permitir reprodução automática de mídia em uma lista de permissões de padrões de URL</translation> <translation id="2801230735743888564">Permite que os usuários joguem o easter egg de dinossauro quando o dispositivo estiver off-line. @@ -1785,12 +1784,6 @@ <translation id="6155936611791017817">Definir estado padrão do cursor grande na tela de login</translation> <translation id="6157537876488211233">Lista separada por vírgulas das regras de proxies ignoráveis</translation> <translation id="6158324314836466367">Nome da loja on-line da empresa (uso suspenso)</translation> -<translation id="6164955668342404660">Uso suspenso na versão M69. Em vez disso, use OverrideSecurityRestrictionsOnInsecureOrigin. - - A política especifica a lista de origens (URLs) que devem ser tratadas como um contexto seguro. O objetivo é permitir que organizações possam configurar um servidor temporário para desenvolvimentos de Web internos para que os desenvolvedores deles possam testar recursos que exijam contextos seguros sem precisar implantar TLS no servidor temporário. - A definição de uma lista de URLs nesta política tem o mesmo efeito que configurar a sinalização de linha de comando "--unsafely-treat-insecure-origin-as-secure" para uma lista dos mesmos URLs separados por vírgulas. Se a política for definida, ela terá prioridade em relação à sinalização de linha de comando. - Para ver mais informações sobre contextos seguros, consulte https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Permite definir uma lista de padrões de URL que especificam quais sites não podem executar o plug-in <ph name="FLASH_PLUGIN_NAME" />. Se esta política não for definida, o valor padrão global será utilizado para todos os sites, seja a partir da política "DefaultPluginsSetting", caso esta tenha sido definida, ou a partir das configurações pessoais do usuário, caso não tenha sido definida.</translation> @@ -1963,11 +1956,6 @@ <translation id="6786967369487349613">Configurar o diretório do perfil de roaming</translation> <translation id="6810445994095397827">Bloquear o JavaScript nestes sites</translation> <translation id="681446116407619279">Esquemas de autenticação compatíveis</translation> -<translation id="6832455357698286434"> - A política especifica a lista de origens (URLs) ou padrões de nome de host (como "*.example.com") a serem tratados como contextos seguros. O objetivo é permitir que as organizações possam configurar um servidor temporário para desenvolvimentos de Web internos para que os desenvolvedores deles possam testar recursos que exijam contextos seguros sem precisar implantar TLS no servidor temporário. - A definição de uma lista de URLs nesta política tem o mesmo efeito que configurar a sinalização de linha de comando "--unsafely-treat-insecure-origin-as-secure" para uma lista dos mesmos URLs separados por vírgulas. Se a política for definida, ela terá prioridade em relação à sinalização de linha de comando. - Para ver mais informações sobre contextos seguros, consulte https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Mostrar um prompt recorrente ao usuário indicando que a reinicialização é necessária</translation> <translation id="6838056959556423778">Modifica as regras de seleção de impressora padrão do <ph name="PRODUCT_NAME" />. @@ -2318,7 +2306,6 @@ <translation id="7617319494457709698">Esta política especifica as extensões que podem usar a função <ph name="CHALLENGE_USER_KEY_FUNCTION" /> da API <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> para declaração remota. As extensões devem ser adicionadas a esta lista para usar a API. Se uma extensão não estiver na lista ou se a lista não for definida, a chamada para a API falhará com um código de erro.</translation> -<translation id="7620300057302654932">Origens ou padrões de nomes de host a serem tratados como um contexto seguro.</translation> <translation id="7625444193696794922">Especifica o canal de liberação ao qual este dispositivo deve ser vinculado.</translation> <translation id="7632724434767231364">Nome da biblioteca GSSAPI</translation> <translation id="7635471475589566552">Configura a localidade do aplicativo em <ph name="PRODUCT_NAME" /> e impede que os usuários a alterem. Se ativar esta configuração, <ph name="PRODUCT_NAME" /> utilizará a localidade especificada. Se a localidade configurada não for compatível, "pt-BR" será utilizada. Se esta configuração for desativada ou não for configurada, <ph name="PRODUCT_NAME" /> utilizará a localidade preferida especificada pelo usuário (se configurada), a localidade do sistema ou a localidade padrão "pt-BR".</translation>
diff --git a/components/policy/resources/policy_templates_pt-PT.xtb b/components/policy/resources/policy_templates_pt-PT.xtb index 185ff798..09d61a8 100644 --- a/components/policy/resources/policy_templates_pt-PT.xtb +++ b/components/policy/resources/policy_templates_pt-PT.xtb
@@ -660,7 +660,6 @@ Cada entrada da lista especifica um identificador, o qual é utilizado internamente para distinguir as diferentes contas locais do dispositivo.</translation> <translation id="2769952903507981510">Configurar o nome de domínio necessário para anfitriões de acesso remoto</translation> <translation id="2787173078141616821">Comunicar informações acerca do estado do Android</translation> -<translation id="2793923553868251161">As origens que devem ser tratadas como contexto seguro.</translation> <translation id="2799297758492717491">Permitir a reprodução automática de multimédia numa lista de autorizações de padrões do URL</translation> <translation id="2801230735743888564">Permitir aos utilizadores jogar o jogo do ovo da Páscoa do dinossauro quando o dispositivo está offline. @@ -1805,12 +1804,6 @@ <translation id="6155936611791017817">Definir o estado predefinido do cursor grande no ecrã de início de sessão</translation> <translation id="6157537876488211233">Lista separada por vírgulas das regras para ignorar o proxy</translation> <translation id="6158324314836466367">Nome da Web store da empresa (descontinuado)</translation> -<translation id="6164955668342404660">Descontinuado no M69. Utilize OverrideSecurityRestrictionsOnInsecureOrigin como alternativa. - - A política especifica uma lista de origens (URLs) que devem ser tratadas como contexto seguro. A intenção é permitir que as entidades configurem um servidor experimental para programações Web internas para que os respetivos programadores possam testar as funcionalidades que necessitam de contextos seguros sem terem de implementar o TLS no servidor experimental. - Definir uma lista de URLs nesta política tem o mesmo efeito que definir o sinalizador de linha de comandos "--unsafely-treat-insecure-origin-as-secure" numa lista separada por vírgulas dos mesmos URLs. Se a política estiver definida, substitui o sinalizador de linha de comandos. - Para mais informações acerca de contextos seguros, consulte https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6181608880636987460">Permite-lhe definir uma lista de padrões de URL que especificam sites que não têm autorização para executar o plug-in <ph name="FLASH_PLUGIN_NAME" />. Se esta política não for definida, é utilizado o valor predefinido global para todos os sites da política "DefaultPluginsSetting", se esta estiver definida, ou, caso contrário, a configuração pessoal do utilizador.</translation> @@ -1983,11 +1976,6 @@ <translation id="6786967369487349613">Definir o diretório do perfil de roaming</translation> <translation id="6810445994095397827">Bloquear JavaScript nestes sites</translation> <translation id="681446116407619279">Esquemas de autenticação suportados</translation> -<translation id="6832455357698286434"> - A política especifica uma lista de origens (URLs) ou padrões de nomes de anfitrião (como "*.example.com") que devem ser tratados como contextos seguros. A intenção é permitir que as entidades configurem um servidor experimental para programações Web internas para que os respetivos programadores possam testar as funcionalidades que necessitam de contextos seguros sem terem de implementar o TLS no servidor experimental. - Definir uma lista de URLs nesta política tem o mesmo efeito que definir o sinalizador de linha de comandos "--unsafely-treat-insecure-origin-as-secure" numa lista separada por vírgulas dos mesmos URLs. Se a política estiver definida, substitui o sinalizador de linha de comandos. - Para mais informações acerca de contextos seguros, consulte https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6835883744948188639">Apresentar uma mensagem recorrente ao utilizador a indicar que é recomendado reiniciar</translation> <translation id="6838056959556423778">Substitui as regras de seleção da impressora predefinida do <ph name="PRODUCT_NAME" />. @@ -2339,7 +2327,6 @@ <translation id="7617319494457709698">Esta política especifica as extensões com permissão para utilizar a função <ph name="CHALLENGE_USER_KEY_FUNCTION" /> da <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> para a comprovação remota. As extensões têm de ser adicionadas a esta lista para poderem utilizar a API. Se uma extensão não estiver na lista ou a lista não estiver definida, a chamada para a API falha e resulta num código de erro.</translation> -<translation id="7620300057302654932">As origens ou os padrões de nomes de anfitrião que devem ser tratados como contexto seguro.</translation> <translation id="7625444193696794922">Especifica o canal de lançamento ao qual este aparelho deve estar bloqueado.</translation> <translation id="7632724434767231364">Nome da biblioteca GSSAPI</translation> <translation id="7635471475589566552">Configura o local da aplicação no <ph name="PRODUCT_NAME" /> e impede que os utilizadores o alterem. Se ativar esta definição, o <ph name="PRODUCT_NAME" /> utilizará o local indicado. Se o local configurado não for suportado, será utilizado "en-US". Se esta definição estiver desativada ou não for definida, o <ph name="PRODUCT_NAME" /> utilizará o local preferencial indicado pelo utilizador (se estiver configurado), o local do sistema ou o local alternativo "en-US".</translation>
diff --git a/components/policy/resources/policy_templates_ro.xtb b/components/policy/resources/policy_templates_ro.xtb index a246bc5..620fa83 100644 --- a/components/policy/resources/policy_templates_ro.xtb +++ b/components/policy/resources/policy_templates_ro.xtb
@@ -656,7 +656,6 @@ Fiecare intrare de pe listă specifică un identificator, care este utilizat la nivel intern pentru a face diferența între conturile locale de pe gadget.</translation> <translation id="2769952903507981510">Configurați numele de domeniu necesar pentru gazdele de acces la distanță</translation> <translation id="2787173078141616821">Raportează informații despre starea Android</translation> -<translation id="2793923553868251161">Origini care trebuie tratate drept context securizat.</translation> <translation id="2799297758492717491">Permite redarea automată a conținutului media pentru o listă albă cu șabloane de adrese URL</translation> <translation id="2801230735743888564">Permite utilizatorilor să joace jocul ascuns cu dinozaurul când dispozitivul este offline. @@ -1811,12 +1810,6 @@ <translation id="6155936611791017817">Setați cursorul mare pe ecranul de conectare ca stare prestabilită</translation> <translation id="6157537876488211233">Lista de valori separate prin virgulă a regulilor de ocolire a proxy-ului</translation> <translation id="6158324314836466367">Numele magazinului web pentru întreprinderi (politică învechită)</translation> -<translation id="6164955668342404660">Opțiune învechită în versiunea M69. Folosește OverrideSecurityRestrictionsOnInsecureOrigin. - - Politica specifică o listă de origini (adrese URL) care trebuie tratate drept context securizat. Scopul este să permită organizațiilor să configureze un server de simulare pentru dezvoltările web interne, astfel încât dezvoltatorii lor să testeze funcții care necesită contexte sigure fără a trebui să implementeze TLS pe serverul de simulare. - Configurarea unei liste de adrese URL în această politică are același efect precum configurarea semnalizatorului de linie de comandă „--unsafely-treat-insecure-origin-as-secure” într-o listă cu aceleași adrese URL separate prin virgulă. Dacă politica este activată, ea va anula semnalizatorul de linie de comandă. - Pentru mai multe informații despre contextele securizate, accesează https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Îți permite să setezi o listă de șabloane de adrese URL care specifică site-urile care nu au permisiunea să ruleze pluginul <ph name="FLASH_PLUGIN_NAME" />. Dacă această politică nu este configurată, va fi folosită valoarea prestabilită la nivel global pentru toate site-urile, fie din politica „DefaultCookiesSetting”, în cazul în care aceasta este configurată, fie din configurația personală a utilizatorului, în caz contrar.</translation> @@ -1988,11 +1981,6 @@ <translation id="6786967369487349613">Setează locația profilului de roaming</translation> <translation id="6810445994095397827">Blochează JavaScript de pe aceste site-uri</translation> <translation id="681446116407619279">Scheme de autentificare acceptate</translation> -<translation id="6832455357698286434"> - Politica specifică o listă de origini (adrese URL) sau modele de nume de gazdă (precum „*.example.com”) care trebuie tratate drept contexte securizate. Scopul este să permită organizațiilor să configureze un server de simulare pentru dezvoltările web interne, astfel încât dezvoltatorii lor să testeze funcții care necesită contexte sigure fără a trebui să implementeze TLS pe serverul de simulare. - Configurarea unei liste de adrese URL în această politică are același efect precum configurarea semnalizatorului de linie de comandă „--unsafely-treat-insecure-origin-as-secure” într-o listă cu aceleași adrese URL separate prin virgulă. Dacă politica este activată, ea va anula semnalizatorul de linie de comandă. - Pentru mai multe informații despre contextele securizate, accesează https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Afișează utilizatorului o solicitare recurentă prin care se indică faptul că relansarea este recomandată</translation> <translation id="6838056959556423778">Modifică regulile de selectare a imprimantei prestabilite pentru <ph name="PRODUCT_NAME" />. @@ -2343,7 +2331,6 @@ <translation id="7617319494457709698">Această politică specifică extensiile cărora li se permite să folosească funcția <ph name="CHALLENGE_USER_KEY_FUNCTION" /> din <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> pentru atestarea la distanță. Extensiile trebuie să fie adăugate în această listă pentru a folosi API-ul. Dacă o extensie nu este în listă sau dacă lista nu este configurată, apelul către API nu va reuși și va genera un cod de eroare.</translation> -<translation id="7620300057302654932">Origini sau modele de nume de gazdă care trebuie tratate drept context securizat.</translation> <translation id="7625444193696794922">Specifică un canal de lansare la care ar trebui să fie blocat acest dispozitiv.</translation> <translation id="7632724434767231364">Nume bibliotecă GSSAPI</translation> <translation id="7635471475589566552">Configurează limba aplicației din <ph name="PRODUCT_NAME" /> și împiedică modificarea limbii de către utilizatori. Dacă activați această setare, <ph name="PRODUCT_NAME" /> utilizează limba indicată. Dacă limba configurată nu este acceptată, este utilizată „en-US”. Dacă această setare este dezactivată sau nu este configurată, <ph name="PRODUCT_NAME" /> utilizează limba preferată specificată de utilizator (dacă este configurată), limba sistemului sau limba „en-US” alternativă.</translation>
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index 5be4c510..ad3e2680 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -251,6 +251,7 @@ Когда правило включено, <ph name="PRODUCT_OS_NAME" /> отправляет соответствующие сведения. Когда правило отключено, данные не отправляются. Если значение не установлено, правило применяется к управляемым устройствам по умолчанию.</translation> +<translation id="1920046221095339924">Разрешить управляемый сеанс на устройстве</translation> <translation id="1929709556673267855">Позволяет установить конфигурацию принтеров, подключенных к устройствам компании. С помощью этого правила можно задать конфигурацию принтеров для устройств с <ph name="PRODUCT_OS_NAME" />. Поддерживаемый формат файла тот же, что и для словаря NativePrinters, но с дополнительными полями "id" и "guid", которые требуется заполнить для каждого принтера, чтобы занести его в белый или черный список. @@ -284,6 +285,7 @@ Если правило включено или его значение не указано, пользователи смогут сами управлять автозаполнением через интерфейс.</translation> <translation id="1960840544413786116">Разрешены ли сертификаты без расширения subjectAlternativeName, выданные надежными якорями доверия</translation> +<translation id="1962273523772270623">Разрешить сбор журналов событий WebRTC из сервисов Google</translation> <translation id="1964634611280150550">Режим инкогнито отключен</translation> <translation id="1964802606569741174">Правило не влияет на приложение YouTube для Android. Чтобы принудительно включить режим Безопасного просмотра на YouTube, необходимо запретить установку приложения YouTube для Android.</translation> <translation id="1969212217917526199">Позволяет изменить правила сборок для отладки хоста удаленного доступа. @@ -633,7 +635,6 @@ Каждая строка содержит внутренний идентификатор аккаунта, помогающий отличать их друг от друга.</translation> <translation id="2769952903507981510">Настройка имени домена для хостов удаленного доступа</translation> <translation id="2787173078141616821">Отправка отчетов с информацией о состоянии Android</translation> -<translation id="2793923553868251161">Выбор источников в качестве безопасного контекста</translation> <translation id="2799297758492717491">Разрешить автоматически воспроизводить видео на страницах из белого списка шаблонов URL</translation> <translation id="2801230735743888564">Разрешить пользователям играть с динозавром офлайн. @@ -1775,12 +1776,6 @@ <translation id="6155936611791017817">Наличие или отсутствие большого курсора по умолчанию на экране входа</translation> <translation id="6157537876488211233">Список правил для игнорирования прокси-сервера</translation> <translation id="6158324314836466367">Название корпоративного интернет-магазина (больше не поддерживается)</translation> -<translation id="6164955668342404660">Не поддерживается в M69. Используйте вместо него правило OverrideSecurityRestrictionsOnInsecureOrigin. - - Позволяет указать список URL, которые будут считаться безопасными. Дает организациям возможность настроить вспомогательный сервер для внутренней веб-разработки и тестировать функции, требующие безопасного контекста, без развертывания TLS. - Правило аналогично параметру командной строки --unsafely-treat-insecure-origin-as-secure со списком URL, разделенных запятыми. Если правило настроено, оно переопределяет значение этого параметра. - Подробную информацию о безопасном контексте можно найти на странице https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6181608880636987460">Позволяет задать список шаблонов URL для сайтов, которым запрещено запускать плагин <ph name="FLASH_PLUGIN_NAME" />. Если это правило не настроено, то для всех сайтов используется глобальное значение по умолчанию из правила DefaultPluginsSetting (если оно задано, в противном случае применяется пользовательская конфигурация).</translation> @@ -1899,6 +1894,11 @@ Если это правило не настроено или список пуст, в <ph name="PRODUCT_NAME" /> будут использоваться все схемы.</translation> <translation id="6652197835259177259">Настройки локально управляемых профилей</translation> <translation id="6658245400435704251">Время (в секундах), которое может пройти от появления обновления на сервере до его скачивания на устройство. Это время определяется как длительностью самого скачивания, так и частотой проверок на наличие обновлений. Задается максимальное время задержки, по истечении которого автообновление точно будет выполнено.</translation> +<translation id="6665599130599311250">Если задано значение False или правило не настроено, управляемый гостевой сеанс будет проходить так, как описано на странице https://support.google.com/chrome/a/answer/3017014, в режиме "Сеанс общего аккаунта". + + Если задано значение True, управляемый гостевой сеанс будет проходить в режиме "Управляемый сеанс", т. е. без многих ограничений режима "Сеанс общего аккаунта". + + Если правило настроено, пользователь не сможет его изменить.</translation> <translation id="6665670272107384733">Указать, как часто требуется вводить пароль, чтобы пользоваться быстрой разблокировкой</translation> <translation id="6681229465468164801">Позволяет задать список шаблонов URL для сайтов, которым запрещено запрашивать доступ к USB-устройствам. @@ -1948,11 +1948,6 @@ <translation id="6786967369487349613">Указать каталог для перемещаемого профиля</translation> <translation id="6810445994095397827">Блокировать JavaScript на этих сайтах</translation> <translation id="681446116407619279">Поддерживаемые протоколы аутентификации</translation> -<translation id="6832455357698286434"> - Позволяет указать список URL и шаблоны имен хостов (например, *.example.com), которые будут считаться безопасными. Дает организациям возможность настроить вспомогательный сервер для внутренней веб-разработки и тестировать функции, требующие безопасного контекста, без развертывания TLS. - Правило аналогично параметру командной строки --unsafely-treat-insecure-origin-as-secure со списком URL, разделенных запятыми. Если правило настроено, оно переопределяет значение этого параметра. - Подробную информацию о безопасном контексте можно найти на странице https://www.w3.org/TR/secure-contexts/. - </translation> <translation id="6835883744948188639">Уведомлять пользователя о том, что рекомендуется перезапустить браузер</translation> <translation id="6838056959556423778">Переопределяет правила выбора принтера по умолчанию в <ph name="PRODUCT_NAME" />. @@ -2056,6 +2051,17 @@ <translation id="6943577887654905793">Предпочтительное название для Mac и Linux:</translation> <translation id="69525503251220566">Параметр функции поиска изображений для поисковой системы по умолчанию</translation> <translation id="6956272732789158625">Запретить всем сайтам создавать ключи</translation> +<translation id="6982028490425791294"> + Если задано значение True, <ph name="PRODUCT_NAME" /> сможет собирать журналы событий WebRTC из сервисов Google (например, Google Meet), и загружать их в Google. + + Если задано значение False или правило не настроено, <ph name="PRODUCT_NAME" /> не сможет собирать и загружать такие журналы. + + В журналах содержится такая информация, как размер отправленных и полученных пакетов RTP, время их отправки, данные о перегрузке сети, а также метаданные о продолжительности и качестве аудио и видео. Такая информация полезна для отладки звонков и видеовстреч в Chrome (например, для оценки пропускной способности канала). В журналах нет самого аудио- или видеоконтента. + + Сбор данных могут запустить только такие веб-сервисы Google, как Hangouts и Meet. + + Для упрощения отладки эти журналы могут быть связаны с журналами самих сервисов Google с помощью идентификатора сеанса. + </translation> <translation id="6994082778848658360">Определяет, как можно использовать встроенный аппаратный защитный элемент для двухэтапной аутентификации, если этот элемент ее поддерживает. Аппаратная кнопка питания используется для подтверждения физического присутствия пользователя. Если выбран вариант "Отключена", двухфакторная аутентификация не применяется. @@ -2284,7 +2290,6 @@ <translation id="7617319494457709698">Правило определяет, смогут ли расширения использовать функцию <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" /> для удаленного подтверждения данных. Чтобы разрешить расширению делать это, его необходимо добавить в список. Если расширения нет в списке или список не создан, произойдет ошибка вызова API и будет показан ее код.</translation> -<translation id="7620300057302654932">URL или шаблоны имен хостов, которые будут считаться безопасными</translation> <translation id="7625444193696794922">Задает канал выпуска, за которым должно быть закреплено устройство.</translation> <translation id="7632724434767231364">название библиотеки GSSAPI</translation> <translation id="7635471475589566552">Устанавливает региональные настройки приложения в <ph name="PRODUCT_NAME" /> и запрещает пользователям менять их. Если этот параметр включен, <ph name="PRODUCT_NAME" /> использует указанные региональные настройки. Если они не поддерживаются, используется вариант en-US. Если этот параметр отключен или не настроен, <ph name="PRODUCT_NAME" /> использует региональные настройки пользователя (если они выбраны), системные региональные настройки либо резервный вариант en-US.</translation>
diff --git a/components/policy/resources/policy_templates_sk.xtb b/components/policy/resources/policy_templates_sk.xtb index 4551f84..a8d8b69 100644 --- a/components/policy/resources/policy_templates_sk.xtb +++ b/components/policy/resources/policy_templates_sk.xtb
@@ -657,7 +657,6 @@ Každá položka v zozname určuje identifikátor, ktorý sa používa interne na rozpoznanie odlišných miestnych účtov na zariadení.</translation> <translation id="2769952903507981510">Konfigurácia povinného názvu domény pre hostiteľov vzdialeného prístupu</translation> <translation id="2787173078141616821">Nahlasovať informácie o stave Androidu</translation> -<translation id="2793923553868251161">Zdroje, ktoré sa majú považovať za zabezpečený kontext</translation> <translation id="2799297758492717491">Povoliť automatické prehrávanie médií z bielej listiny vzorov webových adries</translation> <translation id="2801230735743888564">Povoľte používateľom hrať veľkonočnú hru s dinosaurom, keď je zariadenie offline. @@ -1848,12 +1847,6 @@ <translation id="6155936611791017817">Nastaviť predvolený stav veľkého kurzora na prihlasovacej obrazovke</translation> <translation id="6157537876488211233">Zoznam pravidiel vynechania servera proxy oddelených čiarkami</translation> <translation id="6158324314836466367">Názov Internetového obchodu pre podniky (podpora je ukončená)</translation> -<translation id="6164955668342404660">Podpora tohto pravidla bola ukončená vo verzii M69. Použite namiesto neho OverrideSecurityRestrictionsOnInsecureOrigin. - - Toto pravidlo umožňuje určiť zoznam zdrojov (webových adries), ktoré sa majú považovať za zabezpečený kontext. Cieľom je povoliť organizáciám nastaviť pracovný server na interný vývoj webu, aby ich vývojári mohli testovať funkcie vyžadujúce zabezpečené kontexty bez nutnosti nasadenia protokolu TLS na pracovnom serveri. - Nastavenie zoznamu webových adries v rámci tohto pravidla má rovnaký účinok ako nastavenie príznaku príkazového riadka --unsafely-treat-insecure-origin-as-secure do zoznamu rovnakých webových adries oddelených čiarkou. Ak toto pravidlo nastavíte, prepíše príznak príkazového riadka. - Ďalšie informácie o zabezpečených kontextoch nájdete na adrese https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Umožňuje nastaviť zoznam vzorov webových adries určujúcich weby, ktoré majú zakázané spustiť doplnok <ph name="FLASH_PLUGIN_NAME" />. Ak toto pravidlo nenastavíte, pre všetky weby sa použije globálna predvolená hodnota, ktorá je určená buď pravidlom DefaultCookiesSetting (ak je nastavené), alebo inou osobnou konfiguráciou od používateľa.</translation> @@ -2034,11 +2027,6 @@ <translation id="6786967369487349613">Nastaviť adresár roamingového profilu</translation> <translation id="6810445994095397827">Blokovať jazyk JavaScript na týchto webových stránkach</translation> <translation id="681446116407619279">Podporované schémy overenia</translation> -<translation id="6832455357698286434"> - Toto pravidlo umožňuje určiť zoznam zdrojov (webových adries) alebo vzorov názvov hostiteľa (napríklad *.example.com), ktoré sa majú považovať za zabezpečené kontexty. Cieľom je povoliť organizáciám nastaviť pracovný server na interný vývoj webu, aby ich vývojári mohli testovať funkcie vyžadujúce zabezpečené kontexty bez nutnosti nasadenia protokolu TLS na pracovnom serveri. - Nastavenie zoznamu webových adries v rámci tohto pravidla má rovnaký účinok ako nastavenie príznaku príkazového riadka --unsafely-treat-insecure-origin-as-secure do zoznamu rovnakých webových adries oddelených čiarkou. Ak toto pravidlo nastavíte, prepíše príznak príkazového riadka. - Ďalšie informácie o zabezpečených kontextoch nájdete na adrese https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Zobrazovať používateľovi opakovanú výzvu, že sa vyžaduje opätovné spustenie</translation> <translation id="6838056959556423778">Umožňuje prepísať pravidlá výberu predvolenej tlačiarne v prehliadači <ph name="PRODUCT_NAME" />. @@ -2409,7 +2397,6 @@ <translation id="7617319494457709698">Toto pravidlo určuje, pre ktoré rozšírenia bude povolené vzdialené prihlásenie pomocou metódy <ph name="CHALLENGE_USER_KEY_FUNCTION" /> rozhrania <ph name="ENTERPRISE_PLATFORM_KEYS_API" />. Rozšírenia môžu používať toto rozhranie API, keď sú pridané do tohto zoznamu. Ak sa rozšírenie v zozname nenachádza alebo zoznam nie je vytvorený, volania rozhrania API zlyhajú a nahlásia kód chyby.</translation> -<translation id="7620300057302654932">Zdroje alebo vzory názvov hostiteľa, ktoré sa majú považovať za zabezpečený kontext</translation> <translation id="7625444193696794922">Určuje, aký kanál verzie by mal byť v zariadení uzamknutý.</translation> <translation id="7632724434767231364">Názov knižnice GSSAPI</translation> <translation id="7635471475589566552">Slúži na konfiguráciu miestneho nastavenia aplikácie v prehliadači <ph name="PRODUCT_NAME" /> a bráni používateľom miestne nastavenie zmeniť.
diff --git a/components/policy/resources/policy_templates_sl.xtb b/components/policy/resources/policy_templates_sl.xtb index a24573b..03c4f6b2 100644 --- a/components/policy/resources/policy_templates_sl.xtb +++ b/components/policy/resources/policy_templates_sl.xtb
@@ -677,7 +677,6 @@ Vsak vnos na seznamu določa identifikator, ki se uporablja interno za razlikovanje med lokalnimi računi za napravo.</translation> <translation id="2769952903507981510">Nastavitev zahtevanega imena domene za dostop do oddaljenih gostiteljev</translation> <translation id="2787173078141616821">Poročanje podatkov o stanju Androida</translation> -<translation id="2793923553868251161">Izvori naj se obravnavajo kot varni kontekst.</translation> <translation id="2799297758492717491">Dovoli samodejno predvajanje predstavnosti na seznamu dovoljenih vzorcev URL</translation> <translation id="2801230735743888564">Uporabnikom dovoli igranje skrite igre z dinozavrom, ko je naprava brez internetne povezave. @@ -1881,12 +1880,6 @@ <translation id="6155936611791017817">Nastavitev privzetega stanja velikega kazalca na prijavnem zaslonu</translation> <translation id="6157537876488211233">Seznam pravil za obvod proxyja, ločenih z vejico</translation> <translation id="6158324314836466367">Ime spletne trgovine podjetja (zastarelo)</translation> -<translation id="6164955668342404660">Zastarelo v M69. Uporabite OverrideSecurityRestrictionsOnInsecureOrigin. - - Pravilnik določa seznam izvorov (URL-jev), ki se obravnavajo kot varni kontekst. Namen tega je omogočiti organizacijam nastavitev preskusnega produkcijskega strežnika za notranje spletno razvijanje, tako da lahko razvijalci preskušajo funkcije, ki zahtevajo varne kontekste, ne da bi bilo treba uvesti TLS v preskusnem produkcijskem strežniku. - Nastavitev seznama URL-jev v tem pravilniku ima enak učinek kot nastavitev zastavice ukazne vrstice »--unsafely-treat-insecure-origin-as-secure« na seznamu, ločenemu z vejicami, istih URL-jev. Če je pravilnik nastavljen, preglasi zastavico ukazne vrstice. - Več informacij o varnih kontekstih je na voljo na https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Omogoča nastavitev seznama vzorcev URL-jev, ki določa, katerim spletnim mestom je onemogočeno izvajanje vtičnika <ph name="FLASH_PLUGIN_NAME" />. Če ta pravilnik ni nastavljen, se za vsa spletna mesta uporabi globalna privzeta vrednost iz pravilnika »DefaultPluginsSetting«, kadar je ta pravilnik nastavljen, sicer pa iz osebnih nastavitev uporabnika.</translation> @@ -2067,11 +2060,6 @@ <translation id="6786967369487349613">Nastavitev imenika za profil za gostovanje</translation> <translation id="6810445994095397827">Blokiraj JavaScript na teh mestih</translation> <translation id="681446116407619279">Podprti načini preverjanja pristnosti</translation> -<translation id="6832455357698286434"> - Pravilnik določa seznam izvorov (URL-jev) ali vzorcev imena gostitelja (na primer »*.example.com«), ki se obravnavajo kot varni kontekst. Namen tega je omogočiti organizacijam nastavitev preskusnega produkcijskega strežnika za notranje spletno razvijanje, tako da lahko razvijalci preskušajo funkcije, ki zahtevajo varne kontekste, ne da bi bilo treba uvesti TLS v preskusnem produkcijskem strežniku. - Nastavitev seznama URL-jev v tem pravilniku ima enak učinek kot nastavitev zastavice ukazne vrstice »--unsafely-treat-insecure-origin-as-secure« na seznamu, ločenemu z vejicami, istih URL-jev. Če je pravilnik nastavljen, preglasi zastavico ukazne vrstice. - Več informacij o varnih kontekstih je na voljo na https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Uporabniku prikaži ponavljajoč se poziv, ki obvešča, da je priporočen vnovičen zagon</translation> <translation id="6838056959556423778">Preglasi pravila za izbiro privzetega tiskalnika za <ph name="PRODUCT_NAME" />. @@ -2441,7 +2429,6 @@ <translation id="7617319494457709698">Ta pravilnik določa dovoljene razširitve, ki lahko uporabljajo metodo <ph name="CHALLENGE_USER_KEY_FUNCTION" /> API-ja <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> za potrjevanje na daljavo. Razširitve, ki lahko uporabljajo API, morate dodati na ta seznam. Če razširitve ni na seznamu ali seznam ni nastavljen, poziv API-ju ne bo uspel in bo vrnjena koda napake.</translation> -<translation id="7620300057302654932">Izvori ali vzorci imena gostitelja, ki se obravnavajo kot varni kontekst</translation> <translation id="7625444193696794922">Določa kanal za izdajo, na katerega naj bo zaklenjena ta naprava.</translation> <translation id="7632724434767231364">Ime knjižnice GSSAPI</translation> <translation id="7635471475589566552">Določa območne nastavitve programa <ph name="PRODUCT_NAME" /> in prepreči uporabnikom, da jih spreminjajo.
diff --git a/components/policy/resources/policy_templates_sr.xtb b/components/policy/resources/policy_templates_sr.xtb index d5450ce..dbdbfd29 100644 --- a/components/policy/resources/policy_templates_sr.xtb +++ b/components/policy/resources/policy_templates_sr.xtb
@@ -674,7 +674,6 @@ Свака ставка на листи представља идентификатор који се интерно користи за разликовање локалних налога на уређају.</translation> <translation id="2769952903507981510">Конфигурисање обавезног имена домена за хостове са даљинским приступом</translation> <translation id="2787173078141616821">Шаљи информације о статусу Android-а</translation> -<translation id="2793923553868251161">Извори који се сматрају безбедним контекстом.</translation> <translation id="2799297758492717491">Дозвољавају аутоматско пуштање медија на белој листи URL образаца</translation> <translation id="2801230735743888564">Омогућавају корисницима да играју скривену игру са диносауром када је уређај офлајн. @@ -1867,12 +1866,6 @@ <translation id="6155936611791017817">Подешавање подразумеваног статуса великог показивача на екрану за пријављивање</translation> <translation id="6157537876488211233">Листа правила за заобилажење проксија раздвојена зарезима</translation> <translation id="6158324314836466367">Назив веб-продавнице предузећа (застарело је)</translation> -<translation id="6164955668342404660">Застарело са верзијом M69. Уместо тога користите OverrideSecurityRestrictionsOnInsecureOrigin. - - Ове смернице наводе листу извора (URL-ове) који се сматрају безбедним контекстом. Њихов циљ је да дозволе организацијама да подесе сервер за тестирање за интерно веб-програмирање да би њихови програмери могли да тестирају функције које захтевају безбедне контексте, а да не морају да примењују TLS на серверу за тестирање. - Подешавање листе URL-ова у овим смерницама има исти ефекат као подешавање обележја командне линије „--unsafely-treat-insecure-origin-as-secure“ на листу истих URL-ова раздвојених зарезима. Ако подесите смернице, оне замењују обележје командне линије. - Више информација о безбедним контекстима потражите на https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Омогућавају вам да подесите листу образаца URL-ова који наводе сајтове којима није дозвољено да покрећу додатну компоненту <ph name="FLASH_PLUGIN_NAME" />. Ако не подесите ове смернице, за све сајтове ћемо користити глобалну подразумевану вредност или из смерница „DefaultPluginsSetting“ ако су оне подешене или, ако нису, из личне конфигурације корисника.</translation> @@ -2049,11 +2042,6 @@ <translation id="6786967369487349613">Подешавање директоријума роминг профила</translation> <translation id="6810445994095397827">Блокирај JavaScript на овим сајтовима</translation> <translation id="681446116407619279">Подржане шеме провере аутентичности</translation> -<translation id="6832455357698286434"> - Ове смернице наводе листу извора (URL-ове) или обрасце имена хостова (на пример, „*.example.com“) који се сматрају безбедним контекстом. Њихов циљ је да дозволе организацијама да подесе сервер за тестирање за интерно веб-програмирање да би њихови програмери могли да тестирају функције које захтевају безбедне контексте, а да не морају да примењују TLS на серверу за тестирање. - Подешавање листе URL-ова у овим смерницама има исти ефекат као подешавање обележја командне линије „--unsafely-treat-insecure-origin-as-secure“ на листу истих URL-ова раздвојених зарезима. Ако подесите смернице, оне замењују обележје командне линије. - Више информација о безбедним контекстима потражите на https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Приказуј кориснику упит који се понавља у коме је наведено да се поновно покретање препоручује</translation> <translation id="6838056959556423778">Замењују <ph name="PRODUCT_NAME" /> правила за избор подразумеваног штампача. @@ -2420,7 +2408,6 @@ <translation id="7617319494457709698">Ове смернице наводе додатке којима је дозвољено да за даљинску потврду користе функцију <ph name="CHALLENGE_USER_KEY_FUNCTION" /> API-ја <ph name="ENTERPRISE_PLATFORM_KEYS_API" />. Додаци морају да буду на овој листи да би користили API. Ако се додатак не налази на листи или листа није подешена, активација API-ја неће успети и приказаће се кôд грешке.</translation> -<translation id="7620300057302654932">Извори или обрасци имена хостова који се сматрају безбедним контекстом.</translation> <translation id="7625444193696794922">Наводи канал за објављивање са којим овај уређај треба да буде повезан.</translation> <translation id="7632724434767231364">Назив GSSAPI библиотеке</translation> <translation id="7635471475589566552">Конфигурише локалитет апликације у <ph name="PRODUCT_NAME" />-у и спречава кориснике да промене локалитет.
diff --git a/components/policy/resources/policy_templates_sv.xtb b/components/policy/resources/policy_templates_sv.xtb index 205f24f..a9f3470 100644 --- a/components/policy/resources/policy_templates_sv.xtb +++ b/components/policy/resources/policy_templates_sv.xtb
@@ -676,7 +676,6 @@ Alla poster i listan anger en identifierare som används internt för att skilja de olika lokala kontona på enheten från varandra.</translation> <translation id="2769952903507981510">Konfigurera det obligatoriska domännamnet för fjärråtkomstvärdar</translation> <translation id="2787173078141616821">Rapportera information om Android-status</translation> -<translation id="2793923553868251161">Källor som behandlas som säker kontext.</translation> <translation id="2799297758492717491">Tillåt att media spelas upp automatiskt på en vitlista över webbadressmallar</translation> <translation id="2801230735743888564">Tillåt användare att spela påskäggsspelet med dinosaurier när enheten är offline. @@ -1878,12 +1877,6 @@ <translation id="6155936611791017817">Ange standardläget för den stora markören på inloggningsskärmen</translation> <translation id="6157537876488211233">Kommaavgränsad lista med regler för proxybypass</translation> <translation id="6158324314836466367">Namn på företagets webbutik (föråldrat)</translation> -<translation id="6164955668342404660">Utfasad i M69. Använd OverrideSecurityRestrictionsOnInsecureOrigin i stället. - - I den här principen anges en lista med ursprung (webbadresser) som ska behandlas som säker kontext. Syftet är att tillåta organisationer att använda en provkörningsserver för intern webbutveckling där utvecklarna kan testa funktioner som kräver säker kontext utan att behöva använda TLS på testservern. - Att ange en lista med webbadresser i den här principen fungerar på samma sätt som om man använder kommandoradsflaggan --unsafely-treat-insecure-origin-as-secure med webbadresserna ifråga i en kommaavgränsad lista. Om principen har ställts in åsidosätts kommandoradsflaggan. - Mer information om säker kontext finns på https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Låter dig ange en lista med webbadressmönster som definierar på vilka webbplatser pluginprogrammet för <ph name="FLASH_PLUGIN_NAME" /> inte får köras. Om den här principen inte anges används det globala standardvärdet för alla webbplatser. Värdet hämtas antingen från principen DefaultPluginsSetting, om den har ställts in, eller från användarens egna inställningar.</translation> @@ -2064,11 +2057,6 @@ <translation id="6786967369487349613">Ange roamingprofilkatalogen</translation> <translation id="6810445994095397827">Blockera JavaScript på dessa webbplatser</translation> <translation id="681446116407619279">Autentiseringsscheman som stöds</translation> -<translation id="6832455357698286434"> - I den här principen anges en lista med ursprung (webbadresser) eller värdnamnsmönster (t.ex. *.example.com) som ska behandlas som säker kontext. Syftet är att tillåta organisationer att använda en provkörningsserver för intern webbutveckling där utvecklarna kan testa funktioner som kräver säker kontext utan att behöva använda TLS på testservern. - Att ange en lista med webbadresser i den här principen fungerar på samma sätt som om man använder kommandoradsflaggan --unsafely-treat-insecure-origin-as-secure med webbadresserna ifråga i en kommaavgränsad lista. Om principen har ställts in åsidosätts kommandoradsflaggan. - Mer information om säker kontext finns på https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Visa användaren ett återkommande meddelande om att omstart rekommenderas</translation> <translation id="6838056959556423778">Åsidosätter skrivarens standardurvalsregler för <ph name="PRODUCT_NAME" />. @@ -2437,7 +2425,6 @@ <translation id="7617319494457709698">Principen specificerar vilka tillägg som får använda <ph name="ENTERPRISE_PLATFORM_KEYS_API" />-funktionen <ph name="CHALLENGE_USER_KEY_FUNCTION" /> för fjärrattestering. Tillägg måste anges på den här listan om de ska kunna använda API:et. Om ett tillägg inte finns med på listan, eller om listan inte har fastställts misslyckas anslutningen till API:et och en felkod visas.</translation> -<translation id="7620300057302654932">Ursprung eller värdnamnsmönster som behandlas som säker kontext.</translation> <translation id="7625444193696794922">Policyn anger vilken versionskanal som enheten ska låsas till.</translation> <translation id="7632724434767231364">GSSAPI-biblioteksnamn</translation> <translation id="7635471475589566552">Policyn konfigurerar appens språkversion i <ph name="PRODUCT_NAME" /> och förhindrar att användarna ändrar språk.
diff --git a/components/policy/resources/policy_templates_sw.xtb b/components/policy/resources/policy_templates_sw.xtb index fc6c78e..f6ae7c3 100644 --- a/components/policy/resources/policy_templates_sw.xtb +++ b/components/policy/resources/policy_templates_sw.xtb
@@ -653,7 +653,6 @@ Kila ingizo la orodha hubainisha kitambulishi, kinachotumiwa ndani kutambua akaunti tofauti za kifaa cha karibu nawe zilizo mbali.</translation> <translation id="2769952903507981510">Sanidi jina la kikoa linalohitajika kwa wapangishaji wa ufikivu wa mbali</translation> <translation id="2787173078141616821">Ripoti maelezo kuhusu hali ya Android</translation> -<translation id="2793923553868251161">Vyanzo vitakavyotumika kama muktadha salama.</translation> <translation id="2799297758492717491">Ruhusu maudhui yacheze kiotomatiki kwenye orodha ya ruwaza za URL zilizoidhinishwa</translation> <translation id="2801230735743888564">Ruruhusu watumiaji wacheze mchezo fiche wa dinosau kifaa kinapokuwa nje ya mtandao. @@ -1844,12 +1843,6 @@ <translation id="6155936611791017817">Weka hali chaguomsingi ya kiteuzi kikubwa kwenye skrini ya kuingia katika akaunti</translation> <translation id="6157537876488211233">Orodha iliyotenganishwa kwa koma ya kanuni za ukwepaji wa proksi</translation> <translation id="6158324314836466367">Jina la biashara la duka la wavuti (limeacha kuendesha huduma)</translation> -<translation id="6164955668342404660">Iliacha kuendesha huduma katika M69. Tumia OverrideSecurityRestrictionsOnInsecureOrigin badala yake. - - Sera hii inabainisha orodha ya vyanzo (URL) vitakavyochukuliwa kuwa muktadha salama. Nia yake ni kuruhusu mashirika yaweke seva ya majaribio kwa ajili ya usanidi wa tovuti za ndani, ili wasanidi programu waweze kujaribu vipengele vinavyohitaji muktadha salama bila kutumia TLS kwenye seva ya majaribio. - Hatua ya kuweka orodha ya URL katika sera hii ina athari sawa na kuweka mipangilio ya ripoti ya mstari wa amri '--unsafely-treat-insecure-origin-as-secure' kwenye orodha inayotenganishwa kwa koma ya URL sawa. Iwapo umeweka sera hii, itabatilisha ripoti ya mstari wa amri. - Kwa maelezo zaidi kuhusu muktadha salama, angalia https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Hukuruhusu kuweka orodha ya ruwaza za url inayobainisha tovuti zisizoruhusiwa kutumia programu-jalizi ya <ph name="FLASH_PLUGIN_NAME" />. Ikiwa sera hii haitawekwa, thamani chaguomsingi itatumiwa kwa tovuti zote kutoka kwenye sera ya 'DefaultPluginsSetting' endapo itawekwa, au mtumiaji akiweka mipangilio mwenyewe.</translation> @@ -2026,11 +2019,6 @@ <translation id="6786967369487349613">Weka saraka ya wasifu isiyo ya kawaida</translation> <translation id="6810445994095397827">Zuia JavaScript kwenye tovuti hizi</translation> <translation id="681446116407619279">Mipango inayohimiliwa ya uthibitishaji</translation> -<translation id="6832455357698286434"> - Sera hii inabainisha orodha ya vyanzo (URL) au mitindo ya majina ya seva pangishi ( kama vile "*.example.com") ya kuzingatiwa kuwa muktadha salama. Nia yake ni kuruhusu mashirika yaweke seva ya majaribio kwa ajili ya usanidi wa tovuti za ndani, ili wasanidi programu waweze kujaribu vipengele wakitumia muktadha salama bila kutumia TLS kwenye seva ya majaribio. - Hatua ya kuweka orodha ya URL katika sera hii ina athari sawa na kuweka mipangilio ya ripoti ya mstari wa amri '--unsafely-treat-insecure-origin-as-secure' kwenye orodha inayotenganishwa kwa koma ya URL sawa. Iwapo sera imewekwa, itabatilisha ripoti ya mstari wa amri. - Kwa maelezo zaidi kuhusu muktadha salama, angalia https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Mwonyeshe mtumiaji kidokezo kinachojirudia, kinachoashiria kwamba inapendekezwa afungue kivinjari upya</translation> <translation id="6838056959556423778">Hubatilisha mipangilio ya uteuzi wa printa chaguomsingi ya <ph name="PRODUCT_NAME" />. @@ -2402,7 +2390,6 @@ <translation id="7617319494457709698">Sera hii hubainisha viendelezi vinavyoruhusiwa kutumia utendaji wa <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" /> kwa uthibitishaji wa mbali. Lazima viendelezi viongezwe kwenye orodha hii ili kutumia API. Ikiwa kiendelezi hakiko kwenye orodha, au orodha haijawekwa, mawasiliano na API hayatafanikiwa na kutakuwa na msimbo wa hitilafu.</translation> -<translation id="7620300057302654932">Vyanzo au mitindo ya majina ya seva pangishi inapaswa kuzingatiwa kama muktadha salama.</translation> <translation id="7625444193696794922">Hubainisha kituo cha kutoa ambacho kifaa hiki kinastahili kufungiwa kwacho.</translation> <translation id="7632724434767231364">Jina la maktaba ya GSSAPI</translation> <translation id="7635471475589566552">Inasanidi lugha ya programu katika <ph name="PRODUCT_NAME" /> na huzuia watumiaji kubadilisha lugha.
diff --git a/components/policy/resources/policy_templates_ta.xtb b/components/policy/resources/policy_templates_ta.xtb index cadfd56..e11c1a1 100644 --- a/components/policy/resources/policy_templates_ta.xtb +++ b/components/policy/resources/policy_templates_ta.xtb
@@ -256,6 +256,7 @@ 'தவறு' என அமைத்தால், உபயோக அளவீடுகளும் பிழை அறிக்கைத் தரவும் அறிக்கையிடப்படாது. உள்ளமைக்கப்படவில்லை என்றால், உபயோக அளவீடுகளும் பிழை அறிக்கைத் தரவும் அறிக்கையிடப்படுவது நிர்வகிக்கப்படாத சாதனங்களில் முடக்கப்படும், நிர்வகிக்கப்படும் சாதனங்களில் இயக்கப்படும்.</translation> +<translation id="1920046221095339924">சாதனத்தில், நிர்வகிக்கப்பட்ட அமர்வை அனுமதிக்கும்</translation> <translation id="1929709556673267855">சாதனங்களில் இணைக்கப்பட்டிருக்கும் நிறுவனப் பிரிண்டர்களுக்கு உள்ளமைவுகளை வழங்கும். நீங்கள் <ph name="PRODUCT_OS_NAME" /> சாதனங்களுக்கு பிரிண்டர் உள்ளமைவுகளை வழங்குவதை இந்தக் கொள்கை அனுமதிக்கும். வடிவமானது NativePrinters அகராதியின் வடிவத்தைப் போன்றது. அத்துடன், ஏற்புப் பட்டியல் அல்லது தடைப் பட்டியலில் சேர்க்க, ஒவ்வொரு பிரிண்டருக்கும் கூடுதலாகத் தேவைப்படும் "id" அல்லது "guid" புலத்தைக் கொண்டிருக்கும். @@ -289,6 +290,7 @@ இந்த அமைப்பை இயக்கினால் அல்லது அதற்கென எந்தவொரு மதிப்பையும் அமைக்கவில்லை என்றால், பயனர் இடைமுகத்தில் முகவரிகளுக்கான தன்னிரப்பி அம்சத்தைப் பயனர் கட்டுப்படுத்த முடியும்.</translation> <translation id="1960840544413786116">subjectAlternativeName நீட்டிப்பு இல்லாத லோக்கல் ட்ரஸ்ட் ஆங்கர்கள் வழங்கிய சான்றிதழ்களை அனுமதிக்கவா?</translation> +<translation id="1962273523772270623">WebRTC நிகழ்வுப் பதிவுகளை Google சேவைகளிலிருந்து சேகரிக்க அனுமதிக்கும்</translation> <translation id="1964634611280150550">மறைநிலைப் பயன்முறை முடக்கப்பட்டது</translation> <translation id="1964802606569741174">Android YouTube பயன்பாட்டில் இந்தக் கொள்கை எந்த மாற்றத்தையும் ஏற்படுத்தாது. YouTube இல் பாதுகாப்புப் பயன்முறையைச் செயல்படுத்த வேண்டும் எனில், Android YouTube பயன்பாட்டை நிறுவுவது அனுமதிக்கப்படாது.</translation> <translation id="1969212217917526199">தொலைநிலை அணுகல் ஹோஸ்ட்டின் பிழைத்திருத்தப் பதிப்புகளின் கொள்கைகளை மேலெழுதும். @@ -635,7 +637,6 @@ ஒவ்வொரு பட்டியல் உள்ளீடும் அடையாளங்காட்டியைக் குறிக்கிறது. இந்த அடையாளங்காட்டி வேறுபட்ட சாதன-அக கணக்குகளைத் தெரிவிக்க பயன்படுகிறது.</translation> <translation id="2769952903507981510">தொலைநிலை அணுகல் ஹோஸ்ட்களுக்கு தேவையான களப் பெயரை உள்ளமை</translation> <translation id="2787173078141616821">Android நிலையைப் பற்றிய தகவலைத் தெரிவிக்கும்</translation> -<translation id="2793923553868251161">பாதுகாப்பான சூழலாக மூலங்கள் கருதப்படும்.</translation> <translation id="2799297758492717491">ஏற்புப் பட்டியலில் உள்ள URL பேட்டர்ன்களில் மீடியாவைத் தானாக இயங்க அனுமதிக்கும்</translation> <translation id="2801230735743888564">சாதனம் ஆஃப்லைனில் இருக்கும் போது பயனர்கள் டைனோசர் ஈஸ்டர் எக் கேமை விளையாட அனுமதிக்கும். @@ -1814,12 +1815,6 @@ <translation id="6155936611791017817">உள்நுழைவுத் திரையில் பெரிய இடஞ்சுட்டியின் இயல்புநிலையை அமை</translation> <translation id="6157537876488211233">ப்ராக்ஸி கடந்துபோதல் விதிகளின் கமாவால் பிரிக்கப்பட்ட பட்டியல்</translation> <translation id="6158324314836466367">நிறுவன இணைய அங்காடி பெயர் (தடுக்கப்பட்டது)</translation> -<translation id="6164955668342404660">M69 இல் தடுக்கப்பட்டுள்ளது. அதற்குப் பதிலாக, OverrideSecurityRestrictionsOnInsecureOrigin என்னும் கொள்கையைப் பயன்படுத்தவும். - - இந்தக் கொள்கை, பாதுகாப்பான சூழல் எனக் கருதக்கூடிய மூலங்களின் பட்டியலைக் (URLகள்) குறிப்பிடுகிறது. அக இணைய உருவாக்கத்திற்காக சோதனைச் சேவையகத்தை அமைக்க நிறுவனங்களை அனுமதிப்பதே இதன் நோக்கமாகும், இதன் மூலம் அவற்றின் டெவெலப்பர்கள், சோதனைச் சேவையகத்தில் TLSஸைப் பயன்படுத்தாமல் பாதுகாப்பான சூழல்கள் தேவைப்படும் அம்சங்களைச் சோதிக்க முடியும். - இந்தக் கொள்கையில் URLகளின் பட்டியலை அமைப்பது, காற்புள்ளியால் பிரிக்கப்பட்ட ஒரே URLகளின் பட்டியலுக்கு, '--unsafely-treat-insecure-origin-as-secure' எனும் கட்டளை வரிக் கொடியை அமைப்பதால் கிடைக்கும் அதே விளைவைக் கொண்டிருக்கும். இந்தக் கொள்கை அமைக்கப்பட்டால், கட்டளை வரிக் கொடி மேலெழுதப்படும். - பாதுகாப்பான சூழல்கள் குறித்த கூடுதல் தகவலுக்கு, இந்த இணைப்பைப் பார்க்கவும்: https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460"><ph name="FLASH_PLUGIN_NAME" /> செருகுநிரலை இயங்க அனுமதிக்காத தளங்களைக் குறிப்பிடும் url பட்டியலை அமைக்க உங்களை அனுமதிக்கும். இந்தக் கொள்கையை அமைக்கவில்லை எனில், இயல்புநிலை மதிப்பு எல்லாத் தளங்களுக்கும் பயன்படுத்தப்படும். அப்படி அமைக்கப்படும் மதிப்பு, 'DefaultPluginsSetting' கொள்கையாகவோ (ஏற்கனவே அமைக்கப்பட்டிருந்தால்) அல்லது பயனரின் தனிப்பட்ட உள்ளமைவாகவோ இருக்கும்.</translation> @@ -1938,6 +1933,11 @@ இந்தக் கொள்கை அமைக்கப்படாமல் விட்டால் அல்லது பட்டியல் வெறுமையாக இருந்தால் எல்லா திட்டங்களையும் <ph name="PRODUCT_NAME" /> இல் அணுகலாம்.</translation> <translation id="6652197835259177259">உட்புறமாக நிர்வகிக்கப்படும் பயனர்களுக்கான அமைப்புகள்</translation> <translation id="6658245400435704251">சேவையகத்திற்கு வெளியே புதுப்பிப்பை, முதலில் தள்ளப்படுகின்ற நேரத்திலிருந்து ஒரு சாதனம் சீரற்ற முறையில், அதன் பதிவிறக்கத்தைத் தாமதப்படுத்துகின்ற நொடிகளின் எண்ணிக்கையை குறிக்கிறது. சாதனமானது இந்த நேரத்தின் ஒரு பகுதியை சுவர்-கடிகார நேர அடிப்படையிலும் மீதமுள்ள நேரத்தை புதுப்பிப்பு சரிபார்த்தலின் எண்ணிக்கை அடிப்படையிலும் காத்திருக்கலாம்.. எதுவானாலும், ஒரு நிலையான நேர அளவிற்கு மேலே சிதறல் கட்டுப்பட்டிருப்பதனால், சாதனம் ஒரு புதுப்பிப்பைப் பதிவிறக்க ஒருபோதும் காத்திருந்து எப்போதும் சிக்கிக் கொள்ளாது.</translation> +<translation id="6665599130599311250">இந்தக் கொள்கையை ‘தவறு’ என அமைத்தால் அல்லது கொள்கையை அமைக்காவிட்டால், நிர்வகிக்கப்பட்ட விருந்தினர் அமர்வானது நிலையான “பொது அமர்வு" என்பதில் (https://support.google.com/chrome/a/answer/3017014) விவரிக்கப்பட்டுள்ளவாறு செயல்படும். + + இந்தக் கொள்கையை ‘சரி’ என அமைத்தால், நிர்வகிக்கப்பட்ட விருந்தினர் அமர்வானது “நிர்வகிக்கப்பட்ட அமர்வு” என்பதில் விவரிக்கப்பட்டுள்ளபடி செயல்படும், இது வழக்கமான “பொது அமர்வுகளுக்காக” நடைமுறையிலுள்ள பல கட்டுப்பாடுகளை நீக்கும். + + இந்தக் கொள்கையை அமைத்தால், பயனரால் இதை மாற்றவோ மேலெழுதவோ முடியாது.</translation> <translation id="6665670272107384733">விரைந்து திறக்கும் அம்சத்தைப் பயன்படுத்த, பயனர் எப்போது கடவுச்சொல்லை உள்ளிட வேண்டும் என்பதை அமைக்கும்</translation> <translation id="6681229465468164801">USB சாதனத்திற்கான அணுகலை வழங்குமாறு, பயனரைக் கேட்பதிலிருந்து தடுக்கப்படும் தளங்களைக் குறிப்பிடும் url பேட்டர்ன்களின் பட்டியலை அமைக்க உதவுகிறது. @@ -1987,11 +1987,6 @@ <translation id="6786967369487349613">ரோமிங் சுயவிவரக் கோப்பகத்தை அமை</translation> <translation id="6810445994095397827">இந்த தளங்களில் JavaScript ஐத் தடு </translation> <translation id="681446116407619279">ஆதரிக்கப்படும் அங்கீகாரத் திட்டங்கள்</translation> -<translation id="6832455357698286434"> - இந்தக் கொள்கை, பாதுகாப்பான சூழல்கள் எனக் கருதக்கூடிய மூலங்களின் பட்டியல் (URLகள்) அல்லது ஹோஸ்ட்பெயர் பேட்டர்ன்களைக் ("*.example.com" போன்றவை) குறிப்பிடுகிறது. அக இணைய உருவாக்கத்திற்காக சோதனைச் சேவையகத்தை அமைக்க நிறுவனங்களை அனுமதிப்பதே இதன் நோக்கமாகும், இதன் மூலம் அவற்றின் டெவெலப்பர்கள், சோதனைச் சேவையகத்தில் TLSஸைப் பயன்படுத்தாமல் பாதுகாப்பான சூழல்கள் தேவைப்படும் அம்சங்களைச் சோதிக்க முடியும். - இந்தக் கொள்கையில் URLகளின் பட்டியலை அமைப்பது, காற்புள்ளியால் பிரிக்கப்பட்ட ஒரே URLகளின் பட்டியலுக்கு, '--unsafely-treat-insecure-origin-as-secure' எனும் கட்டளை வரிக் கொடியை அமைப்பதால் கிடைக்கும் அதே விளைவைக் கொண்டிருக்கும். இந்தக் கொள்கை அமைக்கப்பட்டால், கட்டளை வரிக் கொடி மேலெழுதப்படும். - பாதுகாப்பான சூழல்கள் குறித்த கூடுதல் தகவலுக்கு, இந்த இணைப்பைப் பார்க்கவும்: https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">மீண்டும் தொடங்குவது பரிந்துரைக்கப்படுகிறது என்பதைக் குறிக்கும், தொடர்ச்சியாகத் தெரியும் அறிவிப்பைப் பயனருக்குக் காட்டு</translation> <translation id="6838056959556423778">இது <ph name="PRODUCT_NAME" /> இயல்புநிலைப் பிரிண்டரைத் தேர்ந்தெடுப்பதற்கான விதிகளை மேலெழுதும். @@ -2092,6 +2087,17 @@ <translation id="6943577887654905793">Mac/Linux விருப்பப் பெயர்:</translation> <translation id="69525503251220566">இயல்பு தேடல் வழங்குநருக்கான படம் மூலம் தேடு என்ற அம்சத்தை வழங்கும் அளவுரு</translation> <translation id="6956272732789158625">விசை உருவாக்கத்தைப் பயன்படுத்த எந்தத் தளத்தையும் அனுமதிக்க வேண்டாம்</translation> +<translation id="6982028490425791294"> + இந்தக் கொள்கையை ‘சரி’ என அமைத்தால், Google சேவைகளிலிருந்து (எ.கா Google Meet) WebRTC நிகழ்வுப் பதிவுகளைச் சேகரித்து, அவற்றை Googleளுக்குப் பதிவேற்ற <ph name="PRODUCT_NAME" />க்கு அனுமதியளிக்கப்படும். + + இந்தக் கொள்கையை ‘தவறு’ என அமைத்தால் அல்லது கொள்கையை அமைக்காவிட்டால், <ph name="PRODUCT_NAME" /> அத்தகைய பதிவுகளைச் சேகரிக்காமல் அல்லது பதிவேற்றாமல் போகலாம். + + இந்தப் பதிவுகளில் RTP பாக்கெட்டுகள் அனுப்பப்பட்ட மற்றும் பெறப்பட்ட நேரம், அவற்றின் அளவு, நெட்வொர்க்கிலுள்ள நெரிசலைப் பற்றிய கருத்து, ஆடியோ மற்றும் வீடியோ ஃப்ரேம்களின் நேரத்தையும் தரத்தையும் பற்றிய மீத்தரவு போன்ற தகவல்கள் இருக்கும். இந்தத் தகவல்கள், இணைய வேக மதிப்பீட்டுச் சிக்கல்கள் போன்ற, Chromeமில் ஏற்படும் ஆடியோ அல்லது வீடியோ அழைப்புகள் குறித்த சிக்கல்களைப் பிழைத்திருத்தும்போது உதவிகரமாக இருக்கும். இந்தப் பதிவுகளில் அழைப்பின் ஆடியோ அல்லது வீடியோ உள்ளடக்கங்கள் இருக்காது. + + இந்தத் தரவுச் சேகரிப்பை Google Hangouts அல்லது Google Meet போன்ற Google இணையச் சேவைகள் மட்டுமே செயல்படுத்த முடியும். + + அமர்வு ஐடி மூலமாக, Google சேவையால் சேகரிக்கப்பட்ட பிற பதிவுகளுடன் இந்தப் பதிவுகள் தொடர்புபடுத்தப்படலாம்; இது பிழைத்திருத்தத்தை எளிதாக்குவதற்காகச் செய்யப்படுகிறது. + </translation> <translation id="6994082778848658360">ஆன்-போர்டு பாதுகாப்பு உறுப்பு வன்பொருள் இரண்டாம் படி அங்கீகார அம்சத்துடன் இணங்கினால், அதை வழங்க அந்த வன்பொருளை எப்படிப் பயன்படுத்த வேண்டும் என்பதைக் குறிப்பிடும். பயனர் உள்ளாரா இல்லையா என்பதைக் கண்டறிய, சாதனத்தின் பவர் பொத்தான் பயன்படுத்தப்படும். 'முடக்கப்பட்டது' என்பதைத் தேர்ந்தெடுத்திருந்தால், இரண்டாவது படி வழங்கப்படாது. @@ -2328,7 +2334,6 @@ <translation id="7617319494457709698">இந்தக் கொள்கையானது, தொலைநிலைச் சான்றொப்பத்திற்காக <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> செயல்பாடு <ph name="CHALLENGE_USER_KEY_FUNCTION" /> என்பதைப் பயன்படுத்த அனுமதிக்கப்பட்ட நீட்டிப்புகளைக் குறிப்பிடும். APIஐப் பயன்படுத்த, நீட்டிப்புகளை இந்தப் பட்டியலில் சேர்க்க வேண்டும். பட்டியலில் நீட்டிப்பு இல்லை என்றாலோ அல்லது பட்டியல் அமைக்கப்படவில்லை என்றாலோ, APIஐ அழைக்கும் போது, பிழைக் குறியீட்டுடன் அழைப்புத் தோல்வியடையும்.</translation> -<translation id="7620300057302654932">மூலங்கள் அல்லது ஹோஸ்ட்பெயர் பேட்டர்ன்கள், பாதுகாப்பான சூழல் உள்ளவை எனக் கருதப்பட வேண்டும்.</translation> <translation id="7625444193696794922">இந்த சாதனம் பூட்டப்பட வேண்டிய வெளியீட்டு சேனலைக் குறிப்பிடுகிறது.</translation> <translation id="7632724434767231364">GSSAPI லைப்ரரி பெயர்</translation> <translation id="7635471475589566552"><ph name="PRODUCT_NAME" /> இல் பயன்பாட்டின் மொழியை உள்ளமைக்கிறது மற்றும் பயனர்கள் அதை மாற்றுவதைத் தடுக்கிறது. நீங்கள் இந்த அமைப்பை இயக்கினால், <ph name="PRODUCT_NAME" /> ஆனது குறிப்பிடப்பட்ட மொழியைப் பயன்படுத்தும். உள்ளமைக்கப்பட்ட மொழியானது ஆதரிக்கப்படவில்லை என்றால், அதற்கு மாற்றாக 'en-US' பயன்படுத்தப்படும். இந்த அமைப்பு முடக்கப்பட்டிருந்தால் அல்லது உள்ளமைக்கப்படவில்லை என்றால், <ph name="PRODUCT_NAME" /> ஆனது பயனர் குறிப்பிட்ட மொழியைப் பயன்படுத்தும் (உள்ளமைக்கப்பட்டால்), கணினியின் மொழியைப் பயன்படுத்தும் அல்லது 'en-US' க்கு மீட்டமைக்கப்படும்.</translation>
diff --git a/components/policy/resources/policy_templates_te.xtb b/components/policy/resources/policy_templates_te.xtb index 716977b4..e3d97fe 100644 --- a/components/policy/resources/policy_templates_te.xtb +++ b/components/policy/resources/policy_templates_te.xtb
@@ -755,7 +755,6 @@ ప్రతి జాబితా నమోదు విభిన్న పరికర-స్థానిక ఖాతాలను వేరుగా చెప్పడానికి అంతర్గతంగా ఉపయోగించబడే ఐడెంటిఫైయర్ను పేర్కొంటుంది.</translation> <translation id="2769952903507981510">రిమోట్ ప్రాప్యత హోస్ట్ల కోసం అవసరమైన డొమైన్ పేరును కాన్ఫిగర్ చేస్తుంది</translation> <translation id="2787173078141616821">Android స్థితిని గురించి సమాచారాన్ని నివేదిస్తుంది</translation> -<translation id="2793923553868251161">మూలాలు సురక్షిత సందర్భం వలె పరిగణించబడతాయి.</translation> <translation id="2799297758492717491">URL నమూనాల వైట్లిస్ట్లో మీడియా స్వీయ ప్లేని అనుమతించండి</translation> <translation id="2801230735743888564">పరికరం ఆఫ్లైన్లో ఉన్నప్పుడు డైనోసార్ ఈస్టర్ ఎగ్ గేమ్ ఆడటానికి వినియోగదారులను అనుమతిస్తుంది. @@ -2143,11 +2142,6 @@ <translation id="6155936611791017817">లాగిన్ స్క్రీన్లో పెద్ద కర్సర్ యొక్క డిఫాల్ట్ స్థితిని సెట్ చేయండి</translation> <translation id="6157537876488211233">కామాతో వేరుపరచబడిన ప్రాక్సీ బైపాస్ నియమాల జాబితా</translation> <translation id="6158324314836466367">వ్యాపార వెబ్ స్టోర్ పేరు (విస్మరించబడింది)</translation> -<translation id="6164955668342404660">M69లో విస్మరించబడింది. బదులుగా OverrideSecurityRestrictionsOnInsecureOriginని ఉపయోగించండి. - - సురక్షిత సందర్భం లాగా పరిగణించాల్సిన మూలాల (URLలు) జాబితాని విధానం పేర్కొంటుంది. అంతర్గత వెబ్ మెరుగుదలల కోసం స్టేజింగ్ సర్వర్లను సెటప్ చేయడానికి సంస్థలను అనుమతించడమే ఉద్దేశం, ఇలా చేయడం వలన వాటి డెవలపర్లు దశలవారీ సర్వర్లో TLS అమలు చేయాల్సిన శ్రమ లేకుండానే సురక్షితమైన సందర్భాలు అవసరం ఉండే ఫీచర్లను పరీక్షించగలుగుతారు. ఈ విధానంలో ఒక URLల జాబితాను సెట్ చేస్తే, అవే URLలను కామాలతో వేరే చేసి రూపొందించే జాబితాకు ఆదేశ పంక్తి ఫ్లాగ్ '--unsafely-treat-insecure-origin-as-secure' సెట్ చేసినప్పుడు ఉండే ప్రభావమే దీనిపైన ఉంటుంది. ఒకవేళ విధానాన్ని సెట్ చేస్తే, అది ఆదేశ పంక్తి ఫ్లాగ్ను భర్తీ చేస్తుంది. - సురక్షితమైన సందర్భాల గురించి మరింత సమాచారం కోసం, https://www.w3.org/TR/secure-contexts/ లింక్ చూడండి - </translation> <translation id="6178075938488052838">ఈ విధానం <ph name="PRODUCT_OS_NAME" /> సెషన్ని ప్రారంభించేవారిని నియంత్రిస్తుంది. ఇది Androidలో వినియోగదారులు అదనపు Google ఖాతాలకు సైన్ ఇన్ చేయకుండా నిరోధించదు. మీరు దీన్ని నిరోధించాలనుకుంటే, <ph name="ARC_POLICY_POLICY_NAME" />లో భాగంగా Android నిర్దిష్ట <ph name="ACCOUNT_TYPES_WITH_MANAGEMENT_DISABLED_CLOUDDPC_POLICY_NAME" /> విధానాన్ని కాన్ఫిగర్ చేయండి.</translation> <translation id="6181608880636987460"><ph name="FLASH_PLUGIN_NAME" /> ప్లగిన్ని అమలు చేయడానికి అనుమతి లేని సైట్లను పేర్కొనడం కోసం url నమూనాల జాబితాను సెట్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. @@ -2322,11 +2316,6 @@ <translation id="6786967369487349613">రోమింగ్ ప్రొఫైల్ డైరెక్టరీని సెట్ చేయండి</translation> <translation id="6810445994095397827">ఈ సైట్లలో JavaScriptని బ్లాక్ చెయ్యి</translation> <translation id="681446116407619279">మద్దతిచ్చే ప్రామాణీకరణ పథకాలు</translation> -<translation id="6832455357698286434"> - సురక్షిత సందర్భాల లాగా పరిగణించాల్సిన మూలాల (URLలు) జాబితాని లేదా హోస్ట్పేరు నమూనాలను ("*.example.com" వంటివి) విధానం పేర్కొంటుంది. అంతర్గత వెబ్ మెరుగుదలల కోసం స్టేజింగ్ సర్వర్లను సెటప్ చేయడానికి సంస్థలను అనుమతించడమే ఉద్దేశం, ఇలా చేయడం వలన వాటి డెవలపర్లు దశలవారీ సర్వర్లో TLS అమలు చేయాల్సిన శ్రమ లేకుండానే సురక్షితమైన సందర్భాలు అవసరం ఉండే ఫీచర్లను పరీక్షించగలుగుతారు. - ఈ విధానంలో ఒక URLల జాబితాను సెట్ చేస్తే, అవే URLలను కామాలతో వేరే చేసి రూపొందించే జాబితాకు ఆదేశ పంక్తి ఫ్లాగ్ '--unsafely-treat-insecure-origin-as-secure' సెట్ చేసినప్పుడు ఉండే ప్రభావమే దీనిపైన ఉంటుంది. ఒకవేళ విధానాన్ని సెట్ చేస్తే, అది ఆదేశ పంక్తి ఫ్లాగ్ను భర్తీ చేస్తుంది. - సురక్షితమైన సందర్భాల గురించి మరింత సమాచారం కోసం, https://www.w3.org/TR/secure-contexts/ లింక్ చూడండి - </translation> <translation id="6835883744948188639">పునఃప్రారంభ సిఫార్సును సూచించే పునరావృత ప్రాంప్ట్ను వినియోగదారుకు చూపండి</translation> <translation id="6838056959556423778"><ph name="PRODUCT_NAME" /> డిఫాల్ట్ ప్రింటర్ ఎంపిక నియమాలను భర్తీ చేస్తుంది. @@ -2697,7 +2686,6 @@ <translation id="7617319494457709698">ఈ విధానం రిమోట్ ధృవీకరణ కోసం <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> కార్యనిర్వాహకత <ph name="CHALLENGE_USER_KEY_FUNCTION" />ని ఉపయోగించడానికి అనుమతించే పొడిగింపులను పేర్కొంటుంది. APIని ఉపయోగించడానికి పొడిగింపులు తప్పనిసరిగా ఈ జాబితాకు జోడించబడాలి. జాబితాలో పొడిగింపు లేకపోతే లేదా జాబితాను సెట్ చేయకుండా ఉంటే, APIకి చేసే కాల్ లోపం కోడ్తో విఫలమవుతుంది.</translation> -<translation id="7620300057302654932">మూలాలు లేదా హోస్ట్పేరు నమూనాలు సురక్షిత సందర్భంగా పరిగణించబడతాయి.</translation> <translation id="7625444193696794922">ఈ పరికరం లాక్ చేయబడాల్సిన విడుదల ఛానెల్ను పేర్కొంటుంది.</translation> <translation id="7632724434767231364">GSSAPI లైబ్రరీ పేరు</translation> <translation id="7635471475589566552"><ph name="PRODUCT_NAME" />లో అనువర్తన లొకేల్ని కాన్ఫిగర్ చేస్తుంది మరియు వినియోగదారులు లొకేల్ని మార్చనివ్వకుండా నిరోధిస్తుంది. మీరు ఈ సెట్టింగ్ని ప్రారంభిస్తే, <ph name="PRODUCT_NAME" /> పేర్కొన్న లొకేల్ని ఉపయోగిస్తుంది. కాన్ఫిగర్ చేసిన లొకేల్ మద్దతివ్వకపోతే, బదులుగా 'en-US' ఉపయోగించబడుతుంది. ఈ సెట్టింగ్ని ఆపివేసినా లేదా సెట్ చేయకపోయినా, <ph name="PRODUCT_NAME" /> వినియోగదారు-పేర్కొన్న ప్రాధాన్య లొకేల్ని (కాన్ఫిగర్ చేసి ఉంటే), సిస్టమ్ లొకేల్ని లేదా ఫాల్బ్యాక్ 'en-US' లొకేల్ని ఉపయోగిస్తుంది.</translation>
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 473911a..a2b788c0 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -262,6 +262,7 @@ หากตั้งค่าเป็น "เท็จ" จะมีการปิดใช้การรายงานเมตริกและข้อมูลการวินิจฉัย หากไม่กำหนดค่า จะมีการปิดใช้การรายงานเมตริกและข้อมูลการวินิจฉัยในอุปกรณ์ที่ไม่มีการจัดการ และเปิดใช้ในอุปกรณ์ที่มีการจัดการ</translation> +<translation id="1920046221095339924">อนุญาตเซสชันที่จัดการในอุปกรณ์</translation> <translation id="1929709556673267855">ระบุการกำหนดค่าสำหรับเครื่องพิมพ์ขององค์กรที่เชื่อมโยงกับอุปกรณ์ต่างๆ นโยบายนี้ให้คุณระบุการกำหนดค่าเครื่องพิมพ์สำหรับอุปกรณ์ <ph name="PRODUCT_OS_NAME" /> รูปแบบจะเหมือนกับพจนานุกรม NativePrinters ซึ่งมีช่องเพิ่มเติมที่จำเป็นอย่าง "ID" หรือ "GUID" ต่อเครื่องพิมพ์สำหรับการอนุญาตพิเศษหรือการทำบัญชีดำ @@ -295,6 +296,7 @@ หากคุณเปิดใช้การตั้งค่านี้หรือไม่ได้กำหนดค่าไว้ ผู้ใช้จะควบคุมฟีเจอร์ป้อนข้อความอัตโนมัติสำหรับที่อยู่ได้ใน UI</translation> <translation id="1960840544413786116">จะอนุญาตใบรับรองที่ออกโดย Trust Anchor ในพื้นที่ที่ไม่มีส่วนขยาย subjectAlternativeName หรือไม่</translation> +<translation id="1962273523772270623">อนุญาตให้รวบรวมบันทึกเหตุการณ์ WebRTC จากบริการของ Google</translation> <translation id="1964634611280150550">ปิดใช้งานโหมดไม่ระบุตัวตน</translation> <translation id="1964802606569741174">นโยบายนี้ไม่มีผลสำหรับแอป YouTube ของ Android หากมีการใช้โหมดปลอดภัยใน YouTube ควรยกเลิกการอนุญาตการติดตั้งแอป YouTube ใน Android</translation> <translation id="1969212217917526199">ลบล้างนโยบายในเวอร์ชันการแก้ปัญหาของโฮสต์การเข้าถึงระยะไกล @@ -642,7 +644,6 @@ แต่ละข้อมูลในรายการจะระบุตัวชี้ ซึ่งใช้ภายในสำหรับการแยกบัญชีภายในอุปกรณ์จากกัน</translation> <translation id="2769952903507981510">กำหนดค่าชื่อโดเมนที่จำเป็นสำหรับโฮสต์การเข้าถึงระยะไกล</translation> <translation id="2787173078141616821">รายงานข้อมูลเกี่ยวกับสถานะของ Android</translation> -<translation id="2793923553868251161">ต้นทางที่จะถือเป็นบริบทที่ปลอดภัย</translation> <translation id="2799297758492717491">อนุญาตการเล่นสื่ออัตโนมัติในรายการรูปแบบ URL ที่อนุญาตพิเศษ</translation> <translation id="2801230735743888564">อนุญาตให้ผู้ใช้เล่นเกมไดโนเสาร์ที่ซ่อนไว้ขณะที่อุปกรณ์ออฟไลน์ได้ @@ -1781,12 +1782,6 @@ <translation id="6155936611791017817">ตั้งค่าสถานะเริ่มต้นของเคอร์เซอร์ขนาดใหญ่บนหน้าจอการเข้าสู่ระบบ</translation> <translation id="6157537876488211233">รายการกฎการข้ามพร็อกซีที่คั่นด้วยเครื่องหมายจุลภาค</translation> <translation id="6158324314836466367">ชื่อเว็บสโตร์ขององค์กร (เลิกใช้งาน)</translation> -<translation id="6164955668342404660">เลิกใช้งานแล้วใน M69 โปรดใช้ OverrideSecurityRestrictionsOnInsecureOrigin แทน - - นโยบายนี้ระบุรายการต้นทาง (URL) ที่จะถือเป็นสภาวะแวดล้อมที่ปลอดภัย เพื่ออนุญาตให้องค์กรกำหนดเซิร์ฟเวอร์ชั่วคราวสำหรับการพัฒนาเว็บเป็นการภายใน เพื่อให้นักพัฒนาเว็บทดสอบฟีเจอร์ต่างๆ ที่ต้องกระทำในสภาวะแวดล้อมที่ปลอดภัยได้โดยไม่ต้องใช้ TLS ในเซิร์ฟเวอร์ชั่วคราว - การกำหนดรายการ URL ในนโยบายนี้มีค่าเท่ากับการกำหนดสถานะในบรรทัดคำสั่ง "--unsafely-treat-insecure-origin-as-secure" เป็นรายการ URL เดียวกันที่คั่นด้วยจุลภาค หากมีการตั้งค่านโยบายนี้ ระบบจะลบล้างสถานะในบรรทัดคำสั่ง - ดูข้อมูลเพิ่มเติมเกี่ยวกับสภาวะแวดล้อมที่ปลอดภัยได้ที่ https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">อนุญาตให้คุณกำหนดรูปแบบ URL ที่ระบุไซต์ซึ่งไม่ได้รับอนุญาตให้เรียกใช้ปลั๊กอิน <ph name="FLASH_PLUGIN_NAME" /> หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะใช้ค่าเริ่มต้นทั่วไปกับเว็บไซต์ทั้งหมด ทั้งจากนโยบาย "DefaultPluginsSetting" หากมีการตั้งค่า หรือจากการกำหนดค่าส่วนตัวของผู้ใช้</translation> @@ -1905,6 +1900,11 @@ หากนโยบายนี้ไม่ได้ตั้งค่าหรือรายการว่างเปล่า รูปแบบทั้งหมดจะสามารถเข้าถึงได้ใน <ph name="PRODUCT_NAME" /></translation> <translation id="6652197835259177259">การตั้งค่าผู้ใช้ที่ได้รับการจัดการในเครื่อง</translation> <translation id="6658245400435704251">ระบุจำนวนวินาทีสูงสุดที่อุปกรณ์อาจสุ่มหน่วงเวลาการดาวโหลดการอัปเดตนับตั้งแต่ที่มีการส่งการอัปเดตไปยังเซิร์ฟเวอร์ อุปกรณ์อาจใช้เวลาส่วนหนึ่งรอขณะที่คอมพิวเตอร์เริ่มทำงานจนกระทั่งเสร็จสิ้นและใช้เวลาส่วนที่เหลือสำหรับการตรวจสอบการอัปเดตจำนวนหนึ่ง ไม่ว่าในกรณีใด การกระจายจะเข้าใกล้ขอบเขตบนของระยะเวลาคงที่ อุปกรณ์จึงไม่ต้องค้างรอการดาวน์โหลดการอัปเดตอย่างไม่สิ้นสุด</translation> +<translation id="6665599130599311250">หากตั้งค่านโยบายนี้เป็น "เท็จ" หรือไม่ได้ตั้งค่า เซสชันผู้เยี่ยมชมที่จัดการจะทำงานตามที่ระบุไว้ในเอกสารที่ https://support.google.com/chrome/a/answer/3017014 ซึ่งเกี่ยวกับ "เซสชันสาธารณะ" มาตรฐาน + + หากตั้งค่านโยบายนี้เป็น "จริง" เซสชันผู้เยี่ยมชมที่จัดการจะมีลักษณะการทำงานแบบ "เซสชันที่จัดการ" ซึ่งยกเลิกข้อจำกัดหลายรายการที่มีไว้สำหรับ "เซสชันสาธารณะ" ปกติ + + หากมีการตั้งค่านโยบายนี้ ผู้ใช้จะเปลี่ยนหรือลบล้างไม่ได้</translation> <translation id="6665670272107384733">กำหนดความถี่ที่ผู้ใช้ต้องป้อนรหัสผ่านเพื่อใช้การปลดล็อกด่วน</translation> <translation id="6681229465468164801">อนุญาตให้คุณกำหนดรายการรูปแบบ URL ที่ระบุเว็บไซต์ซึ่งมีการป้องกันไม่ให้ขอผู้ใช้ให้มอบสิทธิ์เข้าถึงอุปกรณ์ USB @@ -1954,11 +1954,6 @@ <translation id="6786967369487349613">ตั้งค่าไดเรกทอรีโปรไฟล์โรมมิ่ง</translation> <translation id="6810445994095397827">ปิดกั้น JavaScript บนไซต์เหล่านี้</translation> <translation id="681446116407619279">สกีมการตรวจสอบสิทธิ์ที่ได้รับการสนับสนุน</translation> -<translation id="6832455357698286434"> - นโยบายนี้ระบุรายการต้นทาง (URLs) หรือรูปแบบชื่อโฮสต์ (เช่น "*.example.com") ที่จะถือเป็นสภาวะแวดล้อมที่ปลอดภัย เพื่ออนุญาตให้องค์กรกำหนดเซิร์ฟเวอร์ชั่วคราวสำหรับการพัฒนาเว็บเป็นการภายใน เพื่อให้นักพัฒนาเว็บทดสอบฟีเจอร์ต่างๆ ที่ต้องกระทำในสภาวะแวดล้อมที่ปลอดภัยได้โดยไม่ต้องใช้ TLS ในเซิร์ฟเวอร์ชั่วคราว - การกำหนดรายการ URL ในนโยบายนี้มีค่าเท่ากับการกำหนดสถานะในบรรทัดคำสั่ง "--unsafely-treat-insecure-origin-as-secure" เป็นรายการ URL เดียวกันที่คั่นด้วยจุลภาค หากมีการตั้งค่านโยบายนี้ ระบบจะลบล้างสถานะในบรรทัดคำสั่ง - ดูข้อมูลเพิ่มเติมเกี่ยวกับสภาวะแวดล้อมที่ปลอดภัยได้ที่ https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">แสดงข้อความแจ้งที่ปรากฏขึ้นซ้ำๆ แก่ผู้ใช้เพื่อแจ้งว่าควรเปิดเบราว์เซอร์ขึ้นมาใหม่</translation> <translation id="6838056959556423778">ลบล้างกฎการเลือกเครื่องพิมพ์เริ่มต้นของ <ph name="PRODUCT_NAME" /> @@ -2068,6 +2063,17 @@ <translation id="6943577887654905793">ชื่อค่ากำหนด Mac/Linux:</translation> <translation id="69525503251220566">พารามิเตอร์ที่ให้ฟีเจอร์การค้นหาโดยภาพสำหรับผู้ให้บริการการค้นหาเริ่มต้น</translation> <translation id="6956272732789158625">ไม่อนุญาตให้เว็บไซต์ใดๆ ใช้การสร้างคีย์</translation> +<translation id="6982028490425791294"> + หากตั้งค่านโยบายเป็น "จริง" <ph name="PRODUCT_NAME" /> จะได้รับอนุญาตให้รวบรวมบันทึกเหตุการณ์ WebRTC จากบริการของ Google (เช่น Google Meet) และอัปโหลดบันทึกไปยัง Google + + หากตั้งค่านโยบายเป็น "เท็จ" หรือไม่ได้ตั้งค่า <ph name="PRODUCT_NAME" /> จะรวบรวมหรืออัปโหลดบันทึกเช่นนี้ไม่ได้ + + บันทึกเหล่านี้มีข้อมูลอย่างเช่น เวลาและขนาดของแพ็กเก็ต RTP ที่ส่งและได้รับ ผลป้อนกลับเกี่ยวกับความคับคั่งในเครือข่าย ตลอดจนข้อมูลเมตาเกี่ยวกับระยะเวลาและคุณภาพของเสียงและเฟรมของวิดีโอ ข้อมูลนี้จะเป็นประโยชน์เมื่อแก้ไขข้อบกพร่องเกี่ยวกับการโทรด้วยเสียงหรือการโทรแบบวิดีโอคอลใน Chrome เช่น ปัญหาการประมาณแบนด์วิดท์ เป็นต้น บันทึกไม่มีเนื้อหาเสียงหรือวิดีโอจากการโทร + + มีเฉพาะบริการผ่านเว็บของ Google อย่างเช่น Google Hangouts หรือ Google Meet ที่จะเรียกใช้การรวบรวมข้อมูลนี้ได้ + + อาจมีการเชื่อมโยงบันทึกเหล่านี้ผ่านรหัสเซสชันหรือกับบันทึกอื่นๆ ที่บริการของ Google รวบรวมไว้เอง โดยมีจุดประสงค์เพื่อให้แก้ไขข้อบกพร่องได้ง่ายขึ้น + </translation> <translation id="6994082778848658360">ระบุวิธีที่สามารถใช้ฮาร์ดแวร์องค์ประกอบความปลอดภัยในเครื่องเพื่อทำการตรวจสอบสิทธิ์จากปัจจัยที่สอง หากขั้นตอนดังกล่าวใช้ได้กับฟีเจอร์นี้ จะมีการใช้ปุ่มเปิด/ปิดของเครื่องในการตรวจหาตัวตนจริงของผู้ใช้ หากเลือก "ปิดใช้" จะไม่มีการแจ้งปัจจัยที่ 2 @@ -2304,7 +2310,6 @@ <translation id="7617319494457709698">นโยบายนี้ระบุส่วนขยายที่อนุญาตให้ใช้ฟังก์ชัน <ph name="CHALLENGE_USER_KEY_FUNCTION" /> ของ <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> สำหรับการยืนยันจากระยะไกล โดยต้องเพิ่มส่วนขยายลงในรายการนี้เพื่อใช้ API หากส่วนขยายไม่อยู่ในรายการ หรือไม่มีการตั้งค่ารายการ การเรียกใช้ API จะล้มเหลวโดยมีรหัสข้อผิดพลาด</translation> -<translation id="7620300057302654932">ต้นทางหรือรูปแบบชื่อโฮสต์ที่จะถือเป็นสภาวะแวดล้อมที่ปลอดภัย</translation> <translation id="7625444193696794922">ระบุช่องทางแสดงผลที่ควรจะล็อกเข้ากับอุปกรณ์นี้</translation> <translation id="7632724434767231364">ชื่อไลบรารี GSSAPI</translation> <translation id="7635471475589566552">กำหนดค่าภาษาแอปพลิเคชันใน <ph name="PRODUCT_NAME" /> และป้องกันไม่ให้ผู้ใช้เปลี่ยนภาษาดังกล่าว หากคุณเปิดใช้งานการตั้งค่านี้ <ph name="PRODUCT_NAME" /> จะใช้ภาษาที่ระบุ หากภาษาที่กำหนดค่าไว้ไม่ได้รับการสนับสนุน "en-US" จะถูกนำมาใช้แทน หากคุณปิดใช้งานหรือไม่ได้กำหนดค่าการตั้งค่านี้ <ph name="PRODUCT_NAME" /> อาจใช้ภาษาที่ต้องการตามที่ผู้ใช้ระบุ (หากกำหนดค่าไว้) ภาษาของระบบ หรือภาษาทางเลือก "en-US"</translation>
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index 5b24cc7e..3589a8f 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -274,6 +274,7 @@ Yanlış (false) değerine ayarlanırsa, ölçüm ve teşhis verilerini raporlama işlevi devre dışı olur. Yapılandırılmazsa, ölçüm ve teşhis verileri yönetilmeyen cihazlarda devre dışı bırakılır, yönetilen cihazlarda etkinleştirilir.</translation> +<translation id="1920046221095339924">Cihazda yönetilen oturuma izin ver</translation> <translation id="1929709556673267855">Cihazlara bağlı kurumsal yazıcılar için yapılandırmalar sağlar. Bu politika, <ph name="PRODUCT_OS_NAME" /> cihazlara yazıcı yapılandırmaları sağlamanıza olanak tanır. Biçim NativePrinters sözlüğü ile aynı olmakla birlikte beyaz veya kara listeye eklenecek her yazıcı için gerekli ek "id" veya "guid" alanları içerir. @@ -307,6 +308,7 @@ Bu ayar etkinleştirilirse veya bir değer ayarlanmazsa kullanıcı, kullanıcı arayüzündeki adresler için Otomatik Doldurma özelliğini kontrol edebilir.</translation> <translation id="1960840544413786116">Yerel güven bağlantıları tarafından yayınlanan ve subjectAlternativeName uzantısı bulunmayan sertifikalara izin verilip verilmeyeceği</translation> +<translation id="1962273523772270623">Google hizmetlerinden WebRTC olay günlüklerinin toplanmasına izin ver</translation> <translation id="1964634611280150550">Gizli mod devre dışı</translation> <translation id="1964802606569741174">Bu politikanın Android YouTube uygulaması üzerinde hiçbir etkisi yoktur. YouTube'da Güvenlik Modu uygulanacaksa Android YouTube uygulamasının yüklenmesine izin verilmemelidir.</translation> <translation id="1969212217917526199">Uzaktan erişim ana makinesinin Hata Ayıklama yapılarındaki politikaları geçersiz kılar. @@ -670,7 +672,6 @@ Her liste girişi, farklı cihaz-yerel hesaplarını ayırt etmek için dahili olarak kullanılan bir tanımlayıcıyı belirtir.</translation> <translation id="2769952903507981510">Uzaktan erişim ana makineleri için gerekli alan adını yapılandır</translation> <translation id="2787173078141616821">Android'in durumu hakkında rapor bilgileri</translation> -<translation id="2793923553868251161">Başlangıç noktaları, güvenli içerik olarak değerlendirilir.</translation> <translation id="2799297758492717491">URL kalıpları beyaz listesinde medyanın otomatik olarak oynatılmasına izin ver</translation> <translation id="2801230735743888564">Cihaz çevrimdışıyken kullanıcıların dinozor paskalya yumurtası oyununu oynamasına izin ver. @@ -1855,12 +1856,6 @@ <translation id="6155936611791017817">Giriş ekranında büyük imleç modunun varsayılan durumunu ayarla</translation> <translation id="6157537876488211233">Proxy atlama kurallarının noktalı virgül ile ayrılmış listesi</translation> <translation id="6158324314836466367">Kurumsal web mağazası adı (kullanımdan kaldırıldı)</translation> -<translation id="6164955668342404660">M69'da kullanımdan kaldırıldı. Bunun yerine OverrrideSecurityRestrictionsOnInsecureOrigin'i kullanın. - - Bu politika, güvenli içerik olarak değerlendirilecek olan başlangıç noktalarının (URL'ler) bir listesini belirtir. Burada amaç, kuruluşların dahili web geliştirmeleri için hazırlık sunucusu ayarlamalarına olanak tanımaktır. Böylece kuruluşların geliştiricileri hazırlık sunucusunda TLS dağıtmak zorunda kalmadan güvenli içerik gerektiren özellikleri test edebilirler. - Bu politikadaki URL'lerin bir listesini ayarlamakla, aynı URL'lerin virgülle ayrılmış bir listesine "--unsafely-treat-insecure-origin-as-secure" komut satırı işaretini ayarlamak aynı sonucu verir. Bu politika ayarlanırsa, komut satırı işaretini geçersiz kılar. - Güvenli içerikler ile ilgili daha fazla bilgi edinmek için https://www.w3.org/TR/secure-contexts/ adresine bakın. - </translation> <translation id="6181608880636987460"><ph name="FLASH_PLUGIN_NAME" /> eklentisini çalıştırmasına izin verilmeyen siteleri belirten URL kalıplarının listesini ayarlamanıza izin verir. Bu politika ayarlanmadan bırakılırsa, tüm siteler için ya "DefaultPluginsSetting" politikasından gelen (ayarlanmışsa) ya da kullanıcının kişisel yapılandırmasından gelen global varsayılan değer kullanılır.</translation> @@ -1987,6 +1982,11 @@ Bu politika ayarlanmadan bırakılırsa veya liste boş olursa, <ph name="PRODUCT_NAME" /> içindeki tüm şemalara erişilebilir.</translation> <translation id="6652197835259177259">Yerel olarak yönetilen kullanıcıların ayarları</translation> <translation id="6658245400435704251">Bir güncelleme sunucuya ilk gönderildiği andan itibaren bir cihazın rastgele şekilde güncelleme yüklemesini geciktirebileceği süreyi saniye olarak belirtir. Cihaz bu sürenin bir kısmında gerçek zaman olarak, geri kalan kısmında ise güncelleme denetlemelerinin sayısınca bekleyebilir. Cihazın bir güncellemeyi sürekli bekler durumda kalmaması için, dağılım her durumda üst sınır olarak sabit bir süre ile kısıtlıdır.</translation> +<translation id="6665599130599311250">Bu politika yanlış (false) değerine ayarlanır veya ayarlanmadan bırakılırsa, yönetilen misafir oturumu https://support.google.com/chrome/a/answer/3017014, standart "Herkese Açık Oturum"da belirtildiği şekilde davranır. + + Politika doğru (true) değerine ayarlanırsa, yönetilen misafir oturumu, normal "Herkese Açık Oturumlar" için geçerli olan kısıtlamaları kaldıran "Yönetilen Oturum" davranışını devralır. + + Bu politika ayarlanırsa kullanıcı değiştiremez veya geçersiz kılamaz.</translation> <translation id="6665670272107384733">Hızlı kilit açmayı kullanmak için kullanıcının şifreyi hangi sıklıkta girmesi gerektiğini ayarla</translation> <translation id="6681229465468164801">USB cihazlarına erişmek için kullanıcıdan izin istemesi engellenen sitelerin belirtildiği URL kalıpları listesini ayarlamanıza olanak sağlar. @@ -2036,11 +2036,6 @@ <translation id="6786967369487349613">Dolaşım profili dizinini ayarlayın</translation> <translation id="6810445994095397827">Bu sitelerde JavaScript'i engelle</translation> <translation id="681446116407619279">Desteklenen kimlik doğrulama şemaları</translation> -<translation id="6832455357698286434"> - Bu politika, güvenli içerik olarak değerlendirilecek olan başlangıç noktalarının (URL'ler) veya ana makine adı kalıplarının (örneğin, "*.example.com") bir listesini belirtir. Burada amaç, kuruluşların dahili web geliştirmeleri için hazırlık sunucusu ayarlamalarına olanak tanımaktır. Böylece kuruluşların geliştiricileri hazırlık sunucusunda TLS dağıtmak zorunda kalmadan güvenli içerik gerektiren özellikleri test edebilirler. - Bu politikadaki URL'lerin bir listesini ayarlamakla, aynı URL'lerin virgülle ayrılmış bir listesine "--unsafely-treat-insecure-origin-as-secure" komut satırı işaretini ayarlamak aynı sonucu verir. Bu politika ayarlanırsa, komut satırı işaretini geçersiz kılar. - Güvenli içerikler ile ilgili daha fazla bilgi edinmek için https://www.w3.org/TR/secure-contexts/ adresine bakın. - </translation> <translation id="6835883744948188639">Kullanıcıya yeniden başlatmanın önerildiğini belirten yinelenen bir istem gösterme</translation> <translation id="6838056959556423778"><ph name="PRODUCT_NAME" /> varsayılan yazıcı seçim kurallarını geçersiz kılar. @@ -2154,6 +2149,17 @@ <translation id="6943577887654905793">Mac/Linux tercih adı:</translation> <translation id="69525503251220566">Varsayılan arama sağlayıcısı için resme göre arama özelliği sağlayan parametre</translation> <translation id="6956272732789158625">Hiçbir sitenin anahtar oluşturma işlevini kullanmasına izin verme</translation> +<translation id="6982028490425791294"> + Bu politika doğru (true) değerine ayarlanırsa, <ph name="PRODUCT_NAME" /> ürünün Google hizmetlerinden (ör. Google Meet) WebRTC etkinlik günlüklerini toplamasına ve bu günlükleri Google'a yüklemesine izin verilir. + + Bu politika yanlış (false) değerine ayarlanır veya ayarlanmadan bırakılırsa, <ph name="PRODUCT_NAME" /> ürünü bu tür günlükleri toplayamaz veya yükleyemez. + + Bu günlükler gönderilen ve alınan RTP paketlerinin boyutu ve işlem zamanı, ağdaki tıkanıklıkla ilgili geri bildirim, ses ve video karelerinin süresi ve kalitesi gibi bilgileri içerir. Bu bilgiler, Chrome'da sesli ve görüntülü aramalarla ilgili sorunlar (ör. bant genişliği tahminiyle ilgili sorunlar vb) için hata ayıklaması yaparken kullanışlıdır. Günlükler aramadaki ses ve video içeriklerini barındırmaz. + + Bu veri toplama işlemi yalnızca Google Hangouts veya Google Meet gibi Google'ın web hizmetleri tarafından tetiklenebilir. + + Bu günlükler bir oturum kimliği kullanılarak, Google hizmetinin kendisi tarafından toplanan diğer günlüklerle ilişkilendirilebilir. Bu, hata ayıklamayı kolaylaştırmak amacıyla kasıtlı olarak yapılır. + </translation> <translation id="6994082778848658360">Yerleşik güvenli öğe donanımının bu özellikle uyumlu olması halinde iki etmenli kimlik doğrulama sunmak için nasıl kullanılabileceğini belirtir. Kullanıcının fiziksel varlığını algılamak için makinenin güç düğmesi kullanılır. "Devre dışı" seçilirse ikinci etmen sunulmaz. @@ -2398,7 +2404,6 @@ <translation id="7617319494457709698">Bu politika, uzaktan doğrulama için <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" /> işlevini kullanmasına izin verilen uzantıları belirtir. API'yi kullanmak için uzantılar bu listeye eklenmelidir. Bir uzantı listede yoksa veya liste ayarlanmamışsa API'ye yapılan çağrılar başarısız olur ve hata kodu görüntülenir.</translation> -<translation id="7620300057302654932">Başlangıç noktaları veya ana makine adı kalıpları, güvenli içerik olarak değerlendirilir.</translation> <translation id="7625444193696794922">Bu cihazın kilitlenmesi gereken yayın kanalını belirtir.</translation> <translation id="7632724434767231364">GSSAPI kitaplığı adı</translation> <translation id="7635471475589566552"><ph name="PRODUCT_NAME" /> içindeki uygulama yerel ayarını yapılandırır ve kullanıcıların yerel ayarı değiştirmelerini önler.
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index 53084eb..17c94a6 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -655,7 +655,6 @@ Кожен пункт списку має ідентифікатор, за допомогою якого система розрізняє локальні облікові записи в пристрої.</translation> <translation id="2769952903507981510">Налаштовувати потрібне ім’я домену для хостів віддаленого доступу</translation> <translation id="2787173078141616821">Повідомляти інформацію про статус пристрою Android</translation> -<translation id="2793923553868251161">Джерела, які вважатимуться безпечним контекстом.</translation> <translation id="2799297758492717491">Дозволити автоматично відтворювати медіафайли з білого списку шаблонів URL-адрес</translation> <translation id="2801230735743888564">Користувачі можуть грати в гру Dinosaur Easter Egg, коли пристрій перебуває в режимі офлайн. @@ -1796,12 +1795,6 @@ <translation id="6155936611791017817">Налаштувати стан великого курсора за умовчанням на екрані входу</translation> <translation id="6157537876488211233">Розділений комами список правил обходу проксі-сервера</translation> <translation id="6158324314836466367">Назва корпоративного веб-магазину (більше не підтримується)</translation> -<translation id="6164955668342404660">Не підтримується у версії M69. Натомість використовуйте правило OverrideSecurityRestrictionsOnInsecureOrigin. - - Це правило визначає перелік джерел (URL-адрес), які вважаються безпечним контекстом. Мета – дати змогу організаціям налаштовувати проміжний сервер для внутрішніх веб-розробок, щоб можна було тестувати функції, для яких потрібен безпечний контекст, не застосовуючи TLS. - Налаштувати список URL-адрес у цьому правилі – це те саме, що встановити для позначки командного рядка "--unsafely-treat-insecure-origin-as-secure" відокремлений комами список тих самих URL-адрес. Якщо це правило налаштовано, воно замінює позначку командного рядка. - Докладніше про безпечні контексти читайте на сторінці https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Дозволяє створювати список шаблонів URL-адрес сайтів, які не можуть запускати плагін <ph name="FLASH_PLUGIN_NAME" />. Якщо це правило не встановлено, для всіх сайтів буде застосовано загальне значення за умовчанням відповідно до правила "DefaultPluginsSetting" (якщо таке встановлено) або персоналізованих налаштувань користувача.</translation> @@ -1974,11 +1967,6 @@ <translation id="6786967369487349613">Указати роумінговий каталог профілю</translation> <translation id="6810445994095397827">Блокувати JavaScript на цих сайтах</translation> <translation id="681446116407619279">Підтримувані схеми автентифікації</translation> -<translation id="6832455357698286434"> - Це правило визначає перелік джерел (URL-адрес) або зразки імені хосту (як-от "*.example.com"), які вважаються безпечним контекстом. Мета – дати змогу організаціям налаштовувати проміжний сервер для внутрішніх веб-розробок, щоб можна було тестувати функції, для яких потрібен безпечний контекст, не застосовуючи TLS. - Налаштувати список URL-адрес у цьому правилі – це те саме, що встановити для позначки командного рядка "--unsafely-treat-insecure-origin-as-secure" відокремлений комами список тих самих URL-адрес. Якщо це правило налаштовано, воно замінює позначку командного рядка. - Докладніше про безпечні контексти читайте на сторінці https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Показувати користувачеві повторюваний запит із рекомендацією перезапуску</translation> <translation id="6838056959556423778">Замінює правила вибору принтера за умовчанням у продукті <ph name="PRODUCT_NAME" />. @@ -2323,7 +2311,6 @@ <translation id="7617319494457709698">Це правило визначає розширення, яким дозволено використовувати функцію <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" /> для віддаленого засвідчення. Щоб скористатись API, розширення потрібно додати в цей список. Якщо розширення немає в списку або список не створено, запити до API закінчуються помилкою.</translation> -<translation id="7620300057302654932">Джерела або зразки імені хосту вважаються безпечним контекстом.</translation> <translation id="7625444193696794922">Указує версію випуску, з якою потрібно пов’язати цей пристрій.</translation> <translation id="7632724434767231364">Назва бібліотеки GSSAPI</translation> <translation id="7635471475589566552">Установлює мовний код програми в <ph name="PRODUCT_NAME" /> і не дозволяє користувачам змінювати його. Якщо це налаштування ввімкнено, <ph name="PRODUCT_NAME" /> використовує вказаний мовний код. Якщо встановлений мовний код не підтримується, замість нього використовується "en-US". Якщо це налаштування вимкнено чи не встановлено, <ph name="PRODUCT_NAME" /> використовує вказаний користувачем мовний код (якщо налаштовано), мовний код системи або вихідний мовний код "en-US".</translation>
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 93dd6e5..ed71e1b 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -269,6 +269,7 @@ Nếu bạn đặt thành false, thì tính năng báo cáo số liệu và dữ liệu chẩn đoán sẽ bị tắt. Nếu bạn không định cấu hình, thì tính năng báo cáo số liệu và dữ liệu chẩn đoán sẽ bị tắt trên các thiết bị không được quản lý và được bật trên các thiết bị được quản lý.</translation> +<translation id="1920046221095339924">Cho phép phiên được quản lý trên thiết bị</translation> <translation id="1929709556673267855">Cung cấp cấu hình máy in dành cho doanh nghiệp được kết nối với các thiết bị. Chính sách này cho phép bạn cung cấp cấu hình máy in cho các thiết bị <ph name="PRODUCT_OS_NAME" />. Định dạng này giống với định dạng của từ điển NativePrinters với trường "id" hoặc "guid" bổ sung bắt buộc trên mỗi máy in để đưa vào danh sách cho phép hoặc danh sách cấm. @@ -302,6 +303,7 @@ Nếu bạn bật hoặc không đặt giá trị nào cho tùy chọn cài đặt này, thì người dùng có thể kiểm soát tính năng Tự động điền cho địa chỉ trong giao diện người dùng.</translation> <translation id="1960840544413786116">Có cho phép chứng chỉ được cấp bởi mẩu neo đáng tin cậy cục bộ bị thiếu tiện ích subjectAlternativeName hay không</translation> +<translation id="1962273523772270623">Cho phép thu thập nhật ký sự kiện WebRTC từ các dịch vụ của Google</translation> <translation id="1964634611280150550">Đã tắt chế độ ẩn danh</translation> <translation id="1964802606569741174">Chính sách này không ảnh hưởng đến ứng dụng YouTube trên Android. Nếu bị buộc phải sử dụng Chế độ an toàn trên YouTube thì việc cài đặt ứng dụng YouTube trên Android sẽ không được cho phép.</translation> <translation id="1969212217917526199">Ghi đè chính sách trên bản dựng Gỡ lỗi của máy chủ truy cập từ xa. @@ -673,7 +675,6 @@ Mỗi mục nhập trong danh sách chỉ định một định danh, được sử dụng nội bộ để cho biết riêng các tài khoản trong thiết bị khác nhau.</translation> <translation id="2769952903507981510">Định cấu hình tên miền bắt buộc cho máy chủ truy cập từ xa</translation> <translation id="2787173078141616821">Báo cáo thông tin về trạng thái của Android</translation> -<translation id="2793923553868251161">Ngữ cảnh gốc được coi là ngữ cảnh an toàn.</translation> <translation id="2799297758492717491">Cho phép tự động phát nội dung nghe nhìn thuộc danh sách các mẫu URL được phép</translation> <translation id="2801230735743888564">Cho phép người dùng chơi trò chơi trứng khủng long Phục sinh khi thiết bị ngoại tuyến. @@ -1867,12 +1868,6 @@ <translation id="6155936611791017817">Đặt trạng thái của con trỏ lớn mặc định trên màn hình đăng nhập</translation> <translation id="6157537876488211233">Danh sách quy tắc bỏ qua proxy được phân cách bằng dấu phẩy</translation> <translation id="6158324314836466367">Tên cửa hàng trực tuyến dành cho doanh nghiệp (không dùng nữa)</translation> -<translation id="6164955668342404660">Không còn dùng trong M69. Hãy sử dụng tùy chọn OverrideSecurityRestrictionsOnInsecureOrigin để thay thế. - - Chính sách này xác định danh sách các URL gốc cần được coi là ngữ cảnh an toàn. Mục đích là nhằm cho phép các tổ chức thiết lập một máy chủ theo giai đoạn để phát triển web nội bộ để các nhà phát triển có thể thử nghiệm các tính năng cần ngữ cảnh an toàn mà không cần phải triển khai TLS trên máy chủ theo giai đoạn. - Việc đặt một danh sách URL trong chính sách này có tác dụng tương tự như đặt cờ dòng lệnh '--unsafely-treat-insecure-origin-as-secure' cho một danh sách được phân tách bằng dấu phẩy gồm các URL tương tự. Nếu bạn đặt chính sách này, thì chính sách này sẽ ghi đè cờ dòng lệnh. - Để biết thêm thông tin về ngữ cảnh an toàn, hãy truy cập vào https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">Cho phép bạn đặt danh sách mẫu url chỉ định các trang web không được phép chạy plugin <ph name="FLASH_PLUGIN_NAME" />. Nếu bạn không thiết lập chính sách này, giá trị mặc định chung sẽ được sử dụng cho tất cả các trang web của chính sách 'DefaultPluginsSetting' nếu chính sách này được đặt hoặc nếu không thì giá trị mặc định chung sẽ được sử dụng cho cấu hình cá nhân của người dùng.</translation> @@ -1994,6 +1989,11 @@ Nếu không đặt chính sách này hoặc danh sách trống, tất cả lược đồ sẽ có thể truy cập được trong <ph name="PRODUCT_NAME" />.</translation> <translation id="6652197835259177259">Cài đặt người dùng được quản lý cục bộ</translation> <translation id="6658245400435704251">Chỉ định số giây tối đa mà thiết bị có thể ngẫu nhiên trì hoãn việc tải xuống bản cập nhật từ thời điểm bản cập nhật được đưa lên máy chủ lần đầu tiên. Thiết bị có thể đợi một phần số thời gian này là thời gian thực và phần thời gian còn lại là thời gian kiểm tra bản cập nhật. Trong bất kỳ trường hợp nào, việc phân tán bị chặn trên ở lượng thời gian cố định để thiết bị không bao giờ phải chờ mãi để tải xuống bản cập nhật.</translation> +<translation id="6665599130599311250">Nếu bạn đặt chính sách này thành false hoặc không đặt, thì phiên khách được quản lý sẽ hoạt động như được nêu tại https://support.google.com/chrome/a/answer/3017014 - "Phiên công khai" tiêu chuẩn. + + Nếu bạn đặt chính sách này thành true, thì phiên khách được quản lý sẽ hoạt động như "Phiên được quản lý", trong đó nhiều nội dung hạn chế áp dụng cho "Phiên công khai" thông thường sẽ được gỡ bỏ. + + Nếu bạn đặt chính sách này, thì người dùng không thể thay đổi hoặc ghi đè chính sách này.</translation> <translation id="6665670272107384733">Đặt tần suất người dùng phải nhập mật khẩu để sử dụng tính năng mở khóa nhanh</translation> <translation id="6681229465468164801">Cho phép bạn đặt danh sách mẫu URL để chỉ định các trang web không được phép yêu cầu người dùng cấp quyền truy cập vào thiết bị USB. @@ -2043,11 +2043,6 @@ <translation id="6786967369487349613">Đặt thư mục hồ sơ chuyển vùng</translation> <translation id="6810445994095397827">Chặn JavaScript trên các trang web này</translation> <translation id="681446116407619279">Các giao thức xác thực được hỗ trợ</translation> -<translation id="6832455357698286434"> - Chính sách này xác định danh sách (các URL) nguồn gốc hoặc mẫu tên máy chủ (chẳng hạn như "*.example.com") được coi là ngữ cảnh an toàn. Mục đích là nhằm cho phép các tổ chức thiết lập một máy chủ theo giai đoạn để phát triển web nội bộ sao cho các nhà phát triển có thể thử nghiệm các tính năng yêu cầu ngữ cảnh an toàn mà không phải triển khai TLS trên máy chủ theo giai đoạn. - Việc đặt một danh sách URL trong chính sách này có tác dụng tương tự như đặt cờ dòng lệnh '--unsafely-treat-insecure-origin-as-secure' cho một danh sách được phân tách bằng dấu phẩy gồm các URL tương tự. Nếu bạn đặt chính sách này, thì chính sách này sẽ ghi đè cờ dòng lệnh. - Để biết thêm thông tin về ngữ cảnh an toàn, hãy truy cập vào https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">Nên hiển thị lời nhắc định kỳ cho người dùng cho biết cần chạy lại</translation> <translation id="6838056959556423778">Ghi đè các quy tắc chọn máy in mặc định trong <ph name="PRODUCT_NAME" />. @@ -2160,6 +2155,17 @@ <translation id="6943577887654905793">Tên tùy chọn Mac/Linux:</translation> <translation id="69525503251220566">Tham số cung cấp tính năng tìm theo hình ảnh cho nhà cung cấp dịch vụ tìm kiếm mặc định</translation> <translation id="6956272732789158625">Không cho phép bất kỳ trang web nào sử dụng tạo khóa</translation> +<translation id="6982028490425791294"> + Nếu bạn đặt chính sách này là true, thì <ph name="PRODUCT_NAME" /> được phép thu thập nhật ký sự kiện WebRTC từ các dịch vụ của Google (ví dụ: Google Meet), và tải các nhật ký đó lên Google. + + Nếu bạn đặt chính sách này thành false hoặc không đặt, thì <ph name="PRODUCT_NAME" /> không được phép thu thập hay tải các nhật ký đó lên. + + Những nhật ký này chứa các loại thông tin, chẳng hạn như thời gian và kích thước các gói RTP gửi đi và nhận được, phản hồi về tình trạng nghẽn mạng, cũng như siêu dữ liệu về thời gian và chất lượng của âm thanh cũng như khung video. Thông tin này hữu ích khi gỡ lỗi các vấn đề về cuộc gọi thoại hoặc cuộc gọi video trong Chrome, chẳng hạn như vấn đề về ước tính băng thông, v.v. Các nhật ký này không chứa nội dung video hoặc nội dung thoại của các cuộc gọi. + + Chỉ các dịch vụ web của Google, chẳng hạn như Google Hangouts hoặc Google Meet, mới có thể kích hoạt việc thu thập dữ liệu này. + + Thông qua ID phiên, những nhật ký này có thể liên kết với các nhật ký khác do dịch vụ của Google tự thu thập. Điều này nhằm giúp quá trình gỡ lỗi dễ dàng hơn. + </translation> <translation id="6994082778848658360">Chỉ định cách bạn có thể sử dụng phần cứng tích hợp phần tử bảo mật để cung cấp xác thực hai yếu tố nếu tương thích với tính năng này. Nút nguồn của máy dùng để phát hiện sự hiện diện của người dùng. Nếu bạn chọn 'Đã tắt' thì sẽ không nhận được hai yếu tố. @@ -2404,7 +2410,6 @@ <translation id="7617319494457709698">Chính sách này nêu rõ các tiện ích được phép sử dụng chức năng <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" /> cho chứng thực từ xa. Các tiện ích phải được thêm vào danh sách này để sử dụng API. Nếu tiện ích không có trong danh sách hoặc danh sách không được đặt thì lệnh gọi đến API sẽ không thực hiện được với mã lỗi.</translation> -<translation id="7620300057302654932">Các URL gốc hoặc mẫu tên máy chủ được coi là ngữ cảnh an toàn.</translation> <translation id="7625444193696794922">Chỉ định kênh phát hành mà thiết bị này phải bị khóa.</translation> <translation id="7632724434767231364">Tên thư viện GSSAPI</translation> <translation id="7635471475589566552">Định cấu hình ngôn ngữ ứng dụng trong <ph name="PRODUCT_NAME" /> và ngăn người dùng thay đổi ngôn ngữ này. Nếu bạn bật cài đặt này, <ph name="PRODUCT_NAME" /> sẽ sử dụng ngôn ngữ được chỉ định. Nếu ngôn ngữ được định cấu hình không được hỗ trợ, 'en-US' sẽ được sử dụng thay thế. Nếu bạn tắt hoặc không thiết lập cài đặt này, <ph name="PRODUCT_NAME" /> sẽ sử dụng ngôn ngữ ưa thích do người dùng chỉ định (nếu được định cấu hình), ngôn ngữ hệ thống hoặc ngôn ngữ dự phòng 'en-US'.</translation>
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index aaf232d6..f0dc0332 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -251,6 +251,7 @@ 如果此政策设为 false,指标和诊断数据报告功能便会被停用。 如果未配置此政策,指标和诊断数据报告功能将会在非托管设备上停用,但会在托管设备上启用。</translation> +<translation id="1920046221095339924">允许在设备上使用受管理自助服务终端</translation> <translation id="1929709556673267855">为绑定到设备的企业打印机提供配置。 此政策让您能够为 <ph name="PRODUCT_OS_NAME" />设备提供打印机配置。在格式方面,与 NativePrinters 字典一样,不过每台打印机都还对应一个必填字段“id”或“guid”- 您必须妥当地填写该字段,才能将相应打印机加入白名单/黑名单。 @@ -284,6 +285,7 @@ 如果启用了此设置或未设定任何值,用户将能够控制是否要在界面中自动填充地址信息。</translation> <translation id="1960840544413786116">是否允许使用由本地信任锚颁发的缺少 subjectAlternativeName 扩展项的证书</translation> +<translation id="1962273523772270623">允许从 Google 服务收集 WebRTC 事件日志</translation> <translation id="1964634611280150550">隐身模式已停用</translation> <translation id="1964802606569741174">此政策对 Android 版 YouTube 应用没有任何影响。如果应在 YouTube 中强制启用安全模式,则应禁止安装 Android 版 YouTube 应用。</translation> <translation id="1969212217917526199">覆盖与远程访问主机的调试版本号相关的政策。 @@ -480,7 +482,7 @@ 如果此设置未指定,那么用户可以决定是否使用此功能。 29 版及更高版本的 <ph name="PRODUCT_NAME" /> 中已取消此设置。</translation> -<translation id="2433412232489478893">此政策可控制是否允许用户在 <ph name="PRODUCT_NAME" />使用网络文件共享功能。 +<translation id="2433412232489478893">此政策可控制是否允许用户在 <ph name="PRODUCT_NAME" />上使用网络文件共享功能。 如果未配置此政策或将其设为“True”,用户将能够使用网络文件共享功能。 @@ -620,7 +622,6 @@ 每个列表条目指定一个标识符,用于在内部区分不同的设备本地帐号。</translation> <translation id="2769952903507981510">为远程访问主机配置所需的域名</translation> <translation id="2787173078141616821">报告有关 Android 状态的信息</translation> -<translation id="2793923553868251161">指定将被视为安全上下文的来源。</translation> <translation id="2799297758492717491">允许符合网址格式白名单中所列格式的网页自动播放媒体内容</translation> <translation id="2801230735743888564">允许用户在设备未联网的情况下玩恐龙复活节彩蛋游戏。 @@ -1113,7 +1114,7 @@ 如果未设置此政策,系统将启用包含网址的匿名化数据收集功能,但用户将能够更改此设置。</translation> <translation id="4250680216510889253">否</translation> <translation id="4261820385751181068">设备登录屏幕语言区域</translation> -<translation id="4264607809747169568">控制是否允许在 Chrome 操作系统使用网络文件共享功能</translation> +<translation id="4264607809747169568">控制是否允许在 Chrome 操作系统中使用网络文件共享功能</translation> <translation id="427220754384423013">指定用户可以使用的打印机。 仅当为 <ph name="BULK_PRINTERS_ACCESS_MODE" /> 选择了 <ph name="PRINTERS_WHITELIST" /> 时,才可使用此政策。 @@ -1749,12 +1750,6 @@ <translation id="6155936611791017817">设置登录屏幕上大号光标的默认状态</translation> <translation id="6157537876488211233">代理绕过规则的逗号分隔列表</translation> <translation id="6158324314836466367">企业网上应用店名称(已弃用)</translation> -<translation id="6164955668342404660">已在 M69 中弃用。请改用 OverrideSecurityRestrictionsOnInsecureOrigin。 - - 此政策会指定一系列将被视为安全上下文的来源(网址),意在允许相关单位设置临时服务器以用于开发内部网络,这样一来,他们的开发者就能够测试需要安全上下文的功能,而无需在临时服务器上部署传输层安全协议 (TLS)。 - 在此政策中设置一系列网址与将“--unsafely-treat-insecure-origin-as-secure”命令行标记设为同一系列的网址(以英文逗号分隔)具有同样的效果。如果此政策已设置,则会替换上述命令行标记。 - 有关安全上下文的详情,请访问 https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">可让您设置一系列网址格式,以用于指定禁止哪些网站运行 <ph name="FLASH_PLUGIN_NAME" /> 插件。 如果未设置此政策,系统将会对所有网站使用“DefaultPluginsSetting”政策中的全局默认值(倘若已设置“DefaultPluginsSetting”政策),或使用用户个人配置中的全局默认值(倘若未设置“DefaultPluginsSetting”政策)。</translation> @@ -1873,6 +1868,11 @@ 如果未设置此政策或此列表为空,则可在 <ph name="PRODUCT_NAME" /> 中使用所有架构。</translation> <translation id="6652197835259177259">本地托管用户设置</translation> <translation id="6658245400435704251">指定一个时间(以秒为单位),即从更新首次推送到服务器起设备随机延迟更新下载的最大时间。设备的这一等待时间一部分会按照实际时间计算,而剩下的部分则取决于更新检查的次数。在任何情况下,分配的时间上限都是固定的,因此设备绝不会一直等待下载某个更新。</translation> +<translation id="6665599130599311250">如果此政策设为 false 或未设置,受管理访客自助服务终端的行为将会与 https://support.google.com/chrome/a/answer/3017014 页面中所述的标准“公用自助服务终端”的行为一样。 + + 如果此政策设为 true,受管理访客自助服务终端的行为将会与“受管理自助服务终端”的行为相同,而不会像常规“公用自助服务终端”的行为那样有那么多限制。 + + 如果已设置此政策,用户将无法更改或替换此设置。</translation> <translation id="6665670272107384733">指定用户必须按什么样的频率输入密码才能使用快速解锁功能</translation> <translation id="6681229465468164801">让您能够设置一系列网址格式,以用于指定禁止哪些网站请求用户授权其访问 USB 设备。 @@ -1922,11 +1922,6 @@ <translation id="6786967369487349613">设置漫游个人资料目录</translation> <translation id="6810445994095397827">在这些网站上阻止 JavaScript</translation> <translation id="681446116407619279">支持的身份验证方案</translation> -<translation id="6832455357698286434"> - 此政策会指定一系列将被视为安全上下文的来源(网址)或主机名模式(例如“*.example.com”),意在允许相关单位设置临时服务器以用于开发内部网络,这样一来,他们的开发者就能够测试需要安全上下文的功能,而无需在临时服务器上部署传输层安全协议 (TLS)。 - 在此政策中设置一系列网址与将“--unsafely-treat-insecure-origin-as-secure”命令行标记设为同一系列的网址(以英文逗号分隔)具有同样的效果。如果此政策已设置,则会替换上述命令行标记。 - 有关安全上下文的详情,请访问 https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">显示建议用户重新启动浏览器的周期性提示</translation> <translation id="6838056959556423778">替换 <ph name="PRODUCT_NAME" /> 默认打印机选择规则。 此政策用于确定:当用户以相应个人资料首次在 <ph name="PRODUCT_NAME" /> 中使用打印功能时,系统会遵循什么样的规则来选择默认打印机。 @@ -2027,6 +2022,17 @@ <translation id="6943577887654905793">Mac/Linux 偏好设置名称:</translation> <translation id="69525503251220566">用来为默认搜索服务提供商提供图片搜索功能的参数</translation> <translation id="6956272732789158625">不允许任何网站使用密钥生成功能</translation> +<translation id="6982028490425791294"> + 如果此政策设为 true,<ph name="PRODUCT_NAME" /> 便可以从 Google 服务(例如 Google Meet)收集 WebRTC 事件日志,然后将这些日志上传到 Google。 + + 如果此政策设为 false 或未设置,<ph name="PRODUCT_NAME" /> 就可能不会收集或上传这类日志。 + + 这些日志包含如下信息:RTP 数据包的收发时间和大小、关于网络拥堵状况的反馈,以及与音频和视频帧的时间和质量相关的元数据。在调试 Chrome 中的音频和视频通话问题(例如带宽估算问题)时,这项信息十分有用。这些日志不包含通话中的音频或视频内容。 + + 这项数据收集操作只能由 Google 的网络服务(例如 Google 环聊或 Google Meet)触发。 + + 系统可能会依照自助服务终端 ID 将这些日志与 Google 服务自身收集的其他日志建立关联,目的是简化调试操作。 + </translation> <translation id="6994082778848658360">指定如何使用板载安全元件硬件提供双重身份验证(如果该硬件与此功能兼容的话)。使用机器电源按钮检测用户是否真实存在。 如果选择“停用”,系统将不会提供任何双重身份验证。 @@ -2257,7 +2263,6 @@ <translation id="7617319494457709698">此政策指定了允许使用 <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> 函数 <ph name="CHALLENGE_USER_KEY_FUNCTION" /> 进行远程认证的扩展程序。只有添加到此列表中的扩展程序才能使用该 API。 如果扩展程序不在此列表中,或者未设置此列表,则会导致无法调用此 API,并返回错误代码。</translation> -<translation id="7620300057302654932">指定将被视为安全上下文的来源或主机名模式。</translation> <translation id="7625444193696794922">指定该设备应锁定到的发布渠道。</translation> <translation id="7632724434767231364">GSSAPI 库名称</translation> <translation id="7635471475589566552">在 <ph name="PRODUCT_NAME" />中配置应用的语言区域,并禁止用户更改语言区域。如果您启用了此设置,<ph name="PRODUCT_NAME" />就会使用指定的语言区域。如果配置的语言区域不受支持,就会改用“en-US”。如果已停用或未配置此设置,<ph name="PRODUCT_NAME" />就会使用由用户指定的首选语言区域(如果已配置)、系统语言区域或备用语言区域“en-US”。</translation>
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index 3bbee9e..a162ef7 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -266,6 +266,7 @@ 如果設為 false,指標和診斷資料回報功能就會停用。 如果未設定,指標和診斷資料回報功能會在未受管理的裝置上停用,並且在受管理的裝置上啟用。</translation> +<translation id="1920046221095339924">允許在裝置上進入受管理的工作階段</translation> <translation id="1929709556673267855">為繫結至裝置的企業印表機進行設定。 你可以透過這項政策為 <ph name="PRODUCT_OS_NAME" />裝置進行印表機設定。格式必須符合 NativePrinters 字典,且每部印表機的「id」或「guid」欄位都必須填妥,以供加入許可清單或黑名單。 @@ -299,6 +300,7 @@ 如果啟用這項設定或未設定任何值,使用者就能透過 UI 控制地址資訊的自動填入功能。</translation> <translation id="1960840544413786116">是否允許由本機信任錨點核發但缺少 subjectAlternativeName 延伸的憑證</translation> +<translation id="1962273523772270623">允許從 Google 服務收集 WebRTC 事件記錄</translation> <translation id="1964634611280150550">無痕模式已停用</translation> <translation id="1964802606569741174">這項政策對 Android YouTube 應用程式沒有影響。如要強制採用 YouTube 安全模式,則必須禁止下載 Android YouTube 應用程式。</translation> <translation id="1969212217917526199">覆寫遠端存取主機的偵錯版本政策。 @@ -650,7 +652,6 @@ 每個清單項目都會指定一個識別碼,用來在系統內部區別不同的裝置本機帳戶。</translation> <translation id="2769952903507981510">設定遠端存取主機所需的網域名稱</translation> <translation id="2787173078141616821">回報 Android 狀態的相關資訊</translation> -<translation id="2793923553868251161">要視為安全內容的來源。</translation> <translation id="2799297758492717491">允許符合網址模式許可清單的網頁自動播放媒體</translation> <translation id="2801230735743888564">允許使用者在裝置處於離線狀態時玩恐龍復活節彩蛋遊戲。 @@ -1793,12 +1794,6 @@ <translation id="6155936611791017817">設定大型游標在登入畫面的預設狀態</translation> <translation id="6157537876488211233">以逗號間隔的 Proxy 略過規則清單</translation> <translation id="6158324314836466367">企業線上應用程式商店名稱 (已不適用)</translation> -<translation id="6164955668342404660">已於 M69 淘汰,請改用 OverrideSecurityRestrictionsOnInsecureOrigin。 - - 這項政策可指定要視為安全內容的來源 (網址) 清單,以便機構設定內部網頁開發所需的暫存伺服器。這樣一來,機構的開發人員就能測試需要安全內容的功能,而不必在暫存伺服器上部署傳輸層安全標準 (TLS)。 - 你可以在這項政策中設定網址清單,或是將「--unsafely-treat-insecure-origin-as-secure」命令列標記設為相同的網址清單 (以逗號分隔),兩者的效果相同。如果設定這項政策,就會覆寫命令列標記。 - 如要進一步瞭解安全內容,請參閱 https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6181608880636987460">允許你設定網址模式清單,指定不允許執行 <ph name="FLASH_PLUGIN_NAME" /> 外掛程式的網站。 如未設定這項政策,系統會從「DefaultPluginsSetting」政策 (如果有設定的話) 或使用者的個人設定,將通用預設值套用至所有網站。</translation> @@ -1917,6 +1912,11 @@ 如果你未設定這項政策或留空,則可在 <ph name="PRODUCT_NAME" /> 中使用所有協定。</translation> <translation id="6652197835259177259">本機管理化環境下的使用者設定</translation> <translation id="6658245400435704251">指定裝置可以任意延遲下載某項更新的秒數上限 (以該項更新初次被推送到伺服器的時間為準)。你可以將這項裝置等待時間的其中一部分設定為等待的時間長度,剩下的部分則設定為檢查更新的次數。不論採取哪種方式,分散時間皆不得超過固定時間長度,這樣就可以避免裝置由於持續等待下載某項更新而停止回應。</translation> +<translation id="6665599130599311250">如果將這項政策設為 False 或不予設定,受管理訪客工作階段的行為將符合 https://support.google.com/chrome/a/answer/3017014 網頁內有關標準「公開工作階段」的敘述。 + + 如果將這項政策設為 True,受管理訪客工作階段的行為就與「受管理的工作階段」相符,而且不像一般的「公開工作階段」有許多限制。 + + 設定這項政策後,使用者無法變更或覆寫政策。</translation> <translation id="6665670272107384733">設定使用者使用快速解鎖功能時需輸入密碼的頻率</translation> <translation id="6681229465468164801">允許你設定網址模式清單,指定禁止要求使用者授予 USB 裝置存取權的網站。 @@ -1966,11 +1966,6 @@ <translation id="6786967369487349613">設定漫遊設定檔目錄</translation> <translation id="6810445994095397827">封鎖這些網站的 JavaScript</translation> <translation id="681446116407619279">支援的驗證機制</translation> -<translation id="6832455357698286434"> - 這項政策可指定要視為安全內容的來源 (網址) 清單或主機名稱模式 (例如「*.example.com」),以便機構設定內部網頁開發所需的暫存伺服器。這樣一來,機構的開發人員就能測試需要安全內容的功能,而不必在暫存伺服器上部署傳輸層安全標準 (TLS)。 - 你可以在這項政策中設定網址清單,或是將「--unsafely-treat-insecure-origin-as-secure」命令列標記設為相同的網址清單 (以逗號分隔),兩者的效果相同。如果設定這項政策,就會覆寫命令列標記。 - 如要進一步瞭解安全內容,請參閱 https://www.w3.org/TR/secure-contexts/ - </translation> <translation id="6835883744948188639">顯示週期性提示,建議使用者重新啟動瀏覽器</translation> <translation id="6838056959556423778">覆寫 <ph name="PRODUCT_NAME" /> 預設印表機選取規則。 @@ -2079,6 +2074,17 @@ <translation id="6943577887654905793">Mac/Linux 偏好設定名稱:</translation> <translation id="69525503251220566">為預設搜尋引擎提供圖片搜尋功能的參數</translation> <translation id="6956272732789158625">不允許任何網站使用金鑰產生功能</translation> +<translation id="6982028490425791294"> + 如果將這項政策設為 True,<ph name="PRODUCT_NAME" /> 就能從 Google 服務 (例如 Google Meet) 收集 WebRTC 事件記錄,並將這些記錄上傳至 Google。 + + 如果將這項政策設為 False 或不予設定,<ph name="PRODUCT_NAME" /> 就可能不會收集或上傳這類記錄。 + + 這些記錄包含下列資訊:收發 RTP 封包的時間和大小、網路壅塞情形反饋,以及語音和視訊畫格的時間和品質中繼資料。這項資訊有助於偵錯 Chrome 中的語音或視訊通話問題,例如頻寬預估問題等。這份記錄不包含通話的語音和視訊內容。 + + 這個資料收集作業只能由 Google 的網路服務觸發,例如 Google Hangouts 或 Google Meet。 + + 系統可能會依照工作階段 ID 將這些記錄和 Google 服務本身收集的其他記錄建立關聯,目的是簡化偵錯作業。 + </translation> <translation id="6994082778848658360">如果你安裝的安全元素硬體和雙重驗證功能相容,就可以使用這項政策來指定如何使用該硬體提供雙重驗證功能。裝置的電源鍵會用來偵測使用者是否真實存在。 如果選取 [已停用],系統就不會提供雙重驗證功能。 @@ -2309,7 +2315,6 @@ <translation id="7617319494457709698">這項政策可讓你指定允許從遠端使用 <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> 函式「<ph name="CHALLENGE_USER_KEY_FUNCTION" />」證明身分的擴充功能。只有加入這份清單的擴充功能可以使用該 API。 如果不是清單中的擴充功能,或是未設定清單,API 呼叫作業將會失敗,並傳回錯誤代碼。</translation> -<translation id="7620300057302654932">要視為安全內容的來源或主機名稱模式。</translation> <translation id="7625444193696794922">指定裝置的固定發佈頻道。</translation> <translation id="7632724434767231364">GSSAPI 資料庫名稱</translation> <translation id="7635471475589566552">設定「<ph name="PRODUCT_NAME" />」的應用程式語言代碼,並且禁止使用者變更語言代碼。如果你啟用這項設定,「<ph name="PRODUCT_NAME" />」就會使用指定的語言代碼。如果設定的語言代碼不受支援,就會改用「en-US」。如果停用或尚未調整這項設定,「<ph name="PRODUCT_NAME" />」就會使用使用者指定的偏好語言代碼 (如果已設定)、系統語言代碼或備用語言代碼「en-US」。</translation>
diff --git a/components/policy_strings.grdp b/components/policy_strings.grdp index 7c5bf116..2460c89 100644 --- a/components/policy_strings.grdp +++ b/components/policy_strings.grdp
@@ -95,6 +95,12 @@ <message name="IDS_POLICY_VALIDATION_BAD_KEY_VERIFICATION_SIGNATURE" desc="Message indicating a policy key had an invalid verification signature."> Bad verification signature </message> + <message name="IDS_POLICY_VALIDATION_VALUE_WARNING" desc="Message indicating the policy value validation succeeded with non-fatal warnings."> + Validation of policy values has raised warnings + </message> + <message name="IDS_POLICY_VALIDATION_VALUE_ERROR" desc="Message indicating the policy value validation failed with fatal errors."> + Validation of policy values has failed with errors + </message> <message name="IDS_POLICY_VALIDATION_UNKNOWN_ERROR" desc="Message indicating unknown error in policy validation."> Unknown error </message> @@ -207,11 +213,15 @@ <message name="IDS_POLICY_NETWORK_CONFIG_PARSE_FAILED" desc="The text displayed in the status column when the corresponding network configuration policy failed to parse."> Network configuration failed to be parsed. </message> - <message name="IDS_POLICY_NETWORK_CONFIG_IMPORT_PARTIAL" desc="The text displayed in the status column when the corresponding network configuration policy is not standard conform and was imported partially."> + <message name="IDS_POLICY_NETWORK_CONFIG_IMPORT_PARTIAL" desc="The text displayed in the status column when the corresponding network configuration policy is not standard conform and was imported partially. DEBUG_INFO contains non-localized detailed information about existing warnings."> The network configuration doesn't comply to the ONC standard. Parts of the configuration may not be imported. +Additional details: +<ph name="DEBUG_INFO">$1<ex>WARNING: Field name 'SomeRandomField' is unknown. (at toplevel)</ex></ph> </message> - <message name="IDS_POLICY_NETWORK_CONFIG_IMPORT_FAILED" desc="The text displayed in the status column when the corresponding network configuration policy is invalid."> + <message name="IDS_POLICY_NETWORK_CONFIG_IMPORT_FAILED" desc="The text displayed in the status column when the corresponding network configuration policy is invalid. DEBUG_INFO contains non-localized detailed information about existing errors/warnings."> The network configuration is invalid and couldn't be imported. +Additional details: +<ph name="DEBUG_INFO">$1<ex>ERROR: Field name 'SomeRandomField' is unknown. (at toplevel)</ex></ph> </message> <message name="IDS_POLICY_SCOPE_ERROR" desc="Text displayed in the status column when a policy is set in an unsupported scope."> Policy scope is not supported.
diff --git a/components/previews/core/previews_experiments.cc b/components/previews/core/previews_experiments.cc index 63228c2..4bf36cc 100644 --- a/components/previews/core/previews_experiments.cc +++ b/components/previews/core/previews_experiments.cc
@@ -129,6 +129,18 @@ "offline_preview_freshness_duration_in_days", 7)); } +GURL GetLitePagePreviewsDomainURL() { + std::string variable_host_str = GetFieldTrialParamValueByFeature( + features::kLitePageServerPreviews, "previews_host"); + if (!variable_host_str.empty()) { + GURL variable_host(variable_host_str); + DCHECK(variable_host.is_valid()); + DCHECK(variable_host.has_scheme()); + return variable_host; + } + return GURL("https://litepages.googlezip.net/"); +} + net::EffectiveConnectionType GetECTThresholdForPreview( previews::PreviewsType type) { switch (type) {
diff --git a/components/previews/core/previews_experiments.h b/components/previews/core/previews_experiments.h index 9d70a0f..60bff1e 100644 --- a/components/previews/core/previews_experiments.h +++ b/components/previews/core/previews_experiments.h
@@ -11,6 +11,7 @@ #include "base/time/time.h" #include "net/nqe/effective_connection_type.h" +#include "url/gurl.h" namespace previews { @@ -88,6 +89,9 @@ // shown as a preview. base::TimeDelta OfflinePreviewFreshnessDuration(); +// The host for Lite Page server previews. +GURL GetLitePagePreviewsDomainURL(); + // The threshold of EffectiveConnectionType above which preview |type| will be // triggered. net::EffectiveConnectionType GetECTThresholdForPreview(
diff --git a/components/resources/autofill_scaled_resources.grdp b/components/resources/autofill_scaled_resources.grdp index ef11660..40cb93f 100644 --- a/components/resources/autofill_scaled_resources.grdp +++ b/components/resources/autofill_scaled_resources.grdp
@@ -25,6 +25,10 @@ <structure type="chrome_scaled_image" name="IDR_AUTOFILL_GOOGLE_PAY_WITH_DIVIDER" file="autofill/cc-generic.png" /> </if> + <if expr="not is_android and not is_ios"> + <structure type="chrome_scaled_image" name="IDR_AUTOFILL_MIGRATION_DIALOG_HEADER" file="autofill/migration_header.png" /> + </if> + <structure type="chrome_scaled_image" name="IDR_CREDIT_CARD_CVC_HINT" file="autofill/credit_card_cvc_hint.png" /> <structure type="chrome_scaled_image" name="IDR_CREDIT_CARD_CVC_HINT_AMEX" file="autofill/credit_card_cvc_hint_amex.png" /> <if expr="is_ios or is_android">
diff --git a/components/resources/default_100_percent/autofill/migration_header.png b/components/resources/default_100_percent/autofill/migration_header.png new file mode 100644 index 0000000..3500dc24 --- /dev/null +++ b/components/resources/default_100_percent/autofill/migration_header.png Binary files differ
diff --git a/components/resources/default_200_percent/autofill/migration_header.png b/components/resources/default_200_percent/autofill/migration_header.png new file mode 100644 index 0000000..23ad3369 --- /dev/null +++ b/components/resources/default_200_percent/autofill/migration_header.png Binary files differ
diff --git a/components/resources/default_300_percent/autofill/migration_header.png b/components/resources/default_300_percent/autofill/migration_header.png new file mode 100644 index 0000000..7cf5e26 --- /dev/null +++ b/components/resources/default_300_percent/autofill/migration_header.png Binary files differ
diff --git a/components/safe_browsing/browser/safe_browsing_url_checker_impl.cc b/components/safe_browsing/browser/safe_browsing_url_checker_impl.cc index 5a51c24..0e2177e 100644 --- a/components/safe_browsing/browser/safe_browsing_url_checker_impl.cc +++ b/components/safe_browsing/browser/safe_browsing_url_checker_impl.cc
@@ -7,6 +7,7 @@ #include "base/metrics/histogram_macros.h" #include "base/trace_event/trace_event.h" #include "components/safe_browsing/browser/url_checker_delegate.h" +#include "components/safe_browsing/features.h" #include "components/safe_browsing/web_ui/constants.h" #include "components/security_interstitials/content/unsafe_resource.h" #include "content/public/browser/browser_thread.h" @@ -135,7 +136,9 @@ threat_type == SB_THREAT_TYPE_SAFE ? "safe" : "unsafe"); if (threat_type == SB_THREAT_TYPE_SAFE || - threat_type == SB_THREAT_TYPE_SUSPICIOUS_SITE) { + threat_type == SB_THREAT_TYPE_SUSPICIOUS_SITE || + (!base::FeatureList::IsEnabled(safe_browsing::kBillingInterstitial) && + threat_type == SB_THREAT_TYPE_BILLING)) { state_ = STATE_NONE; if (threat_type == SB_THREAT_TYPE_SUSPICIOUS_SITE) {
diff --git a/components/safe_browsing/db/safebrowsing.proto b/components/safe_browsing/db/safebrowsing.proto index 5116de4..a111415c 100644 --- a/components/safe_browsing/db/safebrowsing.proto +++ b/components/safe_browsing/db/safebrowsing.proto
@@ -289,6 +289,9 @@ // Entities that are suspected to present a threat. SUSPICIOUS = 14; + + // Billing threat list. The internal proto's enum name is different + BILLING = 15; } // Types of platforms.
diff --git a/components/safe_browsing/db/v4_local_database_manager.cc b/components/safe_browsing/db/v4_local_database_manager.cc index 55e745d1..a9622ff 100644 --- a/components/safe_browsing/db/v4_local_database_manager.cc +++ b/components/safe_browsing/db/v4_local_database_manager.cc
@@ -80,6 +80,8 @@ ListInfo(kSyncOnlyOnChromeBuilds, "ChromeUrlClientIncident.store", GetChromeUrlClientIncidentId(), SB_THREAT_TYPE_BLACKLISTED_RESOURCE), + ListInfo(kSyncAlways, "UrlBilling.store", GetUrlBillingId(), + SB_THREAT_TYPE_BILLING), ListInfo(kSyncOnlyOnChromeBuilds, "UrlCsdDownloadWhitelist.store", GetUrlCsdDownloadWhitelistId(), SB_THREAT_TYPE_UNUSED), ListInfo(kSyncOnlyOnChromeBuilds, "UrlCsdWhitelist.store", @@ -113,6 +115,8 @@ return 3; case SUSPICIOUS: return 4; + case BILLING: + return 15; default: NOTREACHED() << "Unexpected ThreatType encountered: " << list_id.threat_type(); @@ -135,6 +139,9 @@ case SB_THREAT_TYPE_SUSPICIOUS_SITE: return GetUrlSuspiciousSiteId(); + case SB_THREAT_TYPE_BILLING: + return GetUrlBillingId(); + default: NOTREACHED(); // Compiler requires a return statement here.
diff --git a/components/safe_browsing/db/v4_protocol_manager_util.cc b/components/safe_browsing/db/v4_protocol_manager_util.cc index 6c6b300..c6fc49d8 100644 --- a/components/safe_browsing/db/v4_protocol_manager_util.cc +++ b/components/safe_browsing/db/v4_protocol_manager_util.cc
@@ -115,6 +115,10 @@ return ListIdentifier(GetCurrentPlatformType(), IP_RANGE, MALWARE_THREAT); } +ListIdentifier GetUrlBillingId() { + return ListIdentifier(GetCurrentPlatformType(), URL, BILLING); +} + ListIdentifier GetUrlCsdDownloadWhitelistId() { return ListIdentifier(GetCurrentPlatformType(), URL, CSD_DOWNLOAD_WHITELIST); } @@ -181,6 +185,7 @@ case SB_THREAT_TYPE_URL_MALWARE: case SB_THREAT_TYPE_URL_UNWANTED: case SB_THREAT_TYPE_SUSPICIOUS_SITE: + case SB_THREAT_TYPE_BILLING: break; default:
diff --git a/components/safe_browsing/db/v4_protocol_manager_util.h b/components/safe_browsing/db/v4_protocol_manager_util.h index ef84129..9c0c7882 100644 --- a/components/safe_browsing/db/v4_protocol_manager_util.h +++ b/components/safe_browsing/db/v4_protocol_manager_util.h
@@ -196,6 +196,7 @@ ListIdentifier GetChromeUrlApiId(); ListIdentifier GetChromeUrlClientIncidentId(); ListIdentifier GetIpMalwareId(); +ListIdentifier GetUrlBillingId(); ListIdentifier GetUrlCsdDownloadWhitelistId(); ListIdentifier GetUrlCsdWhitelistId(); ListIdentifier GetUrlMalBinId();
diff --git a/components/safe_browsing/features.cc b/components/safe_browsing/features.cc index 06899184..b43b9db 100644 --- a/components/safe_browsing/features.cc +++ b/components/safe_browsing/features.cc
@@ -22,6 +22,10 @@ const base::Feature kAdSamplerTriggerFeature{"SafeBrowsingAdSamplerTrigger", base::FEATURE_DISABLED_BY_DEFAULT}; +// Controls the billing interstitial UI. +const base::Feature kBillingInterstitial{"BillingInterstitial", + base::FEATURE_DISABLED_BY_DEFAULT}; + // If enabled in pre-network-service world, SafeBrowsing URL checks are done by // applying SafeBrowsing's URLLoaderThrottle subclasses to ThrottlingURLLoader. // @@ -61,6 +65,7 @@ bool probabilistically_enabled; } kExperimentalFeatures[]{ {&kAdSamplerTriggerFeature, false}, + {&kBillingInterstitial, false}, {&kCheckByURLLoaderThrottle, true}, {&kForceEnableResetPasswordWebUI, true}, {&kInspectDownloadedRarFiles, true},
diff --git a/components/safe_browsing/features.h b/components/safe_browsing/features.h index c1a1213..724f40d 100644 --- a/components/safe_browsing/features.h +++ b/components/safe_browsing/features.h
@@ -22,6 +22,9 @@ extern const base::Feature kAdSamplerTriggerFeature; extern const base::Feature kCheckByURLLoaderThrottle; +// Controls the billing interstitial UI. +extern const base::Feature kBillingInterstitial; + // Specifies which non-resource HTML Elements to collect based on their tag and // attributes. It's a single param containing a comma-separated list of pairs. // For example: "tag1,id,tag1,height,tag2,foo" - this will collect elements with
diff --git a/components/security_state/core/security_state.h b/components/security_state/core/security_state.h index d50c445a..7e17299 100644 --- a/components/security_state/core/security_state.h +++ b/components/security_state/core/security_state.h
@@ -92,6 +92,7 @@ MALICIOUS_CONTENT_STATUS_SOCIAL_ENGINEERING, MALICIOUS_CONTENT_STATUS_SIGN_IN_PASSWORD_REUSE, MALICIOUS_CONTENT_STATUS_ENTERPRISE_PASSWORD_REUSE, + MALICIOUS_CONTENT_STATUS_BILLING, }; // Describes the security status of a page or request. This is the
diff --git a/components/services/pdf_compositor/pdf_compositor_impl.cc b/components/services/pdf_compositor/pdf_compositor_impl.cc index 072a78b..78a8c08 100644 --- a/components/services/pdf_compositor/pdf_compositor_impl.cc +++ b/components/services/pdf_compositor/pdf_compositor_impl.cc
@@ -137,32 +137,29 @@ bool PdfCompositorImpl::IsReadyToComposite( uint64_t frame_guid, const ContentToFrameMap& subframe_content_map, - base::flat_set<uint64_t>* pending_subframes) { + base::flat_set<uint64_t>* pending_subframes) const { pending_subframes->clear(); - base::flat_set<uint64_t> visited_frames; - visited_frames.insert(frame_guid); - CheckFramesForReadiness(frame_guid, subframe_content_map, pending_subframes, + base::flat_set<uint64_t> visited_frames = {frame_guid}; + CheckFramesForReadiness(subframe_content_map, pending_subframes, &visited_frames); return pending_subframes->empty(); } void PdfCompositorImpl::CheckFramesForReadiness( - uint64_t frame_guid, const ContentToFrameMap& subframe_content_map, base::flat_set<uint64_t>* pending_subframes, - base::flat_set<uint64_t>* visited) { + base::flat_set<uint64_t>* visited) const { for (auto& subframe_content : subframe_content_map) { auto subframe_guid = subframe_content.second; // If this frame has been checked, skip it. - auto result = visited->insert(subframe_guid); - if (!result.second) + if (!visited->insert(subframe_guid).second) continue; auto iter = frame_info_map_.find(subframe_guid); if (iter == frame_info_map_.end()) { pending_subframes->insert(subframe_guid); } else { - CheckFramesForReadiness(subframe_guid, iter->second->subframe_content_map, + CheckFramesForReadiness(iter->second->subframe_content_map, pending_subframes, visited); } } @@ -267,14 +264,13 @@ for (auto& content_info : subframe_content_map) { uint32_t content_id = content_info.first; uint64_t frame_guid = content_info.second; - auto frame_iter = frame_info_map_.find(frame_guid); - if (frame_iter == frame_info_map_.end()) + auto iter = frame_info_map_.find(frame_guid); + if (iter == frame_info_map_.end()) continue; - if (frame_iter->second->composited) - subframes[content_id] = frame_iter->second->content; - else - subframes[content_id] = CompositeSubframe(frame_iter->first); + subframes[content_id] = iter->second->composited + ? iter->second->content + : CompositeSubframe(iter->first); } return subframes; }
diff --git a/components/services/pdf_compositor/pdf_compositor_impl.h b/components/services/pdf_compositor/pdf_compositor_impl.h index 4fe2d80..cc6218b 100644 --- a/components/services/pdf_compositor/pdf_compositor_impl.h +++ b/components/services/pdf_compositor/pdf_compositor_impl.h
@@ -140,14 +140,13 @@ // |pending_subframes|. bool IsReadyToComposite(uint64_t frame_guid, const ContentToFrameMap& subframe_content_map, - base::flat_set<uint64_t>* pending_subframes); + base::flat_set<uint64_t>* pending_subframes) const; - // Recursive check all the frames |frame_guid| depends on and put those + // Recursively check all the subframes in |subframe_content_map| and put those // not ready in |pending_subframes|. - void CheckFramesForReadiness(uint64_t frame_guid, - const ContentToFrameMap& subframe_content_map, + void CheckFramesForReadiness(const ContentToFrameMap& subframe_content_map, base::flat_set<uint64_t>* pending_subframes, - base::flat_set<uint64_t>* visited); + base::flat_set<uint64_t>* visited) const; // The internal implementation for handling page and documentation composition // requests. @@ -169,9 +168,6 @@ // Composite the content of a subframe. sk_sp<SkPicture> CompositeSubframe(uint64_t frame_guid); - bool CheckForPendingFrame(uint64_t frame_guid, - base::flat_set<uint64_t> visited_frames); - DeserializationContext GetDeserializationContext( const ContentToFrameMap& subframe_content_map);
diff --git a/components/services/pdf_compositor/pdf_compositor_impl_unittest.cc b/components/services/pdf_compositor/pdf_compositor_impl_unittest.cc index e9c32c42..88ff8c3 100644 --- a/components/services/pdf_compositor/pdf_compositor_impl_unittest.cc +++ b/components/services/pdf_compositor/pdf_compositor_impl_unittest.cc
@@ -92,34 +92,30 @@ // Frame 1 should be ready as frame 2 is ready. ContentToFrameMap subframe_content_map = {{3u, 2u}}; base::flat_set<uint64_t> pending_subframes; - bool is_ready = - impl.IsReadyToComposite(1u, subframe_content_map, &pending_subframes); - EXPECT_TRUE(is_ready); + EXPECT_TRUE( + impl.IsReadyToComposite(1u, subframe_content_map, &pending_subframes)); EXPECT_TRUE(pending_subframes.empty()); // If another page of frame 1 needs content 2 which corresponds to frame 3. // This page is ready since frame 3 was painted also. subframe_content_map = {{2u, 3u}}; - is_ready = - impl.IsReadyToComposite(1u, subframe_content_map, &pending_subframes); - EXPECT_TRUE(is_ready); + EXPECT_TRUE( + impl.IsReadyToComposite(1u, subframe_content_map, &pending_subframes)); EXPECT_TRUE(pending_subframes.empty()); // Frame 1 with content 1, 2 and 3 should not be ready since content 1's // content in frame 4 is not painted yet. subframe_content_map = {{1u, 4u}, {2u, 3u}, {3u, 2u}}; - is_ready = - impl.IsReadyToComposite(1u, subframe_content_map, &pending_subframes); - EXPECT_FALSE(is_ready); + EXPECT_FALSE( + impl.IsReadyToComposite(1u, subframe_content_map, &pending_subframes)); ASSERT_EQ(pending_subframes.size(), 1u); EXPECT_EQ(*pending_subframes.begin(), 4u); // Add content of frame 4. Now it is ready for composition. impl.AddSubframeContent(4u, mojo::SharedBufferHandle::Create(10), ContentToFrameMap()); - is_ready = - impl.IsReadyToComposite(1u, subframe_content_map, &pending_subframes); - EXPECT_TRUE(is_ready); + EXPECT_TRUE( + impl.IsReadyToComposite(1u, subframe_content_map, &pending_subframes)); EXPECT_TRUE(pending_subframes.empty()); } @@ -135,17 +131,15 @@ // So frame 5 is not ready. subframe_content_map = {{3u, 3u}}; base::flat_set<uint64_t> pending_subframes; - bool is_ready = - impl.IsReadyToComposite(5u, subframe_content_map, &pending_subframes); - EXPECT_FALSE(is_ready); + EXPECT_FALSE( + impl.IsReadyToComposite(5u, subframe_content_map, &pending_subframes)); ASSERT_EQ(pending_subframes.size(), 1u); EXPECT_EQ(*pending_subframes.begin(), 1u); // Frame 6 is not ready either since it needs frame 5 to be ready. subframe_content_map = {{1u, 5u}}; - is_ready = - impl.IsReadyToComposite(6u, subframe_content_map, &pending_subframes); - EXPECT_FALSE(is_ready); + EXPECT_FALSE( + impl.IsReadyToComposite(6u, subframe_content_map, &pending_subframes)); ASSERT_EQ(pending_subframes.size(), 1u); EXPECT_EQ(*pending_subframes.begin(), 5u); @@ -153,9 +147,8 @@ impl.AddSubframeContent(1u, mojo::SharedBufferHandle::Create(10), ContentToFrameMap()); subframe_content_map = {{3u, 3u}}; - is_ready = - impl.IsReadyToComposite(5u, subframe_content_map, &pending_subframes); - EXPECT_TRUE(is_ready); + EXPECT_TRUE( + impl.IsReadyToComposite(5u, subframe_content_map, &pending_subframes)); EXPECT_TRUE(pending_subframes.empty()); // Add frame 5's content. @@ -164,9 +157,8 @@ // Frame 6 is ready too. subframe_content_map = {{1u, 5u}}; - is_ready = - impl.IsReadyToComposite(6u, subframe_content_map, &pending_subframes); - EXPECT_TRUE(is_ready); + EXPECT_TRUE( + impl.IsReadyToComposite(6u, subframe_content_map, &pending_subframes)); EXPECT_TRUE(pending_subframes.empty()); } @@ -185,9 +177,8 @@ // Both frame 1 and 3 are painted, frame 5 should be ready. base::flat_set<uint64_t> pending_subframes; subframe_content_map = {{1u, 3u}}; - bool is_ready = - impl.IsReadyToComposite(5u, subframe_content_map, &pending_subframes); - EXPECT_TRUE(is_ready); + EXPECT_TRUE( + impl.IsReadyToComposite(5u, subframe_content_map, &pending_subframes)); EXPECT_TRUE(pending_subframes.empty()); // Frame 6 has content 7, which refers to frame 7. @@ -197,9 +188,8 @@ // Frame 7 should be ready since frame 6's own content is added and it only // depends on frame 7. subframe_content_map = {{6u, 6u}}; - is_ready = - impl.IsReadyToComposite(7u, subframe_content_map, &pending_subframes); - EXPECT_TRUE(is_ready); + EXPECT_TRUE( + impl.IsReadyToComposite(7u, subframe_content_map, &pending_subframes)); EXPECT_TRUE(pending_subframes.empty()); }
diff --git a/components/signin/core/browser/gaia_cookie_manager_service.cc b/components/signin/core/browser/gaia_cookie_manager_service.cc index bf09a8f7..4885f1e 100644 --- a/components/signin/core/browser/gaia_cookie_manager_service.cc +++ b/components/signin/core/browser/gaia_cookie_manager_service.cc
@@ -73,20 +73,41 @@ GaiaCookieManagerService::GaiaCookieRequest::GaiaCookieRequest( GaiaCookieRequestType request_type, - const std::string& account_id, + const std::vector<std::string>& account_ids, const std::string& source) - : request_type_(request_type), account_id_(account_id), source_(source) {} + : request_type_(request_type), account_ids_(account_ids), source_(source) {} + +GaiaCookieManagerService::GaiaCookieRequest::GaiaCookieRequest( + const GaiaCookieManagerService::GaiaCookieRequest& other) { + request_type_ = other.request_type(); + account_ids_ = other.account_ids(); + source_ = other.source(); +} GaiaCookieManagerService::GaiaCookieRequest::~GaiaCookieRequest() { } +const std::string GaiaCookieManagerService::GaiaCookieRequest::GetAccountID() { + DCHECK_EQ(1u, account_ids_.size()); + return account_ids_[0]; +} + // static GaiaCookieManagerService::GaiaCookieRequest GaiaCookieManagerService::GaiaCookieRequest::CreateAddAccountRequest( const std::string& account_id, const std::string& source) { return GaiaCookieManagerService::GaiaCookieRequest( - GaiaCookieRequestType::ADD_ACCOUNT, account_id, source); + GaiaCookieRequestType::ADD_ACCOUNT, {account_id}, source); +} + +// static +GaiaCookieManagerService::GaiaCookieRequest +GaiaCookieManagerService::GaiaCookieRequest::CreateSetAccountsRequest( + const std::vector<std::string>& account_ids, + const std::string& source) { + return GaiaCookieManagerService::GaiaCookieRequest( + GaiaCookieRequestType::SET_ACCOUNTS, account_ids, source); } // static @@ -94,7 +115,7 @@ GaiaCookieManagerService::GaiaCookieRequest::CreateLogOutRequest( const std::string& source) { return GaiaCookieManagerService::GaiaCookieRequest( - GaiaCookieRequestType::LOG_OUT, std::string(), source); + GaiaCookieRequestType::LOG_OUT, {}, source); } // static @@ -102,7 +123,7 @@ GaiaCookieManagerService::GaiaCookieRequest::CreateListAccountsRequest( const std::string& source) { return GaiaCookieManagerService::GaiaCookieRequest( - GaiaCookieRequestType::LIST_ACCOUNTS, std::string(), source); + GaiaCookieRequestType::LIST_ACCOUNTS, {}, source); } GaiaCookieManagerService::ExternalCcResultFetcher::ExternalCcResultFetcher( @@ -468,7 +489,7 @@ // We have a pending log in request for an account followed by // a signout. GoogleServiceAuthError error(GoogleServiceAuthError::REQUEST_CANCELED); - SignalComplete(it->account_id(), error); + SignalComplete(it->GetAccountID(), error); } // Keep all requests except for ADD_ACCOUNTS. @@ -607,7 +628,7 @@ DCHECK(requests_.front().request_type() == GaiaCookieRequestType::ADD_ACCOUNT); VLOG(1) << "GaiaCookieManagerService::OnUbertokenSuccess" - << " account=" << requests_.front().account_id(); + << " account=" << requests_.front().GetAccountID(); fetcher_retries_ = 0; uber_token_ = uber_token; @@ -625,23 +646,21 @@ void GaiaCookieManagerService::OnUbertokenFailure( const GoogleServiceAuthError& error) { // Note that the UberToken fetcher already retries transient errors. + const std::string account_id = requests_.front().GetAccountID(); VLOG(1) << "Failed to retrieve ubertoken" - << " account=" << requests_.front().account_id() - << " error=" << error.ToString(); - const std::string account_id = requests_.front().account_id(); + << " account=" << account_id << " error=" << error.ToString(); HandleNextRequest(); SignalComplete(account_id, error); } void GaiaCookieManagerService::OnMergeSessionSuccess(const std::string& data) { - VLOG(1) << "MergeSession successful account=" - << requests_.front().account_id(); + const std::string account_id = requests_.front().GetAccountID(); + VLOG(1) << "MergeSession successful account=" << account_id; DCHECK(requests_.front().request_type() == GaiaCookieRequestType::ADD_ACCOUNT); list_accounts_stale_ = true; - const std::string account_id = requests_.front().account_id(); HandleNextRequest(); SignalComplete(account_id, GoogleServiceAuthError::AuthErrorNone()); @@ -653,9 +672,9 @@ const GoogleServiceAuthError& error) { DCHECK(requests_.front().request_type() == GaiaCookieRequestType::ADD_ACCOUNT); + const std::string account_id = requests_.front().GetAccountID(); VLOG(1) << "Failed MergeSession" - << " account=" << requests_.front().account_id() - << " error=" << error.ToString(); + << " account=" << account_id << " error=" << error.ToString(); if (++fetcher_retries_ < kMaxFetcherRetries && error.IsTransientError()) { fetcher_backoff_.InformOfRequest(false); UMA_HISTOGRAM_ENUMERATION("OAuth2Login.MergeSessionRetry", @@ -670,7 +689,6 @@ } uber_token_ = std::string(); - const std::string account_id = requests_.front().account_id(); UMA_HISTOGRAM_ENUMERATION("OAuth2Login.MergeSessionFailure", error.state(), GoogleServiceAuthError::NUM_STATES); @@ -774,17 +792,18 @@ } void GaiaCookieManagerService::StartFetchingUbertoken() { + const std::string account_id = requests_.front().GetAccountID(); VLOG(1) << "GaiaCookieManagerService::StartFetchingUbertoken account_id=" - << requests_.front().account_id(); + << requests_.front().GetAccountID(); uber_token_fetcher_ = std::make_unique<UbertokenFetcher>( token_service_, this, GetDefaultSourceForRequest(), GetURLLoaderFactory(), base::Bind(&SigninClient::CreateGaiaAuthFetcher, base::Unretained(signin_client_))); if (access_token_.empty()) { - uber_token_fetcher_->StartFetchingToken(requests_.front().account_id()); + uber_token_fetcher_->StartFetchingToken(account_id); } else { - uber_token_fetcher_->StartFetchingTokenWithAccessToken( - requests_.front().account_id(), access_token_); + uber_token_fetcher_->StartFetchingTokenWithAccessToken(account_id, + access_token_); } } @@ -846,6 +865,9 @@ base::Bind(&GaiaCookieManagerService::StartFetchingUbertoken, base::Unretained(this))); break; + case GaiaCookieRequestType::SET_ACCOUNTS: + // TODO(https://crbug.com/872725): StartFetchingAccessTokens... + break; case GaiaCookieRequestType::LOG_OUT: signin_client_->DelayNetworkCall( base::Bind(&GaiaCookieManagerService::StartGaiaLogOut,
diff --git a/components/signin/core/browser/gaia_cookie_manager_service.h b/components/signin/core/browser/gaia_cookie_manager_service.h index a59992ab..477001a 100644 --- a/components/signin/core/browser/gaia_cookie_manager_service.h +++ b/components/signin/core/browser/gaia_cookie_manager_service.h
@@ -47,16 +47,19 @@ enum GaiaCookieRequestType { ADD_ACCOUNT, LOG_OUT, - LIST_ACCOUNTS + LIST_ACCOUNTS, + SET_ACCOUNTS }; // Contains the information and parameters for any request. class GaiaCookieRequest { public: + GaiaCookieRequest(const GaiaCookieRequest& other); ~GaiaCookieRequest(); GaiaCookieRequestType request_type() const { return request_type_; } - const std::string& account_id() const {return account_id_; } + const std::vector<std::string>& account_ids() const { return account_ids_; } + const std::string GetAccountID(); const std::string& source() const {return source_; } static GaiaCookieRequest CreateAddAccountRequest( @@ -65,15 +68,17 @@ static GaiaCookieRequest CreateLogOutRequest(const std::string& source); static GaiaCookieRequest CreateListAccountsRequest( const std::string& source); - - private: - GaiaCookieRequest( - GaiaCookieRequestType request_type, - const std::string& account_id, + static GaiaCookieRequest CreateSetAccountsRequest( + const std::vector<std::string>& account_ids, const std::string& source); + private: + GaiaCookieRequest(GaiaCookieRequestType request_type, + const std::vector<std::string>& account_ids, + const std::string& source); + GaiaCookieRequestType request_type_; - std::string account_id_; + std::vector<std::string> account_ids_; std::string source_; };
diff --git a/components/signin/core/browser/signin_metrics.cc b/components/signin/core/browser/signin_metrics.cc index 5985a8e..44c72240 100644 --- a/components/signin/core/browser/signin_metrics.cc +++ b/components/signin/core/browser/signin_metrics.cc
@@ -257,48 +257,48 @@ } } -void RecordSigninNewAccountUserActionForAccessPoint( +void RecordSigninNewAccountPreDiceUserActionForAccessPoint( signin_metrics::AccessPoint access_point) { switch (access_point) { case signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS: - base::RecordAction( - base::UserMetricsAction("Signin_SigninNewAccount_FromSettings")); + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountPreDice_FromSettings")); break; case AccessPoint::ACCESS_POINT_EXTENSION_INSTALL_BUBBLE: base::RecordAction(base::UserMetricsAction( - "Signin_SigninNewAccount_FromExtensionInstallBubble")); + "Signin_SigninNewAccountPreDice_FromExtensionInstallBubble")); break; case AccessPoint::ACCESS_POINT_BOOKMARK_BUBBLE: base::RecordAction(base::UserMetricsAction( - "Signin_SigninNewAccount_FromBookmarkBubble")); + "Signin_SigninNewAccountPreDice_FromBookmarkBubble")); break; case signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER: base::RecordAction(base::UserMetricsAction( - "Signin_SigninNewAccount_FromBookmarkManager")); + "Signin_SigninNewAccountPreDice_FromBookmarkManager")); break; case AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN: base::RecordAction(base::UserMetricsAction( - "Signin_SigninNewAccount_FromAvatarBubbleSignin")); + "Signin_SigninNewAccountPreDice_FromAvatarBubbleSignin")); break; case signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS: - base::RecordAction( - base::UserMetricsAction("Signin_SigninNewAccount_FromRecentTabs")); + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountPreDice_FromRecentTabs")); break; case AccessPoint::ACCESS_POINT_PASSWORD_BUBBLE: base::RecordAction(base::UserMetricsAction( - "Signin_SigninNewAccount_FromPasswordBubble")); + "Signin_SigninNewAccountPreDice_FromPasswordBubble")); break; case signin_metrics::AccessPoint::ACCESS_POINT_TAB_SWITCHER: - base::RecordAction( - base::UserMetricsAction("Signin_SigninNewAccount_FromTabSwitcher")); + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountPreDice_FromTabSwitcher")); break; case AccessPoint::ACCESS_POINT_NTP_CONTENT_SUGGESTIONS: base::RecordAction(base::UserMetricsAction( - "Signin_SigninNewAccount_FromNTPContentSuggestions")); + "Signin_SigninNewAccountPreDice_FromNTPContentSuggestions")); break; case AccessPoint::ACCESS_POINT_SAVE_CARD_BUBBLE: base::RecordAction(base::UserMetricsAction( - "Signin_SigninNewAccount_FromSaveCardBubble")); + "Signin_SigninNewAccountPreDice_FromSaveCardBubble")); break; case AccessPoint::ACCESS_POINT_START_PAGE: case AccessPoint::ACCESS_POINT_NTP_LINK: @@ -316,13 +316,169 @@ case AccessPoint::ACCESS_POINT_UNKNOWN: case AccessPoint::ACCESS_POINT_FORCE_SIGNIN_WARNING: // These access points do not support personalized sign-in promos, so - // |Signin_SigninNewAccount_From*| user actions should not be recorded - // for them. - // Note: To avoid bloating the sign-in APIs, the sign-in metrics simply - // ignore if the caller passes |PROMO_ACTION_NEW_ACCOUNT| when a the - // sign-in flow is started from any access point instead of treating it - // and an error like in the other cases (|WithDefault| and |NotDefault|). - VLOG(1) << "Signin_SigninNewAccount_From* user actions" + // |Signin_SigninNewAccountPreDice_From*| user actions should not + // be recorded for them. Note: To avoid bloating the sign-in APIs, the + // sign-in metrics simply ignore if the caller passes + // |PROMO_ACTION_NEW_ACCOUNT_PRE_DICE| when a sign-in flow is + // started from any access point instead of treating it as an error like + // in the other cases (|WithDefault| and |NotDefault|). + VLOG(1) << "Signin_SigninNewAccountPreDice_From* user actions" + << " are not recorded for access point " + << static_cast<int>(access_point) + << " as it does not support a personalized sign-in promo."; + break; + case AccessPoint::ACCESS_POINT_MAX: + NOTREACHED(); + break; + } +} + +void RecordSigninNewAccountNoExistingAccountUserActionForAccessPoint( + signin_metrics::AccessPoint access_point) { + switch (access_point) { + case signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountNoExistingAccount_FromSettings")); + break; + case AccessPoint::ACCESS_POINT_EXTENSION_INSTALL_BUBBLE: + // clang-format off + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountNoExistingAccount_FromExtensionInstallBubble")); + // clang-format on + break; + case AccessPoint::ACCESS_POINT_BOOKMARK_BUBBLE: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountNoExistingAccount_FromBookmarkBubble")); + break; + case signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountNoExistingAccount_FromBookmarkManager")); + break; + case AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountNoExistingAccount_FromAvatarBubbleSignin")); + break; + case signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountNoExistingAccount_FromRecentTabs")); + break; + case AccessPoint::ACCESS_POINT_PASSWORD_BUBBLE: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountNoExistingAccount_FromPasswordBubble")); + break; + case signin_metrics::AccessPoint::ACCESS_POINT_TAB_SWITCHER: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountNoExistingAccount_FromTabSwitcher")); + break; + case AccessPoint::ACCESS_POINT_NTP_CONTENT_SUGGESTIONS: + // clang-format off + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountNoExistingAccount_FromNTPContentSuggestions")); + // clang-format on + break; + case AccessPoint::ACCESS_POINT_SAVE_CARD_BUBBLE: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountNoExistingAccount_FromSaveCardBubble")); + break; + case AccessPoint::ACCESS_POINT_START_PAGE: + case AccessPoint::ACCESS_POINT_NTP_LINK: + case AccessPoint::ACCESS_POINT_MENU: + case AccessPoint::ACCESS_POINT_SUPERVISED_USER: + case AccessPoint::ACCESS_POINT_EXTENSIONS: + case AccessPoint::ACCESS_POINT_APPS_PAGE_LINK: + case AccessPoint::ACCESS_POINT_USER_MANAGER: + case AccessPoint::ACCESS_POINT_DEVICES_PAGE: + case AccessPoint::ACCESS_POINT_CLOUD_PRINT: + case AccessPoint::ACCESS_POINT_CONTENT_AREA: + case AccessPoint::ACCESS_POINT_SIGNIN_PROMO: + case AccessPoint::ACCESS_POINT_AUTOFILL_DROPDOWN: + case AccessPoint::ACCESS_POINT_RESIGNIN_INFOBAR: + case AccessPoint::ACCESS_POINT_UNKNOWN: + case AccessPoint::ACCESS_POINT_FORCE_SIGNIN_WARNING: + // These access points do not support personalized sign-in promos, so + // |Signin_SigninNewAccountNoExistingAccount_From*| user actions should + // not be recorded for them. Note: To avoid bloating the sign-in APIs, the + // sign-in metrics simply ignore if the caller passes + // |PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT| when a sign-in flow is + // started from any access point instead of treating it as an error like + // in the other cases (|WithDefault| and |NotDefault|). + VLOG(1) << "Signin_SigninNewAccountNoExistingAccount_From* user actions" + << " are not recorded for access point " + << static_cast<int>(access_point) + << " as it does not support a personalized sign-in promo."; + break; + case AccessPoint::ACCESS_POINT_MAX: + NOTREACHED(); + break; + } +} + +void RecordSigninNewAccountExistingAccountUserActionForAccessPoint( + signin_metrics::AccessPoint access_point) { + switch (access_point) { + case signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountExistingAccount_FromSettings")); + break; + case AccessPoint::ACCESS_POINT_EXTENSION_INSTALL_BUBBLE: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountExistingAccount_FromExtensionInstallBubble")); + break; + case AccessPoint::ACCESS_POINT_BOOKMARK_BUBBLE: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountExistingAccount_FromBookmarkBubble")); + break; + case signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountExistingAccount_FromBookmarkManager")); + break; + case AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountExistingAccount_FromAvatarBubbleSignin")); + break; + case signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountExistingAccount_FromRecentTabs")); + break; + case AccessPoint::ACCESS_POINT_PASSWORD_BUBBLE: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountExistingAccount_FromPasswordBubble")); + break; + case signin_metrics::AccessPoint::ACCESS_POINT_TAB_SWITCHER: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountExistingAccount_FromTabSwitcher")); + break; + case AccessPoint::ACCESS_POINT_NTP_CONTENT_SUGGESTIONS: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountExistingAccount_FromNTPContentSuggestions")); + break; + case AccessPoint::ACCESS_POINT_SAVE_CARD_BUBBLE: + base::RecordAction(base::UserMetricsAction( + "Signin_SigninNewAccountExistingAccount_FromSaveCardBubble")); + break; + case AccessPoint::ACCESS_POINT_START_PAGE: + case AccessPoint::ACCESS_POINT_NTP_LINK: + case AccessPoint::ACCESS_POINT_MENU: + case AccessPoint::ACCESS_POINT_SUPERVISED_USER: + case AccessPoint::ACCESS_POINT_EXTENSIONS: + case AccessPoint::ACCESS_POINT_APPS_PAGE_LINK: + case AccessPoint::ACCESS_POINT_USER_MANAGER: + case AccessPoint::ACCESS_POINT_DEVICES_PAGE: + case AccessPoint::ACCESS_POINT_CLOUD_PRINT: + case AccessPoint::ACCESS_POINT_CONTENT_AREA: + case AccessPoint::ACCESS_POINT_SIGNIN_PROMO: + case AccessPoint::ACCESS_POINT_AUTOFILL_DROPDOWN: + case AccessPoint::ACCESS_POINT_RESIGNIN_INFOBAR: + case AccessPoint::ACCESS_POINT_UNKNOWN: + case AccessPoint::ACCESS_POINT_FORCE_SIGNIN_WARNING: + // These access points do not support personalized sign-in promos, so + // |Signin_SigninNewAccountExistingAccount_From*| user actions should not + // be recorded for them. Note: To avoid bloating the sign-in APIs, the + // sign-in metrics simply ignore if the caller passes + // |PROMO_ACTION_NEW_ACCOUNT_EXISTING_ACCOUNT| when a sign-in flow is + // started from any access point instead of treating it as an error like + // in the other cases (|WithDefault| and |NotDefault|). + VLOG(1) << "Signin_SigninNewAccountExistingAccount_From* user actions" << " are not recorded for access point " << static_cast<int>(access_point) << " as it does not support a personalized sign-in promo."; @@ -401,9 +557,21 @@ static_cast<int>(access_point), static_cast<int>(AccessPoint::ACCESS_POINT_MAX)); break; - case PromoAction::PROMO_ACTION_NEW_ACCOUNT: + case PromoAction::PROMO_ACTION_NEW_ACCOUNT_PRE_DICE: UMA_HISTOGRAM_ENUMERATION( - "Signin.SigninStartedAccessPoint.NewAccount", + "Signin.SigninStartedAccessPoint.NewAccountPreDice", + static_cast<int>(access_point), + static_cast<int>(AccessPoint::ACCESS_POINT_MAX)); + break; + case PromoAction::PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT: + UMA_HISTOGRAM_ENUMERATION( + "Signin.SigninStartedAccessPoint.NewAccountNoExistingAccount", + static_cast<int>(access_point), + static_cast<int>(AccessPoint::ACCESS_POINT_MAX)); + break; + case PromoAction::PROMO_ACTION_NEW_ACCOUNT_EXISTING_ACCOUNT: + UMA_HISTOGRAM_ENUMERATION( + "Signin.SigninStartedAccessPoint.NewAccountExistingAccount", static_cast<int>(access_point), static_cast<int>(AccessPoint::ACCESS_POINT_MAX)); break; @@ -430,9 +598,21 @@ static_cast<int>(access_point), static_cast<int>(AccessPoint::ACCESS_POINT_MAX)); break; - case PromoAction::PROMO_ACTION_NEW_ACCOUNT: + case PromoAction::PROMO_ACTION_NEW_ACCOUNT_PRE_DICE: UMA_HISTOGRAM_ENUMERATION( - "Signin.SigninCompletedAccessPoint.NewAccount", + "Signin.SigninCompletedAccessPoint.NewAccountPreDice", + static_cast<int>(access_point), + static_cast<int>(AccessPoint::ACCESS_POINT_MAX)); + break; + case PromoAction::PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT: + UMA_HISTOGRAM_ENUMERATION( + "Signin.SigninCompletedAccessPoint.NewAccountNoExistingAccount", + static_cast<int>(access_point), + static_cast<int>(AccessPoint::ACCESS_POINT_MAX)); + break; + case PromoAction::PROMO_ACTION_NEW_ACCOUNT_EXISTING_ACCOUNT: + UMA_HISTOGRAM_ENUMERATION( + "Signin.SigninCompletedAccessPoint.NewAccountExistingAccount", static_cast<int>(access_point), static_cast<int>(AccessPoint::ACCESS_POINT_MAX)); break; @@ -623,8 +803,16 @@ case PromoAction::PROMO_ACTION_NOT_DEFAULT: RecordSigninNotDefaultUserActionForAccessPoint(access_point); break; - case PromoAction::PROMO_ACTION_NEW_ACCOUNT: - RecordSigninNewAccountUserActionForAccessPoint(access_point); + case PromoAction::PROMO_ACTION_NEW_ACCOUNT_PRE_DICE: + RecordSigninNewAccountPreDiceUserActionForAccessPoint(access_point); + break; + case PromoAction::PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT: + RecordSigninNewAccountNoExistingAccountUserActionForAccessPoint( + access_point); + break; + case PromoAction::PROMO_ACTION_NEW_ACCOUNT_EXISTING_ACCOUNT: + RecordSigninNewAccountExistingAccountUserActionForAccessPoint( + access_point); break; } }
diff --git a/components/signin/core/browser/signin_metrics.h b/components/signin/core/browser/signin_metrics.h index b4af9b0..0046c4f8 100644 --- a/components/signin/core/browser/signin_metrics.h +++ b/components/signin/core/browser/signin_metrics.h
@@ -150,12 +150,22 @@ ACCESS_POINT_MAX, // This must be last. }; -// Enum values which enumerates all user actions on the mobile sign-in promo. +// Enum values which enumerates all user actions on the sign-in promo. enum class PromoAction : int { PROMO_ACTION_NO_SIGNIN_PROMO = 0, + // The user selected the default account. PROMO_ACTION_WITH_DEFAULT, + // On desktop, the user selected an account that is not the default. On + // mobile, the user selected the generic "Use another account" button. PROMO_ACTION_NOT_DEFAULT, - PROMO_ACTION_NEW_ACCOUNT, + // Non-personalized promo, pre-dice on desktop. + PROMO_ACTION_NEW_ACCOUNT_PRE_DICE, + // Non personalized promo, when there is no account on the device. + PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT, + // The user clicked on the "Add account" button, when there are already + // accounts on the device. (desktop only, the button does not exist on + // mobile). + PROMO_ACTION_NEW_ACCOUNT_EXISTING_ACCOUNT }; // Enum values which enumerates all reasons to start sign in process.
diff --git a/components/signin/core/browser/signin_metrics_unittest.cc b/components/signin/core/browser/signin_metrics_unittest.cc index 941f9738..305afe8 100644 --- a/components/signin/core/browser/signin_metrics_unittest.cc +++ b/components/signin/core/browser/signin_metrics_unittest.cc
@@ -159,19 +159,56 @@ } } -TEST_F(SigninMetricsTest, RecordSigninUserActionWithNewPromoAction) { +TEST_F(SigninMetricsTest, RecordSigninUserActionWithNewPreDicePromoAction) { for (const AccessPoint& ap : GetAllAccessPoints()) { base::UserActionTester user_action_tester; RecordSigninUserActionForAccessPoint( - ap, signin_metrics::PromoAction::PROMO_ACTION_NEW_ACCOUNT); + ap, signin_metrics::PromoAction::PROMO_ACTION_NEW_ACCOUNT_PRE_DICE); if (AccessPointSupportsPersonalizedPromo(ap)) { - EXPECT_EQ( - 1, user_action_tester.GetActionCount("Signin_SigninNewAccount_From" + - GetAccessPointDescription(ap))); + EXPECT_EQ(1, user_action_tester.GetActionCount( + "Signin_SigninNewAccountPreDice_From" + + GetAccessPointDescription(ap))); } else { - EXPECT_EQ( - 0, user_action_tester.GetActionCount("Signin_SigninNewAccount_From" + - GetAccessPointDescription(ap))); + EXPECT_EQ(0, user_action_tester.GetActionCount( + "Signin_SigninNewAccountPreDice_From" + + GetAccessPointDescription(ap))); + } + } +} + +TEST_F(SigninMetricsTest, RecordSigninUserActionWithNewNoExistingPromoAction) { + for (const AccessPoint& ap : GetAllAccessPoints()) { + base::UserActionTester user_action_tester; + RecordSigninUserActionForAccessPoint( + ap, signin_metrics::PromoAction:: + PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT); + if (AccessPointSupportsPersonalizedPromo(ap)) { + EXPECT_EQ(1, user_action_tester.GetActionCount( + "Signin_SigninNewAccountNoExistingAccount_From" + + GetAccessPointDescription(ap))); + } else { + EXPECT_EQ(0, user_action_tester.GetActionCount( + "Signin_SigninNewAccountNoExistingAccount_From" + + GetAccessPointDescription(ap))); + } + } +} + +TEST_F(SigninMetricsTest, + RecordSigninUserActionWithNewWithExistingPromoAction) { + for (const AccessPoint& ap : GetAllAccessPoints()) { + base::UserActionTester user_action_tester; + RecordSigninUserActionForAccessPoint( + ap, + signin_metrics::PromoAction::PROMO_ACTION_NEW_ACCOUNT_EXISTING_ACCOUNT); + if (AccessPointSupportsPersonalizedPromo(ap)) { + EXPECT_EQ(1, user_action_tester.GetActionCount( + "Signin_SigninNewAccountExistingAccount_From" + + GetAccessPointDescription(ap))); + } else { + EXPECT_EQ(0, user_action_tester.GetActionCount( + "Signin_SigninNewAccountExistingAccount_From" + + GetAccessPointDescription(ap))); } } }
diff --git a/components/startup_metric_utils/browser/startup_metric_utils.cc b/components/startup_metric_utils/browser/startup_metric_utils.cc index cc7d005..b6efefa8 100644 --- a/components/startup_metric_utils/browser/startup_metric_utils.cc +++ b/components/startup_metric_utils/browser/startup_metric_utils.cc
@@ -23,7 +23,6 @@ #include "base/trace_event/trace_event.h" #include "build/build_config.h" #include "components/metrics/call_stack_profile_builder.h" -#include "components/metrics/call_stack_profile_metrics_provider.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" #include "components/startup_metric_utils/browser/pref_names.h" @@ -53,6 +52,10 @@ base::TimeTicks g_message_loop_start_ticks; +base::TimeTicks g_browser_window_display_ticks; + +base::TimeDelta g_browser_open_tabs_duration = base::TimeDelta::Max(); + // An enumeration of startup temperatures. This must be kept in sync with the // UMA StartupType enumeration defined in histograms.xml. enum StartupTemperature { @@ -577,7 +580,7 @@ // Record timing of the browser message-loop start time. metrics::CallStackProfileBuilder::SetProcessMilestone( - metrics::CallStackProfileMetricsProvider::MAIN_LOOP_START); + metrics::CallStackProfileBuilder::MAIN_LOOP_START); if (!is_first_run && !g_process_creation_ticks.is_null()) { UMA_HISTOGRAM_AND_TRACE_WITH_TEMPERATURE_AND_SAME_VERSION_COUNT( UMA_HISTOGRAM_LONG_TIMES_100, "Startup.BrowserMessageLoopStartTime", @@ -603,6 +606,21 @@ RecordSystemUptimeHistogram(); RecordTimeOfDayGMTHistogram(); + // Record values stored prior to startup temperature evaluation. + if (ShouldLogStartupHistogram()) { + if (!g_browser_open_tabs_duration.is_max()) { + UMA_HISTOGRAM_WITH_TEMPERATURE_AND_SAME_VERSION_COUNT( + UMA_HISTOGRAM_LONG_TIMES_100, "Startup.BrowserOpenTabs", + g_browser_open_tabs_duration); + } + + if (!g_browser_window_display_ticks.is_null()) { + UMA_HISTOGRAM_AND_TRACE_WITH_TEMPERATURE_AND_SAME_VERSION_COUNT( + UMA_HISTOGRAM_LONG_TIMES, "Startup.BrowserWindowDisplay", + g_process_creation_ticks, g_browser_window_display_ticks); + } + } + // Record timings between process creation, the main() in the executable being // reached and the main() in the shared library being reached. if (!g_process_creation_ticks.is_null() && @@ -626,26 +644,27 @@ } void RecordBrowserWindowDisplay(base::TimeTicks ticks) { - static bool is_first_call = true; - if (!is_first_call || ticks.is_null()) - return; - is_first_call = false; - if (!ShouldLogStartupHistogram()) + DCHECK(!ticks.is_null()); + + if (!g_browser_window_display_ticks.is_null()) return; - UMA_HISTOGRAM_AND_TRACE_WITH_TEMPERATURE_AND_SAME_VERSION_COUNT( - UMA_HISTOGRAM_LONG_TIMES, "Startup.BrowserWindowDisplay", - g_process_creation_ticks, ticks); + // The value will be recorded in appropriate histograms after the startup + // temperature is evaluated. + // + // Note: In some cases (e.g. launching with --silent-launch), the first + // browser window is displayed after the startup temperature is evaluated. In + // these cases, the value will not be recorded, which is the desired behavior + // for a non-conventional launch. + g_browser_window_display_ticks = ticks; } void RecordBrowserOpenTabsDelta(base::TimeDelta delta) { - static bool is_first_call = true; - if (!is_first_call) - return; - is_first_call = false; - - UMA_HISTOGRAM_WITH_TEMPERATURE_AND_SAME_VERSION_COUNT( - UMA_HISTOGRAM_LONG_TIMES_100, "Startup.BrowserOpenTabs", delta); + DCHECK(g_browser_open_tabs_duration.is_max()); + DCHECK_EQ(g_startup_temperature, UNDETERMINED_STARTUP_TEMPERATURE); + // The value will be recorded in appropriate histograms after the startup + // temperature is evaluated. + g_browser_open_tabs_duration = delta; } void RecordRendererMainEntryTime(base::TimeTicks ticks) { @@ -684,7 +703,7 @@ return; metrics::CallStackProfileBuilder::SetProcessMilestone( - metrics::CallStackProfileMetricsProvider::FIRST_NONEMPTY_PAINT); + metrics::CallStackProfileBuilder::FIRST_NONEMPTY_PAINT); UMA_HISTOGRAM_AND_TRACE_WITH_TEMPERATURE_AND_SAME_VERSION_COUNT( UMA_HISTOGRAM_LONG_TIMES_100, "Startup.FirstWebContents.NonEmptyPaint2", g_process_creation_ticks, now); @@ -709,7 +728,7 @@ return; metrics::CallStackProfileBuilder::SetProcessMilestone( - metrics::CallStackProfileMetricsProvider::MAIN_NAVIGATION_START); + metrics::CallStackProfileBuilder::MAIN_NAVIGATION_START); UMA_HISTOGRAM_AND_TRACE_WITH_TEMPERATURE_AND_SAME_VERSION_COUNT( UMA_HISTOGRAM_LONG_TIMES_100, "Startup.FirstWebContents.MainNavigationStart", g_process_creation_ticks, @@ -740,7 +759,7 @@ return; metrics::CallStackProfileBuilder::SetProcessMilestone( - metrics::CallStackProfileMetricsProvider::MAIN_NAVIGATION_FINISHED); + metrics::CallStackProfileBuilder::MAIN_NAVIGATION_FINISHED); UMA_HISTOGRAM_AND_TRACE_WITH_TEMPERATURE_AND_SAME_VERSION_COUNT( UMA_HISTOGRAM_LONG_TIMES_100, "Startup.FirstWebContents.MainNavigationFinished",
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb index e53b5e5..7a65f395 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">በመጫን ላይ</translation> <translation id="1640180200866533862">የተጠቃሚ መምሪያዎች</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />የጣቢያውን መነሻ ገጽ ለመጎብኘት<ph name="END_LINK" /> ይሞክሩ።</translation> -<translation id="1644184664548287040">የአውታረ መረቡ ውቅር ልክ ያልሆነ እና ሊመጣ የማይችል ነው።</translation> <translation id="1644574205037202324">ታሪክ</translation> <translation id="1645368109819982629">የማይደገፍ ፕሮቶኮል</translation> <translation id="1655462015569774233">{1,plural, =1{ይህ አገልጋይ <ph name="DOMAIN" /> መሆኑን ለማረጋገጥ አይችልም፤ የደህንነት ማረጋገጫ እውቅና ማረጋገጫው ትላንትና ጊዜው አልፎበታል። ይሄ በተሳሳተ አወቃቀር ወይም አንድ አጥቂ ግንኙነትዎን በመጥለፉ የተከሰተ ሊሆን ይችላል። የኮምፒውተርዎ ሰዓት አሁን በ<ph name="CURRENT_DATE" /> ተቀናብሯል። ትክክል ይመስልዎታል? ትክክል ካልሆነ፣ የእርስዎን ስርዓት ሰዓት ማስተካከል እና ይህንን ገፅ ማደስ አለብዎ።}one{ይህ አገልጋይ <ph name="DOMAIN" /> መሆኑን ለማረጋገጥ አይችልም፤ የደህንነት ማረጋገጫ እውቅና ማረጋገጫው ከ# ቀኖች በፊት ጊዜው አልፏል። ይሄ በተሳሳተ አወቃቀር ወይም አንድ አጥቂ ግንኙነትዎን በመጥለፉ የተከሰተ ሊሆን ይችላል። የኮምፒውተርዎ ሰዓት አሁን በ<ph name="CURRENT_DATE" /> ተቀናብሯል። ትክክል ይመስልዎታል? ትክክል ካልሆነ፣ የእርስዎን ስርዓት ሰዓት ማስተካከል እና ይህንን ገፅ ማደስ አለብዎ።}other{ይህ አገልጋይ <ph name="DOMAIN" /> መሆኑን ለማረጋገጥ አይችልም፤ የደህንነት ማረጋገጫ እውቅና ማረጋገጫው ከ# ቀኖች በፊት ጊዜው አልፏል። ይሄ በተሳሳተ አወቃቀር ወይም አንድ አጥቂ ግንኙነትዎን በመጥለፉ የተከሰተ ሊሆን ይችላል። የኮምፒውተርዎ ሰዓት አሁን በ<ph name="CURRENT_DATE" /> ተቀናብሯል። ትክክል ይመስልዎታል? ትክክል ካልሆነ፣ የእርስዎን ስርዓት ሰዓት ማስተካከል እና ይህንን ገፅ ማደስ አለብዎ።}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">ይህ አገልጋይ <ph name="DOMAIN" /> መሆኑን ሊያረጋግጥ አልቻለም፤ የደህንነት እውቅና ማረጋገጫው በ<ph name="DOMAIN2" /> ነው የተሰጠው። ይሄ በተሳሳተ አወቃቀር ወይም አንድ አጥቂ ግንኙነትዎን በመጥለፉ የተከሰተ ሊሆን ይችላል።</translation> <translation id="2948083400971632585">ከቅንብሮች ገጽ ሆነው ማናቸውንም ለግንኙነት የተዋቀሩ ተኪዎችን ማሰናከል ይችላሉ።</translation> <translation id="2955913368246107853">አግኝ አሞሌን ዝጋ</translation> -<translation id="2958431318199492670">የአውታረ መረብ ውቅሩ በኦ ኤን ሲ መስፈርቱ አይገዛም። አንዳንድ የውቅሩ ክፍሎች ላይመጡ ይችላሉ።</translation> <translation id="2969319727213777354">ደህንነቱ የተጠበቀ ግንኙነት ለመመስረት የእርስዎ ሰዓት በትክክል መዋቀር አለበት። ይሄ የሆነበት ምክንያት ድር ጣቢያዎች ራሳቸውን ለማሳወቅ የሚጠቀሙባቸው የእውቅና ማረጋገጫዎች የሚሰሩት ለተወሰኑ ጊዜዎች ብቻ ስለሆነ ነው። የእርስዎ መሣሪያ ሰዓት ትክክል እንዳለመሆኑ መጠን Google Chrome እነዚህን የእውቅና ማረጋገጫዎች ሊያረጋግጥ አይችልም።</translation> <translation id="2972581237482394796">&ድገም</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />፣ አሁን ላይ ተመርጧል። <ph name="ROW_CONTENT" /></translation> @@ -355,7 +353,6 @@ <translation id="3391030046425686457">የመላኪያ አድራሻ</translation> <translation id="3395827396354264108">የመውሰጃ ዘዴ</translation> <translation id="3399952811970034796">የመላኪያ አድራሻ</translation> -<translation id="3409072600744224192">የእርስዎን ዕልባቶችን በሁሉም መሣሪያዎችዎ ላይ ለማግኘት <ph name="SIGN_IN_LINK" />።</translation> <translation id="3422248202833853650">የማህደረ ትውስታ ቦታን ለማስለቀቅ ከሌሎች ፕሮግራሞች ዘግተው ለመውጣት ይውጡ።</translation> <translation id="3422472998109090673"><ph name="HOST_NAME" /> አሁን ላይ ሊደረስበት አይችልም።</translation> <translation id="3427092606871434483">ፍቀድ (ነባሪ)</translation> @@ -581,7 +578,6 @@ <translation id="5045550434625856497">ትክክል ያልሆነ የይለፍ ቃል</translation> <translation id="5056549851600133418">ለእርስዎ የሚሆኑ ጽሑፎች</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />የወኪሉን አድራሻ መፈተሽ<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">ካርዶችዎን በሁሉም መሣሪያዎችዎ ላይ ለማግኘት በመለያ ይግቡና ስምረትን ያብሩ።</translation> <translation id="5086888986931078152">ከአንዳንድ ጣቢያዎች የመጣ ጥበቃ የሚደረግለት የይዘት መዳረሻ ሊያጡ ይችላሉ።</translation> <translation id="5087286274860437796">የአገልጋይ የዕውቅና ማረጋገጫ በዚህ ጊዜ ላይ የሚሰራ አይደለም።</translation> <translation id="5087580092889165836">ካርድ አክል</translation> @@ -627,7 +623,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />፣ <ph name="MATCH_POSITION" /> ከ<ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">የእውቂያ መረጃ ይምረጡ</translation> <translation id="5327248766486351172">ስም</translation> -<translation id="5327567770033251652">ስምረትን አብራ</translation> <translation id="5332219387342487447">የመላኪያ መንገድ</translation> <translation id="5355557959165512791">የዕውቅና ማረጋገጫው ስለተሻረ <ph name="SITE" />ን መጎብኘት አይችሉም። የአውታረ መረብ ስህተቶች እና ጥቃቶች አብዛኛው ጊዜ ጊዜያዊ ብቻ ናቸው፣ ስለዚህ ይህ ገጽ በኋላ ላይ ሊሠራ ይችላል።</translation> <translation id="536296301121032821">የመምሪያ ቅንብሮችን ማከማቸት አልተሳካም</translation> @@ -806,7 +801,6 @@ <translation id="679355240208270552">ነባሪው ፍለጋ በመምሪያ ስላልነቃ ችላ ተብሏል።</translation> <translation id="681021252041861472">የሚያስፈልግ መስክ</translation> <translation id="6810899417690483278">የብጁነት መታወቂያ</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">የክልሎች ውሂብን መጫን አልተሳካም</translation> <translation id="6825578344716086703">እርስዎ <ph name="DOMAIN" />ን ለመድረስ ሞክረዋል፣ ነገር ግን አገልጋዩ ደካማ የፊርማ ስልተ-ቀመር (እንደ SHA-1 ያለ) በመጠቀም የተፈረመ የዕውቅና ማረጋገጫ ነው ያቀረበው። ይህ ማለት አገልጋዩ ያቀረበው የደህንነት ምስክርነቶች የተጭበረበሩ ሊሆኑ ይችላሉ፣ እናም አገልጋዩ እርስዎ የሚጠብቁት አገልጋይ ላይሆን ይችላል (ከአጥቂ ጋር እየተገናኙ ሊሆን ይችላል)።</translation> <translation id="6831043979455480757">መተርጎም</translation> @@ -822,7 +816,6 @@ <translation id="6915804003454593391">ተጠቃሚ፦</translation> <translation id="6944692733090228304">በ<ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ወደ የማይተዳደር ጣቢያ ላይ የእርስዎን የይለፍ ቃል አስገብተዋል። ለእርስዎ መለያ ጥበቃ ለማድረግ፣ በሌሎች መተግበሪያዎች እና ጣቢያዎች ላይ የእርስዎን የይለፍ ቃል ዳግም አይጠቀሙ።</translation> <translation id="6945221475159498467">ይምረጡ</translation> -<translation id="6948540501704460596">የእርስዎን ዕልባቶችን በሁሉም መሣሪያዎችዎ ላይ ለማግኘት <ph name="SYNC_LINK" />።</translation> <translation id="6948701128805548767">የመውሰጃ ዘዴዎችን እና መስፈርቶችን ለመመልከት አድራሻ ይምረጡ</translation> <translation id="6949872517221025916">የይለፍ ቃል ዳግም ያስገቡ</translation> <translation id="6950684638814147129">የJSON እሴቱን በመተንተን ላይ ሳለ ስህተት፦ <ph name="ERROR" /></translation> @@ -837,7 +830,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">እነዚህ ክፍያዎች የአንድ ጊዜ ወይም ተደጋጋሚ፣ እና የማያስታውቁ ሊሆኑ ይችላሉ።</translation> <translation id="7029809446516969842">የይለፍ ቃላት</translation> -<translation id="7042837854211185817">ካርዶችዎን በሁሉም መሣሪያዎች ላይ ለማግኘት ስምረትን ያብሩ።</translation> <translation id="7050187094878475250"><ph name="DOMAIN" /> ጋር ለመድረስ ሞክረዋል፣ ነገር ግን አገልጋዩ አስተማማኝ ለመሆን የሚያስቸግር በጣም ረጅም የሆነ የማረጋገጫ ጊዜ ነው ያለው።</translation> <translation id="7053983685419859001">አግድ</translation> <translation id="7064851114919012435">የእውቂያ መረጃ</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index 5c6ec8f9..484b0b8 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">جارٍ التحميل.</translation> <translation id="1640180200866533862">سياسات المستخدم</translation> <translation id="1640244768702815859">جرّب <ph name="BEGIN_LINK" />الانتقال إلى الصفحة الرئيسية للموقع<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">تهيئة الشبكة غير صالحة ويتعذر استيرادها.</translation> <translation id="1644574205037202324">السجل</translation> <translation id="1645368109819982629">بروتوكول غير معتمد</translation> <translation id="1655462015569774233">{1,plural, =1{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ انتهت صلاحية شهادة أمانه أمس. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك. تم تعيين ساعة الكمبيوتر لديك حاليًا على <ph name="CURRENT_DATE" />. هل يبدو ذلك صحيحًا؟ إذا لم يكن الأمر كذلك، يجب تصحيح ساعة النظام لديك ثم تحديث هذه الصفحة.}zero{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ انتهت صلاحية شهادة أمانه منذ # يوم. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك. تم تعيين ساعة الكمبيوتر لديك حاليًا على <ph name="CURRENT_DATE" />. هل يبدو ذلك صحيحًا؟ إذا لم يكن الأمر كذلك، يجب تصحيح ساعة النظام لديك ثم تحديث هذه الصفحة.}two{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ انتهت صلاحية شهادة أمانه منذ يومين (#). ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك. تم تعيين ساعة الكمبيوتر لديك حاليًا على <ph name="CURRENT_DATE" />. هل يبدو ذلك صحيحًا؟ إذا لم يكن الأمر كذلك، يجب تصحيح ساعة النظام لديك ثم تحديث هذه الصفحة.}few{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ انتهت صلاحية شهادة أمانه منذ # أيام. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك. تم تعيين ساعة الكمبيوتر لديك حاليًا على <ph name="CURRENT_DATE" />. هل يبدو ذلك صحيحًا؟ إذا لم يكن الأمر كذلك، يجب تصحيح ساعة النظام لديك ثم تحديث هذه الصفحة.}many{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ انتهت صلاحية شهادة أمانه منذ # يومًا. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك. تم تعيين ساعة الكمبيوتر لديك حاليًا على <ph name="CURRENT_DATE" />. هل يبدو ذلك صحيحًا؟ إذا لم يكن الأمر كذلك، يجب تصحيح ساعة النظام لديك ثم تحديث هذه الصفحة.}other{هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ انتهت صلاحية شهادة أمانه منذ # يوم. ربما يكون السبب في ذلك خطأ في التهيئة أو مهاجمًا يعترض اتصالك. تم تعيين ساعة الكمبيوتر لديك حاليًا على <ph name="CURRENT_DATE" />. هل يبدو ذلك صحيحًا؟ إذا لم يكن الأمر كذلك، يجب تصحيح ساعة النظام لديك ثم تحديث هذه الصفحة.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">هذا الخادم لم يتمكن من إثبات أن ذلك <ph name="DOMAIN" />؛ بل إنه شهادة أمان من <ph name="DOMAIN2" />. وربما سبب ذلك خطأ في التكوين أو مهاجمًا يعترض اتصالك.</translation> <translation id="2948083400971632585">يمكنك إيقاف أي خوادم وكيلة تمت تهيئتها لاتصال من صفحة الإعدادات.</translation> <translation id="2955913368246107853">إغلاق شريط البحث</translation> -<translation id="2958431318199492670">لا تتوافق تهيئة الشبكة مع معيار ONC. قد لا يتم استيراد بعض أجزاء التهيئة.</translation> <translation id="2969319727213777354">لإنشاء اتصال آمن، فإنك بحاجة إلى ضبط ساعتك بشكل صحيح. وذلك لأن الشهادات التي تستخدمها مواقع الويب لتعريف نفسها تكون صالحة فقط لفترات محددة من الوقت. فإذا كانت ساعة جهازك غير صحيحة، فلن يتمكن Google Chrome من التحقق من هذه الشهادات.</translation> <translation id="2972581237482394796">إعا&دة</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />، تم تحديده حاليًا. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">عنوان التسليم</translation> <translation id="3395827396354264108">طريقة الاستلام</translation> <translation id="3399952811970034796">عنوان التسليم</translation> -<translation id="3409072600744224192">للحصول على البطاقات على جميع أجهزتك، <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">جرّب الخروج من البرامج الأخرى لتفريغ مساحة من الذاكرة.</translation> <translation id="3422472998109090673">يتعذر الوصول إلى <ph name="HOST_NAME" /> حاليًا.</translation> <translation id="3427092606871434483">السماح (تلقائي)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">كلمة مرور غير صحيحة</translation> <translation id="5056549851600133418">مقالات من أجلك</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />التحقق من عنوان الخادم الوكيل<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">للحصول على البطاقات على جميع الأجهزة، يُرجى تسجيل الدخول وتفعيل المزامنة.</translation> <translation id="5086888986931078152">قد تفقد إمكانية الوصول إلى محتوى محمي من بعض المواقع.</translation> <translation id="5087286274860437796">شهادة الخادم ليست صالحة حاليًا.</translation> <translation id="5087580092889165836">إضافة بطاقة</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />، <ph name="MATCH_POSITION" /> من <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">اختيار معلومات الاتصال</translation> <translation id="5327248766486351172">الاسم</translation> -<translation id="5327567770033251652">تفعيل المزامنة</translation> <translation id="5332219387342487447">طريقة الشحن</translation> <translation id="5355557959165512791">لا يمكنك زيارة <ph name="SITE" /> الآن لأنه تم إبطال شهادته. أخطاء الشبكة والهجمات عليها عادةً ما تكون مؤقتة، لذا ستعمل هذه الصفحة في وقت على الأرجح.</translation> <translation id="536296301121032821">تعذّر تخزين إعدادات السياسة</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">تم التجاهل نظرًا لأنه لم يتم تفعيل البحث التلقائي بواسطة السياسة.</translation> <translation id="681021252041861472">الحقل مطلوب</translation> <translation id="6810899417690483278">رقم تعريف التخصيص</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">تعذَّر تحميل بيانات المناطق</translation> <translation id="6825578344716086703">لقد حاولت الوصول إلى <ph name="DOMAIN" />، ولكن قدَّم الخادم شهادة موقّعة باستخدام خوارزمية توقيع ضعيفة (مثل SHA-1)، مما يعني أن بيانات اعتماد الأمان التي قدمها الخادم من المحتمل أنه تم تزييفها، وأن الخادم قد لا يكون هو الخادم الذي تتوقعه (قد تكون على اتصال بأحد المهاجمين).</translation> <translation id="6831043979455480757">ترجمة</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">المستخدم:</translation> <translation id="6944692733090228304">لقد أدخلتَ كلمة المرور في موقع ويب لا تديره <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. ويُرجى عدم إعادة استخدام كلمة المرور في التطبيقات ومواقع الويب الأخرى لحماية حسابك.</translation> <translation id="6945221475159498467">تحديد</translation> -<translation id="6948540501704460596">للحصول على البطاقات على جميع أجهزتك، <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">لعرض طرق الاستلام ومتطلباته، حدِّد عنوانًا</translation> <translation id="6949872517221025916">إعادة تحديد كلمة المرور</translation> <translation id="6950684638814147129">حدث خطأ أثناء تحليل قيمة JSON: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">قد يتمّ تحصيل هذه الرسوم لمرة واحدة أو بشكل متكرر، وقد تكون غير واضحة.</translation> <translation id="7029809446516969842">كلمات المرور</translation> -<translation id="7042837854211185817">للحصول على البطاقات على جميع الأجهزة، يُرجى تفعيل المزامنة.</translation> <translation id="7050187094878475250">لقد حاولت الوصول إلى <ph name="DOMAIN" />، ولكن الخادم قدم شهادة مدة صلاحيتها طويلة جدًا مما يجعلها غير جديرة بالثقة.</translation> <translation id="7053983685419859001">منع</translation> <translation id="7064851114919012435">معلومات الاتصال</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb index 4bd2f1a..0e55fa6 100644 --- a/components/strings/components_strings_bg.xtb +++ b/components/strings/components_strings_bg.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Зарежда се</translation> <translation id="1640180200866533862">Правила за потребителите</translation> <translation id="1640244768702815859">Опитайте да <ph name="BEGIN_LINK" />отворите началната страница на сайта<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Конфигурацията на мрежата е невалидна и не можа да се импортира.</translation> <translation id="1644574205037202324">История</translation> <translation id="1645368109819982629">Неподдържан протокол</translation> <translation id="1655462015569774233">{1,plural, =1{Сървърът не можа да докаже, че е <ph name="DOMAIN" />. Сертификатът му за сигурност е изтекъл вчера. Това може да се дължи на неправилно конфигуриране или на прехващане на връзката ви от извършител на атака. Понастоящем часовникът на компютъра ви показва <ph name="CURRENT_DATE" />. Това изглежда ли правилно? Ако не е, трябва да сверите системния часовник и след това да опресните страницата.}other{Сървърът не можа да докаже, че е <ph name="DOMAIN" />. Сертификатът му за сигурност е изтекъл преди # дни. Това може да се дължи на неправилно конфигуриране или на прехващане на връзката ви от извършител на атака. Понастоящем часовникът на компютъра ви показва <ph name="CURRENT_DATE" />. Това изглежда ли правилно? Ако не е, трябва да сверите системния часовник и след това да опресните страницата.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Сървърът не можа да докаже, че е <ph name="DOMAIN" />; сертификатът му за сигурност е от <ph name="DOMAIN2" />. Това може да се дължи на неправилно конфигуриране или на прихващане на връзката ви от атакуващ.</translation> <translation id="2948083400971632585">Можете да деактивирате всички конфигурирани за дадена връзка прокси сървъри от страницата „Настройки“.</translation> <translation id="2955913368246107853">Затваряне на лентата за търсене</translation> -<translation id="2958431318199492670">Конфигурацията на мрежата не спазва стандарта на ONC. Възможно е части от нея да не са импортирани.</translation> <translation id="2969319727213777354">За установяване на сигурна връзка е необходимо часовникът ви да е верен. Това е така, защото сертификатите, с които уебсайтовете се идентифицират, са валидни само за конкретни периоди от време. Тъй като часовникът на устройството ви не е верен, Google Chrome не може да потвърди тези сертификати.</translation> <translation id="2972581237482394796">&Възстановяване</translation> <translation id="2977665033722899841">Понастоящем сте избрали реда „<ph name="ROW_NAME" />“. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Адрес за бърза доставка</translation> <translation id="3395827396354264108">Начин на вземане</translation> <translation id="3399952811970034796">Адрес за бърза доставка</translation> -<translation id="3409072600744224192"><ph name="SIGN_IN_LINK" />, за да получите картите си на всичките си устройства.</translation> <translation id="3422248202833853650">Затворете другите програми, за да освободите памет.</translation> <translation id="3422472998109090673">Понастоящем няма достъп до <ph name="HOST_NAME" />.</translation> <translation id="3427092606871434483">Разрешаване (по подразбиране)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Грешна парола</translation> <translation id="5056549851600133418">Статии за вас</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Проверете адреса на прокси сървъра<ph name="END_LINK" />.</translation> -<translation id="5072538239104292703">Влезте в профила си и включете синхронизирането, за да получите картите си на всичките си устройства</translation> <translation id="5086888986931078152">Може да загубите достъп до защитено съдържание от някои сайтове.</translation> <translation id="5087286274860437796">Понастоящем сертификатът на сървъра не е валиден.</translation> <translation id="5087580092889165836">Добавяне на карта</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> от <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Избиране на информация за връзка</translation> <translation id="5327248766486351172">Име</translation> -<translation id="5327567770033251652">Включете синхронизирането</translation> <translation id="5332219387342487447">Начин за доставка</translation> <translation id="5355557959165512791">В момента не можете да посетите сайта <ph name="SITE" />, защото сертификатът му е анулиран. Обикновено грешките в мрежата и атаките срещу нея са временни, така че тази страница вероятно ще работи по-късно.</translation> <translation id="536296301121032821">Съхраняването на настройките за правилото не бе успешно</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">Бе пренебрегнато, защото основното търсене не е активирано чрез правило.</translation> <translation id="681021252041861472">Задължително поле</translation> <translation id="6810899417690483278">Идент. № на персонализирането</translation> -<translation id="6820686453637990663">Код за сигурност</translation> <translation id="6824266427216888781">Зареждането на данните за регионите не бе успешно</translation> <translation id="6825578344716086703">Опитахте да отворите <ph name="DOMAIN" />, но сървърът предостави сертификат, подписан със слаб алгоритъм (например SHA-1). Това означава, че идентификационните данни за сигурност от сървъра може да са фалшифицирани и той да не е този, който очаквате (възможно е да сте се свързали с извършител на атака).</translation> <translation id="6831043979455480757">Превод</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">Потребител:</translation> <translation id="6944692733090228304">Въведохте паролата си на сайт, който не се управлява от <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. За да защитите профила си, не използвайте паролата си повторно в други приложения и сайтове.</translation> <translation id="6945221475159498467">Изберете</translation> -<translation id="6948540501704460596"><ph name="SYNC_LINK" />, за да получите картите си на всичките си устройства.</translation> <translation id="6948701128805548767">За да видите начините на вземане и изискванията, изберете адрес</translation> <translation id="6949872517221025916">Задаване на нова парола</translation> <translation id="6950684638814147129">При синтактичния анализ на стойността в JSON възникна грешка: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Тези таксувания може да са еднократни или повтарящи се и е възможно да не са явни.</translation> <translation id="7029809446516969842">Пароли</translation> -<translation id="7042837854211185817">Включете синхронизирането, за да получите картите си на всичките си устройства.</translation> <translation id="7050187094878475250">Опитахте да се свържете с/ъс <ph name="DOMAIN" />, но сървърът предостави сертификат, чийто период на валидност е твърде дълъг, за да е надежден.</translation> <translation id="7053983685419859001">Блокиране</translation> <translation id="7064851114919012435">Информация за връзка</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index bc168ee1..4f5e339 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">লোড হচ্ছে</translation> <translation id="1640180200866533862">ব্যবহারকারীর নীতিসমূহ</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />এই সাইটের হোমপেজটি ঘুরে দেখুন<ph name="END_LINK" />।</translation> -<translation id="1644184664548287040">নেটওয়ার্ক কনফিগারেশনটি অবৈধ এবং আমদানি করা যায়নি৷</translation> <translation id="1644574205037202324">ইতিহাস</translation> <translation id="1645368109819982629">অসমর্থিত প্রোটোকল</translation> <translation id="1655462015569774233">{1,plural, =1{এই সার্ভার যে <ph name="DOMAIN" /> তা এটি প্রমাণ করতে পারেনি; এর নিরাপত্তা শংসাপত্রটি গতকাল মেয়াদোত্তীর্ণ হয়েছে। কোনো ভুল কনফিগারেশনের কারণে অথবা আপনার সংযোগে বাধাপ্রদানকারী কোনো আক্রমণকারীর কারণে এমনটি হতে পারে। আপনার কম্পিউটারের ঘড়ি বর্তমানে <ph name="CURRENT_DATE" /> এ সেট করা আছে। এটি কি ঠিক আছে বলে মনে হচ্ছে? যদি তা না হয়, তাহলে আপনার সিস্টেম ঘড়িটি ঠিক করা উচিত হবে এবং তারপর এই পৃষ্ঠাটি রিফ্রেশ করা উচিত।}one{এই সার্ভার যে <ph name="DOMAIN" /> তা এটি প্রমাণ করতে পারেনি; এর নিরাপত্তা শংসাপত্রটি # দিন আগে মেয়াদোত্তীর্ণ হয়েছে। কোনো ভুল কনফিগারেশনের কারণে অথবা আপনার সংযোগে বাধাপ্রদানকারী কোনো আক্রমণকারীর কারণে এমনটি হতে পারে। আপনার কম্পিউটারের ঘড়ি বর্তমানে <ph name="CURRENT_DATE" /> এ সেট করা আছে। এটি কি ঠিক আছে বলে মনে হচ্ছে? যদি তা না হয়, তাহলে আপনার সিস্টেম ঘড়িটি ঠিক করা উচিত হবে এবং তারপর এই পৃষ্ঠাটি রিফ্রেশ করা উচিত।}other{এই সার্ভার যে <ph name="DOMAIN" /> তা এটি প্রমাণ করতে পারেনি; এর নিরাপত্তা শংসাপত্রটি # দিন আগে মেয়াদোত্তীর্ণ হয়েছে। কোনো ভুল কনফিগারেশনের কারণে অথবা আপনার সংযোগে বাধাপ্রদানকারী কোনো আক্রমণকারীর কারণে এমনটি হতে পারে। আপনার কম্পিউটারের ঘড়ি বর্তমানে <ph name="CURRENT_DATE" /> এ সেট করা আছে। এটি কি ঠিক আছে বলে মনে হচ্ছে? যদি তা না হয়, তাহলে আপনার সিস্টেম ঘড়িটি ঠিক করা উচিত হবে এবং তারপর এই পৃষ্ঠাটি রিফ্রেশ করা উচিত।}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">এই সার্ভার প্রমাণ করতে পারেনি যে এটি <ph name="DOMAIN" />; এর নিরাপত্তা শংসাপত্র <ph name="DOMAIN2" /> থেকে পাওয়া। কোনো ভুল কনফিগারেশনের কারণে অথবা কোনো আক্রমণকারী আপনার সংযোগ মাঝপথে আটকে দিচ্ছে বলে এমনটা হতে পারে।</translation> <translation id="2948083400971632585">আপনি সেটিংস পৃষ্ঠা থেকে সংযোগের জন্য কনফিগার করা যেকোনো প্রক্সি নিষ্ক্রিয় করতে পারেন৷</translation> <translation id="2955913368246107853">খোঁজ দণ্ড বন্ধ করুন</translation> -<translation id="2958431318199492670">নেটওয়ার্ক কনফিগারেশন ONC মানকের সাথে সম্মত নয়৷ কনফিগারেশনের অংশগুলি আমদানিকৃত নাও হতে পারে৷</translation> <translation id="2969319727213777354">নিরাপদ নেটওয়ার্ক সংযোগ স্থাপন করতে আপনার ঘড়িকে সঠিকভাবে সেট করতে হবে। এমন হওয়ার কারণ হলো, নিরাপদ সংযোগ স্থাপন করার জন্য নিজেদের শনাক্ত করার জন্য ওয়েবসাইটগুলি যে শংসাপত্রগুলি ব্যবহার করে, সেগুলি শুধুমাত্র নির্দিষ্ট সময়ের জন্য বৈধ থাকে। যেহেতু আপনার ডিভাইসের ঘড়িটি ভুল, সেই জন্য Google Chrome সঠিকভাবে শংসাপত্রগুলি পরীক্ষা করতে পারছে না।</translation> <translation id="2972581237482394796">&পুনরায় করুন</translation> <translation id="2977665033722899841">এখন <ph name="ROW_NAME" /> বেছে নিয়েছেন। <ph name="ROW_CONTENT" /></translation> @@ -801,7 +799,6 @@ <translation id="679355240208270552">নীতি অনুযায়ী ডিফল্ট সার্চ সক্ষম করা হয়নি তাই উপেক্ষা করা হয়েছে৷</translation> <translation id="681021252041861472">এই ফিল্ডটি ফাঁকা রাখা যাবে না</translation> <translation id="6810899417690483278">কাস্টমাইজেশন আইডি</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">আঞ্চলিক ডেটা লোড করা যায়নি</translation> <translation id="6825578344716086703">আপনি <ph name="DOMAIN" />-এ পৌঁছানোর প্রচেষ্টা করেছেন, কিন্তু সার্ভারটি একটি দুর্বল অ্যালগারিদম স্বাক্ষর (যেমন SHA-1) ব্যবহার করে একটি স্বাক্ষরিত শংসাপত্র উপস্থাপন করেছে। এর অর্থ হল সার্ভার যে সুরক্ষা প্রমাণপত্রাদি উপস্থাপন করেছে তা জাল হতে পারে এবং সার্ভারটি আপনার প্রত্যাশিত সার্ভার নাও হতে পারে (হতে পারে আপনি একজন আক্রমণকারীর সাথে যোগাযোগ করছেন)।</translation> <translation id="6831043979455480757">অনুবাদ</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb index aa0ac4a..e987748d 100644 --- a/components/strings/components_strings_ca.xtb +++ b/components/strings/components_strings_ca.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">S'està carregant</translation> <translation id="1640180200866533862">Polítiques d'usuari</translation> <translation id="1640244768702815859">Prova d'<ph name="BEGIN_LINK" />anar a la pàgina d'inici del lloc<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">La configuració de la xarxa no és vàlida i no s'ha pogut importar.</translation> <translation id="1644574205037202324">Historial</translation> <translation id="1645368109819982629">Protocol no admès</translation> <translation id="1655462015569774233">{1,plural, =1{Aquest servidor no ha pogut demostrar que sigui <ph name="DOMAIN" /> perquè el seu certificat de seguretat va caducar ahir. Això pot ser a causa d'una configuració incorrecta o d'un atacant que intercepta la vostra connexió. Actualment, el rellotge del vostre ordinador està configurat amb la data <ph name="CURRENT_DATE" />. És correcta? Si no ho és, corregiu el rellotge del sistema i, a continuació, actualitzeu aquesta pàgina.}other{Aquest servidor no ha pogut demostrar que sigui <ph name="DOMAIN" /> perquè el seu certificat va caducar fa # dies. Això pot ser a causa d'una configuració incorrecta o d'un atacant que intercepta la vostra connexió. Actualment, el rellotge del vostre ordinador està configurat amb la data <ph name="CURRENT_DATE" />. És correcta? Si no ho és, corregiu el rellotge del sistema i, a continuació, actualitzeu aquesta pàgina.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Aquest servidor no ha pogut comprovar que sigui <ph name="DOMAIN" /> perquè el seu certificat de seguretat prové del domini <ph name="DOMAIN2" />. Això pot ser a causa d'una configuració incorrecta o d'un atacant que intercepta la vostra connexió.</translation> <translation id="2948083400971632585">Podeu desactivar qualsevol servidor intermediari configurat per a una connexió des de la pàgina de configuració.</translation> <translation id="2955913368246107853">Tanca la barra de cerca</translation> -<translation id="2958431318199492670">La configuració de la xarxa no compleix l'estàndard ONC. Pot ser que algunes opcions de configuració no s'hagin importat.</translation> <translation id="2969319727213777354">Per establir una connexió segura, heu de tenir el rellotge ben configurat, ja que els certificats que els llocs web fan servir per identificar-se només són vàlids durant períodes de temps concrets. Com que el rellotge del dispositiu no està ben configurat, Google Chrome no pot verificar aquests certificats.</translation> <translation id="2972581237482394796">&Refés</translation> <translation id="2977665033722899841">S'ha seleccionat <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Adreça d'entrega</translation> <translation id="3395827396354264108">Mètode de recollida</translation> <translation id="3399952811970034796">Adreça d'entrega</translation> -<translation id="3409072600744224192">Per accedir a les targetes des de tots els dispositius, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Prova de sortir d'altres programes per alliberar memòria.</translation> <translation id="3422472998109090673">Actualment no es pot accedir a <ph name="HOST_NAME" />.</translation> <translation id="3427092606871434483">Permet (opció predeterminada)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Contrasenya incorrecta</translation> <translation id="5056549851600133418">Articles que us poden interessar</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Comproveu l'adreça del servidor intermediari<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Per accedir a les targetes des de tots els dispositius, inicia la sessió i activa la sincronització.</translation> <translation id="5086888986931078152">Pot ser que perdis l'accés al contingut protegit d'alguns llocs web.</translation> <translation id="5087286274860437796">En aquest moment el certificat del servidor no és vàlid.</translation> <translation id="5087580092889165836">Afegiu una targeta</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> de <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Tria la informació de contacte</translation> <translation id="5327248766486351172">Nom</translation> -<translation id="5327567770033251652">activa la sincronització</translation> <translation id="5332219387342487447">Mètode d'enviament</translation> <translation id="5355557959165512791">En aquest moment no pots visitar <ph name="SITE" /> perquè se li ha revocat el certificat. Els atacs i els errors de xarxa acostumen a ser temporals, o sigui que probablement la pàgina funcionarà més endavant.</translation> <translation id="536296301121032821">No s'ha pogut emmagatzemar la configuració de la política</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">S'ha ignorat perquè la política no ha activat la cerca predeterminada.</translation> <translation id="681021252041861472">Camp obligatori</translation> <translation id="6810899417690483278">Identificador de personalització</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">No s'han pogut carregar les dades de la regió</translation> <translation id="6825578344716086703">Has provat d'accedir a <ph name="DOMAIN" />, però el servidor ha presentat un certificat signat mitjançant un algoritme de signatura dèbil (com ara SHA-1). Això indica que les credencials de seguretat que ha presentat el servidor podrien haver estat falsificades i que pot ser que el servidor no sigui el que esperaves (és possible que t'estiguis comunicant amb un atacant).</translation> <translation id="6831043979455480757">Tradueix</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">Usuari:</translation> <translation id="6944692733090228304">Has introduït la contrasenya en un lloc web que no està gestionat per <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Per protegir el teu compte, no facis servir la mateixa contrasenya en altres aplicacions ni llocs web.</translation> <translation id="6945221475159498467">Selecciona</translation> -<translation id="6948540501704460596">Per accedir a les targetes des de tots els dispositius, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Per veure els mètodes i els requisits de recollida, selecciona una adreça</translation> <translation id="6949872517221025916">Restableix la contrasenya</translation> <translation id="6950684638814147129">S'ha produït un error en analitzar el valor JSON: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Aquests càrrecs poden ser únics o periòdics i és possible que no s'indiquin d'una manera evident.</translation> <translation id="7029809446516969842">Contrasenyes</translation> -<translation id="7042837854211185817">Per accedir a les targetes des de tots els dispositius, activa la sincronització.</translation> <translation id="7050187094878475250">Heu provat de connectar-vos a <ph name="DOMAIN" />, però el servidor ha presentat un certificat amb un període de validesa massa gran per poder confiar-hi.</translation> <translation id="7053983685419859001">Bloqueja</translation> <translation id="7064851114919012435">Informació de contacte</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index afcb38b..1fecab4d 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Načítání</translation> <translation id="1640180200866533862">Zásady pro uživatele</translation> <translation id="1640244768702815859">Zkuste <ph name="BEGIN_LINK" />navštívit domovskou stránku webu<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Konfigurace sítě je neplatná a nelze ji importovat.</translation> <translation id="1644574205037202324">Historie</translation> <translation id="1645368109819982629">Nepodporovaný protokol</translation> <translation id="1655462015569774233">{1,plural, =1{Server nedokázal prokázat, že patří doméně <ph name="DOMAIN" />. Platnost jeho bezpečnostního certifikátu včera vypršela. Může to být způsobeno nesprávnou konfigurací nebo tím, že vaše připojení zachytává útočník. Hodiny ve vašem počítači jsou aktuálně nastaveny na <ph name="CURRENT_DATE" />. Je to správně? Pokud ne, měli byste nastavit správné hodiny systému a poté tuto stránku načíst znovu.}few{Server nedokázal prokázat, že patří doméně <ph name="DOMAIN" />. Platnost jeho bezpečnostního certifikátu vypršela před # dny. Může to být způsobeno nesprávnou konfigurací nebo tím, že vaše připojení zachytává útočník. Hodiny ve vašem počítači jsou aktuálně nastaveny na <ph name="CURRENT_DATE" />. Je to správně? Pokud ne, měli byste čas v počítači opravit a poté tuto stránku načíst znovu.}many{Server nedokázal prokázat, že patří doméně <ph name="DOMAIN" />. Platnost jeho bezpečnostního certifikátu vypršela před # dnem. Může to být způsobeno nesprávnou konfigurací nebo tím, že vaše připojení zachytává útočník. Hodiny ve vašem počítači jsou aktuálně nastaveny na <ph name="CURRENT_DATE" />. Je to správně? Pokud ne, měli byste nastavit správné hodiny systému a poté tuto stránku načíst znovu.}other{Server nedokázal prokázat, že patří doméně <ph name="DOMAIN" />. Platnost jeho bezpečnostního certifikátu vypršela před # dny. Může to být způsobeno nesprávnou konfigurací nebo tím, že vaše připojení zachytává útočník. Hodiny ve vašem počítači jsou aktuálně nastaveny na <ph name="CURRENT_DATE" />. Je to správně? Pokud ne, měli byste nastavit správné hodiny systému a poté tuto stránku načíst znovu.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Server nedokázal prokázat, že patří doméně <ph name="DOMAIN" />. Jeho bezpečnostní certifikát pochází z domény <ph name="DOMAIN2" />. Může to být způsobeno nesprávnou konfigurací nebo tím, že vaše připojení zachytává útočník.</translation> <translation id="2948083400971632585">Libovolné servery proxy nakonfigurované pro připojení můžete zakázat na stránce Nastavení.</translation> <translation id="2955913368246107853">Zavřít vyhledávací lištu</translation> -<translation id="2958431318199492670">Konfigurace sítě nesplňuje standard ONC. Může se stát, že některé části konfigurace nebudou importovány.</translation> <translation id="2969319727213777354">Aby bylo možné navázat zabezpečené spojení, musejí být správně nastaveny hodiny. Důvodem je, že certifikáty, pomocí kterých se weby identifikují, platí pouze pro konkrétní období. Jelikož hodiny v zařízení nejsou nastaveny správně, Google Chrome tyto certifikáty nemůže ověřit.</translation> <translation id="2972581237482394796">&Opakovat</translation> <translation id="2977665033722899841">Aktuálně je vybrán řádek <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> @@ -353,7 +351,6 @@ <translation id="3391030046425686457">Adresa doručení</translation> <translation id="3395827396354264108">Způsob vyzvednutí</translation> <translation id="3399952811970034796">Adresa doručení</translation> -<translation id="3409072600744224192">Chcete-li své záložky synchronizovat do všech zařízení, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Zkuste uvolnit paměť ukončením jiných programů.</translation> <translation id="3422472998109090673">Web <ph name="HOST_NAME" /> momentálně není dostupný.</translation> <translation id="3427092606871434483">Povolit (výchozí)</translation> @@ -578,7 +575,6 @@ <translation id="5045550434625856497">Nesprávné heslo</translation> <translation id="5056549851600133418">Články pro vás</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Zkontrolovat adresu proxy serveru<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Chcete-li mít karty ve všech zařízeních, přihlaste se a zapněte synchronizaci.</translation> <translation id="5086888986931078152">Můžete ztratit přístup k chráněnému obsahu z některých webů.</translation> <translation id="5087286274860437796">Certifikát serveru v tuto chvíli není platný.</translation> <translation id="5087580092889165836">Přidat kartu</translation> @@ -624,7 +620,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> z <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Vybrat kontaktní údaje</translation> <translation id="5327248766486351172">Název</translation> -<translation id="5327567770033251652">zapnout synchronizaci</translation> <translation id="5332219387342487447">Způsob dopravy</translation> <translation id="5355557959165512791">Web <ph name="SITE" /> teď nemůžete navštívit, protože jeho certifikát byl zrušen. Síťové chyby a útoky jsou obvykle dočasné, tato stránka pravděpodobně později bude fungovat.</translation> <translation id="536296301121032821">Ukládání nastavení zásady se nezdařilo</translation> @@ -802,7 +797,6 @@ <translation id="679355240208270552">Ignorováno, protože v zásadách výchozí vyhledávání není aktivováno.</translation> <translation id="681021252041861472">Povinné pole</translation> <translation id="6810899417690483278">ID přizpůsobení</translation> -<translation id="6820686453637990663">Bezpečnostní kód platební karty (CVC)</translation> <translation id="6824266427216888781">Údaje o oblastech se nepodařilo načíst</translation> <translation id="6825578344716086703">Pokusili jste se přejít na web <ph name="DOMAIN" />, server však předložil certifikát podepsaný slabým algoritmem (například SHA-1). To znamená, že bezpečnostní pověření předložená serverem mohou být falešná a může se jednat o úplně jiný server, než předpokládáte (můžete komunikovat s útočníkem).</translation> <translation id="6831043979455480757">Přeložit</translation> @@ -818,7 +812,6 @@ <translation id="6915804003454593391">Uživatel:</translation> <translation id="6944692733090228304">Zadali jste heslo na webu, který není spravován organizací <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Aby byl váš účet chráněn, nepoužívejte jeho heslo v jiných aplikacích a na jiných webech.</translation> <translation id="6945221475159498467">Vybrat</translation> -<translation id="6948540501704460596">Chcete-li své záložky synchronizovat do všech zařízení, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Chcete-li zobrazit způsoby vyzvednutí a požadavky, vyberte adresu</translation> <translation id="6949872517221025916">Resetovat heslo</translation> <translation id="6950684638814147129">Při analýze hodnoty JSON došlo k chybě: <ph name="ERROR" /></translation> @@ -833,7 +826,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Může se jednat o jednorázové nebo opakované poplatky, které nemusejí být jasně patrné.</translation> <translation id="7029809446516969842">Hesla</translation> -<translation id="7042837854211185817">Chcete-li mít karty ve všech zařízeních, zapněte synchronizaci.</translation> <translation id="7050187094878475250">Pokusili jste se připojit k doméně <ph name="DOMAIN" />, ale server předložil certifikát, který má příliš dlouhé období platnosti a je proto nedůvěryhodný.</translation> <translation id="7053983685419859001">Blokovat</translation> <translation id="7064851114919012435">Kontaktní údaje</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index 1e4b4ba771..2bb7d49 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Indlæser...</translation> <translation id="1640180200866533862">Brugerpolitikker</translation> <translation id="1640244768702815859">Prøv at <ph name="BEGIN_LINK" />gå til websitets startside<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Netværkskonfigurationen er ugyldig og kunne ikke importeres.</translation> <translation id="1644574205037202324">Historik</translation> <translation id="1645368109819982629">Ikke-understøttet protokol</translation> <translation id="1655462015569774233">{1,plural, =1{Denne server kunne ikke bevise, at den er <ph name="DOMAIN" />, da dens sikkerhedscertifikat udløb i går. Dette kan skyldes en fejlkonfiguration, eller at en hacker har opfanget din forbindelse. Computerens ur er angivet til <ph name="CURRENT_DATE" />. Er det korrekt? Hvis ikke, skal du rette systemets ur og derefter opdatere denne side.}one{Denne server kunne ikke bevise, at den er <ph name="DOMAIN" />, da dens sikkerhedscertifikat udløb for # dag siden. Dette kan skyldes en fejlkonfiguration, eller at en hacker har opfanget din forbindelse. Computerens ur er angivet til <ph name="CURRENT_DATE" />. Er det korrekt? Hvis ikke, skal du rette systemets ur og derefter opdatere denne side.}other{Denne server kunne ikke bevise, at den er <ph name="DOMAIN" />, da dens sikkerhedscertifikat udløb for # dage siden. Dette kan skyldes en fejlkonfiguration, eller at en hacker har opfanget din forbindelse. Computerens ur er angivet til <ph name="CURRENT_DATE" />. Er det korrekt? Hvis ikke, skal du rette systemets ur og derefter opdatere denne side.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Denne server kunne ikke bevise, at den er <ph name="DOMAIN" />, da sikkerhedscertifikatet er fra <ph name="DOMAIN2" />. Dette kan skyldes en fejlkonfiguration, eller at en hacker har opfanget din forbindelse.</translation> <translation id="2948083400971632585">Du kan deaktivere alle proxyer, der er konfigureret for en forbindelse, fra siden Indstillinger.</translation> <translation id="2955913368246107853">Luk søgefeltet</translation> -<translation id="2958431318199492670">Netværkskonfigurationen overholder ikke ONC-standarden. Dele af konfiguration kan muligvis ikke importeres.</translation> <translation id="2969319727213777354">Uret på din enhed skal være indstillet korrekt, før du kan oprette en sikker forbindelse. Dette er vigtigt, da de certifikater, websites bruger til at identificere sig selv, kun er gyldige i bestemte perioder. Da uret på din enhed er indstillet forkert, kan Chrome ikke bekræfte disse certifikater.</translation> <translation id="2972581237482394796">&Annuller fortryd</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" /> er i øjeblikket valgt. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Leveringsadresse</translation> <translation id="3395827396354264108">Afhentningsmetode</translation> <translation id="3399952811970034796">Leveringsadresse</translation> -<translation id="3409072600744224192"><ph name="SIGN_IN_LINK" /> for at se dine kort på alle dine enheder.</translation> <translation id="3422248202833853650">Prøv at lukke programmer for at frigøre hukommelse.</translation> <translation id="3422472998109090673"><ph name="HOST_NAME" /> kan ikke læses i øjeblikket.</translation> <translation id="3427092606871434483">Tillad (standardindstilling)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Ugyldig adgangskode</translation> <translation id="5056549851600133418">Artikler til dig</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Tjekke proxy-adressen<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Log ind, og aktivér synkronisering for at se dine kort på alle dine enheder.</translation> <translation id="5086888986931078152">Du kan miste adgang til beskyttet indhold fra visse websites.</translation> <translation id="5087286274860437796">Serverens certifikatet er ikke gyldigt i øjeblikket.</translation> <translation id="5087580092889165836">Tilføj kort</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> af <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Vælg kontaktoplysninger</translation> <translation id="5327248766486351172">Navn</translation> -<translation id="5327567770033251652">aktivér synkronisering</translation> <translation id="5332219387342487447">Leveringsmetode</translation> <translation id="5355557959165512791">Du kan ikke besøge <ph name="SITE" /> lige nu, da dets certifikat er blevet tilbagekaldt. Netværksfejl og angreb er normalt midlertidige, så siden vil sandsynligvis fungere igen senere.</translation> <translation id="536296301121032821">Der kunne ikke gemmes indstillinger for politik</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">Ignoreret, fordi en standardsøgemaskine ikke er aktiveret af politikken.</translation> <translation id="681021252041861472">Skal udfyldes</translation> <translation id="6810899417690483278">Tilpasnings-id</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Områdedata kunne ikke indlæses</translation> <translation id="6825578344716086703">Du forsøgte at få fat i <ph name="DOMAIN" />, men serveren præsenterede et certifikat, der er signeret med en svag signaturalgoritme (f.eks. SHA-1). Det betyder, at sikkerhedsoplysningerne fra serveren kan være forfalskede, og at serveren muligvis ikke er den server, som du forventede (du kommunikerer muligvis med en person med ondsindede hensigter).</translation> <translation id="6831043979455480757">Oversæt</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">Bruger:</translation> <translation id="6944692733090228304">Du indtastede din adgangskode på et website, der ikke administreres af <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Du kan beskytte din konto ved at undgå at bruge din adgangskode i andre apps og på andre websites.</translation> <translation id="6945221475159498467">Vælg</translation> -<translation id="6948540501704460596"><ph name="SYNC_LINK" /> for at se dine kort på alle dine enheder.</translation> <translation id="6948701128805548767">Vælg en adresse for at se afhentningsmetoder og -krav</translation> <translation id="6949872517221025916">Nulstil adgangskode</translation> <translation id="6950684638814147129">Der opstod en fejl under parsing af JSON-værdien: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Disse debiteringer kan være enkeltstående eller gentagne og fremgår muligvis ikke tydeligt.</translation> <translation id="7029809446516969842">Adgangskoder</translation> -<translation id="7042837854211185817">Aktivér synkronisering for at se dine kort på alle dine enheder.</translation> <translation id="7050187094878475250">Du forsøgte at gå til <ph name="DOMAIN" />, men serveren præsenterede et certifikat, hvis gyldighedsperiode er for lang til at være pålidelig.</translation> <translation id="7053983685419859001">Bloker</translation> <translation id="7064851114919012435">Kontaktoplysninger</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb index 458af0f..74a9f3c 100644 --- a/components/strings/components_strings_de.xtb +++ b/components/strings/components_strings_de.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Wird geladen...</translation> <translation id="1640180200866533862">Nutzerrichtlinien</translation> <translation id="1640244768702815859">Versuchen Sie, <ph name="BEGIN_LINK" />die Startseite aufzurufen<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Die Netzwerkkonfiguration ist ungültig und konnte nicht importiert werden.</translation> <translation id="1644574205037202324">Verlauf</translation> <translation id="1645368109819982629">Nicht unterstütztes Protokoll</translation> <translation id="1655462015569774233">{1,plural, =1{Dieser Server konnte nicht beweisen, dass er <ph name="DOMAIN" /> ist. Sein Sicherheitszertifikat ist gestern abgelaufen. Mögliche Gründe sind eine fehlerhafte Konfiguration oder ein Angreifer, der Ihre Verbindung abfängt. Die Uhr Ihres Computers ist derzeit auf <ph name="CURRENT_DATE" /> eingestellt. Ist das korrekt? Falls nicht, stellen Sie die Uhr Ihres Systems richtig ein und aktualisieren Sie anschließend diese Seite.}other{Dieser Server konnte nicht beweisen, dass er <ph name="DOMAIN" /> ist. Sein Sicherheitszertifikat ist vor # Tagen abgelaufen. Mögliche Gründe sind eine fehlerhafte Konfiguration oder ein Angreifer, der Ihre Verbindung abfängt. Die Uhr Ihres Computers ist derzeit auf <ph name="CURRENT_DATE" /> eingestellt. Ist das korrekt? Falls nicht, stellen Sie die Uhr Ihres Systems richtig ein und aktualisieren Sie anschließend diese Seite.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Dieser Server konnte nicht beweisen, dass er <ph name="DOMAIN" /> ist. Sein Sicherheitszertifikat stammt von <ph name="DOMAIN2" />. Mögliche Gründe sind eine fehlerhafte Konfiguration oder ein Angreifer, der Ihre Verbindung abfängt.</translation> <translation id="2948083400971632585">Sie können alle für eine Verbindung konfigurierten Proxys auf der Seite "Einstellungen" deaktivieren.</translation> <translation id="2955913368246107853">Suchleiste schließen</translation> -<translation id="2958431318199492670">Die Netzwerkkonfiguration stimmt nicht mit dem ONC-Standard überein. Die Konfiguration wird unter Umständen nicht vollständig importiert.</translation> <translation id="2969319727213777354">Zum Herstellen einer sicheren Verbindung muss die Uhrzeit richtig eingestellt sein. Der Grund hierfür ist, dass Websites sich mithilfe von Zertifikaten identifizieren, die nur für einen bestimmten Zeitraum gelten. Da die Uhrzeit Ihres Geräts falsch ist, kann Google Chrome diese Zertifikate nicht bestätigen.</translation> <translation id="2972581237482394796">&Wiederholen</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, aktuell ausgewählt. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Lieferadresse</translation> <translation id="3395827396354264108">Abholoption</translation> <translation id="3399952811970034796">Lieferadresse</translation> -<translation id="3409072600744224192">Karten auf allen Ihren Geräten abrufen: <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Versuchen Sie, andere Programme zu beenden, um Speicher freizugeben.</translation> <translation id="3422472998109090673"><ph name="HOST_NAME" /> ist momentan nicht erreichbar.</translation> <translation id="3427092606871434483">Zulassen (Standardeinstellung)</translation> @@ -581,7 +578,6 @@ <translation id="5045550434625856497">Falsches Passwort</translation> <translation id="5056549851600133418">Artikel für Sie</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Proxyadresse prüfen<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Wenn Sie Ihre Karten auf allen Geräten sehen möchten, melden Sie sich an und aktivieren Sie die Synchronisierung.</translation> <translation id="5086888986931078152">Eventuell verlieren Sie den Zugriff auf geschützte Inhalte von einigen Websites.</translation> <translation id="5087286274860437796">Das Serverzertifikat ist zurzeit ungültig.</translation> <translation id="5087580092889165836">Karte hinzufügen</translation> @@ -627,7 +623,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> von <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Kontaktdaten auswählen</translation> <translation id="5327248766486351172">Name</translation> -<translation id="5327567770033251652">Synchronisierung aktivieren</translation> <translation id="5332219387342487447">Versandart</translation> <translation id="5355557959165512791">Sie können <ph name="SITE" /> zurzeit nicht aufrufen, da das Zertifikat widerrufen wurde. Netzwerkfehler und Angriffe sind in der Regel nur vorübergehend, sodass die Seite wahrscheinlich später wieder funktioniert.</translation> <translation id="536296301121032821">Fehler beim Speichern der Richtlinieneinstellungen</translation> @@ -806,7 +801,6 @@ <translation id="679355240208270552">Ignoriert, da die Standardsuchmaschine durch die Richtlinie deaktiviert ist.</translation> <translation id="681021252041861472">Pflichtfeld</translation> <translation id="6810899417690483278">Personalisierungs-ID</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Fehler beim Laden der Regionsdaten</translation> <translation id="6825578344716086703">Sie haben versucht, auf <ph name="DOMAIN" /> zuzugreifen, der Server hat jedoch ein Zertifikat übermittelt, das einen schwachen Signaturalgorithmus verwendet, zum Beispiel SHA-1. Das bedeutet, dass die vom Server übermittelten Sicherheitsinformationen gefälscht sein könnten und es sich möglicherweise gar nicht um den erwarteten Server handelt, sondern Sie mit einem Hacker kommunizieren.</translation> <translation id="6831043979455480757">Übersetzen</translation> @@ -822,7 +816,6 @@ <translation id="6915804003454593391">Nutzer:</translation> <translation id="6944692733090228304">Sie haben Ihr Passwort auf einer Website eingegeben, die nicht von <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> verwaltet wird. Zum Schutz Ihres Kontos sollten Sie das Passwort nicht für andere Apps und Websites verwenden.</translation> <translation id="6945221475159498467">Auswählen</translation> -<translation id="6948540501704460596">Karten auf allen Ihren Geräten abrufen: <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Wählen Sie eine Adresse aus, um Abholoptionen und -anforderungen zu sehen</translation> <translation id="6949872517221025916">Passwort zurücksetzen</translation> <translation id="6950684638814147129">Fehler beim Parsen des JSON-Werts: <ph name="ERROR" /></translation> @@ -837,7 +830,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Diese Belastungen können einmalig oder wiederkehrend sein und sind vielleicht nicht offensichtlich.</translation> <translation id="7029809446516969842">Passwörter</translation> -<translation id="7042837854211185817">Wenn Sie Ihre Karten auf allen Geräten sehen möchten, aktivieren Sie die Synchronisierung.</translation> <translation id="7050187094878475250">Sie haben versucht, <ph name="DOMAIN" /> zu erreichen. Der Server hat jedoch ein Zertifikat präsentiert, dessen Gültigkeitsdauer zu lang ist, um vertrauenswürdig zu sein.</translation> <translation id="7053983685419859001">Blockieren</translation> <translation id="7064851114919012435">Kontaktdaten</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index fdfea38..90a9fbc 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Γίνεται φόρτωση</translation> <translation id="1640180200866533862">Πολιτικές χρηστών</translation> <translation id="1640244768702815859">Δοκιμάστε να <ph name="BEGIN_LINK" />επισκεφτείτε την αρχική σελίδα του ιστότοπου<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Η διαμόρφωση δικτύου είναι μη έγκυρη και δεν ήταν δυνατή η εισαγωγή της.</translation> <translation id="1644574205037202324">Ιστορικό</translation> <translation id="1645368109819982629">Μη υποστηριζόμενο πρωτόκολλο</translation> <translation id="1655462015569774233">{1,plural, =1{Αυτός ο διακομιστής δεν μπόρεσε να αποδείξει ότι είναι το <ph name="DOMAIN" />. Το πιστοποιητικό ασφαλείας του έληξε χθες. Αυτό μπορεί να οφείλεται σε εσφαλμένη ρύθμιση ή σε κάποιον εισβολέα που παρεμβαίνει στη σύνδεσή σας. Το ρολόι του υπολογιστή σας αυτήν τη στιγμή είναι ρυθμισμένο στην ημερομηνία <ph name="CURRENT_DATE" />. Είναι σωστή αυτή η ρύθμιση; Εάν όχι, θα πρέπει να διορθώσετε το ρολόι του συστήματός σας και έπειτα να ανανεώσετε αυτήν τη σελίδα.}other{Αυτός ο διακομιστής δεν μπόρεσε να αποδείξει ότι είναι το <ph name="DOMAIN" />. Το πιστοποιητικό ασφαλείας του έληξε πριν από # ημέρες. Αυτό μπορεί να οφείλεται σε εσφαλμένη ρύθμιση ή σε κάποιον εισβολέα που παρεμβαίνει στη σύνδεσή σας. Το ρολόι του υπολογιστή σας αυτήν τη στιγμή είναι ρυθμισμένο στην ημερομηνία <ph name="CURRENT_DATE" />. Είναι σωστή αυτή η ρύθμιση; Εάν όχι, θα πρέπει να διορθώσετε το ρολόι του συστήματός σας και έπειτα να ανανεώσετε αυτήν τη σελίδα.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Ο διακομιστής δεν μπόρεσε να αποδείξει ότι είναι <ph name="DOMAIN" />. Το πιστοποιητικό ασφαλείας του είναι από το <ph name="DOMAIN2" />. Αυτό μπορεί να οφείλεται σε λανθασμένη ρύθμιση ή σε κάποιον τρίτο που επιτίθεται στη σύνδεσή σας.</translation> <translation id="2948083400971632585">Μπορείτε να απενεργοποιήσετε τυχόν διακομιστές μεσολάβησης που έχουν διαμορφωθεί για μια σύνδεση από τη σελίδα ρυθμίσεων.</translation> <translation id="2955913368246107853">Κλείσιμο γραμμής εύρεσης</translation> -<translation id="2958431318199492670">Η διαμόρφωση δικτύου δεν συμμορφώνεται με το πρότυπο ONC. Ορισμένα τμήματα αυτής της διαμόρφωσης ενδέχεται να μην εισαχθούν.</translation> <translation id="2969319727213777354">Για την επίτευξη μιας ασφαλούς σύνδεσης, θα πρέπει να γίνει σωστή ρύθμιση του ρολογιού σας. Αυτό οφείλεται στο γεγονός ότι τα πιστοποιητικά που χρησιμοποιούν οι ιστότοποι για την ταυτοποίησή τους είναι έγκυρα μόνο για συγκεκριμένες χρονικές περιόδους. Εφόσον το ρολόι της συσκευής σας δεν είναι σωστά ρυθμισμένο, το Google Chrome δεν μπορεί να επαληθεύσει αυτά τα πιστοποιητικά.</translation> <translation id="2972581237482394796">&Επανάληψη ενέργειας</translation> <translation id="2977665033722899841">Έχει επιλεγεί ο λογαριασμός <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Διεύθυνση παράδοσης</translation> <translation id="3395827396354264108">Τρόπος παραλαβής</translation> <translation id="3399952811970034796">Διεύθυνση παράδοσης</translation> -<translation id="3409072600744224192">Για να έχετε πρόσβαση στις κάρτες σας σε όλες τις συσκευές σας, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Δοκιμάστε να εξέλθετε από τα άλλα προγράμματα για να απελευθερώσετε μνήμη.</translation> <translation id="3422472998109090673">Προς το παρόν, δεν είναι δυνατή η πρόσβαση στον κεντρικό υπολογιστή <ph name="HOST_NAME" />.</translation> <translation id="3427092606871434483">Να επιτρέπεται (προεπιλογή)</translation> @@ -583,7 +580,6 @@ <translation id="5045550434625856497">Λανθασμένος κωδικός πρόσβασης</translation> <translation id="5056549851600133418">Άρθρα για εσάς</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Ελέγξτε τη διεύθυνση του διακομιστή μεσολάβησης<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Για να έχετε πρόσβαση στις κάρτες σας σε όλες τις συσκευές, συνδεθείτε και ενεργοποιήστε τον συγχρονισμό.</translation> <translation id="5086888986931078152">Ενδέχεται να χάσετε την πρόσβαση σε προστατευμένο περιεχόμενο από ορισμένους ιστοτόπους.</translation> <translation id="5087286274860437796">Το πιστοποιητικό του διακομιστή δεν είναι έγκυρο αυτήν τη στιγμή.</translation> <translation id="5087580092889165836">Προσθήκη κάρτας</translation> @@ -629,7 +625,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> από <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Επιλογή στοιχείων επικοινωνίας</translation> <translation id="5327248766486351172">Όνομα</translation> -<translation id="5327567770033251652">ενεργοποίηση συγχρονισμού</translation> <translation id="5332219387342487447">Μέθοδος αποστολής</translation> <translation id="5355557959165512791">Δεν μπορείτε να επισκεφτείτε τον ιστότοπο <ph name="SITE" /> αυτήν τη στιγμή επειδή το πιστοποιητικό έχει ανακληθεί. Τα σφάλματα δικτύου και οι επιθέσεις είναι συνήθως προσωρινά, συνεπώς αυτή η σελίδα πιθανότατα θα λειτουργήσει αργότερα.</translation> <translation id="536296301121032821">Αποτυχία αποθήκευσης ρυθμίσεων πολιτικής</translation> @@ -808,7 +803,6 @@ <translation id="679355240208270552">Έγινε παράβλεψη επειδή η προεπιλεγμένη αναζήτηση δεν έχει ενεργοποιηθεί από την πολιτική.</translation> <translation id="681021252041861472">Υποχρεωτικό πεδίο</translation> <translation id="6810899417690483278">Αναγνωριστικό προσαρμογής</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Δεν ήταν δυνατή η φόρτωση των δεδομένων περιοχών</translation> <translation id="6825578344716086703">Προσπαθήσατε να μεταβείτε στον τομέα <ph name="DOMAIN" />, αλλά ο διακομιστής παρουσίασε ένα πιστοποιητικό το οποίο ήταν υπογεγραμμένο με έναν αδύναμο αλγόριθμο υπογραφής (όπως SHA-1). Αυτό σημαίνει ότι μπορεί να έχουν πλαστογραφηθεί τα διαπιστευτήρια ασφαλείας που επέδειξε ο διακομιστής και ότι αυτός ο διακομιστής ενδέχεται να μην είναι αυτό που αναμένετε (ενδέχεται να επικοινωνείτε με έναν εισβολέα).</translation> <translation id="6831043979455480757">Μετάφραση</translation> @@ -824,7 +818,6 @@ <translation id="6915804003454593391">Χρήστης</translation> <translation id="6944692733090228304">Καταχωρίσατε τον κωδικό πρόσβασής σας σε έναν ιστότοπο τον οποίο δεν διαχειρίζεται ο οργανισμός <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Για να προστατεύσετε τον λογαριασμό σας, μην χρησιμοποιήσετε ξανά αυτόν τον κωδικό πρόσβασης σε άλλες εφαρμογές και ιστότοπους.</translation> <translation id="6945221475159498467">Επιλογή</translation> -<translation id="6948540501704460596">Για να έχετε πρόσβαση στις κάρτες σας σε όλες τις συσκευές σας, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Για να δείτε τρόπους και απαιτήσεις παραλαβής, επιλέξτε μια διεύθυνση</translation> <translation id="6949872517221025916">Επαναφορά κωδικού πρόσβασης</translation> <translation id="6950684638814147129">Σφάλμα κατά την ανάλυση της τιμής JSON: <ph name="ERROR" /></translation> @@ -839,7 +832,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Αυτές οι χρεώσεις μπορεί να είναι εφάπαξ ή επαναλαμβανόμενες και ίσως να μην είναι εμφανείς.</translation> <translation id="7029809446516969842">Κωδικοί πρόσβασης</translation> -<translation id="7042837854211185817">Για να έχετε πρόσβαση στις κάρτες σας σε όλες τις συσκευές, ενεργοποιήστε τον συγχρονισμό.</translation> <translation id="7050187094878475250">Επιχειρήσατε να μεταβείτε στο <ph name="DOMAIN" />, αλλά ο διακομιστής παρουσίασε ένα πιστοποιητικό με περίοδο εγκυρότητας η οποία είναι πολύ μεγάλη για να θεωρηθεί αξιόπιστη.</translation> <translation id="7053983685419859001">Αποκλεισμός</translation> <translation id="7064851114919012435">Στοιχεία επικοινωνίας</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb index 523adc5..4ad2ff5fb 100644 --- a/components/strings/components_strings_en-GB.xtb +++ b/components/strings/components_strings_en-GB.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Loading</translation> <translation id="1640180200866533862">User policies</translation> <translation id="1640244768702815859">Try <ph name="BEGIN_LINK" />visiting the site's homepage<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">The network configuration is invalid and couldn't be imported.</translation> <translation id="1644574205037202324">History</translation> <translation id="1645368109819982629">Unsupported protocol</translation> <translation id="1655462015569774233">{1,plural, =1{This server could not prove that it is <ph name="DOMAIN" />; its security certificate expired yesterday. This may be caused by a misconfiguration or an attacker intercepting your connection. Your computer's clock is currently set to <ph name="CURRENT_DATE" />. Does that look right? If not, you should correct your system's clock and then refresh this page.}other{This server could not prove that it is <ph name="DOMAIN" />; its security certificate expired # days ago. This may be caused by a misconfiguration or an attacker intercepting your connection. Your computer's clock is currently set to <ph name="CURRENT_DATE" />. Does that look right? If not, you should correct your system's clock and then refresh this page.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">This server could not prove that it is <ph name="DOMAIN" />; its security certificate is from <ph name="DOMAIN2" />. This may be caused by a misconfiguration or an attacker intercepting your connection.</translation> <translation id="2948083400971632585">You can disable any proxies configured for a connection from the settings page.</translation> <translation id="2955913368246107853">Close find bar</translation> -<translation id="2958431318199492670">The network configuration doesn't comply to the ONC standard. Parts of the configuration may not be imported.</translation> <translation id="2969319727213777354">To establish a secure connection, your clock needs to be set correctly. This is because the certificates that websites use to identify themselves are only valid for specific periods of time. Since your device's clock is incorrect, Google Chrome cannot verify these certificates.</translation> <translation id="2972581237482394796">&Redo</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, currently selected. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Delivery address</translation> <translation id="3395827396354264108">Pickup method</translation> <translation id="3399952811970034796">Delivery Address</translation> -<translation id="3409072600744224192">To get your cards on all your devices, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Try exiting other programmes to free up memory.</translation> <translation id="3422472998109090673"><ph name="HOST_NAME" /> is currently unreachable.</translation> <translation id="3427092606871434483">Allow (default)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Incorrect password</translation> <translation id="5056549851600133418">Articles for you</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Checking the proxy address<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">To get your cards on all devices, sign in and turn on sync.</translation> <translation id="5086888986931078152">You may lose access to protected content from some sites.</translation> <translation id="5087286274860437796">Server's certificate is not valid at this time.</translation> <translation id="5087580092889165836">Add card</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> of <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Choose contact info</translation> <translation id="5327248766486351172">Name</translation> -<translation id="5327567770033251652">turn on sync</translation> <translation id="5332219387342487447">Delivery Method</translation> <translation id="5355557959165512791">You cannot visit <ph name="SITE" /> right now because its certificate has been revoked. Network errors and attacks are usually temporary, so this page will probably work later.</translation> <translation id="536296301121032821">Failed to store policy settings</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">Ignored because default search is not enabled by policy.</translation> <translation id="681021252041861472">Required Field</translation> <translation id="6810899417690483278">Customisation ID</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Failed loading regions data</translation> <translation id="6825578344716086703">You attempted to reach <ph name="DOMAIN" />, but the server presented a certificate signed using a weak signature algorithm (such as SHA-1). This means that the security credentials that the server presented could have been forged, and the server may not be the server that you expected (you may be communicating with an attacker).</translation> <translation id="6831043979455480757">Translate</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">User:</translation> <translation id="6944692733090228304">You entered your password on a site that’s not managed by <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. To protect your account, don’t reuse your password on other apps and sites.</translation> <translation id="6945221475159498467">Select</translation> -<translation id="6948540501704460596">To get your cards on all your devices, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">To see pickup methods and requirements, select an address</translation> <translation id="6949872517221025916">Reset password</translation> <translation id="6950684638814147129">Error while parsing JSON value: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">These charges could be one-off or recurring and may not be obvious.</translation> <translation id="7029809446516969842">Passwords</translation> -<translation id="7042837854211185817">To get your cards on all devices, turn on sync.</translation> <translation id="7050187094878475250">You attempted to reach <ph name="DOMAIN" />, but the server presented a certificate whose validity period is too long to be trustworthy.</translation> <translation id="7053983685419859001">Block</translation> <translation id="7064851114919012435">Contact info</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index 2106de2..20869366 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Cargando</translation> <translation id="1640180200866533862">Políticas de usuario</translation> <translation id="1640244768702815859">Intenta <ph name="BEGIN_LINK" />visitar la página principal del sitio<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">La configuración de red no es válida y no se pudo importar.</translation> <translation id="1644574205037202324">Historial</translation> <translation id="1645368109819982629">Protocolo no compatible</translation> <translation id="1655462015569774233">{1,plural, =1{El servidor no logró comprobar si el dominio es <ph name="DOMAIN" />; el certificado de seguridad venció ayer. Es posible que esto se deba a una configuración incorrecta o a que un atacante haya interceptado la conexión. Actualmente, el reloj de la computadora está configurado en la siguiente fecha: <ph name="CURRENT_DATE" />. ¿Es correcto? De no ser así, corrige el reloj del sistema y, a continuación, actualiza la página.}other{El servidor no logró comprobar si el dominio es <ph name="DOMAIN" />; el certificado de seguridad venció hace # días. Es posible que esto se deba a una configuración incorrecta o a que un atacante haya interceptado la conexión. Actualmente, el reloj de la computadora está configurado en la siguiente fecha: <ph name="CURRENT_DATE" />. ¿Es correcto? De no ser así, corrige el reloj del sistema y, a continuación, actualiza la página.}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">Continuar</translation> <translation id="2365563543831475020">El informe de fallos que se capturó a las <ph name="CRASH_TIME" /> no se cargó</translation> <translation id="2367567093518048410">Nivel</translation> +<translation id="2378238891085281592">Estás en modo privado</translation> <translation id="2384307209577226199">Empresa (predeterminada)</translation> <translation id="2386255080630008482">Se ha revocado el certificado del servidor.</translation> <translation id="2392959068659972793">Mostrar políticas sin valor establecido</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">Este servidor no pudo probar que su dominio es <ph name="DOMAIN" />; el certificado de seguridad proviene de <ph name="DOMAIN2" />. Es posible que esto se deba a una configuración incorrecta o a que un atacante interceptó la conexión.</translation> <translation id="2948083400971632585">Puedes inhabilitar los servidores proxy configurados para una conexión desde la página de configuración.</translation> <translation id="2955913368246107853">Cerrar la barra de búsqueda</translation> -<translation id="2958431318199492670">La configuración de red no cumple con el estándar ONC. Es posible que no se importen algunas partes de la configuración.</translation> <translation id="2969319727213777354">Para establecer una conexión segura, el reloj se debe configurar correctamente. Esto se debe a que los certificados que usan los sitios web para su identificación solo son válidos por períodos de tiempo específicos. Debido a que la configuración del reloj del dispositivo es incorrecta, Google Chrome no puede verificar estos certificados.</translation> <translation id="2972581237482394796">&Rehacer</translation> <translation id="2977665033722899841">Fila <ph name="ROW_NAME" /> seleccionada. <ph name="ROW_CONTENT" /></translation> @@ -515,6 +514,7 @@ <translation id="450710068430902550">Compartir con el administrador</translation> <translation id="4515275063822566619">Las tarjetas y direcciones provienen de Chrome y de tu cuenta de Google (<ph name="ACCOUNT_EMAIL" />). Puedes administrar esta información en <ph name="BEGIN_LINK" />Configuración<ph name="END_LINK" />.</translation> <translation id="4522570452068850558">Detalles</translation> +<translation id="4524805452350978254">Administrar tarjetas</translation> <translation id="4552089082226364758">Flash</translation> <translation id="4558551763791394412">Intenta inhabilitar tus extensiones.</translation> <translation id="457875822857220463">Entrega</translation> @@ -701,6 +701,7 @@ <translation id="5866257070973731571">Agregar número de teléfono</translation> <translation id="5869405914158311789">No se puede acceder a este sitio</translation> <translation id="5869522115854928033">Contraseñas almacenadas</translation> +<translation id="5887400589839399685">Tarjeta guardada</translation> <translation id="5893752035575986141">Se aceptan tarjetas de crédito.</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizado)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 en uso}other{# en uso}}</translation> @@ -802,7 +803,6 @@ <translation id="679355240208270552">Se ignora porque la búsqueda predeterminada no está habilitada según la política.</translation> <translation id="681021252041861472">Campo obligatorio</translation> <translation id="6810899417690483278">ID de personalización</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">No se pudo cargar los datos de las regiones</translation> <translation id="6825578344716086703">Intentaste acceder a <ph name="DOMAIN" />, pero el servidor presentó un certificado firmado con un algoritmo de firma no seguro (como SHA-1). Esto significa que podrían haberse falsificado las credenciales de seguridad presentadas por el servidor y que este no sea el servidor esperado (es posible que hayas establecido comunicación con un atacante).</translation> <translation id="6831043979455480757">Traducir</translation> @@ -821,11 +821,13 @@ <translation id="6948701128805548767">Para ver los requisitos y métodos de retiro, selecciona una dirección</translation> <translation id="6949872517221025916">Restablecer contraseña</translation> <translation id="6950684638814147129">Error al analizar el valor JSON: <ph name="ERROR" /></translation> +<translation id="6957624206566198865">Abre la página en una nueva pestaña del modo privado</translation> <translation id="6957887021205513506">El certificado del servidor parece falso.</translation> <translation id="6965382102122355670">Aceptar</translation> <translation id="6965978654500191972">Dispositivo</translation> <translation id="6970216967273061347">Distrito</translation> <translation id="6973656660372572881">Se especifican servidores proxy fijos y URL de secuencias de comandos .pac.</translation> +<translation id="6984479912851154518">Saldrás del modo privado para pagar mediante una aplicación externa. ¿Deseas continuar?</translation> <translation id="6989763994942163495">Mostrar configuración avanzada...</translation> <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Estos cargos pueden ser únicos o recurrentes, y es posible que no sean evidentes.</translation> @@ -1077,6 +1079,7 @@ <translation id="8820817407110198400">Favoritos</translation> <translation id="883848425547221593">Otros favoritos</translation> <translation id="884264119367021077">Dirección de envío</translation> +<translation id="8846319957959474018">Abre las apps fácilmente con los favoritos</translation> <translation id="884923133447025588">No se ha encontrado ningún mecanismo de revocación.</translation> <translation id="885730110891505394">Compartir con Google</translation> <translation id="8858065207712248076">Chrome te recomienda que restablezcas la contraseña de <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> si la volviste a usar en otros sitios.</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index 0761b90e..2152a346 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Cargando</translation> <translation id="1640180200866533862">Políticas de usuario</translation> <translation id="1640244768702815859">Prueba a <ph name="BEGIN_LINK" />acceder a la página principal del sitio web<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">La configuración de red no es válida y no se ha podido importar.</translation> <translation id="1644574205037202324">Historial</translation> <translation id="1645368109819982629">Protocolo no admitido</translation> <translation id="1655462015569774233">{1,plural, =1{Este servidor no ha podido demostrar que es <ph name="DOMAIN" />; su certificado de seguridad caducó ayer. Este problema puede deberse a una configuración incorrecta o a que un atacante ha interceptado la conexión. El reloj de tu ordenador está establecido actualmente en las <ph name="CURRENT_DATE" />. ¿Es correcto? Si no lo es, corrige el reloj del sistema y, a continuación, actualiza esta página.}other{Este servidor no ha podido demostrar que es <ph name="DOMAIN" />; su certificado de seguridad caducó hace # días. Este problema puede deberse a una configuración incorrecta o a que un atacante ha interceptado la conexión. El reloj de tu ordenador está establecido actualmente en las <ph name="CURRENT_DATE" />. ¿Es correcto? Si no lo es, corrige el reloj del sistema y, a continuación, actualiza esta página.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Este servidor no ha podido probar que su dominio es <ph name="DOMAIN" />, su certificado de seguridad procede de <ph name="DOMAIN2" />. Este problema puede deberse a una configuración incorrecta o a que un atacante haya interceptado la conexión.</translation> <translation id="2948083400971632585">Puedes inhabilitar los servidores proxy configurados para una conexión en la página de configuración.</translation> <translation id="2955913368246107853">Cerrar la barra de búsqueda</translation> -<translation id="2958431318199492670">La configuración de red no cumple el estándar ONC. Es posible que no se importen partes de la configuración.</translation> <translation id="2969319727213777354">Para establecer una conexión segura, el reloj debe estar configurado correctamente. Esto se debe a que los certificados que utilizan los sitios web para identificarse solo son válidos para períodos de tiempo específicos. Como el reloj de tu dispositivo no está configurado correctamente, Google Chrome no puede verificar estos certificados.</translation> <translation id="2972581237482394796">&Rehacer</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, opción seleccionada actualmente. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Dirección de entrega</translation> <translation id="3395827396354264108">Método de recogida</translation> <translation id="3399952811970034796">Dirección de entrega</translation> -<translation id="3409072600744224192">Para ver las tarjetas en todos tus dispositivos, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Prueba a salir de otros programas para liberar memoria.</translation> <translation id="3422472998109090673">No se puede acceder a la página <ph name="HOST_NAME" /> en este momento.</translation> <translation id="3427092606871434483">Permitir (predeterminado)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Contraseña incorrecta</translation> <translation id="5056549851600133418">Artículos recomendados para ti</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Comprobar la dirección del proxy<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Para ver las tarjetas en todos tus dispositivos, inicia sesión y activa la sincronización.</translation> <translation id="5086888986931078152">Es posible que dejes de tener acceso al contenido protegido de algunos sitios web.</translation> <translation id="5087286274860437796">El certificado del servidor no es válido en este momento.</translation> <translation id="5087580092889165836">Añadir tarjeta</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> de <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Seleccionar información de contacto</translation> <translation id="5327248766486351172">Nombre</translation> -<translation id="5327567770033251652">activa la sincronización</translation> <translation id="5332219387342487447">Método de envío</translation> <translation id="5355557959165512791">No puedes acceder a <ph name="SITE" /> en este momento porque su certificado se ha revocado. Los ataques y los errores de red suelen ser temporales, por lo que es probable que esta página funcione más tarde.</translation> <translation id="536296301121032821">Error al almacenar la configuración de la política</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">Se ha ignorado el valor porque se ha establecido una política que inhabilita la búsqueda predeterminada.</translation> <translation id="681021252041861472">Campo obligatorio</translation> <translation id="6810899417690483278">ID de personalización</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">No se han podido cargar los datos de las regiones</translation> <translation id="6825578344716086703">Has intentado acceder a <ph name="DOMAIN" />, pero el servidor ha presentado un certificado firmado con un algoritmo de firma no seguro (por ejemplo, SHA-1). Una posible causa de este problema es que se hayan falsificado las credenciales de seguridad presentadas por el servidor y que hayas accedido a la página de un atacante en lugar de establecer conexión con el servidor en cuestión.</translation> <translation id="6831043979455480757">Traducir</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">Usuario:</translation> <translation id="6944692733090228304"><ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> no gestiona el sitio web en el que has introducido tu contraseña. Para proteger tu cuenta, no utilices la misma contraseña en otras aplicaciones o sitios web.</translation> <translation id="6945221475159498467">Seleccionar</translation> -<translation id="6948540501704460596">Para ver las tarjetas en todos tus dispositivos, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Selecciona una dirección para ver los métodos de recogida y los requisitos</translation> <translation id="6949872517221025916">Cambiar contraseña</translation> <translation id="6950684638814147129">No se ha podido analizar el valor JSON: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Estos cargos pueden ser únicos o periódicos, y es posible que no se indiquen de una forma evidente.</translation> <translation id="7029809446516969842">Contraseñas</translation> -<translation id="7042837854211185817">Para ver las tarjetas en todos tus dispositivos, activa la sincronización.</translation> <translation id="7050187094878475250">Has intentado acceder a <ph name="DOMAIN" />, pero el servidor ha presentado un certificado cuyo periodo de validez es demasiado largo para que se considere de confianza.</translation> <translation id="7053983685419859001">Bloquear</translation> <translation id="7064851114919012435">Información de contacto</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb index b1edd33..627dffb 100644 --- a/components/strings/components_strings_et.xtb +++ b/components/strings/components_strings_et.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Laadimine</translation> <translation id="1640180200866533862">Kasutajareeglid</translation> <translation id="1640244768702815859">Proovige <ph name="BEGIN_LINK" />külastada saidi avalehte<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Võrgu seadistus on sobimatu ja seda ei saa importida.</translation> <translation id="1644574205037202324">Ajalugu</translation> <translation id="1645368109819982629">Toetuseta protokoll</translation> <translation id="1655462015569774233">{1,plural, =1{Server ei suutnud tõestada, et tegemist on domeeniga <ph name="DOMAIN" />, selle turvasertifikaat aegus eile. Selle põhjuseks võib olla vale seadistus või teie ühendust segav ründaja. Teie arvuti kell on praegu seatud kuupäevale <ph name="CURRENT_DATE" />. Kas see on õige? Kui ei ole, seadke süsteemi kell õigeks ja värskendage lehte.}other{Server ei suutnud tõestada, et tegemist on domeeniga <ph name="DOMAIN" />, selle turvasertifikaat aegus # päeva tagasi. Selle põhjuseks võib olla vale seadistus või teie ühendust segav ründaja. Teie arvuti kell on praegu seatud kuupäevale <ph name="CURRENT_DATE" />. Kas see on õige? Kui ei ole, seadke süsteemi kell õigeks ja värskendage lehte.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Server ei suutnud tõestada, et see on domeen <ph name="DOMAIN" />, selle turvasertifikaati pärineb domeenilt <ph name="DOMAIN2" />. Selle põhjuseks võib olla vale seadistus või ründaja, kes on sekkunud teie ühendusse.</translation> <translation id="2948083400971632585">Seadete lehel saate keelata kõik ühenduse jaoks konfigureeritud puhverserverid.</translation> <translation id="2955913368246107853">Sule leiuriba</translation> -<translation id="2958431318199492670">Võrgu seadistus ei vasta ONC standardile. On võimalik, et seadistuse mõnd osa ei saa importida.</translation> <translation id="2969319727213777354">Turvalise ühenduse loomiseks peab kell olema õigesti seadistatud, kuna sertifikaadid, mida veebisaidid kasutavad enda tuvastamiseks, kehtivad ainult teatud perioodi jooksul. Kuna teie seadme kell on vale, ei saa Chrome neid sertifikaate kinnitada.</translation> <translation id="2972581237482394796">&Tee uuesti</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, praegu valitud. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Kohaletoimetamise aadress</translation> <translation id="3395827396354264108">Kättesaamisviis</translation> <translation id="3399952811970034796">Kohaletoimetamisaadress</translation> -<translation id="3409072600744224192">Järjehoidjate hankimiseks kõikidesse seadmetesse toimige järgmiselt: <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Proovige mälu vabastamiseks väljuda muudest programmidest.</translation> <translation id="3422472998109090673">Hostiga <ph name="HOST_NAME" /> ei saa praegu ühendust.</translation> <translation id="3427092606871434483">Luba (vaikimisi)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Vale salasõna</translation> <translation id="5056549851600133418">Teile soovitatud artiklid</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Kontrollige puhverserveri aadressi<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Kaartide kõikidesse seadmetesse hankimiseks logige sisse ja lülitage sünkroonimine sisse</translation> <translation id="5086888986931078152">Võite kaotada juurdepääsu mõne saidi kaitstud sisule.</translation> <translation id="5087286274860437796">Serveri sertifikaat pole praegu kehtiv.</translation> <translation id="5087580092889165836">Lisa kaart</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" />/<ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Valige kontaktteave</translation> <translation id="5327248766486351172">Nimi</translation> -<translation id="5327567770033251652">lülita sünkroonimine sisse</translation> <translation id="5332219387342487447">Tarneviis</translation> <translation id="5355557959165512791">Te ei saa saiti <ph name="SITE" /> praegu külastada, sest selle sertifikaat on tühistatud. Võrguvead ja -rünnakud on tavaliselt ajutised, nii et leht tõenäoliselt hiljem töötab.</translation> <translation id="536296301121032821">Reegli seadete talletamine ebaõnnestus</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">Seda eiratakse, kuna vaikeotsing ei ole reegliga lubatud.</translation> <translation id="681021252041861472">Kohustuslik väli</translation> <translation id="6810899417690483278">Kohandamise ID</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Piirkondade andmete laadimine ebaõnnestus</translation> <translation id="6825578344716086703">Püüdsite jõuda domeenile <ph name="DOMAIN" />, kuid server esitas sertifikaadi, mis on allkirjastatud nõrga allkirjaalgoritmiga (nt SHA-1). See tähendab, et serveri esitatud turvamandaadid võivad olla võltsitud ja server ei pruugi olla see, mida eeldate (võimalik, et suhtlete ründajaga).</translation> <translation id="6831043979455480757">Tõlgi</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">Kasutaja:</translation> <translation id="6944692733090228304">Sisestasite oma parooli saidile, mida ei halda <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Oma konto kaitsmiseks ärge kasutage oma parooli muudes rakendustes ega saitidel.</translation> <translation id="6945221475159498467">Vali</translation> -<translation id="6948540501704460596">Järjehoidjate hankimiseks kõikidesse seadmetesse toimige järgmiselt: <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Kättesaamisviiside ja nõuete nägemiseks valige aadress</translation> <translation id="6949872517221025916">Lähtestage parool</translation> <translation id="6950684638814147129">Viga JSON-väärtuse sõelumisel: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">Hiina UnionPay</translation> <translation id="7016992613359344582">Tasud võivad olla ühekordsed või korduvad ja need ei pruugi olla ilmselged.</translation> <translation id="7029809446516969842">Paroolid</translation> -<translation id="7042837854211185817">Kaartide kõigisse seadmetesse hankimiseks lülitage sünkroonimine sisse.</translation> <translation id="7050187094878475250">Üritasite jõuda domeenile <ph name="DOMAIN" />, kuid server esitas sertifikaadi, mille kehtivusaeg on liiga pikk, et olla usaldusväärne.</translation> <translation id="7053983685419859001">Blokeeri</translation> <translation id="7064851114919012435">Kontaktteave</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index fb00309..94d4d2a8 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">بارگیری</translation> <translation id="1640180200866533862">خطمشیهای کاربر</translation> <translation id="1640244768702815859">از<ph name="BEGIN_LINK" />صفحه اصلی سایت دیدن کنید<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">پیکربندی شبکه نامعتبر است و نتوانست وارد شود.</translation> <translation id="1644574205037202324">سابقه</translation> <translation id="1645368109819982629">پروتکل پشتیبانینشده</translation> <translation id="1655462015569774233">{1,plural, =1{این سرور نتوانست ثابت کند این <ph name="DOMAIN" /> است؛ اعتبار گواهی امنیتی آن دیروز به پایان رسیده است. ممکن است علت این موضوع پیکربندی اشتباه باشد یا مهاجمی اتصالتان را قطع میکند. ساعت رایانهتان درحالحاضر روی <ph name="CURRENT_DATE" /> تنظیم شده است. آیا درست است؟ اگر پاسخ منفی است، باید ساعت سیستمتان را درست کنید و سپس این صفحه را بازخوانی کنید.}one{این سرور نتوانست ثابت کند این <ph name="DOMAIN" /> است. اعتبار گواهی امنیتی آن # روز قبل به پایان رسیده است. ممکن است علت این موضوع پیکربندی اشتباه باشد یا مهاجمی اتصالتان را قطع میکند. ساعت رایانهتان درحالحاضر روی <ph name="CURRENT_DATE" /> تنظیم شده است. آیا درست است؟ اگر پاسخ منفی است، باید ساعت سیستمتان را درست کنید و سپس این صفحه را بازخوانی کنید.}other{این سرور نتوانست ثابت کند این <ph name="DOMAIN" /> است. اعتبار گواهی امنیتی آن # روز قبل به پایان رسیده است. ممکن است علت این موضوع پیکربندی اشتباه باشد یا مهاجمی اتصالتان را قطع میکند. ساعت رایانهتان درحالحاضر روی <ph name="CURRENT_DATE" /> تنظیم شده است. آیا درست است؟ اگر پاسخ منفی است، باید ساعت سیستمتان را درست کنید و سپس این صفحه را بازخوانی کنید.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">این سرور نتوانست اثبات کند که این <ph name="DOMAIN" /> است؛ گواهی امنیتی آن از <ph name="DOMAIN2" /> است. ممکن است علت این موضوع پیکربندی اشتباه باشد یا مهاجی اتصال شما را قطع کرده است.</translation> <translation id="2948083400971632585">در صفحه تنظیمات میتوانید همه پراکسیهای پیکربندی شده برای هر اتصال را از کار بیاندازید.</translation> <translation id="2955913368246107853">بستن نوار یافتن</translation> -<translation id="2958431318199492670">پیکربندی شبکه با استاندارد ONC تطابق ندارد. بخشی از پیکربندی ممکن است وارد نشود.</translation> <translation id="2969319727213777354">برای برقراری یک اتصال امن، لازم است ساعت شما درست تنظیم شده باشد. زیرا گواهیهایی که وبسایتها برای شناسایی خودشان استفاده میکنند، تنها برای دورههای زمانی خاصی معتبرند. از آنجا که ساعت دستگاه شما نادرست است، Google Chrome نمیتواند این گواهیها را تأیید کند.</translation> <translation id="2972581237482394796">انجام مجدد</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />، درحالحاضر انتخاب شده است. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">نشانی ارسال</translation> <translation id="3395827396354264108">روش تحویل گرفتن</translation> <translation id="3399952811970034796">نشانی ارسال</translation> -<translation id="3409072600744224192">برای دریافت کارتها در همه دستگاههایتان، <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">سعی کنید از برنامههای دیگر خارج شوید تا حافظه آزاد شود.</translation> <translation id="3422472998109090673">دسترسی به <ph name="HOST_NAME" /> درحال حاضر امکانپذیر نیست.</translation> <translation id="3427092606871434483">اجازه (پیشفرض)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">گذرواژه نادرست</translation> <translation id="5056549851600133418">مقالاتی برای شما</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />بررسی آدرس پروکسی<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">برای دریافت کارتها در همه دستگاهها، به سیستم وارد شوید و همگامسازی را روشن کنید.</translation> <translation id="5086888986931078152">ممکن است دسترسی به محتوای محافظتشده برخی از سایتها را از دست بدهید.</translation> <translation id="5087286274860437796">در حال حاضر گواهی سرور معتبر نیست.</translation> <translation id="5087580092889165836">افزودن کارت</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> از <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">انتخاب اطلاعات تماس</translation> <translation id="5327248766486351172">نام</translation> -<translation id="5327567770033251652">روشن کردن همگامسازی</translation> <translation id="5332219387342487447">روش ارسال کالا</translation> <translation id="5355557959165512791">درحالحاضر نمیتوانید از <ph name="SITE" /> دیدن کنید، زیرا گواهینامه آن لغو شده است. معمولاً خطاهای شبکه و حملهها موقتی هستند، بنابراین احتمالاً این صفحه بعداً کار خواهد کرد.</translation> <translation id="536296301121032821">تنظیمات خطمشی ذخیره نشد</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">نادیده گرفته شد، زیرا جستجوی پیشفرض توسط خطمشی فعال نشده است.</translation> <translation id="681021252041861472">فیلد ضروری</translation> <translation id="6810899417690483278">شناسه سفارشیسازی</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">دادههای منطقهها بارگیری نشد</translation> <translation id="6825578344716086703">تلاش کردید به <ph name="DOMAIN" /> دسترسی داشته باشید، اما گواهینامه ارائهشده از سوی سرور با استفاده از یک الگوریتم امضای ضعیف (مانند SHA-1) امضا شده است. یعنی ممکن است اعتبارنامه امنیتی ارائهشده از سوی سرور جعلی باشد و ممکن است سرور، سرور موردانتظار شما نباشد (ممکن است با یک مهاجم در ارتباط باشید).</translation> <translation id="6831043979455480757">ترجمه</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">کاربر:</translation> <translation id="6944692733090228304">گذرواژهتان را در سایتی وارد کردید که توسط <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> مدیریت نمیشود. برای محافظت از حسابتان، از گذرواژهتان در برنامهها و سایتهای دیگر استفاده نکنید.</translation> <translation id="6945221475159498467">انتخاب</translation> -<translation id="6948540501704460596">برای دریافت کارتها در همه دستگاههایتان، <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">برای دیدن روشهای تحویل گرفتن و شرایط موردنیاز، یک نشانی انتخاب کنید</translation> <translation id="6949872517221025916">بازنشانی گذرواژه</translation> <translation id="6950684638814147129">خطا هنگام تجزیه مقدار JSON: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">ممکن است این هزینهها یکباره یا تکرارشونده باشند یا واضح نباشند.</translation> <translation id="7029809446516969842">گذرواژهها</translation> -<translation id="7042837854211185817">برای دریافت کارتها در همه دستگاهها، همگامسازی را روشن کنید.</translation> <translation id="7050187094878475250">تلاش کردید به دامنه <ph name="DOMAIN" /> بروید اما گواهینامهای که سرور ارائه کرد، دارای یک تاریخ اعتبار بسیار طولانی است و مورداعتماد نیست.</translation> <translation id="7053983685419859001">مسدود کردن</translation> <translation id="7064851114919012435">اطلاعات تماس</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb index f7c4a78..b984acc 100644 --- a/components/strings/components_strings_fi.xtb +++ b/components/strings/components_strings_fi.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Ladataan</translation> <translation id="1640180200866533862">Käyttäjäkäytännöt</translation> <translation id="1640244768702815859">Kokeile <ph name="BEGIN_LINK" />siirtyä sivuston etusivulle<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Verkkoasetukset ovat virheelliset eikä niitä voi tuoda.</translation> <translation id="1644574205037202324">Historia</translation> <translation id="1645368109819982629">Protokollaa ei tueta</translation> <translation id="1655462015569774233">{1,plural, =1{Palvelin ei voinut todistaa olevansa <ph name="DOMAIN" />; sen suojausvarmenne vanhentui eilen. Tämä voi johtua määritysvirheestä tai verkkoyhteytesi siepanneesta hyökkääjästä. Tietokoneesi kellonaika on tällä hetkellä <ph name="CURRENT_DATE" />. Onko se oikein? Jos ei, korjaa järjestelmän kellonaika ja päivitä sivu.}other{Palvelin ei voinut todistaa olevansa <ph name="DOMAIN" />; sen suojausvarmenne vanhentui # päivää sitten. Tämä voi johtua määritysvirheestä tai verkkoyhteytesi siepanneesta hyökkääjästä. Tietokoneesi kellonaika on tällä hetkellä <ph name="CURRENT_DATE" />. Onko se oikein? Jos ei, korjaa järjestelmän kellonaika ja päivitä sivu.}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">Jatka</translation> <translation id="2365563543831475020">Kaatumisraportti tallennettu <ph name="CRASH_TIME" />, ei vielä lähetetty</translation> <translation id="2367567093518048410">Taso</translation> +<translation id="2378238891085281592">Olet siirtynyt yksityiseen tilaan</translation> <translation id="2384307209577226199">Yrityksen oletus</translation> <translation id="2386255080630008482">Palvelimen varmenne on kumottu.</translation> <translation id="2392959068659972793">Näytä käytännöt, joille ei ole asetettu arvoa</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">Palvelin ei voinut todistaa olevansa <ph name="DOMAIN" />; sen suojausvarmenne on verkkotunnuksesta <ph name="DOMAIN2" />. Tämä voi johtua määritysvirheestä tai verkkoyhteytesi siepanneesta hyökkääjästä.</translation> <translation id="2948083400971632585">Voit poistaa yhteydelle määritetyt välityspalvelimet käytöstä asetussivulla.</translation> <translation id="2955913368246107853">Sulje hakupalkki</translation> -<translation id="2958431318199492670">Verkkoasetukset eivät noudata ONC-standardia. Kaikkia asetuksia ei välttämättä tuoda.</translation> <translation id="2969319727213777354">Kellosi täytyy asettaa oikeaan aikaan, jotta salattu yhteys voidaan muodostaa. Tämä johtuu siitä, että verkkosivustojen tunnistamisessa käytettävät varmenteet ovat voimassa vain tiettyinä aikoina. Chrome ei voi vahvistaa varmenteita, koska laitteesi kello on väärässä ajassa.</translation> <translation id="2972581237482394796">&Tee uudelleen</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, tällä hetkellä valittuna. <ph name="ROW_CONTENT" /></translation> @@ -515,6 +514,7 @@ <translation id="450710068430902550">Jakaminen järjestelmänvalvojan kanssa</translation> <translation id="4515275063822566619">Kortit ja osoitteet ovat peräisin Chromesta ja Google-tililtäsi (<ph name="ACCOUNT_EMAIL" />). Voit hallinnoida niitä <ph name="BEGIN_LINK" />asetuksissa<ph name="END_LINK" />.</translation> <translation id="4522570452068850558">Tiedot</translation> +<translation id="4524805452350978254">Määritä kortit</translation> <translation id="4552089082226364758">Flash</translation> <translation id="4558551763791394412">Poista laajennukset käytöstä.</translation> <translation id="457875822857220463">Toimitus</translation> @@ -701,6 +701,7 @@ <translation id="5866257070973731571">Lisää puhelinnumero</translation> <translation id="5869405914158311789">Sivustoon ei saada yhteyttä</translation> <translation id="5869522115854928033">Tallennetut salasanat</translation> +<translation id="5887400589839399685">Kortti tallennettu</translation> <translation id="5893752035575986141">Luottokortit hyväksytään.</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (synkronoitu)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 käytössä}other{# käytössä}}</translation> @@ -802,7 +803,6 @@ <translation id="679355240208270552">Ohitettu, koska oletushaku on poistettu käytöstä käytännön johdosta</translation> <translation id="681021252041861472">Pakollinen kenttä</translation> <translation id="6810899417690483278">Muokkaustunnus</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Aluetietojen lataus epäonnistui.</translation> <translation id="6825578344716086703"><ph name="DOMAIN" />-palvelin, johon yritit muodostaa yhteyden, esitti heikkoa allekirjoitusalgoritmia käyttävän varmenteen (esim. SHA-1). Tästä syystä palvelimen esittämät tunnistetiedot saattavat olla väärennettyjä. Palvelin ei siis välttämättä ole tavoittelemasi palvelin, vaan saatat viestiä hakkerin kanssa.</translation> <translation id="6831043979455480757">Käännä</translation> @@ -821,11 +821,13 @@ <translation id="6948701128805548767">Valitse osoite, niin näet noutotavat ja vaatimukset.</translation> <translation id="6949872517221025916">Pyydä uusi salasana</translation> <translation id="6950684638814147129">Virhe jäsennettäessä JSON-arvoa: <ph name="ERROR" /></translation> +<translation id="6957624206566198865">Avaa sivu uudella yksityisellä välilehdellä</translation> <translation id="6957887021205513506">Palvelimen varmenne näyttää olevan väärennös.</translation> <translation id="6965382102122355670">OK</translation> <translation id="6965978654500191972">Laite</translation> <translation id="6970216967273061347">Alue</translation> <translation id="6973656660372572881">Sekä kiinteät välityspalvelimet että .pac-URL-osoite on määritetty.</translation> +<translation id="6984479912851154518">Yksityinen tila suljetaan, jotta voit tehdä maksun ulkoisella sovelluksella. Haluatko jatkaa?</translation> <translation id="6989763994942163495">Näytä lisäasetukset...</translation> <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Veloitukset voivat olla kertaluontoisia tai toistuvia, eikä niitä välttämättä esitetä selkeästi.</translation> @@ -1077,6 +1079,7 @@ <translation id="8820817407110198400">Kirjanmerkit</translation> <translation id="883848425547221593">Muut kirjanmerkit</translation> <translation id="884264119367021077">Toimitusosoite</translation> +<translation id="8846319957959474018">Avaa sovelluksia kätevästi kirjanmerkkien avulla</translation> <translation id="884923133447025588">Kumoamisjärjestelmää ei löytynyt.</translation> <translation id="885730110891505394">Googlen kanssa jakaminen</translation> <translation id="8858065207712248076">Chrome suosittelee organisaation <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> salasanasi vaihtamista, jos olet käyttänyt sitä myös muilla sivustoilla.</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb index 42f0581..465467d 100644 --- a/components/strings/components_strings_fil.xtb +++ b/components/strings/components_strings_fil.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Naglo-load</translation> <translation id="1640180200866533862">Mga patakaran ng user</translation> <translation id="1640244768702815859">Subukang <ph name="BEGIN_LINK" />bisitahin ang homepage ng site<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Di-wasto ang configuration ng network at hindi maaaring i-import.</translation> <translation id="1644574205037202324">History</translation> <translation id="1645368109819982629">Hindi sinusuportahang protocol</translation> <translation id="1655462015569774233">{1,plural, =1{Hindi mapatunayan ng server na ito na ito ang <ph name="DOMAIN" />; nag-expire na ang certificate ng seguridad nito kahapon. Maaaring resulta ito ng maling configuration o kaya ng isang attacker na humahadlang sa iyong koneksyon. Sa kasalukuyan, nakatakda ang orasan ng iyong computer sa <ph name="CURRENT_DATE" />. Mukha bang tama iyon? Kung hindi, dapat mong ayusin ang orasan ng iyong system at pagkatapos ay i-refresh ang page na ito.}one{Hindi mapatunayan ng server na ito na ito ang <ph name="DOMAIN" />; nag-expire na ang certificate ng seguridad nito # araw na ang nakalipas. Maaaring resulta ito ng maling configuration o kaya ng isang attacker na humahadlang sa iyong koneksyon. Sa kasalukuyan, nakatakda ang orasan ng iyong computer sa <ph name="CURRENT_DATE" />. Mukha bang tama iyon? Kung hindi, dapat mong ayusin ang orasan ng iyong system at pagkatapos ay i-refresh ang page na ito.}other{Hindi mapatunayan ng server na ito na ito ang <ph name="DOMAIN" />; nag-expire na ang certificate ng seguridad nito # na araw na ang nakalipas. Maaaring resulta ito ng maling configuration o kaya ng isang attacker na humahadlang sa iyong koneksyon. Sa kasalukuyan, nakatakda ang orasan ng iyong computer sa <ph name="CURRENT_DATE" />. Mukha bang tama iyon? Kung hindi, dapat mong ayusin ang orasan ng iyong system at pagkatapos ay i-refresh ang page na ito.}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">Magpatuloy</translation> <translation id="2365563543831475020">Hindi na-upload ang nakuhang ulat ng pag-crash noong <ph name="CRASH_TIME" /></translation> <translation id="2367567093518048410">Antas</translation> +<translation id="2378238891085281592">Nakapribado ka</translation> <translation id="2384307209577226199">Default ng enterprise</translation> <translation id="2386255080630008482">Nabawi ang certificate ng server.</translation> <translation id="2392959068659972793">Ipakita ang mga patakarang walang nakatakdang halaga</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">Hindi mapatunayan ng server na ito na ito ay <ph name="DOMAIN" />; mula sa <ph name="DOMAIN2" /> ang certificate ng seguridad nito. Maaaring dulot ito ng maling configuration o isang umaatake na hinahadlangan ang iyong koneksyon.</translation> <translation id="2948083400971632585">Maaari mong i-disable ang anumang mga proxy na naka-configure para sa isang koneksyon mula sa pahina ng mga setting.</translation> <translation id="2955913368246107853">Isara ang bar sa paghahanap</translation> -<translation id="2958431318199492670">Hindi sumusunod ang configuration ng network sa pamantayan ng ONC. Hindi maaaring i-import ang mga bahagi ng configuration.</translation> <translation id="2969319727213777354">Upang makapagtatag ng secure na koneksyon, kailangang itakda nang tama ang iyong orasan. Ito ay dahil sa may-bisa lang ang mga certificate na ginagamit ng mga website upang tukuyin ang mga sarili ng mga ito sa loob ng mga partikular na tagal ng panahon. Dahil mali ang orasan ng iyong device, hindi ma-verify ng Google Chrome ang mga certificate na ito.</translation> <translation id="2972581237482394796">&I-redo</translation> <translation id="2977665033722899841">Kasalukuyang napili ang <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> @@ -514,6 +513,7 @@ <translation id="450710068430902550">Pagbabahagi sa Administrator</translation> <translation id="4515275063822566619">Ang mga card at address ay mula sa Chrome at sa iyong Google Account (<ph name="ACCOUNT_EMAIL" />). Maaari mong pamahalaan ang mga ito sa <ph name="BEGIN_LINK" />Mga Setting<ph name="END_LINK" />.</translation> <translation id="4522570452068850558">Mga Detalye</translation> +<translation id="4524805452350978254">Pamahalaan ang mga card</translation> <translation id="4552089082226364758">Flash</translation> <translation id="4558551763791394412">Subukang i-disable ang iyong mga extension.</translation> <translation id="457875822857220463">Paghahatid</translation> @@ -700,6 +700,7 @@ <translation id="5866257070973731571">Magdagdag ng Numero ng Telepono</translation> <translation id="5869405914158311789">Hindi makakonekta sa site na ito</translation> <translation id="5869522115854928033">Mga naka-save na password</translation> +<translation id="5887400589839399685">Na-save ang card</translation> <translation id="5893752035575986141">Tinatanggap ang mga credit card.</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (naka-sync)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 ang ginagamit}one{# ang ginagamit}other{# ang ginagamit}}</translation> @@ -801,7 +802,6 @@ <translation id="679355240208270552">Binalewala dahil hindi na-enable ng patakaran ang default na paghahanap.</translation> <translation id="681021252041861472">Kinakailangang Field</translation> <translation id="6810899417690483278">Customization ID</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Hindi na-load ang data ng mga rehiyon</translation> <translation id="6825578344716086703">Tinangka mong abutin ang <ph name="DOMAIN" />, ngunit nagpakita ang server ng certificate na nilagdaan gamit ang isang mahinang signature algorithm (tulad ng SHA-1). Nangangahulugan ito na maaaring pineke ang mga panseguridad na kredensyal na ipinakita ng server, at ang server ay maaaring hindi ang server na inaasahan mo (maaaring nakikipag-ugnayan ka sa isang attacker).</translation> <translation id="6831043979455480757">Isalin</translation> @@ -820,11 +820,13 @@ <translation id="6948701128805548767">Upang makita ang mga pamamaraan at kinakailangan sa pag-pick up, pumili ng address</translation> <translation id="6949872517221025916">I-reset ang Password</translation> <translation id="6950684638814147129">Error habang pina-parse ang JSON value: <ph name="ERROR" /></translation> +<translation id="6957624206566198865">Buksan ang page sa bagong tab na Pribado</translation> <translation id="6957887021205513506">Lumilitaw na isang pamamalsipika ang certificate ng server.</translation> <translation id="6965382102122355670">OK</translation> <translation id="6965978654500191972">Device</translation> <translation id="6970216967273061347">Distrito</translation> <translation id="6973656660372572881">Tinukoy ang parehong mga hindi nababagong proxy server at isang .pac script URL.</translation> +<translation id="6984479912851154518">Aalis sa pribadong mode para magbayad sa pamamagitan ng external na application. Magpatuloy?</translation> <translation id="6989763994942163495">Ipakita ang mga advanced na setting...</translation> <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Ang mga singil na ito ay maaaring isang beses lang o umuulit at maaaring hindi mo mapansin.</translation> @@ -1075,6 +1077,7 @@ <translation id="8820817407110198400">Mga Bookmark</translation> <translation id="883848425547221593">Iba Pang Mga Bookmark</translation> <translation id="884264119367021077">Shipping address</translation> +<translation id="8846319957959474018">Buksan ang mga app sa madaling paraan gamit ang mga bookmark</translation> <translation id="884923133447025588">Walang nahanap na mekanismo ng pagpapawalang-bisa.</translation> <translation id="885730110891505394">Pagbabahagi sa Google</translation> <translation id="8858065207712248076">Inirerekomenda ng Chrome na i-reset ang iyong password sa <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> kung ginamit mo ito sa iba pang site.</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index 623fbd0..c9d6fc5 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Chargement en cours</translation> <translation id="1640180200866533862">Règles relatives aux utilisateurs</translation> <translation id="1640244768702815859">Essayez de <ph name="BEGIN_LINK" />consulter la page d'accueil du site<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Impossible d'importer la configuration du réseau : elle n'est pas valide.</translation> <translation id="1644574205037202324">Historique</translation> <translation id="1645368109819982629">Protocole incompatible</translation> <translation id="1655462015569774233">{1,plural, =1{Impossible de vérifier que ce serveur est bien <ph name="DOMAIN" />, car son certificat de sécurité a expiré hier. Cela peut être dû à une mauvaise configuration ou bien à l'interception de votre connexion par un pirate informatique. L'horloge de votre ordinateur indique actuellement : <ph name="CURRENT_DATE" />. Cela vous semble-t-il correct ? Si ce n'est pas le cas, vous devez corriger l'horloge de votre système, puis actualiser la page.}one{Impossible de vérifier que ce serveur est bien <ph name="DOMAIN" />, car son certificat de sécurité a expiré il y a # jour. Cela peut être dû à une mauvaise configuration ou bien à l'interception de votre connexion par un pirate informatique. L'horloge de votre ordinateur indique actuellement : <ph name="CURRENT_DATE" />. Cela vous semble-t-il correct ? Si ce n'est pas le cas, vous devez corriger l'horloge de votre système, puis actualiser la page.}other{Impossible de vérifier que ce serveur est bien <ph name="DOMAIN" />, car son certificat de sécurité a expiré il y a # jours. Cela peut être dû à une mauvaise configuration ou bien à l'interception de votre connexion par un pirate informatique. L'horloge de votre ordinateur indique actuellement : <ph name="CURRENT_DATE" />. Cela vous semble-t-il correct ? Si ce n'est pas le cas, vous devez corriger l'horloge de votre système, puis actualiser la page.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Impossible de vérifier sur le serveur qu'il s'agit bien du domaine <ph name="DOMAIN" />, car son certificat de sécurité provient du domaine <ph name="DOMAIN2" />. Cela peut être dû à une mauvaise configuration ou bien à l'interception de votre connexion par un pirate informatique.</translation> <translation id="2948083400971632585">Vous pouvez désactiver tout proxy configuré pour une connexion à partir de la page des paramètres.</translation> <translation id="2955913368246107853">Fermer la barre de recherche</translation> -<translation id="2958431318199492670">La configuration du réseau ne respecte pas les normes de l'ONC. Il est possible que des parties de la configuration ne soient pas importées.</translation> <translation id="2969319727213777354">Afin d'établir une connexion sécurisée, votre horloge doit être réglée correctement. Les certificats permettant aux sites Web de s'identifier sont en effet valides pendant une période précise. Comme l'horloge de votre appareil est incorrecte, Google Chrome n'est pas en mesure de vérifier la validité des certificats.</translation> <translation id="2972581237482394796">&Rétablir</translation> <translation id="2977665033722899841">La ligne "<ph name="ROW_NAME" />" est sélectionnée. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Adresse de livraison</translation> <translation id="3395827396354264108">Mode d'enlèvement</translation> <translation id="3399952811970034796">Adresse de livraison</translation> -<translation id="3409072600744224192">Pour accéder à vos cartes sur tous vos appareils, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Essayez de fermer les autres programmes pour libérer de la mémoire.</translation> <translation id="3422472998109090673"><ph name="HOST_NAME" /> est actuellement inaccessible.</translation> <translation id="3427092606871434483">Autoriser (par défaut)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Mot de passe incorrect</translation> <translation id="5056549851600133418">Articles pour vous</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Vérifier l'adresse du proxy<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Connectez-vous et activez la synchronisation pour accéder à vos cartes sur tous vos appareils.</translation> <translation id="5086888986931078152">Vous risquez de ne plus avoir accès au contenu protégé de certains sites.</translation> <translation id="5087286274860437796">Le certificat actuel du serveur n'est pas valide.</translation> <translation id="5087580092889165836">Ajouter une carte</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> sur <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Sélectionner les coordonnées</translation> <translation id="5327248766486351172">Nom</translation> -<translation id="5327567770033251652">activer la synchronisation</translation> <translation id="5332219387342487447">Mode de livraison</translation> <translation id="5355557959165512791">Le site <ph name="SITE" /> est actuellement inaccessible, car son certificat a été révoqué. Les erreurs réseau et les attaques sont généralement temporaires. Vous devriez donc pouvoir accéder à cette page plus tard.</translation> <translation id="536296301121032821">Échec du stockage des paramètres de la règle.</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">Règle ignorée, car le moteur de recherche par défaut n'est pas activé par une règle.</translation> <translation id="681021252041861472">Champ obligatoire</translation> <translation id="6810899417690483278">ID de la personnalisation</translation> -<translation id="6820686453637990663">Cryptogramme</translation> <translation id="6824266427216888781">Échec du chargement des données relatives aux régions</translation> <translation id="6825578344716086703">Vous avez tenté d'accéder à <ph name="DOMAIN" />, mais le serveur a présenté un certificat signé à l'aide d'un algorithme de signature faible (par exemple, SHA-1). Il est possible que le certificat fourni par le serveur ait été falsifié. Il se peut donc que le serveur ne soit pas celui auquel vous souhaitez accéder, et qu'il s'agisse d'une tentative de piratage.</translation> <translation id="6831043979455480757">Traduire</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">Utilisateur :</translation> <translation id="6944692733090228304">Vous avez saisi votre mot de passe sur un site qui n'est pas géré par <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Pour protéger votre compte, ne réutilisez pas ce mot de passe dans d'autres applications ni sur d'autres sites.</translation> <translation id="6945221475159498467">Sélectionner</translation> -<translation id="6948540501704460596">Pour accéder à vos cartes sur tous vos appareils, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Sélectionnez une adresse pour consulter les modes et conditions d'enlèvement disponibles</translation> <translation id="6949872517221025916">Réinitialiser le mot de passe</translation> <translation id="6950684638814147129">Erreur lors de l'analyse de la valeur JSON : <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Il peut s'agir de frais uniques ou récurrents qui ne sont pas toujours clairement signalés.</translation> <translation id="7029809446516969842">Mots de passe</translation> -<translation id="7042837854211185817">Activez la synchronisation pour accéder à vos cartes sur tous vos appareils.</translation> <translation id="7050187094878475250">Vous avez essayé d'accéder à <ph name="DOMAIN" />, mais la durée de validité du certificat du serveur est trop longue pour être fiable.</translation> <translation id="7053983685419859001">Bloquer</translation> <translation id="7064851114919012435">Coordonnées</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb index 74b12796..19f8fca 100644 --- a/components/strings/components_strings_gu.xtb +++ b/components/strings/components_strings_gu.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">લોડ કરી રહ્યું છે</translation> <translation id="1640180200866533862">વપરાશકર્તા નીતિઓ</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />સાઇટના હોમપેજની મુલાકાત લેવાનો<ph name="END_LINK" /> પ્રયાસ કરો.</translation> -<translation id="1644184664548287040">નેટવર્ક ગોઠવણી અમાન્ય છે અને આયાત કરી શકાઇ નથી.</translation> <translation id="1644574205037202324">ઇતિહાસ</translation> <translation id="1645368109819982629">અસમર્થિત પ્રોટોકોલ</translation> <translation id="1655462015569774233">{1,plural, =1{આ સર્વર સાબિત કરી શક્યું નથી કે તે <ph name="DOMAIN" /> છે; તેના સુરક્ષા પ્રમાણપત્રની સમય સીમા ગઈકાલે સમાપ્ત થઈ ગઈ. આ કોઇ ખોટી ગોઠવણીને કારણે થયું હશે અથવા કોઇ હુમલાખોર તમારા કનેક્શનને અટકાવી રહ્યો છે. તમારા કમ્પ્યુટરની ઘડિયાળને હાલમાં <ph name="CURRENT_DATE" /> પર સેટ કરવામાં આવી છે. શું તે બરાબર લાગે છે? જો ઠીક ન લાગતી હોય, તો તમારે તમારી સિસ્ટમની ઘડિયાળને ઠીક કરવી જોઈએ અને પછી આ પૃષ્ઠ તાજું કરવું જોઈએ.}one{આ સર્વર સાબિત કરી શક્યું નથી કે તે <ph name="DOMAIN" /> છે; તેના સુરક્ષા પ્રમાણપત્રની સમય સીમા # દિવસ પહેલાં સમાપ્ત થઈ ગઈ. આ કોઇ ખોટી ગોઠવણીને કારણે થયું હશે અથવા કોઇ હુમલાખોર તમારા કનેક્શનને અટકાવી રહ્યો છે. તમારા કમ્પ્યુટરની ઘડિયાળને હાલમાં <ph name="CURRENT_DATE" /> પર સેટ કરવામાં આવી છે. શું તે બરાબર લાગે છે? જો ઠીક ન લાગતી હોય, તો તમારે તમારી સિસ્ટમની ઘડિયાળને ઠીક કરવી જોઈએ અને પછી આ પૃષ્ઠ તાજું કરવું જોઈએ.}other{આ સર્વર સાબિત કરી શક્યું નથી કે તે <ph name="DOMAIN" /> છે; તેના સુરક્ષા પ્રમાણપત્રની સમય સીમા # દિવસ પહેલાં સમાપ્ત થઈ ગઈ. આ કોઇ ખોટી ગોઠવણીને કારણે થયું હશે અથવા કોઇ હુમલાખોર તમારા કનેક્શનને અટકાવી રહ્યો છે. તમારા કમ્પ્યુટરની ઘડિયાળને હાલમાં <ph name="CURRENT_DATE" /> પર સેટ કરવામાં આવી છે. શું તે બરાબર લાગે છે? જો ઠીક ન લાગતી હોય, તો તમારે તમારી સિસ્ટમની ઘડિયાળને ઠીક કરવી જોઈએ અને પછી આ પૃષ્ઠ તાજું કરવું જોઈએ.}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">ચાલુ રાખો</translation> <translation id="2365563543831475020"><ph name="CRASH_TIME" /> એ કૅપ્ચર કરેલ ક્રેશ રિપોર્ટ અપલોડ કરી ન હતી</translation> <translation id="2367567093518048410">સ્તર</translation> +<translation id="2378238891085281592">હવે તમારું કાર્ય ખાનગીમાં થશે</translation> <translation id="2384307209577226199">એન્ટરપ્રાઇઝ ડિફોલ્ટ</translation> <translation id="2386255080630008482">સર્વરનું પ્રમાણપત્ર રદ કરવામાં આવ્યું છે.</translation> <translation id="2392959068659972793">કોઈ કિંમત સેટ નહીં સાથે નીતિઓ બતાવો</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">આ સર્વર સાબિત કરી શક્યું નથી કે તે <ph name="DOMAIN" /> છે; તેનું સુરક્ષા પ્રમાણપત્ર <ph name="DOMAIN2" /> નું છે. આ કોઈ ખોટી ગોઠવણીને કારણે થયું હશે અથવા કોઈ હુમલાખોર તમારા કનેક્શનને અટકાવી રહ્યો છે.</translation> <translation id="2948083400971632585">તમે સેટિંગ્સ પૃષ્ઠમાંથી કનેક્શન માટે ગોઠવવામાં આવેલ કોઇપણ પ્રોક્સીઓ અક્ષમ કરી શકો છો.</translation> <translation id="2955913368246107853">શોધ બાર બંધ કરો</translation> -<translation id="2958431318199492670">નેટવર્ક ગોઠવણી ONC માનકનું પાલન કરતી નથી. ગોઠવણીના ભાગો આયાત કરી શકાશે નહીં.</translation> <translation id="2969319727213777354">એક સુરક્ષિત કનેક્શન સ્થાપિત કરવા માટે, તમારી ઘડિયાળ યોગ્ય રીતે સેટ હોવી જરૂરી છે. આનું કારણ એ કે વેબસાઇટ્સ તેઓને ઓળખવા માટે જે પ્રમાણપત્રોનો ઉપયોગ કરે છે તે ચોક્કસ સમય અવધિ માટે જ માન્ય હોય છે. તમારા ઉપકરણની ઘડિયાળ ખોટી હોવાને લીધે, Google Chrome આ પ્રમાણપત્રોને ચકાસી શકતું નથી.</translation> <translation id="2972581237482394796">&ફરી કરો</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, વર્તમાનમાં પસંદ કરેલ. <ph name="ROW_CONTENT" /></translation> @@ -514,6 +513,7 @@ <translation id="450710068430902550">વ્યવસ્થાપક સાથે શેર કરવું</translation> <translation id="4515275063822566619">કાર્ડ અને સરનામા Chrome અને Google એકાઉન્ટ (<ph name="ACCOUNT_EMAIL" />)માંથી છે. તમે તેને <ph name="BEGIN_LINK" />સેટિંગ્સ<ph name="END_LINK" />માં જઈને સંચાલિત કરી શકો છો.</translation> <translation id="4522570452068850558">વિગતો</translation> +<translation id="4524805452350978254">કાર્ડ મેનેજ કરો</translation> <translation id="4552089082226364758">ફ્લેશ</translation> <translation id="4558551763791394412">તમારા એક્સ્ટેન્શન્સને અક્ષમ કરવાનો પ્રયાસ કરો.</translation> <translation id="457875822857220463">વિતરણ</translation> @@ -700,6 +700,7 @@ <translation id="5866257070973731571">ફોન નંબર ઉમેરો</translation> <translation id="5869405914158311789">આ સાઇટ પર પહોંચી શકાતું નથી</translation> <translation id="5869522115854928033">સાચવેલા પાસવર્ડ્સ</translation> +<translation id="5887400589839399685">કાર્ડ સાચવ્યું</translation> <translation id="5893752035575986141">ક્રેડિટ કાર્ડ સ્વીકારવામાં આવે છે.</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (સમન્વયિત)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 ઉપયોગમાં છે}one{# ઉપયોગમાં છે}other{# ઉપયોગમાં છે}}</translation> @@ -801,7 +802,6 @@ <translation id="679355240208270552">અવગણના કરી, કારણ કે નીતિએ ડિફૉલ્ટ શોધ બંધ કરેલ છે.</translation> <translation id="681021252041861472">ફરજિયાત</translation> <translation id="6810899417690483278">કસ્ટમાઇઝેશન ID</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">પ્રદેશનો ડેટા લોડ કરવામાં નિષ્ફળ થયાં</translation> <translation id="6825578344716086703">તમે <ph name="DOMAIN" /> પર પહોંચવાનો પ્રયાસ કર્યો, પરંતુ સર્વરે નબળા હસ્તાક્ષર અલ્ગોરિધમ (જેમ કે SHA-1)નો ઉપયોગ કરીને હસ્તાક્ષરિત કરેલું પ્રમાણપત્ર પ્રસ્તુત કર્યું. આનો અર્થ એ છે કે સર્વરે પ્રસ્તુત કરેલા સુરક્ષા પ્રમાણપત્રો બનાવટી હોઈ શકે છે અને તે સર્વર તમારું અપેક્ષિત સર્વર (તમે કોઈ હુમલાખોર સાથે વાર્તાલાપ કરતા હોય શકે) ન પણ હોય.</translation> <translation id="6831043979455480757">અનુવાદ કરો</translation> @@ -820,11 +820,13 @@ <translation id="6948701128805548767">પિકઅપ પદ્ધતિ અને આવશ્યકતાઓ જોવા માટે, એક સરનામું પસંદ કરો</translation> <translation id="6949872517221025916">પાસવર્ડ રીસેટ કરો</translation> <translation id="6950684638814147129">JSON મૂલ્યનું વિશ્લેષણ કરવામાં ભૂલ આવી: <ph name="ERROR" /></translation> +<translation id="6957624206566198865">નવી ખાનગી ટૅબમાં પેજ ખોલો</translation> <translation id="6957887021205513506">સર્વરનું પ્રમાણપત્ર બનાવટી હોય એવું લાગે છે.</translation> <translation id="6965382102122355670">બરાબર, સમજાઇ ગયું</translation> <translation id="6965978654500191972">ઉપકરણ</translation> <translation id="6970216967273061347">જીલ્લો</translation> <translation id="6973656660372572881">નિયત પ્રોક્સી સર્વર્સ અને .pac script URL બન્નેનો ઉલ્લેખ કરેલો છે.</translation> +<translation id="6984479912851154518">બાહ્ય ઍપ્લિકેશન મારફતે ચુકવણી કરવા માટે ખાનગી મોડ છોડી રહ્યાં છીએ. ચાલુ રાખવું છે?</translation> <translation id="6989763994942163495">વિગતવાર સેટિંગ્સ બતાવો...</translation> <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">આ શુલ્ક એક-સમયનું અથવા પુનરાવર્તિત હોઈ શકે છે અને કદાચ દેખીતા શુલ્ક ન પણ હોય.</translation> @@ -1075,6 +1077,7 @@ <translation id="8820817407110198400">બુકમાર્ક્સ</translation> <translation id="883848425547221593">અન્ય બુકમાર્ક્સ</translation> <translation id="884264119367021077">શિપિંગ સરનામું</translation> +<translation id="8846319957959474018">બુકમાર્ક સાથે ઍપ સરળતાથી ખોલો</translation> <translation id="884923133447025588">રદ કરવાની કોઈ મેકેનિઝમ મળી નથી.</translation> <translation id="885730110891505394">Google સાથે શેર કરવું</translation> <translation id="8858065207712248076">જો તમે અન્ય સાઇટ પર <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> પાસવર્ડનો ફરી ઉપયોગ કર્યો હોય, તો Chrome તેને રીસેટ કરવાનો સુઝાવ આપે છે.</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb index ef33875..9140f41 100644 --- a/components/strings/components_strings_hi.xtb +++ b/components/strings/components_strings_hi.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">लोड हो रहा है</translation> <translation id="1640180200866533862">उपयोगकर्ता नीतियां</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />साइट के मुखपृष्ठ पर विज़िट करके<ph name="END_LINK" /> देखें.</translation> -<translation id="1644184664548287040">नेटवर्क कॉन्फ़िगरेशन अमान्य है और उसे मंगाया नहीं जा सकेगा.</translation> <translation id="1644574205037202324">इतिहास</translation> <translation id="1645368109819982629">असमर्थित प्रोटोकॉल</translation> <translation id="1655462015569774233">{1,plural, =1{यह सर्वर प्रमाणित नहीं कर सका कि यह <ph name="DOMAIN" /> है; इसके सुरक्षा प्रमाणपत्र की समय सीमा कल समाप्त हो गई थी. ऐसा गलत कॉन्फ़िगरेशन के कारण या किसी आक्रमणकर्ता द्वारा आपके कनेक्शन को बाधित करने के कारण हो सकता है. आपके कंप्यूटर की घड़ी वर्तमान में <ph name="CURRENT_DATE" /> पर सेट है. क्या यह सही है? यदि नहीं, तो आपको अपने सिस्टम की घड़ी सही करनी चाहिए और फिर इस पेज को रीफ्रेश करना चाहिए.}one{यह सर्वर प्रमाणित नहीं कर सका कि यह <ph name="DOMAIN" /> है; इसके सुरक्षा प्रमाणपत्र की समय सीमा # दिन पहले समाप्त हो गई है. ऐसा गलत कॉन्फ़िगरेशन के कारण या किसी आक्रमणकर्ता द्वारा आपके कनेक्शन को बाधित करने के कारण हो सकता है. आपके कंप्यूटर की घड़ी वर्तमान में <ph name="CURRENT_DATE" /> पर सेट है. क्या यह सही है? यदि नहीं, तो आपको अपने सिस्टम की घड़ी सही करनी चाहिए और फिर इस पेज को रीफ्रेश करना चाहिए.}other{यह सर्वर प्रमाणित नहीं कर सका कि यह <ph name="DOMAIN" /> है; इसके सुरक्षा प्रमाणपत्र की समय सीमा # दिन पहले समाप्त हो गई है. ऐसा गलत कॉन्फ़िगरेशन के कारण या किसी आक्रमणकर्ता द्वारा आपके कनेक्शन को बाधित करने के कारण हो सकता है. आपके कंप्यूटर की घड़ी वर्तमान में <ph name="CURRENT_DATE" /> पर सेट है. क्या यह सही है? यदि नहीं, तो आपको अपने सिस्टम की घड़ी सही करनी चाहिए और फिर इस पेज को रीफ्रेश करना चाहिए.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">यह सर्वर यह प्रमाणित नहीं कर सका कि यह <ph name="DOMAIN" /> है; इसका सुरक्षा प्रमाणपत्र <ph name="DOMAIN2" /> की ओर से है. ऐसा गलत कॉन्फ़िगरेशन के कारण या किसी आक्रमणकर्ता द्वारा आपके कनेक्शन में अवरोध डालने के कारण हो सकता है.</translation> <translation id="2948083400971632585">आप किसी कनेक्शन के लिए कॉन्फ़िगर की गई किसी भी प्रॉक्सी को सेटिंग पेज से बंद कर सकते हैं.</translation> <translation id="2955913368246107853">खोज बार बंद करें</translation> -<translation id="2958431318199492670">नेटवर्क कॉन्फ़िगरेशन ONC मानक का पालन नहीं करता. कॉन्फ़िगरेशन के कुछ भाग आयात नहीं किए जा सकते हैं.</translation> <translation id="2969319727213777354">सुरक्षित कनेक्शन स्थापित करने के लिए, आपकी घड़ी को सही तरीके से सेट किए जाने की आवश्यकता है. ऐसा इसलिए क्योंकि वेबसाइटों द्वारा स्वयं की पहचान करने के लिए उपयोग किए जाने वाले प्रमाणपत्र केवल विशिष्ट समयावधियों के लिए ही मान्य होते हैं. चूंकि आपके डिवाइस की घड़ी गलत है, इसलिए Google Chrome इन प्रमाणपत्रों का सत्यापन नहीं कर सकता.</translation> <translation id="2972581237482394796">&फिर से करें</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, इस समय चुना गया है. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">वितरण पता</translation> <translation id="3395827396354264108">पिकअप का तरीका</translation> <translation id="3399952811970034796">डिलीवरी का पता</translation> -<translation id="3409072600744224192">अपने सभी डिवाइस पर अपने कार्ड पाने के लिए, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">जगह खाली करने के लिए दूसरे प्रोग्राम से बाहर निकलकर देखें.</translation> <translation id="3422472998109090673"><ph name="HOST_NAME" /> वर्तमान में पहुंच योग्य नहीं है.</translation> <translation id="3427092606871434483">अनुमति दें (डिफ़ॉल्ट)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">ग़लत पासवर्ड</translation> <translation id="5056549851600133418">आपके लिए लेख</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />प्रॉक्सी पते की जाँच करें<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">सभी डिवाइस पर अपने कार्ड पाने के लिए, साइन इन करें और 'सिंक करें' को चालू करें.</translation> <translation id="5086888986931078152">आप कुछ साइटों पर सुरक्षित सामग्री का एक्सेस खो सकते हैं.</translation> <translation id="5087286274860437796">सर्वर का प्रमाण पत्र इस समय मान्य नहीं है.</translation> <translation id="5087580092889165836">कार्ड जोड़ें</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="NUM_MATCHES" /> में से <ph name="MATCH_POSITION" /></translation> <translation id="5324080437450482387">संपर्क जानकारी चुनें</translation> <translation id="5327248766486351172">नाम</translation> -<translation id="5327567770033251652">सिंक करना चालू करें</translation> <translation id="5332219387342487447">शिपिंग का तरीका</translation> <translation id="5355557959165512791">आप इस समय <ph name="SITE" /> पर नहीं जा सकते हैं क्योंकि उसका प्रमाणपत्र रद्द कर दिया गया है. नेटवर्क की गड़बड़ी और हमले आमतौर पर कुछ देर के लिए होते हैं, इसलिए मुमकिन है कि यह पेज बाद में काम करे.</translation> <translation id="536296301121032821">नीति सेटिंग संग्रहित करने में विफल</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">अनदेखा किया गया क्योंकि पॉलिसी ने डिफ़ॉल्ट खोज सक्षम नहीं की है.</translation> <translation id="681021252041861472">ज़रूरी फ़ील्ड</translation> <translation id="6810899417690483278">कस्टमाइज़ेशन आईडी</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">क्षेत्र डेटा लोड नहीं हो सका</translation> <translation id="6825578344716086703">आपने <ph name="DOMAIN" /> तक पहुंचने की कोशिश की थी, लेकिन सर्वर ने कमज़ोर हस्ताक्षर एल्गोरिदम (जैसे कि SHA-1) वाला प्रमाणपत्र प्रस्तुत किया. इसका मतलब है कि सर्वर की ओर से प्रस्तुत किए गए सुरक्षा क्रेडेंशियल नकली हो सकते हैं और हो सकता है कि सर्वर आपका अपेक्षित सर्वर न हो (हो सकता है कि आप किसी हमलावर से बातचीत कर रहे हों).</translation> <translation id="6831043979455480757">अनुवाद करें</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">उपयोगकर्ता:</translation> <translation id="6944692733090228304">आपने एक ऐसी साइट पर अपना पासवर्ड डाला है जिसे <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> प्रबंधित नहीं करता है. अपने खाते को सुरक्षित रखने के लिए, दूसरे ऐप्लिकेशन और साइटों पर अपने पासवर्ड का दोबारा इस्तेमाल नहीं करें.</translation> <translation id="6945221475159498467">चुनें</translation> -<translation id="6948540501704460596">अपने सभी डिवाइस पर अपने कार्ड पाने के लिए, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">पिकअप के तरीके और ज़रूरतें देखने के लिए, कोई पता चुनें</translation> <translation id="6949872517221025916">पासवर्ड रीसेट करें</translation> <translation id="6950684638814147129">JSON मान पार्स करते समय गड़बड़ी हुई: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">ये शुल्क एक बार लगने वाले या बार-बार लगने वाले हो सकते हैं और हो सकता है कि इनके बारे में स्पष्ट जानकारी न दी जाए.</translation> <translation id="7029809446516969842">पासवर्ड</translation> -<translation id="7042837854211185817">सभी डिवाइस पर अपने कार्ड पाने के लिए, सिंक चालू करें.</translation> <translation id="7050187094878475250">आपने <ph name="DOMAIN" /> तक पहुंचने का प्रयास किया था, लेकिन सर्वर ने ऐसा प्रमाणपत्र प्रस्तुत किया जिसकी मान्यता अवधि विश्वसनीय होने के लिए बहुत लंबी है.</translation> <translation id="7053983685419859001">अवरोधित करें</translation> <translation id="7064851114919012435">संपर्क जानकारी</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb index a90ec73..d0357c6 100644 --- a/components/strings/components_strings_hr.xtb +++ b/components/strings/components_strings_hr.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Učitavanje</translation> <translation id="1640180200866533862">Korisnička pravila</translation> <translation id="1640244768702815859">Pokušajte <ph name="BEGIN_LINK" />otvoriti početnu stranicu web-lokacije<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Mrežna konfiguracija nije važeća i nije ju bilo moguće uvesti.</translation> <translation id="1644574205037202324">Povijest</translation> <translation id="1645368109819982629">Protokol nije podržan</translation> <translation id="1655462015569774233">{1,plural, =1{Poslužitelj nije mogao dokazati da je to <ph name="DOMAIN" /> jer je sigurnosni certifikat istekao jučer. Razlog može biti pogrešna konfiguracija ili napad na vašu vezu. Sat vašeg računala trenutačno je postavljen na <ph name="CURRENT_DATE" />. Je li to u redu? Ako nije, ispravite vrijeme na satu sustava, a zatim osvježite ovu stranicu.}one{Poslužitelj nije mogao dokazati da je to <ph name="DOMAIN" /> jer je sigurnosni certifikat istekao prije # dan. Razlog može biti pogrešna konfiguracija ili napad na vašu vezu. Sat vašeg računala trenutačno je postavljen na <ph name="CURRENT_DATE" />. Je li to u redu? Ako nije, ispravite vrijeme na satu sustava, a zatim osvježite ovu stranicu.}few{Poslužitelj nije mogao dokazati da je to <ph name="DOMAIN" /> jer je sigurnosni certifikat istekao prije # dana. Razlog može biti pogrešna konfiguracija ili napad na vašu vezu. Sat vašeg računala trenutačno je postavljen na <ph name="CURRENT_DATE" />. Je li to u redu? Ako nije, ispravite vrijeme na satu sustava, a zatim osvježite ovu stranicu.}other{Poslužitelj nije mogao dokazati da je to <ph name="DOMAIN" /> jer je sigurnosni certifikat istekao prije # dana. Razlog može biti pogrešna konfiguracija ili napad na vašu vezu. Sat vašeg računala trenutačno je postavljen na <ph name="CURRENT_DATE" />. Je li to u redu? Ako nije, ispravite vrijeme na satu sustava, a zatim osvježite ovu stranicu.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Poslužitelj nije mogao dokazati da je <ph name="DOMAIN" />; njegov je sigurnosni certifikat s domene <ph name="DOMAIN2" />. To može biti uzrokovano pogrešnom konfiguracijom ili napadom na vašu vezu.</translation> <translation id="2948083400971632585">Možete onemogućiti sve proxyje konfigurirane za vezu sa stranice postavki.</translation> <translation id="2955913368246107853">Zatvori traku za traženje</translation> -<translation id="2958431318199492670">Mrežna konfiguracija nije u skladu sa standardima ONC. Dijelove konfiguracije nije moguće uvesti.</translation> <translation id="2969319727213777354">Za uspostavu sigurne veze sat mora biti točno postavljen jer certifikati pomoću kojih se web-lokacije međusobno identificiraju vrijede samo određeno vrijeme. Budući da vaš sat nije točan, Chrome ne može potvrditi te certifikate.</translation> <translation id="2972581237482394796">&Vrati poništeno</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, trenutačno odabrano. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Adresa za dostavu</translation> <translation id="3395827396354264108">Način preuzimanja</translation> <translation id="3399952811970034796">Adresa za dostavu</translation> -<translation id="3409072600744224192">Da biste imali svoje kartice na svim svojim uređajima, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Pokušajte zatvoriti ostale programe da biste oslobodili memoriju.</translation> <translation id="3422472998109090673">Host <ph name="HOST_NAME" /> trenutačno nije dostupan.</translation> <translation id="3427092606871434483">Dopusti (zadano)</translation> @@ -581,7 +578,6 @@ <translation id="5045550434625856497">Pogrešna zaporka</translation> <translation id="5056549851600133418">Preporučeni članci</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />provjerite proxy adresu<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Da bi se vaše kartice prikazale na svim uređajima, prijavite se i uključite sinkronizaciju.</translation> <translation id="5086888986931078152">Možda ćete izgubiti pristup zaštićenom sadržaju s nekih web-lokacija.</translation> <translation id="5087286274860437796">Certifikat poslužitelja trenutačno nije važeći.</translation> <translation id="5087580092889165836">Dodaj karticu</translation> @@ -627,7 +623,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> od <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Odaberite podatke za kontakt</translation> <translation id="5327248766486351172">Naziv</translation> -<translation id="5327567770033251652">uključite sinkronizaciju</translation> <translation id="5332219387342487447">Način otpreme</translation> <translation id="5355557959165512791">Trenutačno ne možete otvoriti web-lokaciju <ph name="SITE" /> jer je njezin certifikat opozvan. Mrežne pogreške i napadi uglavnom su privremeni i ta bi stranica kasnije trebala funkcionirati.</translation> <translation id="536296301121032821">Pohrana postavki pravila nije uspjela</translation> @@ -806,7 +801,6 @@ <translation id="679355240208270552">Zanemareno jer zadano pretraživanje nije omogućeno pravilom.</translation> <translation id="681021252041861472">Obavezno polje</translation> <translation id="6810899417690483278">ID prilagođavanja</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Učitavanje podataka regija nije uspjelo</translation> <translation id="6825578344716086703">Pokušali ste doseći domenu <ph name="DOMAIN" />, ali poslužitelj je predstavio certifikat potpisan slabim algoritmom potpisa (kao što je SHA-1). Znači da su sigurnosne vjerodajnice koje je poslužitelj predstavio možda krivotvorene, a poslužitelj možda nije poslužitelj koji očekujete (možda ste u komunikaciji s napadačem).</translation> <translation id="6831043979455480757">Prevedi</translation> @@ -822,7 +816,6 @@ <translation id="6915804003454593391">Korisnik:</translation> <translation id="6944692733090228304">Unijeli ste zaporku na web-lokaciju kojom ne upravlja <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Da biste zaštitili račun, nemojte upotrebljavati tu zaporku za druge aplikacije i web-lokacije.</translation> <translation id="6945221475159498467">Odaberi</translation> -<translation id="6948540501704460596">Da biste imali svoje kartice na svim svojim uređajima, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Odaberite adresu za prikaz načina preuzimanja i zahtjeva za preuzimanje</translation> <translation id="6949872517221025916">Poništite zaporku</translation> <translation id="6950684638814147129">Došlo je do pogreške prilikom raščlanjivanja vrijednosti JSON-a: <ph name="ERROR" /></translation> @@ -837,7 +830,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Ta terećenja mogu biti jednokratna ili ponavljajuća i možda nisu odmah vidljiva.</translation> <translation id="7029809446516969842">Zaporke</translation> -<translation id="7042837854211185817">Da bi se prikazale kartice na svim uređajima, uključite sinkronizaciju.</translation> <translation id="7050187094878475250">Pokušali ste pristupiti domeni <ph name="DOMAIN" />, ali je poslužitelj pružio certifikat koji nije pouzdan zbog predugog razdoblja valjanosti.</translation> <translation id="7053983685419859001">Blokiraj</translation> <translation id="7064851114919012435">Podaci za kontakt</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index 86c9b9d..c4d3ceb1 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Betöltés</translation> <translation id="1640180200866533862">Felhasználói házirendek</translation> <translation id="1640244768702815859">Próbálja meg <ph name="BEGIN_LINK" />megnyitni a webhely főoldalát<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">A hálózati konfiguráció érvénytelen és nem importálható.</translation> <translation id="1644574205037202324">Előzmények</translation> <translation id="1645368109819982629">Nem támogatott protokoll</translation> <translation id="1655462015569774233">{1,plural, =1{A szerver nem tudta bizonyítani, hogy valóban a(z) <ph name="DOMAIN" /> domainbe tartozik; biztonsági tanúsítványa tegnap lejárt. Ennek oka lehet konfigurációs hiba, de az is lehet, hogy egy támadó eltérítette az Ön kapcsolódását. Számítógépének órája jelenleg a következőre van állítva: <ph name="CURRENT_DATE" />. Ez megfelelőnek tűnik? Ha nem, állítsa be megfelelően a rendszer óráját, majd frissítse az oldalt.}other{A szerver nem tudta bizonyítani, hogy valóban a(z) <ph name="DOMAIN" /> domainbe tartozik; biztonsági tanúsítványa # nappal ezelőtt lejárt. Ennek oka lehet konfigurációs hiba, de az is lehet, hogy egy támadó eltérítette az Ön kapcsolódását. Számítógépének órája jelenleg a következőre van állítva: <ph name="CURRENT_DATE" />. Ez megfelelőnek tűnik? Ha nem, állítsa be megfelelően a rendszer óráját, majd frissítse az oldalt.}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">Folytatás</translation> <translation id="2365563543831475020">A(z) <ph name="CRASH_TIME" /> időpontban készült hibajelentés nincs feltöltve</translation> <translation id="2367567093518048410">Szint</translation> +<translation id="2378238891085281592">Ön privát módra váltott.</translation> <translation id="2384307209577226199">Vállalati alapértelmezett</translation> <translation id="2386255080630008482">A szerver tanúsítványát visszavonták.</translation> <translation id="2392959068659972793">Beállított értékkel nem rendelkező házirendek megjelenítése</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">A szerver nem tudta bizonyítani, hogy valóban a(z) <ph name="DOMAIN" /> domainbe tartozik; biztonsági tanúsítványa a következőről származik: <ph name="DOMAIN2" />. Ennek oka lehet konfigurációs hiba, vagy hogy egy támadó eltérítette az Ön kapcsolódását.</translation> <translation id="2948083400971632585">Bármelyik kapcsolatlétesítésre használt proxyt letilthatja a beállítások oldalon.</translation> <translation id="2955913368246107853">Keresősáv bezárása</translation> -<translation id="2958431318199492670">A hálózati konfiguráció nem felel meg az ONC szabványnak. A konfiguráció egyes részeit nem lehet importálni.</translation> <translation id="2969319727213777354">Biztonságos kapcsolat létrehozásához az órát pontosan be kell állítani. Ez azért szükséges, mert a webhelyek által az azonosításukra használt tanúsítványok csak adott ideig érvényesek. Mivel az eszköz órája nem pontos, a Google Chrome nem tudja ellenőrizni ezeket a tanúsítványokat.</translation> <translation id="2972581237482394796">&Újra</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" /> van jelenleg kiválasztva. <ph name="ROW_CONTENT" /></translation> @@ -512,6 +511,7 @@ <translation id="450710068430902550">Megosztás a rendszergazdával</translation> <translation id="4515275063822566619">A kártyák és a címek a Chrome-ból és az Ön Google-fiókjából (<ph name="ACCOUNT_EMAIL" />) származnak. A <ph name="BEGIN_LINK" />Beállításokban<ph name="END_LINK" /> kezelheti őket.</translation> <translation id="4522570452068850558">Részletek</translation> +<translation id="4524805452350978254">Kártyák kezelése</translation> <translation id="4552089082226364758">Flash</translation> <translation id="4558551763791394412">Próbálkozzon a bővítmények letiltásával.</translation> <translation id="457875822857220463">Szállítás</translation> @@ -698,6 +698,7 @@ <translation id="5866257070973731571">Telefonszám hozzáadása</translation> <translation id="5869405914158311789">A webhely nem érhető el</translation> <translation id="5869522115854928033">Mentett jelszavak</translation> +<translation id="5887400589839399685">Kártya elmentve</translation> <translation id="5893752035575986141">Elfogadott hitelkártyák.</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (szinkronizálva)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 van használatban}other{# van használatban}}</translation> @@ -799,7 +800,6 @@ <translation id="679355240208270552">Figyelmen kívül hagyva, mert az alapértelmezett keresőmotort nem engedélyezi a házirend.</translation> <translation id="681021252041861472">Kötelező mező</translation> <translation id="6810899417690483278">Testreszabás-azonosító</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Nem sikerült betölteni a régióadatokat</translation> <translation id="6825578344716086703">Megpróbálta elérni a(z) <ph name="DOMAIN" /> webhelyet, de a szerver gyenge aláírási algoritmust használó tanúsítványt mutatott be. Ez alapján elképzelhető, hogy a szerver által megadott biztonsági tanúsítványt meghamisították, és a szerver nem az, amelyikre számított (lehet, hogy éppen valamilyen támadóval kommunikál).</translation> <translation id="6831043979455480757">Fordítás</translation> @@ -818,11 +818,13 @@ <translation id="6948701128805548767">Az átvételi módok és követelmények megtekintéséhez válassza ki a címet</translation> <translation id="6949872517221025916">Jelszó visszaállítása</translation> <translation id="6950684638814147129">A JSON-érték szintaktikai elemzése során jelentkező hiba: <ph name="ERROR" /></translation> +<translation id="6957624206566198865">Oldal megnyitása új privát ablakban</translation> <translation id="6957887021205513506">A szerver tanúsítványa hamisítványnak tűnik.</translation> <translation id="6965382102122355670">OK</translation> <translation id="6965978654500191972">Készülék</translation> <translation id="6970216967273061347">Kerület</translation> <translation id="6973656660372572881">Mindkét fix proxyszerver és egy .Pac típusú szkript URL-címe meg van adva.</translation> +<translation id="6984479912851154518">Privát mód elhagyása külső alkalmazással történő fizetéshez. Folytatja?</translation> <translation id="6989763994942163495">Speciális beállítások megjelenítése...</translation> <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Ezek egyszeri vagy ismétlődő díjak lehetnek, és nem feltétlenül nyilvánvalóak.</translation> @@ -1074,6 +1076,7 @@ <translation id="8820817407110198400">Könyvjelzők</translation> <translation id="883848425547221593">Egyéb könyvjelzők</translation> <translation id="884264119367021077">Szállítási cím</translation> +<translation id="8846319957959474018">Alkalmazások egyszerű megnyitása könyvjelzők segítségével</translation> <translation id="884923133447025588">Nem található visszavonási mechanizmus.</translation> <translation id="885730110891505394">Megosztás a Google-lal</translation> <translation id="8858065207712248076">A Chrome azt javasolja, hogy adjon meg új <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />-jelszót a régi helyett, ha azt más webhelyeken is használta.</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index 5996802a..6d487a5a 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Memuat</translation> <translation id="1640180200866533862">Kebijakan pengguna</translation> <translation id="1640244768702815859">Coba <ph name="BEGIN_LINK" />buka beranda situs<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Konfigurasi cadangan tidak valid dan tidak dapat diimpor.</translation> <translation id="1644574205037202324">Histori</translation> <translation id="1645368109819982629">Protokol yang tidak didukung</translation> <translation id="1655462015569774233">{1,plural, =1{Server ini tidak dapat membuktikan bahwa ini adalah <ph name="DOMAIN" />; masa berlaku sertifikat keamanannya telah berakhir kemarin. Hal ini mungkin disebabkan oleh kesalahan konfigurasi, atau ada penyerang yang memintas sambungan internet Anda. Jam komputer Anda saat ini diatur ke <ph name="CURRENT_DATE" />. Apakah terlihat sesuai? Jika tidak, Anda harus membenarkan jam sistem dan menyegarkan halaman ini.}other{Server ini tidak dapat membuktikan bahwa ini adalah <ph name="DOMAIN" />; masa berlaku sertifikat keamanannya telah berakhir # hari yang lalu. Hal ini mungkin disebabkan oleh kesalahan konfigurasi, atau ada penyerang yang memintas sambungan internet Anda. Jam komputer Anda saat ini diatur ke <ph name="CURRENT_DATE" />. Apakah terlihat sesuai? Jika tidak, Anda harus membenarkan jam sistem dan menyegarkan halaman ini.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Server ini tidak dapat membuktikan bahwa ini adalah <ph name="DOMAIN" />; sertifikat keamanannya dari <ph name="DOMAIN2" />. Hal ini disebabkan oleh kesalahan konfigurasi atau penyerang memotong sambungan Anda.</translation> <translation id="2948083400971632585">Anda dapat menonaktifkan proxy apa pun yang dikonfigurasi untuk sambungan dari halaman setelan.</translation> <translation id="2955913368246107853">Tutup bilah cari</translation> -<translation id="2958431318199492670">Konfigurasi jaringan tidak mematuhi standar ONC. Bagian dari konfigurasi mungkin tidak diimpor.</translation> <translation id="2969319727213777354">Untuk membuat sambungan aman, jam perlu disetel dengan benar. Itu karena sertifikat yang digunakan situs web untuk mengidentifikasi situs web tersebut hanya valid untuk jangka waktu tertentu. Karena jam perangkat tidak benar, Google Chrome tidak dapat memverifikasi sertifikat ini.</translation> <translation id="2972581237482394796">&Ulang</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, saat ini yang dipilih. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Alamat pengiriman</translation> <translation id="3395827396354264108">Metode pengambilan</translation> <translation id="3399952811970034796">Alamat Pengiriman</translation> -<translation id="3409072600744224192">Untuk mendapatkan kartu di semua perangkat Anda, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Coba program lain yang ada untuk mengosongkan memori.</translation> <translation id="3422472998109090673"><ph name="HOST_NAME" /> saat ini tidak dapat dijangkau.</translation> <translation id="3427092606871434483">Izinkan (default)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Sandi salah</translation> <translation id="5056549851600133418">Artikel untuk Anda</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Periksa alamat proxy<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Untuk mendapatkan kartu di semua perangkat Anda, login dan aktifkan sinkronisasi.</translation> <translation id="5086888986931078152">Anda dapat kehilangan akses ke konten yang dilindungi dari beberapa situs.</translation> <translation id="5087286274860437796">Sertifikat server saat ini tidak valid.</translation> <translation id="5087580092889165836">Tambahkan kartu</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> dari <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Pilih Info Kontak</translation> <translation id="5327248766486351172">Nama</translation> -<translation id="5327567770033251652">aktifkan sinkronisasi</translation> <translation id="5332219387342487447">Metode Pengiriman</translation> <translation id="5355557959165512791">Anda tidak dapat membuka <ph name="SITE" /> sekarang karena sertifikatnya telah dicabut. Error jaringan dan serangan biasanya bersifat sementara, sehingga halaman ini mungkin akan berfungsi nanti.</translation> <translation id="536296301121032821">Gagal menyimpan setelan kebijakan</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">Diabaikan karena penelusuran default tidak diaktifkan menurut kebijakan.</translation> <translation id="681021252041861472">Kolom Wajib Diisi</translation> <translation id="6810899417690483278">ID Penyesuaian</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Gagal memuat data region</translation> <translation id="6825578344716086703">Anda berusaha menjangkau <ph name="DOMAIN" />, tetapi server menyajikan sertifikat yang ditandatangani menggunakan algoritme tanda tangan yang lemah (seperti SHA-1). Hal ini berarti kredensial keamanan yang disajikan server mungkin telah dipalsukan, dan server tersebut mungkin bukan yang diharapkan (Anda mungkin sedang berkomunikasi dengan penyerang).</translation> <translation id="6831043979455480757">Terjemahkan</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">Pengguna:</translation> <translation id="6944692733090228304">Anda memasukkan sandi di situs yang tidak dikelola oleh <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Untuk melindungi akun, jangan gunakan sandi yang sama di aplikasi dan situs lain.</translation> <translation id="6945221475159498467">Pilih</translation> -<translation id="6948540501704460596">Untuk mendapatkan kartu di semua perangkat Anda, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Untuk melihat persyaratan dan metode pengambilan, pilih alamat</translation> <translation id="6949872517221025916">Setel Ulang Sandi</translation> <translation id="6950684638814147129">Error saat mengurai nilai JSON: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Tagihan ini bisa hanya satu kali atau berulang, dan mungkin tidak pasti.</translation> <translation id="7029809446516969842">Sandi</translation> -<translation id="7042837854211185817">Untuk mendapatkan kartu di semua perangkat Anda, aktifkan sinkronisasi.</translation> <translation id="7050187094878475250">Anda berusaha menjangkau <ph name="DOMAIN" />, namun server memberikan sertifikat yang masa berlakunya terlalu lama untuk dapat dipercaya.</translation> <translation id="7053983685419859001">Blokir</translation> <translation id="7064851114919012435">Info kontak</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb index a5f49ea..839b340 100644 --- a/components/strings/components_strings_it.xtb +++ b/components/strings/components_strings_it.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Caricamento</translation> <translation id="1640180200866533862">Criteri utente</translation> <translation id="1640244768702815859">Prova a <ph name="BEGIN_LINK" />visitare la home page del sito<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">La configurazione di rete non è valida e non può essere importata.</translation> <translation id="1644574205037202324">Cronologia</translation> <translation id="1645368109819982629">Protocollo non supportato</translation> <translation id="1655462015569774233">{1,plural, =1{Questo server non è riuscito a verificare che si tratti di <ph name="DOMAIN" />; il relativo certificato di sicurezza è scaduto ieri. Il problema potrebbe essere dovuto a un'errata configurazione o a un malintenzionato che intercetta la connessione. L'orologio del computer è attualmente impostato su <ph name="CURRENT_DATE" />. È corretto? Se è sbagliato, dovresti regolare l'orologio e aggiornare la pagina.}other{Questo server non è riuscito a verificare che si tratti di <ph name="DOMAIN" />; il relativo certificato di sicurezza è scaduto # giorni fa. Il problema potrebbe essere dovuto a un'errata configurazione o a un malintenzionato che intercetta la connessione. L'orologio del computer è attualmente impostato su <ph name="CURRENT_DATE" />. È corretto? Se è sbagliato, dovresti regolare l'orologio e aggiornare la pagina.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Questo server non è riuscito a dimostrare che si tratta di <ph name="DOMAIN" />; il relativo certificato di sicurezza proviene da <ph name="DOMAIN2" />. Il problema potrebbe essere dovuto a un'errata configurazione o a un malintenzionato che intercetta la connessione.</translation> <translation id="2948083400971632585">Puoi disattivare tutti i proxy configurati per una connessione dalla pagina delle impostazioni.</translation> <translation id="2955913368246107853">Chiudi la barra di ricerca</translation> -<translation id="2958431318199492670">La configurazione di rete non è conforme allo standard ONC. Parti della configurazione potrebbero non essere importate.</translation> <translation id="2969319727213777354">Per poter stabilire una connessione protetta, l'orologio deve essere impostato correttamente perché i certificati utilizzati dai siti web per identificarsi sono validi soltanto per determinati periodi di tempo. L'orologio del dispositivo non è impostato sull'orario corretto, pertanto Chrome non può verificare i certificati.</translation> <translation id="2972581237482394796">&Ripeti</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, attualmente selezionata. <ph name="ROW_CONTENT" /></translation> @@ -353,7 +351,6 @@ <translation id="3391030046425686457">Indirizzo di consegna</translation> <translation id="3395827396354264108">Metodo di ritiro</translation> <translation id="3399952811970034796">Indirizzo di consegna</translation> -<translation id="3409072600744224192"><ph name="SIGN_IN_LINK" /> per avere a disposizione le tue carte su tutti i dispositivi.</translation> <translation id="3422248202833853650">Prova a uscire da altri programmi per liberare spazio nella memoria.</translation> <translation id="3422472998109090673"><ph name="HOST_NAME" /> non è attualmente raggiungibile.</translation> <translation id="3427092606871434483">Consenti (predefinita)</translation> @@ -579,7 +576,6 @@ <translation id="5045550434625856497">Password non corretta</translation> <translation id="5056549851600133418">Articoli per te</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Controllare l'indirizzo proxy<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Accedi e attiva la sincronizzazione per avere a disposizione le tue carte su tutti i dispositivi.</translation> <translation id="5086888986931078152">Potresti non riuscire più ad accedere ai contenuti protetti di alcuni siti.</translation> <translation id="5087286274860437796">Il certificato del server non è valido in questa fase.</translation> <translation id="5087580092889165836">Aggiungi carta</translation> @@ -625,7 +621,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> di <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Scegli le informazioni di contatto</translation> <translation id="5327248766486351172">Nome</translation> -<translation id="5327567770033251652">Attiva la sincronizzazione</translation> <translation id="5332219387342487447">Modalità di spedizione</translation> <translation id="5355557959165512791">Al momento non puoi visitare il sito <ph name="SITE" /> perché il relativo certificato è stato revocato. In genere gli errori di rete e gli attacchi sono temporanei, pertanto questa pagina potrebbe funzionare più tardi.</translation> <translation id="536296301121032821">Archiviazione delle impostazioni criterio non riuscita</translation> @@ -803,7 +798,6 @@ <translation id="679355240208270552">Ignorato perché la ricerca predefinita non è attiva secondo la norma.</translation> <translation id="681021252041861472">Campo obbligatorio</translation> <translation id="6810899417690483278">ID personalizzazione</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Impossibile caricare i dati sull'area geografica</translation> <translation id="6825578344716086703">Hai tentato di accedere al sito <ph name="DOMAIN" />, ma il server ha presentato un certificato firmato utilizzando un algoritmo di firma debole (ad esempio SHA-1). Ciò significa che le credenziali di sicurezza presentate dal server potrebbero essere state falsificate e il server potrebbe non essere quello previsto (è possibile che tu stia comunicando con un malintenzionato).</translation> <translation id="6831043979455480757">Traduci</translation> @@ -819,7 +813,6 @@ <translation id="6915804003454593391">Utente:</translation> <translation id="6944692733090228304">Hai inserito la password in un sito non gestito da <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Per proteggere il tuo account, non riutilizzare la password con altri siti e app.</translation> <translation id="6945221475159498467">Seleziona</translation> -<translation id="6948540501704460596"><ph name="SYNC_LINK" /> per avere a disposizione le tue carte su tutti i dispositivi.</translation> <translation id="6948701128805548767">Seleziona un indirizzo per conoscere i requisiti e i metodi di ritiro</translation> <translation id="6949872517221025916">Reimposta la password</translation> <translation id="6950684638814147129">Errore durante l'analisi del valore JSON: <ph name="ERROR" /></translation> @@ -834,7 +827,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">L'addebito potrebbe essere singolo oppure ricorrente e potrebbe non essere evidente.</translation> <translation id="7029809446516969842">Password</translation> -<translation id="7042837854211185817">Attiva la sincronizzazione per avere a disposizione le tue carte su tutti i dispositivi.</translation> <translation id="7050187094878475250">Hai tentato di visitare il sito <ph name="DOMAIN" />, ma il server ha presentato un certificato con periodo di validità troppo lungo per poter essere ritenuto attendibile.</translation> <translation id="7053983685419859001">Blocca</translation> <translation id="7064851114919012435">Informazioni di contatto</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index 217a0f92..f89e22ad 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">טוען</translation> <translation id="1640180200866533862">מדיניות משתמשים</translation> <translation id="1640244768702815859">נסה <ph name="BEGIN_LINK" />להיכנס לדף הבית של האתר<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">תצורת הרשת אינה חוקית ולא ניתן לייבא אותה.</translation> <translation id="1644574205037202324">היסטוריה</translation> <translation id="1645368109819982629">פרוטוקול לא נתמך</translation> <translation id="1655462015569774233">{1,plural, =1{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />; התוקף של אישור האבטחה שלו פג אתמול. ייתכן שהסיבה לכך היא הגדרה שגויה או שתוקף מיירט את החיבור שלך. התאריך המוגדר כעת בשעון המחשב שלך הוא <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}two{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />; התוקף של אישור האבטחה שלו פג לפני יומיים. ייתכן שהסיבה לכך היא הגדרה שגויה או שתוקף מיירט את החיבור שלך. התאריך המוגדר כעת בשעון המחשב שלך הוא <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}many{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />; התוקף של אישור האבטחה שלו פג לפני # ימים. ייתכן שהסיבה לכך היא הגדרה שגויה או שתוקף מיירט את החיבור שלך. התאריך המוגדר כעת בשעון המחשב שלך הוא <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}other{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />; התוקף של אישור האבטחה שלו פג לפני # ימים. ייתכן שהסיבה לכך היא הגדרה שגויה או שתוקף מיירט את החיבור שלך. התאריך המוגדר כעת בשעון המחשב שלך הוא <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}}</translation> @@ -283,7 +282,6 @@ <translation id="2941952326391522266">השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. אישור האבטחה שלו הוא מ-<ph name="DOMAIN2" />. ייתכן שהסיבה לכך היא תצורה שגויה או תוקף המיירט את החיבור שלך.</translation> <translation id="2948083400971632585">ניתן להשבית כל שרת proxy המוגדר לחיבור מדף ההגדרות.</translation> <translation id="2955913368246107853">סגור את חלונית החיפוש</translation> -<translation id="2958431318199492670">תצורת הרשת אינה תואמת לתקן ONC. ייתכן שחלקים מהתצורה לא ייכללו בייבוא.</translation> <translation id="2969319727213777354">כדי ליצור חיבור מאובטח, השעון צריך להיות מוגדר כהלכה. הסיבה לכך היא שהאישורים שבאמצעותם אתרים מזהים את עצמם תקפים רק למשך פרקי זמן מסוימים. מאחר שהשעון במכשיר שלך שגוי, Google Chrome לא יכול לאמת את האישורים האלה.</translation> <translation id="2972581237482394796">&בצע שנית</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, בחירה נוכחית. <ph name="ROW_CONTENT" /></translation> @@ -806,7 +804,6 @@ <translation id="679355240208270552">המערכת התעלמה מערך מדיניות זה, משום שלפי המדיניות חיפוש ברירת המחדל מושבת.</translation> <translation id="681021252041861472">שדה חובה</translation> <translation id="6810899417690483278">מזהה של התאמה אישית</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">נכשלה הטעינה של נתוני האזורים</translation> <translation id="6825578344716086703">ניסית להגיע אל <ph name="DOMAIN" />, אבל השרת הציג אישור שנחתם באמצעות אלגוריתם חתימה חלש (כמו SHA-1). המשמעות היא שפרטי האבטחה שהוצגו על-ידי השרת עלולים להיות מזויפים, וייתכן שהשרת הוא לא השרת שציפית לו (ייתכן שנוצר קשר בינך לבין התוקף).</translation> <translation id="6831043979455480757">תרגם</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index 84173f5..d3c1fc0 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">読み込み中</translation> <translation id="1640180200866533862">ユーザー ポリシー</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />サイトのホームページにアクセス<ph name="END_LINK" />してみてください。</translation> -<translation id="1644184664548287040">ネットワーク設定が無効なためインポートできませんでした。</translation> <translation id="1644574205037202324">履歴</translation> <translation id="1645368109819982629">サポートされていないプロトコルです</translation> <translation id="1655462015569774233">{1,plural, =1{このサーバーが <ph name="DOMAIN" /> であることを確認できませんでした。セキュリティ証明書の有効期限が昨日付けで切れています。原因として、設定が不適切であるか、悪意のあるユーザーが接続を妨害していることが考えられます。パソコンの時計は現在 <ph name="CURRENT_DATE" />に設定されています。この時刻が正しくない場合は、システムの時計を修正した後このページを更新してください。}other{このサーバーが <ph name="DOMAIN" /> であることを確認できませんでした。セキュリティ証明書の有効期限が # 日前に切れています。原因として、設定が不適切であるか、悪意のあるユーザーが接続を妨害していることが考えられます。パソコンの時計は現在 <ph name="CURRENT_DATE" />に設定されています。この時刻が正しくない場合は、システムの時計を修正した後このページを更新してください。}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">続行</translation> <translation id="2365563543831475020"><ph name="CRASH_TIME" /> に作成されたクラッシュ レポートはアップロードされませんでした</translation> <translation id="2367567093518048410">レベル</translation> +<translation id="2378238891085281592">プライベート モードです</translation> <translation id="2384307209577226199">企業のデフォルト</translation> <translation id="2386255080630008482">サーバーの証明書は取り消されています。</translation> <translation id="2392959068659972793">値が設定されていないポリシーを表示する</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">このサーバーが <ph name="DOMAIN" /> であることを確認できませんでした。このサーバーのセキュリティ証明書は <ph name="DOMAIN2" /> から発行されています。原因としては、不適切な設定や、悪意のあるユーザーによる接続妨害が考えられます。</translation> <translation id="2948083400971632585">接続用に設定されたプロキシは、設定ページで無効にできます。</translation> <translation id="2955913368246107853">検索バーを閉じる</translation> -<translation id="2958431318199492670">ネットワーク設定が ONC 標準に準拠していません。設定の一部がインポートされない可能性があります。</translation> <translation id="2969319727213777354">安全な接続を確立するには、時計が正しく設定されている必要があります。これは、ウェブサイトが自身を証明するために使用する証明書には有効期限があるためです。デバイスの時計が正しくないため、Google Chrome でこれらの証明書を確認することができません。</translation> <translation id="2972581237482394796">やり直し(&R)</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />が現在選択されています。<ph name="ROW_CONTENT" /></translation> @@ -514,6 +513,7 @@ <translation id="450710068430902550">管理者との共有</translation> <translation id="4515275063822566619">Chrome と Google アカウント(<ph name="ACCOUNT_EMAIL" />)に保存されているクレジット カードと住所です。[<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />] で管理できます。</translation> <translation id="4522570452068850558">詳細</translation> +<translation id="4524805452350978254">カードを管理</translation> <translation id="4552089082226364758">Flash</translation> <translation id="4558551763791394412">拡張機能を無効にしてみてください。</translation> <translation id="457875822857220463">配送</translation> @@ -700,6 +700,7 @@ <translation id="5866257070973731571">電話番号の追加</translation> <translation id="5869405914158311789">このサイトにアクセスできません</translation> <translation id="5869522115854928033">保存したパスワード</translation> +<translation id="5887400589839399685">カードが保存されました</translation> <translation id="5893752035575986141">クレジット カードをご利用いただけます。</translation> <translation id="5908541034548427511"><ph name="TYPE_1" />(同期済み)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 個が使用中}other{# 個が使用中}}</translation> @@ -801,7 +802,6 @@ <translation id="679355240208270552">ポリシーによって既定の検索エンジンが有効になっていないため、無視されました。</translation> <translation id="681021252041861472">必須項目</translation> <translation id="6810899417690483278">カスタム ID</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">地域データを読み込めませんでした</translation> <translation id="6825578344716086703"><ph name="DOMAIN" /> にアクセスしようとしましたが、脆弱な署名アルゴリズム(SHA-1 など)を使用して署名された証明書がサーバーから提示されました。このセキュリティ認証情報は偽装されたものである可能性があり、アクセスしようとしたサーバーとは別のサーバーが応答している可能性があります(悪意のあるユーザーと通信している可能性があります)。</translation> <translation id="6831043979455480757">翻訳</translation> @@ -820,11 +820,13 @@ <translation id="6948701128805548767">受け取り方法と要件を確認するには、住所を選択してください</translation> <translation id="6949872517221025916">パスワードを再設定</translation> <translation id="6950684638814147129">JSON 値の解析中にエラーが発生しました: <ph name="ERROR" /></translation> +<translation id="6957624206566198865">ページを新しいプライベート タブで開く</translation> <translation id="6957887021205513506">サーバーの証明書が偽造されたもののようです。</translation> <translation id="6965382102122355670">OK</translation> <translation id="6965978654500191972">デバイス</translation> <translation id="6970216967273061347">地区</translation> <translation id="6973656660372572881">固定プロキシ サーバーと .pac スクリプト URL の両方が指定されています。</translation> +<translation id="6984479912851154518">外部アプリケーションでのお支払い処理に進むため、プライベート モードを解除します。続行しますか?</translation> <translation id="6989763994942163495">詳細設定を表示...</translation> <translation id="7012363358306927923">中国銀聯</translation> <translation id="7016992613359344582">料金の請求は 1 回限りの場合も毎月行われる場合もあり、課金されたかどうかわからないこともあります。</translation> @@ -1076,6 +1078,7 @@ <translation id="8820817407110198400">ブックマーク</translation> <translation id="883848425547221593">その他のブックマーク</translation> <translation id="884264119367021077">配送先住所</translation> +<translation id="8846319957959474018">ブックマークを使って簡単にアプリを開くことができます</translation> <translation id="884923133447025588">取り消し機構が見つかりません。</translation> <translation id="885730110891505394">Google との共有</translation> <translation id="8858065207712248076"><ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> パスワードを他のサイトで再使用した場合、Chrome ではパスワードの再設定を促すメッセージが表示されます。</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb index 609460e..0759bcb 100644 --- a/components/strings/components_strings_kn.xtb +++ b/components/strings/components_strings_kn.xtb
@@ -105,7 +105,6 @@ <translation id="1639239467298939599">ಲೋಡ್ ಆಗುತ್ತಿದೆ</translation> <translation id="1640180200866533862">ಬಳಕೆದಾರನ ನೀತಿಗಳು</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />ಸೈಟ್ನ ಮುಖಪುಟಕ್ಕೆ ಭೇಟಿ ನೀಡಲು<ph name="END_LINK" /> ಪ್ರಯತ್ನಿಸಿ.</translation> -<translation id="1644184664548287040">ನೆಟ್ವರ್ಕ್ ಕಾನ್ಫಿಗರೇಶನ್ ಅಮಾನ್ಯವಾಗಿದೆ ಹಾಗೂ ಆಮದು ಮಾಡಲಾಗುವುದಿಲ್ಲ.</translation> <translation id="1644574205037202324">ಇತಿಹಾಸ</translation> <translation id="1645368109819982629">ಬೆಂಬಲವಿಲ್ಲದ ಪ್ರೊಟೋಕಾಲ್</translation> <translation id="1655462015569774233">{1,plural, =1{ಈ ಸರ್ವರ್ <ph name="DOMAIN" /> ಆಗಿದೆ ಎಂಬುದನ್ನು ಸಾಬೀತುಪಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ; ಅದರ ಸುರಕ್ಷತಾ ಪ್ರಮಾಣಪತ್ರದ ಅವಧಿಯು ನಿನ್ನೆ ಮುಗಿದಿದೆ. ಇದು ತಪ್ಪು ಕಾನ್ಫಿಗರೇಶನ್ನಿಂದ ಅಥವಾ ಆಕ್ರಮಣಕಾರರು ನಿಮ್ಮ ಸಂಪರ್ಕದಲ್ಲಿ ಒಳನುಸುಳಿರುವುದರಿಂದ ಆಗಿರಬಹುದು. ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನ ಗಡಿಯಾರವನ್ನು ಪ್ರಸ್ತುತ <ph name="CURRENT_DATE" /> ಗೆ ಹೊಂದಿಸಲಾಗಿದೆ. ಅದು ಸರಿಯಾಗಿದೆಯೇ? ಇಲ್ಲದಿದ್ದರೆ, ನಿಮ್ಮ ಸಿಸ್ಟಂನ ಗಡಿಯಾರವನ್ನು ನೀವು ಸರಿಪಡಿಸಿ ಹಾಗೂ ನಂತರ ಈ ಪುಟವನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಿ.}one{ಈ ಸರ್ವರ್ <ph name="DOMAIN" /> ಆಗಿದೆ ಎಂಬುದನ್ನು ಸಾಬೀತುಪಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ; ಅದರ ಸುರಕ್ಷತಾ ಪ್ರಮಾಣಪತ್ರದ ಅವಧಿಯು # ದಿನಗಳ ಹಿಂದೆ ಮುಗಿದಿದೆ. ಇದು ತಪ್ಪು ಕಾನ್ಫಿಗರೇಶನ್ನಿಂದ ಅಥವಾ ಆಕ್ರಮಣಕಾರರು ನಿಮ್ಮ ಸಂಪರ್ಕದಲ್ಲಿ ಒಳನುಸುಳಿರುವುದರಿಂದ ಆಗಿರಬಹುದು. ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನ ಗಡಿಯಾರವನ್ನು ಪ್ರಸ್ತುತ <ph name="CURRENT_DATE" /> ಗೆ ಹೊಂದಿಸಲಾಗಿದೆ. ಅದು ಸರಿಯಾಗಿದೆಯೇ? ಇಲ್ಲದಿದ್ದರೆ, ನಿಮ್ಮ ಸಿಸ್ಟಂನ ಗಡಿಯಾರವನ್ನು ನೀವು ಸರಿಪಡಿಸಿ ಹಾಗೂ ನಂತರ ಈ ಪುಟವನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಿ.}other{ಈ ಸರ್ವರ್ <ph name="DOMAIN" /> ಆಗಿದೆ ಎಂಬುದನ್ನು ಸಾಬೀತುಪಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ; ಅದರ ಸುರಕ್ಷತಾ ಪ್ರಮಾಣಪತ್ರದ ಅವಧಿಯು # ದಿನಗಳ ಹಿಂದೆ ಮುಗಿದಿದೆ. ಇದು ತಪ್ಪು ಕಾನ್ಫಿಗರೇಶನ್ನಿಂದ ಅಥವಾ ಆಕ್ರಮಣಕಾರರು ನಿಮ್ಮ ಸಂಪರ್ಕದಲ್ಲಿ ಒಳನುಸುಳಿರುವುದರಿಂದ ಆಗಿರಬಹುದು. ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನ ಗಡಿಯಾರವನ್ನು ಪ್ರಸ್ತುತ <ph name="CURRENT_DATE" /> ಗೆ ಹೊಂದಿಸಲಾಗಿದೆ. ಅದು ಸರಿಯಾಗಿದೆಯೇ? ಇಲ್ಲದಿದ್ದರೆ, ನಿಮ್ಮ ಸಿಸ್ಟಂನ ಗಡಿಯಾರವನ್ನು ನೀವು ಸರಿಪಡಿಸಿ ಹಾಗೂ ನಂತರ ಈ ಪುಟವನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಿ.}}</translation> @@ -206,6 +205,7 @@ <translation id="2359808026110333948">ಮುಂದುವರಿಸು</translation> <translation id="2365563543831475020"><ph name="CRASH_TIME" /> ನಲ್ಲಿ ಸೆರೆಹಿಡಿಯಲಾದ ಕ್ರ್ಯಾಶ್ ವರದಿಯನ್ನು ಅಪ್ಲೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ</translation> <translation id="2367567093518048410">ಹಂತ</translation> +<translation id="2378238891085281592">ನೀವು ಖಾಸಗಿ ಮೋಡ್ಗೆ ಹೋಗಿದ್ದೀರಿ.</translation> <translation id="2384307209577226199">ಎಂಟರ್ಪ್ರೈಸ್ ಡಿಫಾಲ್ಟ್</translation> <translation id="2386255080630008482">ಸರ್ವರ್ನ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಹಿಂಪಡೆಯಲಾಗಿದೆ.</translation> <translation id="2392959068659972793">ಯಾವುದೇ ಮೌಲ್ಯ ಹೊಂದಿಸಿಲ್ಲದ ನೀತಿಗಳನ್ನು ತೋರಿಸಿ</translation> @@ -282,7 +282,6 @@ <translation id="2941952326391522266">ಈ ಸರ್ವರ್ <ph name="DOMAIN" /> ಆಗಿದೆ ಎಂಬುದನ್ನು ಸಾಬೀತುಪಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ; ಅದರ ಸುರಕ್ಷತಾ ಪ್ರಮಾಣಪತ್ರವು <ph name="DOMAIN2" /> ದಿಂದ ಆಗಿದೆ. ಇದು ತಪ್ಪು ಕಾನ್ಫಿಗರೇಶನ್ನಿಂದ ಅಥವಾ ಆಕ್ರಮಣಕಾರರು ನಿಮ್ಮ ಸಂಪರ್ಕದಲ್ಲಿ ಒಳನುಸುಳಿರುವುದರಿಂದ ಆಗಿರಬಹುದು.</translation> <translation id="2948083400971632585">ಸಂಪರ್ಕಕ್ಕಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿರುವ ಯಾವುದೇ ಪ್ರಾಕ್ಸಿಗಳನ್ನು ನೀವು ಸೆಟ್ಟಿಂಗ್ಗಳ ಪುಟದಿಂದ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು.</translation> <translation id="2955913368246107853">ಹುಡುಕಿ ಬಾರ್ ಅನ್ನು ಮುಚ್ಚಿ</translation> -<translation id="2958431318199492670">ONC ಪ್ರಮಾಣಿತಕ್ಕೆ ನೆಟ್ವರ್ಕ್ ಕಾನ್ಫಿಗರೇಶನ್ ಅನುಸರಣೆಯಾಗುವುದಿಲ್ಲ. ಕಾನ್ಫಿಗರೇಶನ್ನ ಭಾಗಗಳನ್ನು ಆಮದು ಮಾಡಲಾಗದಿರಬಹುದು.</translation> <translation id="2969319727213777354">ಸುರಕ್ಷಿತ ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸಲು, ನಿಮ್ಮ ಗಡಿಯಾರವನ್ನು ಸರಿಯಾಗಿ ಹೊಂದಿಸಬೇಕಾದ ಅಗತ್ಯವಿದೆ. ವೆಬ್ಸೈಟ್ಗಳು ತಮ್ಮನ್ನು ಗುರುತಿಸಲು ಬಳಸುವ ಪ್ರಮಾಣಪತ್ರಗಳು ನಿರ್ದಿಷ್ಟ ಅವಧಿಗಳಲ್ಲಿ ಮಾತ್ರ ಮಾನ್ಯವಾಗಿರುವ ಕಾರಣ ಹೀಗಾಗುತ್ತದೆ. ನಿಮ್ಮ ಸಾಧನದ ಗಡಿಯಾರವು ತಪ್ಪಾಗಿರುವ ಕಾರಣ, Google Chrome ಗೆ ಈ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.</translation> <translation id="2972581237482394796">&ಮತ್ತೆಮಾಡು</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, ಪ್ರಸ್ತುತವಾಗಿ ಆಯ್ಕೆ ಮಾಡಿರುವುದು. <ph name="ROW_CONTENT" /></translation> @@ -510,6 +509,7 @@ <translation id="450710068430902550">ನಿರ್ವಾಹಕರೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳುವುದು</translation> <translation id="4515275063822566619">ಕಾರ್ಡ್ಗಳು ಮತ್ತು ವಿಳಾಸಗಳನ್ನು ನಿಮ್ಮ Chrome ಮತ್ತು ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ (<ph name="ACCOUNT_EMAIL" />) ಪಡೆಯಲಾಗಿದೆ. ನೀವು ಅವುಗಳನ್ನು <ph name="BEGIN_LINK" />ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ<ph name="END_LINK" /> ನಿರ್ವಹಿಸಬಹುದು.</translation> <translation id="4522570452068850558">ವಿವರಗಳು</translation> +<translation id="4524805452350978254">ಕಾರ್ಡ್ಗಳನ್ನು ನಿರ್ವಹಿಸಿ</translation> <translation id="4552089082226364758">ಫ್ಲ್ಯಾಶ್</translation> <translation id="4558551763791394412">ನಿಮ್ಮ ವಿಸ್ತರಣೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="457875822857220463">ವಿತರಣೆ</translation> @@ -695,6 +695,7 @@ <translation id="5866257070973731571">ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಸೇರಿಸಿ</translation> <translation id="5869405914158311789">ಈ ಸೈಟ್ ತಲುಪಲಾಗುವುದಿಲ್ಲ</translation> <translation id="5869522115854928033">ಉಳಿಸಲಾದ ಪಾಸ್ವರ್ಡ್ಗಳು</translation> +<translation id="5887400589839399685">ಕಾರ್ಡ್ ಉಳಿಸಲಾಗಿದೆ</translation> <translation id="5893752035575986141">ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ಗಳನ್ನು ಸಮ್ಮತಿಸಲಾಗಿದೆ.</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (ಸಿಂಕ್ ಮಾಡಲಾಗಿದೆ)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 ಬಳಕೆಯಲ್ಲಿದೆ}one{# ಬಳಕೆಯಲ್ಲಿದೆ}other{# ಬಳಕೆಯಲ್ಲಿದೆ}}</translation> @@ -795,7 +796,6 @@ <translation id="679355240208270552">ಡೀಫಾಲ್ಟ್ ಹುಡುಕಾಟವನ್ನು ನೀತಿಯ ಮೂಲಕ ಸಕ್ರಿಯಗೊಳಿಸದ ಕಾರಣ ನಿರ್ಲಕ್ಷಿಸಲಾಗಿದೆ.</translation> <translation id="681021252041861472">ಅಗತ್ಯ ಕ್ಷೇತ್ರ</translation> <translation id="6810899417690483278">ಕಸ್ಟಮೈಸೇಶನ್ ಐಡಿ</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">ಪ್ರದೇಶಗಳ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ</translation> <translation id="6825578344716086703">ನೀವು <ph name="DOMAIN" /> ಅನ್ನು ತಲುಪಲು ಪ್ರಯತ್ನಿಸಿದಿರಿ, ಆದರೆ ದುರ್ಬಲ ಸಹಿ ಅಲ್ಗಾರಿದಮ್ (SHA-1 ಅದರಂತೆ) ಬಳಸಿಕೊಂಡು ಸಹಿ ಮಾಡಿದ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಸರ್ವರ್ ಒದಗಿಸಿದೆ. ಇದರರ್ಥ ಸರ್ವರ್ ಒದಗಿಸಿದ ಸುರಕ್ಷತೆ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಖೋಟಾ ತಯಾರಿಸಿರಬಹುದು, ಮತ್ತು ನೀವು ನಿರೀಕ್ಷಿಸಿದ ಸರ್ವರ್ ಅದಾಗಿರದೇ ಇರಬಹುದು (ನೀವು ದಾಳಿಕೋರರೊಂದಿಗೆ ಸಂವಹನ ಮಾಡುತ್ತಿರಬಹುದು).</translation> <translation id="6831043979455480757">ಅನುವಾದಿಸು</translation> @@ -814,11 +814,13 @@ <translation id="6948701128805548767">ಪಿಕಪ್ ವಿಧಾನಗಳು ಹಾಗೂ ಆವಶ್ಯಕತೆಗಳನ್ನು ನೋಡಲು, ಒಂದು ವಿಳಾಸವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ</translation> <translation id="6949872517221025916">ಪಾಸ್ವರ್ಡ್ ಮರುಹೊಂದಿಸಿ</translation> <translation id="6950684638814147129">JSON ಮೌಲ್ಯವನ್ನು ವಿಶ್ಲೇಷಿಸುವಲ್ಲಿ ದೋಷ: <ph name="ERROR" /></translation> +<translation id="6957624206566198865">ಪುಟವನ್ನು ಹೊಸ ಖಾಸಗಿ ಟ್ಯಾಬ್ನಲ್ಲಿ ತೆರೆಯಿರಿ</translation> <translation id="6957887021205513506">ಸರ್ವರ್ಗಳ ಪ್ರಮಾಣಪತ್ರವು ನಕಲಿಯಾಗಿ ಗೋಚರಿಸುತ್ತದೆ.</translation> <translation id="6965382102122355670">ಸರಿ</translation> <translation id="6965978654500191972">ಸಾಧನ</translation> <translation id="6970216967273061347">ಜಿಲ್ಲೆ</translation> <translation id="6973656660372572881">ಹೊಂದಿಸಿದ ಪ್ರಾಕ್ಸಿ ಸರ್ವರ್ಗಳು ಮತ್ತು .pac ಸ್ಕ್ರಿಪ್ಟ್ URL ಎರಡನ್ನೂ ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿದೆ.</translation> +<translation id="6984479912851154518">ಬಾಹ್ಯ ಆ್ಯಪ್ ಮೂಲಕ ಪಾವತಿಸಲು ಖಾಸಗಿ ಮೋಡ್ ತೊರೆಯಲಾಗುತ್ತಿದೆ. ಮುಂದುವರಿಸುವುದೇ?</translation> <translation id="6989763994942163495">ಸುಧಾರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೋರಿಸು...</translation> <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">ಇವುಗಳು ಒಂದು ಬಾರಿ ಪಾವತಿಸುವಂತಹ ಶುಲ್ಕಗಳಾಗಿರಬಹುದು, ಮರುಕಳಿಸುವ ಶುಲ್ಕಗಳಾಗಿರಬಹುದು ಅಥವಾ ಸ್ಪಷ್ಟವಾಗಿಲ್ಲದೇ ಇರಬಹುದು.</translation> @@ -1069,6 +1071,7 @@ <translation id="8820817407110198400">ಬುಕ್ಮಾರ್ಕ್ಗಳು</translation> <translation id="883848425547221593">ಇತರ ಬುಕ್ಮಾರ್ಕ್ಗಳು:</translation> <translation id="884264119367021077">ಶಿಪ್ಪಿಂಗ್ ವಿಳಾಸ</translation> +<translation id="8846319957959474018">ಬುಕ್ಮಾರ್ಕ್ಗಳ ಮೂಲಕ ಸುಲಭವಾಗಿ ಆ್ಯಪ್ಗಳನ್ನು ತೆರೆಯಿರಿ</translation> <translation id="884923133447025588">ವಿಫಲವಾದ ಕಾರ್ಯತಂತ್ರ ಪತ್ತೆಯಾಗಿಲ್ಲ.</translation> <translation id="885730110891505394">Google ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳುವುದು</translation> <translation id="8858065207712248076">ನೀವು ಇತರ ಸೈಟ್ಗಳಲ್ಲಿ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಮರುಬಳಕೆ ಮಾಡಿದ್ದಲ್ಲಿ Chrome ನಿಮ್ಮ <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ಪಾಸವರ್ಡ್ ಅನ್ನು ಮರುಹೊಂದಿಸಲು ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ.</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb index d641ec4..436aa710 100644 --- a/components/strings/components_strings_ko.xtb +++ b/components/strings/components_strings_ko.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">로드 중</translation> <translation id="1640180200866533862">사용자 정책</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />사이트의 홈페이지를 방문<ph name="END_LINK" />해 보세요.</translation> -<translation id="1644184664548287040">네트워크 구성이 잘못되어 가져올 수 없습니다.</translation> <translation id="1644574205037202324">방문 기록</translation> <translation id="1645368109819982629">지원되지 않는 프로토콜</translation> <translation id="1655462015569774233">{1,plural, =1{서버의 보안 인증서가 어제 만료되어 <ph name="DOMAIN" />임을 입증할 수 없습니다. 서버를 잘못 설정했거나 불법 사용자가 연결을 가로채고 있기 때문일 수 있습니다. 현재 컴퓨터의 시계가 <ph name="CURRENT_DATE" />로 설정되어 있습니다. 시간이 정확하지 않으면 시스템 시계를 수정한 뒤 이 페이지를 새로고침하세요.}other{서버의 보안 인증서가 #일 전에 만료되어 <ph name="DOMAIN" />임을 입증할 수 없습니다. 서버를 잘못 설정했거나 불법 사용자가 연결을 가로채고 있기 때문일 수 있습니다. 현재 컴퓨터의 시계가 <ph name="CURRENT_DATE" />로 설정되어 있습니다. 시간이 정확하지 않으면 시스템 시계를 수정한 뒤 이 페이지를 새로고침하세요.}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">계속</translation> <translation id="2365563543831475020"><ph name="CRASH_TIME" />에 캡처된 비정상 종료 보고서가 업로드되지 않았습니다.</translation> <translation id="2367567093518048410">수준</translation> +<translation id="2378238891085281592">시크릿 모드로 전환됨</translation> <translation id="2384307209577226199">엔터프라이즈 기본값</translation> <translation id="2386255080630008482">서버 인증서가 폐기되었습니다.</translation> <translation id="2392959068659972793">값이 설정되지 않은 정책 표시</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">이 서버가 <ph name="DOMAIN" />임을 입증할 수 없으며 서버의 보안 인증서가 <ph name="DOMAIN2" />에서 제공한 것입니다. 서버를 잘못 설정했거나 불법 사용자가 연결을 가로채고 있기 때문일 수 있습니다.</translation> <translation id="2948083400971632585">설정 페이지의 연결을 구성하는 프록시를 사용 중지할 수 있습니다.</translation> <translation id="2955913368246107853">검색 바 닫기</translation> -<translation id="2958431318199492670">네트워크 설정이 ONC 표준을 준수하지 않습니다. 일부 설정을 가져올 수 없습니다.</translation> <translation id="2969319727213777354">보안 연결을 설정하려면 시계가 올바로 설정되어 있어야 합니다. 웹사이트가 자신을 식별하는 데 사용하는 인증서는 특정 기간에만 유효하기 때문입니다. 기기의 시계가 잘못 설정되어 Chrome에서 이 인증서를 확인할 수 없습니다.</translation> <translation id="2972581237482394796">다시 실행(&R)</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />이(가) 현재 선택되어 있습니다. <ph name="ROW_CONTENT" /></translation> @@ -514,6 +513,7 @@ <translation id="450710068430902550">관리자와 공유</translation> <translation id="4515275063822566619">카드와 주소는 Chrome 및 Google 계정(<ph name="ACCOUNT_EMAIL" />)에서 가져왔습니다. 이 정보는 <ph name="BEGIN_LINK" />설정<ph name="END_LINK" />에서 관리할 수 있습니다.</translation> <translation id="4522570452068850558">세부정보</translation> +<translation id="4524805452350978254">카드 관리</translation> <translation id="4552089082226364758">Flash</translation> <translation id="4558551763791394412">확장 프로그램 사용 중지해 보기</translation> <translation id="457875822857220463">배송</translation> @@ -577,7 +577,7 @@ <translation id="5039804452771397117">허용</translation> <translation id="5040262127954254034">개인정보</translation> <translation id="5045550434625856497">비밀번호가 잘못되었습니다.</translation> -<translation id="5056549851600133418">추천 도움말</translation> +<translation id="5056549851600133418">추천 기사</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />프록시 주소 확인<ph name="END_LINK" /></translation> <translation id="5086888986931078152">일부 사이트의 보호된 콘텐츠에 액세스하지 못할 수 있습니다.</translation> <translation id="5087286274860437796">서버의 인증서가 현재 유효하지 않습니다.</translation> @@ -700,6 +700,7 @@ <translation id="5866257070973731571">전화번호 추가</translation> <translation id="5869405914158311789">사이트에 연결할 수 없음</translation> <translation id="5869522115854928033">저장된 비밀번호</translation> +<translation id="5887400589839399685">저장된 카드</translation> <translation id="5893752035575986141">신용카드를 사용할 수 있습니다.</translation> <translation id="5908541034548427511"><ph name="TYPE_1" />(동기화됨)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1개 사용 중}other{#개 사용 중}}</translation> @@ -801,7 +802,6 @@ <translation id="679355240208270552">정책에 의해 기본 검색이 사용 설정되지 않았기 때문에 무시되었습니다.</translation> <translation id="681021252041861472">필수 입력란</translation> <translation id="6810899417690483278">맞춤설정 ID</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">지역 데이터를 로드하지 못했습니다.</translation> <translation id="6825578344716086703"><ph name="DOMAIN" />에 접속하려 했으나 서버에서 안전성이 낮은 서명 알고리즘을 사용하여 서명된 인증서(예: SHA-1)를 전달했습니다. 이는 서버에서 전달한 보안 사용자 인증 정보가 위조되었을 수 있으며 사용하려는 서버가 아님을 의미합니다. 서버를 가장한 공격자와 통신 중일 수 있습니다.</translation> <translation id="6831043979455480757">번역</translation> @@ -820,11 +820,13 @@ <translation id="6948701128805548767">수령 방법과 요구사항을 확인하려면 주소를 선택하세요.</translation> <translation id="6949872517221025916">비밀번호 재설정</translation> <translation id="6950684638814147129">JSON 값을 파싱하는 중에 오류가 발생했습니다. <ph name="ERROR" /></translation> +<translation id="6957624206566198865">새 시크릿 탭에서 페이지 열기</translation> <translation id="6957887021205513506">서버의 인증서가 위조된 것 같습니다.</translation> <translation id="6965382102122355670">확인</translation> <translation id="6965978654500191972">기기</translation> <translation id="6970216967273061347">구</translation> <translation id="6973656660372572881">고정 프록시 서버와 .pac 스크립트 URL이 모두 지정되어 있습니다.</translation> +<translation id="6984479912851154518">시크릿 모드를 종료하고 외부 애플리케이션에서 결제합니다. 계속하시겠습니까?</translation> <translation id="6989763994942163495">고급 설정 표시</translation> <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">이러한 청구는 일회성일 수도 있고 반복적일 수도 있으며 명확하지 않을 수도 있습니다.</translation> @@ -1074,6 +1076,7 @@ <translation id="8820817407110198400">북마크</translation> <translation id="883848425547221593">기타 북마크</translation> <translation id="884264119367021077">배송지 주소</translation> +<translation id="8846319957959474018">북마크로 쉽게 앱 열기</translation> <translation id="884923133447025588">폐기 매커니즘을 찾을 수 없습니다.</translation> <translation id="885730110891505394">Google과 공유</translation> <translation id="8858065207712248076">다른 사이트에서 비밀번호를 재사용했다면 <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> 비밀번호를 재설정하는 것이 좋습니다.</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb index e33150a..b6c80b8 100644 --- a/components/strings/components_strings_lt.xtb +++ b/components/strings/components_strings_lt.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Įkeliama</translation> <translation id="1640180200866533862">Naudotojo politika</translation> <translation id="1640244768702815859">Pabandykite <ph name="BEGIN_LINK" />apsilankyti pagrindiniame svetainės puslapyje<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Tinklo konfigūracija netinkama ir jos neįmanoma importuoti.</translation> <translation id="1644574205037202324">Istorija</translation> <translation id="1645368109819982629">Nepalaikomas protokolas</translation> <translation id="1655462015569774233">{1,plural, =1{Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikato galiojimas baigėsi vakar. Taip gali nutikti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užpuoliko. Šiuo metu kompiuterio laikrodis nustatytas į <ph name="CURRENT_DATE" />. Ar tai tinkama? Jei netinkama, turėtumėte koreguoti sistemos laikrodį ir atnaujinti šį puslapį.}one{Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikato galiojimas baigėsi prieš # dieną. Taip gali nutikti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užpuoliko. Šiuo metu kompiuterio laikrodis nustatytas į <ph name="CURRENT_DATE" />. Ar tai tinkama? Jei netinkama, turėtumėte koreguoti sistemos laikrodį ir atnaujinti šį puslapį.}few{Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikato galiojimas baigėsi prieš # dienas. Taip gali nutikti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užpuoliko. Šiuo metu kompiuterio laikrodis nustatytas į <ph name="CURRENT_DATE" />. Ar tai tinkama? Jei netinkama, turėtumėte koreguoti sistemos laikrodį ir atnaujinti šį puslapį.}many{Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikato galiojimas baigėsi prieš # dienos. Taip gali nutikti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užpuoliko. Šiuo metu kompiuterio laikrodis nustatytas į <ph name="CURRENT_DATE" />. Ar tai tinkama? Jei netinkama, turėtumėte koreguoti sistemos laikrodį ir atnaujinti šį puslapį.}other{Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikato galiojimas baigėsi prieš # dienų. Taip gali nutikti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užpuoliko. Šiuo metu kompiuterio laikrodis nustatytas į <ph name="CURRENT_DATE" />. Ar tai tinkama? Jei netinkama, turėtumėte koreguoti sistemos laikrodį ir atnaujinti šį puslapį.}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">Tęsti</translation> <translation id="2365563543831475020"><ph name="CRASH_TIME" /> užfiksuota strigčių ataskaita nebuvo įkelta</translation> <translation id="2367567093518048410">Lygis</translation> +<translation id="2378238891085281592">Įjungėte privatų režimą</translation> <translation id="2384307209577226199">Numatytieji įmonės nustatymai</translation> <translation id="2386255080630008482">Serverio sertifikatas panaikintas.</translation> <translation id="2392959068659972793">Rodyti politiką su nenustatyta verte</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikatas yra iš <ph name="DOMAIN2" />. Taip gali nutikti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užgrobėjo.</translation> <translation id="2948083400971632585">Galite neleisti visų tarpinių serverių, jungimasis prie kurių sukonfigūruotas nustatymų puslapyje.</translation> <translation id="2955913368246107853">Uždaryti paieškos juostą</translation> -<translation id="2958431318199492670">Tinklo konfigūracija neatitinka ONC standarto. Kai kurių konfigūracijos dalių neįmanoma importuoti.</translation> <translation id="2969319727213777354">Kad užmegztumėte saugų ryšį, turėsite tinkamai nustatyti laikrodį. To reikia, nes svetainių tapatybei įrodyti naudojami sertifikatai galioja tik tam tikru laikotarpiu. Įrenginio laikrodis nustatytas netinkamai, todėl „Google Chrome“ negali patvirtinti šių sertifikatų.</translation> <translation id="2972581237482394796">&Atlikti iš naujo</translation> <translation id="2977665033722899841">„<ph name="ROW_NAME" />“, šiuo metu pasirinkta. <ph name="ROW_CONTENT" /></translation> @@ -515,6 +514,7 @@ <translation id="450710068430902550">Bendrinimas su administratoriumi</translation> <translation id="4515275063822566619">Kortelės ir adresai naudojami iš „Chrome“ ir jūsų „Google“ paskyros (<ph name="ACCOUNT_EMAIL" />). Galite juos tvarkyti skiltyje <ph name="BEGIN_LINK" />Nustatymai<ph name="END_LINK" />.</translation> <translation id="4522570452068850558">Išsami informacija</translation> +<translation id="4524805452350978254">Tvarkyti korteles</translation> <translation id="4552089082226364758">Flash</translation> <translation id="4558551763791394412">Pabandykite išjungti plėtinius.</translation> <translation id="457875822857220463">Pristatymas</translation> @@ -701,6 +701,7 @@ <translation id="5866257070973731571">Telefono numerio pridėjimas</translation> <translation id="5869405914158311789">Nepavyksta pasiekti šios svetainės</translation> <translation id="5869522115854928033">Išsaugoti slaptažodžiai</translation> +<translation id="5887400589839399685">Kortelė išsaugota</translation> <translation id="5893752035575986141">Kredito kortelės tinkamos.</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (sinchronizuota)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Naudojamas 1 slapukas}one{Naudojamas # slapukas}few{Naudojami # slapukai}many{Naudojama # slapuko}other{Naudojama # slapukų}}</translation> @@ -802,7 +803,6 @@ <translation id="679355240208270552">Nepaisoma, nes numatytoji paieška neįgalinta pagal politiką.</translation> <translation id="681021252041861472">Būtinas laukas</translation> <translation id="6810899417690483278">Tinkinimo ID</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Nepavyko įkelti regionų duomenų</translation> <translation id="6825578344716086703">Bandėte pasiekti <ph name="DOMAIN" />, bet serveris pateikė sertifikatą, kuris pasirašytas naudojant nesudėtingą parašo algoritmą (pvz., SHA-1). Tai reiškia, kad serverio pateikti saugos prisijungimo duomenys galėjo būti suklastoti ir serveris gali būti ne tas, kurio tikėjotės (gali būti, kad bendraujate su užpuoliku).</translation> <translation id="6831043979455480757">Vertėjas</translation> @@ -821,11 +821,13 @@ <translation id="6948701128805548767">Jei norite peržiūrėti paėmimo metodus ir reikalavimus, pasirinkite adresą</translation> <translation id="6949872517221025916">Slaptažodžio nustatymas iš naujo</translation> <translation id="6950684638814147129">Klaida analizuojant JSON vertę: <ph name="ERROR" /></translation> +<translation id="6957624206566198865">Atidarykite puslapį naujame privačiame skirtuke</translation> <translation id="6957887021205513506">Panašu, kad serverio sertifikatas yra suklastotas.</translation> <translation id="6965382102122355670">Gerai</translation> <translation id="6965978654500191972">Įrenginys</translation> <translation id="6970216967273061347">Rajonas</translation> <translation id="6973656660372572881">Nurodyti fiksuoti įgaliotieji serveriai ir .pac scenarijaus URL.</translation> +<translation id="6984479912851154518">Išjungiate privatų režimą, kad galėtumėte sumokėti naudodami išorinę programą. Tęsti?</translation> <translation id="6989763994942163495">Rodyti išplėstinius nustatymus...</translation> <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Šie mokesčiai gali būti vienkartiniai arba pasikartojantys ir gali būti neaiškūs.</translation> @@ -1077,6 +1079,7 @@ <translation id="8820817407110198400">Žymės</translation> <translation id="883848425547221593">Kitos žymės</translation> <translation id="884264119367021077">Siuntimo adresas</translation> +<translation id="8846319957959474018">Lengvai atidarykite programas naudodamiesi žymėmis</translation> <translation id="884923133447025588">Nerasta atšaukimo mechanizmo.</translation> <translation id="885730110891505394">Bendrinimas su „Google“</translation> <translation id="8858065207712248076">„Chrome“ rekomenduoja iš naujo nustatyti <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> slaptažodį, jei naudojate jį kitose svetainėse.</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb index b43278f..ea7f671 100644 --- a/components/strings/components_strings_lv.xtb +++ b/components/strings/components_strings_lv.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Notiek ielāde</translation> <translation id="1640180200866533862">Lietotāja politikas</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />Apmeklējiet vietnes sākumlapu<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Tīkla konfigurācija nav derīga, un to nevarēja importēt.</translation> <translation id="1644574205037202324">Vēsture</translation> <translation id="1645368109819982629">Neatbalstīts protokols</translation> <translation id="1655462015569774233">{1,plural, =1{Šis serveris nevarēja pierādīt, ka ir <ph name="DOMAIN" />; tā drošības sertifikāta derīguma termiņš beidzās vakar. Šī problēma var rasties nepareizas konfigurācijas dēļ vai tādēļ, ka kāds uzbrucējs ir pārtvēris jūsu savienojumu. Jūsu datora pulkstenī pašlaik ir iestatīts šāds datums: <ph name="CURRENT_DATE" />. Vai tas ir pareizs? Ja datums nav pareizs, mainiet sistēmas pulksteni un pēc tam atsvaidziniet šo lapu.}zero{Šis serveris nevarēja pierādīt, ka ir <ph name="DOMAIN" />; tā drošības sertifikāta derīguma termiņš beidzās pirms # dienām. Šī problēma var rasties nepareizas konfigurācijas dēļ vai tādēļ, ka kāds uzbrucējs ir pārtvēris jūsu savienojumu. Jūsu datora pulkstenī pašlaik ir iestatīts šāds datums: <ph name="CURRENT_DATE" />. Vai tas ir pareizs? Ja datums nav pareizs, mainiet sistēmas pulksteni un pēc tam atsvaidziniet šo lapu.}one{Šis serveris nevarēja pierādīt, ka ir <ph name="DOMAIN" />; tā drošības sertifikāta derīguma termiņš beidzās pirms # dienas. Šī problēma var rasties nepareizas konfigurācijas dēļ vai tādēļ, ka kāds uzbrucējs ir pārtvēris jūsu savienojumu. Jūsu datora pulkstenī pašlaik ir iestatīts šāds datums: <ph name="CURRENT_DATE" />. Vai tas ir pareizs? Ja datums nav pareizs, mainiet sistēmas pulksteni un pēc tam atsvaidziniet šo lapu.}other{Šis serveris nevarēja pierādīt, ka ir <ph name="DOMAIN" />; tā drošības sertifikāta derīguma termiņš beidzās pirms # dienām. Šī problēma var rasties nepareizas konfigurācijas dēļ vai tādēļ, ka kāds uzbrucējs ir pārtvēris jūsu savienojumu. Jūsu datora pulkstenī pašlaik ir iestatīts šāds datums: <ph name="CURRENT_DATE" />. Vai tas ir pareizs? Ja datums nav pareizs, mainiet sistēmas pulksteni un pēc tam atsvaidziniet šo lapu.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Šis serveris nevarēja pierādīt, ka šī ir vietne <ph name="DOMAIN" />; tās drošības sertifikāts ir saistīts ar domēnu <ph name="DOMAIN2" />. Iespējams, tas ir nepareizas konfigurācijas dēļ vai arī kāds ir ļaunprātīgi izmantojis jūsu savienojumu.</translation> <translation id="2948083400971632585">Iestatījumu lapā varat atspējot jebkurus starpniekserverus, kas konfigurēti savienojuma izveidei.</translation> <translation id="2955913368246107853">Aizvērt atrašanas joslu</translation> -<translation id="2958431318199492670">Tīkla konfigurācija neatbilst standartam ONC. Iespējams, konfigurācijas daļas netiks importētas.</translation> <translation id="2969319727213777354">Lai izveidotu drošu savienojumu, ir jāiestata pareizs pulksteņa laiks. Tas ir nepieciešams, jo sertifikāti, kurus vietnes izmanto, lai tiktu identificētas, ir derīgi tikai noteiktos laika periodos. Tā kā jūsu ierīces pulkstenis nav pareizs, Google Chrome nevar verificēt šos sertifikātus.</translation> <translation id="2972581237482394796">&Pāratsaukt</translation> <translation id="2977665033722899841">Pašlaik ir atlasīta rinda “<ph name="ROW_NAME" />”. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Piegādes adrese</translation> <translation id="3395827396354264108">Saņemšanas veids</translation> <translation id="3399952811970034796">Piegādes adrese</translation> -<translation id="3409072600744224192">Lai kartītes būtu pieejamas visās jūsu ierīcēs, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Aizveriet citas programmas, lai atbrīvotu vietu atmiņā.</translation> <translation id="3422472998109090673">Vietne <ph name="HOST_NAME" /> pašlaik nav sasniedzama.</translation> <translation id="3427092606871434483">Atļaut (pēc noklusējuma)</translation> @@ -581,7 +578,6 @@ <translation id="5045550434625856497">Nepareiza parole</translation> <translation id="5056549851600133418">Jums piemeklēti raksti</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Pārbaudiet starpniekservera adresi<ph name="END_LINK" />.</translation> -<translation id="5072538239104292703">Lai kartītes būtu pieejamas visās jūsu ierīcēs, pierakstieties un ieslēdziet sinhronizāciju.</translation> <translation id="5086888986931078152">Varat zaudēt piekļuvi aizsargātam saturam no noteiktām vietnēm.</translation> <translation id="5087286274860437796">Servera sertifikāts šobrīd nav derīgs.</translation> <translation id="5087580092889165836">Pievienot karti</translation> @@ -627,7 +623,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" />. no <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Izvēlēties kontaktinformāciju</translation> <translation id="5327248766486351172">Nosaukums</translation> -<translation id="5327567770033251652">ieslēgt sinhronizāciju</translation> <translation id="5332219387342487447">Piegādes veids</translation> <translation id="5355557959165512791">Pašlaik nevarat apmeklēt vietni <ph name="SITE" />, jo tās sertifikāts ir atsaukts. Tā kā tīkla kļūdas un uzbrukumi parasti ir īslaicīgi, visticamāk, šī lapa vēlāk darbosies.</translation> <translation id="536296301121032821">Neizdevās saglabāt politikas iestatījumus.</translation> @@ -806,7 +801,6 @@ <translation id="679355240208270552">Politika ignorēta, jo noklusējuma meklēšana nav iespējota politikā.</translation> <translation id="681021252041861472">Obligātais lauks</translation> <translation id="6810899417690483278">Pielāgošanas ID</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Neizdevās ielādēt reģionu datus</translation> <translation id="6825578344716086703">Jūs mēģinājāt sasniegt domēnu <ph name="DOMAIN" />, bet serveris uzrādīja sertifikātu, kas ir parakstīts, izmantojot vāju paraksta algoritmu (piemēram, SHA-1). Tas nozīmē, ka servera norādītie drošības akreditācijas dati var būt viltoti un šis serveris var nebūt tas serveris, kuru mēģināt sasniegt (iespējams, jūs sazināties ar uzbrucēju).</translation> <translation id="6831043979455480757">Tulkot</translation> @@ -822,7 +816,6 @@ <translation id="6915804003454593391">Lietotājs:</translation> <translation id="6944692733090228304">Jūs ievadījāt paroli vietnē, kuru nepārvalda <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Lai aizsargātu savu kontu, neizmantojiet šo paroli citās lietotnēs un vietnēs.</translation> <translation id="6945221475159498467">Atlasīt</translation> -<translation id="6948540501704460596">Lai kartītes būtu pieejamas visās jūsu ierīcēs, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Lai skatītu saņemšanas veidus un prasības, atlasiet adresi.</translation> <translation id="6949872517221025916">Paroles atiestatīšana</translation> <translation id="6950684638814147129">JSON vērtības parsēšanas kļūda: <ph name="ERROR" /></translation> @@ -832,12 +825,11 @@ <translation id="6965978654500191972">Ierīce</translation> <translation id="6970216967273061347">Rajons</translation> <translation id="6973656660372572881">Ir norādīti gan fiksēti starpniekserveri, gan .pac skripta URL.</translation> -<translation id="6984479912851154518">Ja maksāšanai tiks izmantota ārēja lietojumprogramma, tiks aizvērts privātais režīms. Vai turpināt?</translation> +<translation id="6984479912851154518">Ja maksāšanai tiks izmantota ārējā lietojumprogramma, tiks aizvērts privātais režīms. Vai turpināt?</translation> <translation id="6989763994942163495">Rādīt papildu iestatījumus...</translation> <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Šie naudas pieprasījumi var būt vienreizēji vai atkārtoti, un tie var nebūt uzreiz pamanāmi.</translation> <translation id="7029809446516969842">Paroles</translation> -<translation id="7042837854211185817">Lai kartītes būtu pieejamas visās jūsu ierīcēs, ieslēdziet sinhronizāciju.</translation> <translation id="7050187094878475250">Jūs mēģinājāt sasniegt domēnu <ph name="DOMAIN" />, bet serveris uzrādīja sertifikātu, kura derīguma periods ir pārāk ilgs, lai būtu uzticams.</translation> <translation id="7053983685419859001">Bloķēt</translation> <translation id="7064851114919012435">Kontaktinformācija</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index 43e8771..5a9d50c 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">ലോഡുചെയ്യുന്നു</translation> <translation id="1640180200866533862">ഉപയോക്തൃ നയങ്ങൾ</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />സൈറ്റിന്റെ ഹോം പേജ് സന്ദർശിക്കുന്നത്<ph name="END_LINK" /> പരീക്ഷിച്ചുനോക്കൂ.</translation> -<translation id="1644184664548287040">നെറ്റ്വർക്ക് കോൺഫിഗറേഷൻ അസാധുവായതിനാൽ ഇമ്പോർട്ടുചെയ്യാൻ കഴിഞ്ഞില്ല.</translation> <translation id="1644574205037202324">ചരിത്രം</translation> <translation id="1645368109819982629">പ്രോട്ടോക്കോൾ പിന്തുണയ്ക്കുന്നില്ല</translation> <translation id="1655462015569774233">{1,plural, =1{ഈ സെർവറിന് ഇത് <ph name="DOMAIN" /> ആണെന്ന് തെളിയിക്കാനായില്ല; അതിന്റെ സുരക്ഷാ സർട്ടിഫിക്കറ്റ് ഇന്നലെ കാലഹരണപ്പെട്ടു. തെറ്റായ കോൺഫിഗറേഷൻ കാരണമോ ഒരു ആക്രമണകാരി നിങ്ങളുടെ കണക്ഷനെ തടസ്സപ്പെടുത്തുന്നത് കൊണ്ടോ ആയിരിക്കാം ഇത് സംഭവിച്ചത്. നിങ്ങളുടെ കമ്പ്യൂട്ടറിന്റെ ക്ലോക്ക് നിലവിൽ <ph name="CURRENT_DATE" /> എന്ന് സജ്ജമാക്കി. അത് ശരിയാണോ? അല്ലെങ്കിൽ, നിങ്ങൾ സിസ്റ്റത്തിന്റെ ക്ലോക്ക് ശരിയാക്കി ഈ പേജ് പുതുക്കുക.}other{ഈ സെർവറിന് ഇത് <ph name="DOMAIN" /> ആണെന്ന് തെളിയിക്കാനായില്ല; ഇതിന്റെ സുരക്ഷാ സർട്ടിഫിക്കറ്റ് # ദിവസം മുമ്പ് കാലഹരണപ്പെട്ടു. തെറ്റായ കോൺഫിഗറേഷൻ കാരണമോ ഒരു ആക്രമണകാരി നിങ്ങളുടെ കണക്ഷനെ തടസ്സപ്പെടുത്തുന്നത് കൊണ്ടോ ആയിരിക്കാം ഇത് സംഭവിച്ചത്. നിങ്ങളുടെ കമ്പ്യൂട്ടറിന്റെ ക്ലോക്ക് നിലവിൽ <ph name="CURRENT_DATE" /> എന്ന് സജ്ജമാക്കി. അത് ശരിയാണോ? അല്ലെങ്കിൽ, നിങ്ങൾ സിസ്റ്റത്തിന്റെ ക്ലോക്ക് ശരിയാക്കി ഈ പേജ് പുതുക്കുക.}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">തുടരൂ</translation> <translation id="2365563543831475020"><ph name="CRASH_TIME" />-ന് ക്യാപ്ച്ചർ ചെയ്ത ക്രാഷ് റിപ്പോർട്ട് അപ്ലോഡുചെയ്തിട്ടില്ല</translation> <translation id="2367567093518048410">നില</translation> +<translation id="2378238891085281592">നിങ്ങൾ സ്വകാര്യ മോഡിലേക്ക് മാറിയിരിക്കുന്നു</translation> <translation id="2384307209577226199">എന്റര്പ്രൈസ് ഡിഫോൾട്ട്</translation> <translation id="2386255080630008482">സെര്വറിന്റെ സര്ട്ടിഫിക്കറ്റ് അസാധുവാക്കി.</translation> <translation id="2392959068659972793">മൂല്യമൊന്നും സജ്ജമാക്കാത്ത നയങ്ങൾ കാണിക്കുക</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">ഈ സെർവറിന് അത് <ph name="DOMAIN" /> ആണെന്ന് തെളിയിക്കാനായില്ല; <ph name="DOMAIN2" /> എന്നതിൽ നിന്നുള്ളതാണ് അതിന്റെ സുരക്ഷാ സർട്ടിഫിക്കറ്റ്. തെറ്റായ കോൺഫിഗറേഷൻ കാരണമോ ഒരു അക്രമണകാരി നിങ്ങളുടെ കണക്ഷനെ തടസ്സപ്പെടുത്തുന്നത് കൊണ്ടോ ആയിരിക്കാം ഇത് സംഭവിച്ചത്.</translation> <translation id="2948083400971632585">കണക്ഷനായി കോൺഫിഗർ ചെയ്ത ഏതൊരു പ്രോക്സികളും ക്രമീകരണങ്ങൾ പേജിൽ നിന്ന് നിങ്ങൾക്ക് പ്രവർത്തനരഹിതമാക്കാനാകും.</translation> <translation id="2955913368246107853">ഫൈന്ഡ് ബാര് അടയ്ക്കുക</translation> -<translation id="2958431318199492670">നെറ്റ്വർക്ക് കോൺഫിഗറേഷൻ ONC സ്റ്റാൻഡേർഡിന് അനുസൃതമായി പ്രവർത്തിക്കുന്നില്ല. കോൺഫിഗറേഷൻ ഭാഗങ്ങൾ ഇമ്പോർട്ടുചെയ്തേക്കില്ല.</translation> <translation id="2969319727213777354">ഒരു സുരക്ഷിത കണക്ഷൻ സ്ഥാപിക്കുന്നതിന്, നിങ്ങളുടെ ക്ലോക്ക് ശരിയായി സജ്ജീകരിക്കേണ്ടതുണ്ട്. വെബ്സൈറ്റുകൾ സ്വയം തിരിച്ചറിയുന്നതിന് ഉപയോഗിക്കുന്ന സർട്ടിഫിക്കറ്റുകൾ, നിർദ്ദിഷ്ട സമയ പരിധിയിൽ മാത്രം സാധുതയുള്ളതിനാലാണിത്. നിങ്ങളുടെ ഉപകരണത്തിന്റെ ക്ലോക്ക് തെറ്റായിരിക്കുന്നതിനാൽ, Google Chrome-ന് ഈ സർട്ടിഫിക്കറ്റുകൾ പരിശോധിച്ചുറപ്പിക്കാനാവില്ല.</translation> <translation id="2972581237482394796">&വീണ്ടും ചെയ്യുക</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, നിലവിൽ തിരഞ്ഞെടുത്തു. <ph name="ROW_CONTENT" /></translation> @@ -513,6 +512,7 @@ <translation id="450710068430902550">അഡ്മിനിസ്ട്രേറ്ററുമായി പങ്കിടുന്നു</translation> <translation id="4515275063822566619">കാർഡുകളും വിലാസങ്ങളും Chrome-ൽ നിന്നും നിങ്ങളുടെ അക്കൗണ്ടിൽ (<ph name="ACCOUNT_EMAIL" />) നിന്നുമുള്ളതുമാണ്. നിങ്ങൾക്ക് ഇവ <ph name="BEGIN_LINK" />ക്രമീകരണത്തിൽ<ph name="END_LINK" /> മാനേജുചെയ്യാം.</translation> <translation id="4522570452068850558">വിശദാംശങ്ങൾ</translation> +<translation id="4524805452350978254">കാർഡുകൾ മാനേജ് ചെയ്യുക</translation> <translation id="4552089082226364758">ഫ്ലാഷ്</translation> <translation id="4558551763791394412">നിങ്ങളുടെ വിപുലീകരണങ്ങൾ പ്രവർത്തനരഹിതമാക്കുന്നത് പരീക്ഷിക്കുക.</translation> <translation id="457875822857220463">ഡെലിവറി വിവരങ്ങൾ</translation> @@ -699,6 +699,7 @@ <translation id="5866257070973731571">ഫോണ് നമ്പര് ചേര്ക്കുക</translation> <translation id="5869405914158311789">ഈ സൈറ്റ് ലഭ്യമാക്കാനാകുന്നില്ല</translation> <translation id="5869522115854928033">സംരക്ഷിച്ച പാസ്വേഡുകള്</translation> +<translation id="5887400589839399685">കാർഡ് സംരക്ഷിച്ചു</translation> <translation id="5893752035575986141">ക്രെഡിറ്റ് കാർഡുകൾ സ്വീകരിക്കുന്നു.</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (സമന്വയിപ്പിച്ചത്)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{ഒരെണ്ണം ഉപയോഗത്തിലുണ്ട്}other{# എണ്ണം ഉപയോഗത്തിലുണ്ട്}}</translation> @@ -800,7 +801,6 @@ <translation id="679355240208270552">നയ പ്രകാരം, ഡിഫോൾട്ട് തിരയൽ പ്രവർത്തനക്ഷമമാക്കാത്തതിനാൽ അവഗണിച്ചു.</translation> <translation id="681021252041861472">ഇത് പൂരിപ്പിക്കേണ്ടതുണ്ട്</translation> <translation id="6810899417690483278">ഇഷ്ടാനുസൃതമാക്കൽ ഐഡി</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">പ്രദേശങ്ങളുടെ വിവരങ്ങൾ ലോഡുചെയ്യാനായില്ല</translation> <translation id="6825578344716086703">നിങ്ങൾ <ph name="DOMAIN" /> എന്നതിൽ എത്താൻ ശ്രമിച്ചു, പക്ഷേ ഒരു ദുർബലമായ സിഗ്നേച്ചർ അൽഗോരിതം ഉപയോഗിച്ച് ഒപ്പിട്ട ഒരു സർട്ടിഫിക്കറ്റ് സെർവർ നൽകി. ഇതിനർത്ഥം സെർവർ നൽകിയ സുരക്ഷാ ക്രെഡൻഷ്യലുകൾ വ്യാജമാകാമെന്നും നിങ്ങൾ ഉദ്ദേശിച്ച സെർവർ ആയിരിക്കില്ല എന്നുമാണ് (നിങ്ങൾ ആക്രമണകാരിയുമായിട്ടാകാം ആശയവിനിമയം നടത്തുന്നത്).</translation> <translation id="6831043979455480757">വിവർത്തനം ചെയ്യുക</translation> @@ -819,11 +819,13 @@ <translation id="6948701128805548767">പിക്ക്അപ്പ് രീതികളും ആവശ്യകതകളും കാണാൻ ഒരു വിലാസം തിരഞ്ഞെടുക്കുക</translation> <translation id="6949872517221025916">പാസ്വേഡ് പുനഃസജ്ജീകരിക്കുക</translation> <translation id="6950684638814147129">JSON മൂല്യം വിശകലനം ചെയ്യുമ്പോൾ പിശക്: <ph name="ERROR" /></translation> +<translation id="6957624206566198865">പുതിയൊരു സ്വകാര്യ ടാബിൽ പേജ് തുറക്കുക</translation> <translation id="6957887021205513506">സെർവറിന്റെ സർട്ടിഫിക്കറ്റ് വിശ്വസിക്കാൻ കൊള്ളാത്ത ഒന്നായി തോന്നുന്നു.</translation> <translation id="6965382102122355670">ശരി</translation> <translation id="6965978654500191972">ഉപാധി</translation> <translation id="6970216967273061347">ജില്ല</translation> <translation id="6973656660372572881">സ്ഥിരമായ പ്രോക്സി സെർവറുകളും ഒരു സ്ക്രിപ്റ്റ് URL-ഉം വ്യക്തമാക്കിയിരിക്കുന്നു.</translation> +<translation id="6984479912851154518">ഒരു എക്സ്റ്റേണൽ അപ്ലിക്കേഷൻ വഴി പണമടയ്ക്കുന്നതിന് വേണ്ടി സ്വകാര്യ മോഡ് വിടുന്നു. തുടരണോ?</translation> <translation id="6989763994942163495">വിപുലമായ ക്രമീകരണങ്ങൾ കാണിക്കുക...</translation> <translation id="7012363358306927923">ചൈന UnionPay</translation> <translation id="7016992613359344582">ഈ നിരക്കുകൾ ഒറ്റത്തവണ അടയ്ക്കുന്നതോ അല്ലെങ്കിൽ ആവർത്തിക്കുന്നവയോ ആവാം, ഒപ്പം വ്യക്തമല്ലായിരിക്കാം.</translation> @@ -1073,6 +1075,7 @@ <translation id="8820817407110198400">ബുക്ക്മാര്ക്കുകള്</translation> <translation id="883848425547221593">മറ്റുള്ള ബുക്ക്മാര്ക്കുകള്</translation> <translation id="884264119367021077">ഷിപ്പിംഗ് വിലാസം</translation> +<translation id="8846319957959474018">ബുക്ക്മാർക്കുകൾ ഉപയോഗിച്ച് ആപ്പുകൾ എളുപ്പത്തിൽ തുറക്കുക</translation> <translation id="884923133447025588">അസാധുവാക്കല് പ്രവര്ത്തനം കണ്ടെത്തിയിട്ടില്ല.</translation> <translation id="885730110891505394">Google-മായി പങ്കിടുന്നു</translation> <translation id="8858065207712248076">മറ്റ് സൈറ്റുകളിൽ നിങ്ങൾ <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> പാസ്വേഡ് പുനരുപയോഗിച്ചിട്ടുണ്ടെങ്കിൽ, അത് പുനഃസജ്ജീകരിക്കാൻ Chrome ശുപാർശ ചെയ്യുന്നു.</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index 2192d45f..eaa4e87 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">लोड करीत आहे</translation> <translation id="1640180200866533862">वापरकर्ता धोरणे</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />साइटच्या मुख्यपृष्ठावर भेट देऊन<ph name="END_LINK" /> पहा.</translation> -<translation id="1644184664548287040">नेटवर्क कॉन्फिगरेशन अवैध आहे आणि आयात केले जाऊ शकले नाही.</translation> <translation id="1644574205037202324">इतिहास</translation> <translation id="1645368109819982629">असमर्थित प्रोटोकॉल</translation> <translation id="1655462015569774233">{1,plural, =1{हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा प्रमाणपत्र काल कालबाह्य झाले. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते. आपले कॉंप्युटर सध्या <ph name="CURRENT_DATE" /> वर सेट आहे. ते योग्य दिसते आहे? नसल्यास, आपण आपल्या सिस्टीमचे घड्याळ दुरूस्त करावे आणि त्यानंतर हे पृष्ठ रिफ्रेश करा.}one{हा सर्व्हर हे <ph name="DOMAIN" />असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा प्रमाणपत्र # दिवसांपूर्वी कालबाह्य झाले. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते. आपले कॉंप्युटर सध्या <ph name="CURRENT_DATE" /> वर सेट आहे. ते योग्य दिसते आहे? नसल्यास, आपण आपल्या सिस्टीमचे घड्याळ दुरूस्त करावे आणि त्यानंतर हे पृष्ठ रिफ्रेश करा.}other{हा सर्व्हर हे <ph name="DOMAIN" />असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा प्रमाणपत्र # दिवसांपूर्वी कालबाह्य झाले. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते. आपले कॉंप्युटर सध्या <ph name="CURRENT_DATE" /> वर सेट आहे. ते योग्य दिसते आहे? नसल्यास, आपण आपल्या सिस्टीमचे घड्याळ दुरूस्त करावे आणि त्यानंतर हे पृष्ठ रिफ्रेश करा.}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">सुरू ठेवा</translation> <translation id="2365563543831475020"><ph name="CRASH_TIME" /> वाजता कॅप्चर केलेला क्रॅश अहवाल अपलोड केला नाही</translation> <translation id="2367567093518048410">दर्जा</translation> +<translation id="2378238891085281592">तुम्ही खाजगी मोडमध्ये गेला आहात</translation> <translation id="2384307209577226199">एंटरप्राइझ डीफॉल्ट</translation> <translation id="2386255080630008482">सर्व्हरचे प्रमाणपत्र निरस्त केले गेले.</translation> <translation id="2392959068659972793">कोणतेही मूल्य सेट केल्याशिवाय धोरणे दर्शवा</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता प्रमाणपत्र <ph name="DOMAIN2" /> वरील आहे. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते.</translation> <translation id="2948083400971632585">आपण सेटिंग्ज पृष्ठावरून एका कनेक्शनसाठी कॉन्फिगर केलेले कोणतेही प्रॉक्सी अक्षम करू शकता.</translation> <translation id="2955913368246107853">शोध बार बंद करा</translation> -<translation id="2958431318199492670">नेटवर्क कॉन्फिगरेशन ONC मानकाचे पालन करत नाही. कॉन्फिगरेशनचे भाग आयात केले जाऊ शकत नाहीत.</translation> <translation id="2969319727213777354">एक सुरक्षित कनेक्शन स्थापित करण्यापूर्वी, आपले घड्याळ योग्यरित्या सेट केले असणे आवश्यक आहे. वेबसाइट त्यांना स्वत:ला ओळखण्यासाठी वापरतात ती प्रमाणपत्रे केवळ निर्दिष्ट केलेल्या कालावधीसाठी वैध असल्याने हे असू शकते. आपल्या डिव्हाइसचे घड्याळ चुकीचे असल्यामुळे, Google Chrome ही प्रमाणपत्रे सत्यापित करू शकत नाही.</translation> <translation id="2972581237482394796">&पुन्हा करा</translation> <translation id="2977665033722899841">सध्या निवडलेली <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> @@ -514,6 +513,7 @@ <translation id="450710068430902550">प्रशासकासह सामायिक करीत आहे</translation> <translation id="4515275063822566619">कार्ड आणि पत्ते Chrome आणि आपल्या Google खात्याकडील (<ph name="ACCOUNT_EMAIL" />) आहेत. आपण त्यांना <ph name="BEGIN_LINK" />सेटिंग्ज<ph name="END_LINK" /> मधून व्यवस्थापित करू शकता.</translation> <translation id="4522570452068850558">तपशील</translation> +<translation id="4524805452350978254">कार्डे व्यवस्थापित करा</translation> <translation id="4552089082226364758">फ्लॅश</translation> <translation id="4558551763791394412">आपले विस्तार अक्षम करून पहा.</translation> <translation id="457875822857220463">वितरण</translation> @@ -700,6 +700,7 @@ <translation id="5866257070973731571">फोन नंबर जोडा</translation> <translation id="5869405914158311789">या साइटवर पोहचणे शक्य नाही</translation> <translation id="5869522115854928033">सेव्ह केलेले पासवर्ड</translation> +<translation id="5887400589839399685">कार्ड सेव्ह केले</translation> <translation id="5893752035575986141">क्रेडिट कार्डे स्वीकारली जातात.</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (सिंक केलेले)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 वापरात आहे}one{# वापरात आहे}other{# वापरात आहेत}}</translation> @@ -802,7 +803,6 @@ <translation id="679355240208270552">दुर्लक्ष केले कारण डीफॉल्ट शोध धोरणाने सुरू केलेले नाही</translation> <translation id="681021252041861472">आवश्यक फील्ड</translation> <translation id="6810899417690483278">सानुकूलीकरण आयडी</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">प्रदेश डेटा लोड करण्यात अयशस्वी</translation> <translation id="6825578344716086703">तुम्ही <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने एका कमकुवत स्वाक्षरी अल्गोरिदमचा (जसे SHA-1) वापर करून स्वाक्षरीकृत केलेले प्रमाणपत्र सादर केले. याचा अर्थ असा आहे की सर्व्हरने सादर केलेली सुरक्षितता क्रेडेन्शियल बनावट असू शकतात आणि हा सर्व्हर तुम्ही अपेक्षा करीत असलेला नसेल. (तुम्ही कदाचित एखाद्या हल्लेखोराशी संभाषण करत आहात).</translation> <translation id="6831043979455480757">भाषांतर करा</translation> @@ -821,11 +821,13 @@ <translation id="6948701128805548767">पिकअप पद्धती आणि आवश्यकता पाहण्यासाठी, एक पत्ता निवडा</translation> <translation id="6949872517221025916">पासवर्ड रीसेट करा</translation> <translation id="6950684638814147129">JSON मूल्य पार्स करताना एरर आली: <ph name="ERROR" /></translation> +<translation id="6957624206566198865">नवीन खाजगी टॅबमध्ये पेज उघडा</translation> <translation id="6957887021205513506">सर्व्हरचे प्रमाणपत्र खोटे असल्याचे दिसून येते.</translation> <translation id="6965382102122355670">ठीक आहे</translation> <translation id="6965978654500191972">डिव्हाइस</translation> <translation id="6970216967273061347">जिल्हा</translation> <translation id="6973656660372572881">निश्चित प्रॉक्सी सर्व्हर आणि .pac स्क्रिप्ट URL निर्दिष्ट करण्यात आले आहेत.</translation> +<translation id="6984479912851154518">बाह्य अॅप्लिकेशनने पैसे भरण्यासाठी खाजगी मोड सोडत आहे. सुरू ठेवायचे का?</translation> <translation id="6989763994942163495">प्रगत सेटिंग्ज दर्शवा...</translation> <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">हे शुल्क एकाच वेळी द्यायचे किंवा आवर्ती असू शकतात आणि स्पष्ट नसू शकतात.</translation> @@ -1076,6 +1078,7 @@ <translation id="8820817407110198400">Bookmarks</translation> <translation id="883848425547221593">अन्य बुकमार्क</translation> <translation id="884264119367021077">वहनावळ पत्ता</translation> +<translation id="8846319957959474018">बुकमार्कसह सहजरीत्या अॅप्स उघडा</translation> <translation id="884923133447025588">कोणतीही निरस्त करण्याची प्रणाली आढळली नाही.</translation> <translation id="885730110891505394">Google सह सामायिकरण</translation> <translation id="8858065207712248076">जर तुम्ही तुमच्या <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> पासवर्डचा इतर साइटवर पुन्हा वापर केला असेल तर Chrome तुम्हाला तो रीसेट करण्याची शिफारस करतो.</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb index 02d020e..1146c62 100644 --- a/components/strings/components_strings_ms.xtb +++ b/components/strings/components_strings_ms.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Memuatkan</translation> <translation id="1640180200866533862">Dasar pengguna</translation> <translation id="1640244768702815859">Cuba <ph name="BEGIN_LINK" />lawat laman utama tapak<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Konfigurasi rangkaian tidak sah dan tidak boleh diimport.</translation> <translation id="1644574205037202324">Sejarah</translation> <translation id="1645368109819982629">Protokol tidak disokong</translation> <translation id="1655462015569774233">{1,plural, =1{Pelayan ini tidak dapat membuktikan bahawa <ph name="DOMAIN" />; sijil keselamatannya tamat tempoh semalam. Ini mungkin disebabkan oleh kesilapan konfigurasi atau penyerang yang memintas sambungan anda. Jam komputer anda ditetapkan kepada <ph name="CURRENT_DATE" /> pada masa ini. Adakah itu betul? Jika tidak, anda perlu membetulkan jam sistem anda dan kemudian muat semula halaman ini.}other{Pelayan ini tidak dapat membuktikan bahawa <ph name="DOMAIN" />; sijil keselamatannya tamat tempoh # hari yang lalu. Ini mungkin disebabkan oleh kesilapan konfigurasi atau penyerang yang memintas sambungan anda. Jam komputer anda ditetapkan kepada <ph name="CURRENT_DATE" /> pada masa ini. Adakah itu betul? Jika tidak, anda perlu membetulkan jam sistem anda dan kemudian muat semula halaman ini.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Pelayan ini tidak dapat membuktikan bahawa domainnya ialah <ph name="DOMAIN" />; sijil keselamatannya adalah dari <ph name="DOMAIN2" />. Ini mungkin disebabkan oleh kesilapan konfigurasi atau penyerang yang memintasi sambungan anda.</translation> <translation id="2948083400971632585">Anda boleh melumpuhkan sebarang proksi yang dikonfigurasi untuk sambungan dari halaman tetapan.</translation> <translation id="2955913368246107853">Tutup bar cari</translation> -<translation id="2958431318199492670">Konfigurasi rangkaian tidak mematuhi piawaian ONC. Sebahagian konfigurasi tidak boleh diimport.</translation> <translation id="2969319727213777354">Untuk mewujudkan sambungan yang selamat, jam anda perlu ditetapkan dengan betul. Perkara ini perlu dilakukan kerana sijil yang digunakan laman web untuk mengenal pastinya hanya sah untuk tempoh masa yang tertentu. Memandangkan jam peranti anda tidak betul, Google Chrome tidak boleh mengesahkan sijil ini.</translation> <translation id="2972581237482394796">&Buat Semula</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, dipilih pada masa ini. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Alamat penghantaran</translation> <translation id="3395827396354264108">Kaedah pengambilan</translation> <translation id="3399952811970034796">Alamat Penghantaran</translation> -<translation id="3409072600744224192">Untuk mendapatkan kad pada semua peranti anda, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Cuba keluar daripada atur cara lain untuk mengosongkan memori.</translation> <translation id="3422472998109090673"><ph name="HOST_NAME" /> tidak dapat dicapai pada masa ini.</translation> <translation id="3427092606871434483">Benarkan (lalai)</translation> @@ -583,7 +580,6 @@ <translation id="5045550434625856497">Kata laluan tidak sah</translation> <translation id="5056549851600133418">Artikel untuk anda</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Menyemak alamat proksi<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Untuk mendapatkan kad pada semua peranti anda, log masuk dan hidupkan penyegerakan.</translation> <translation id="5086888986931078152">Anda mungkin kehilangan akses kepada kandungan dilindungi daripada sesetengah tapak web.</translation> <translation id="5087286274860437796">Sijil pelayan tidak sah pada masa ini.</translation> <translation id="5087580092889165836">Tambah kad</translation> @@ -629,7 +625,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> daripada <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Pilih Maklumat Hubungan</translation> <translation id="5327248766486351172">Nama</translation> -<translation id="5327567770033251652">hidupkan penyegerakan</translation> <translation id="5332219387342487447">Kaedah Penghantaran</translation> <translation id="5355557959165512791">Anda tidak boleh melawati <ph name="SITE" /> sekarang kerana sijil tapak ini telah ditarik balik. Ralat dan serangan rangkaian biasanya bersifat sementara. Oleh sebab itu, halaman ini mungkin akan berfungsi semula kemudian.</translation> <translation id="536296301121032821">Gagal menyimpan tetapan dasar</translation> @@ -808,7 +803,6 @@ <translation id="679355240208270552">Diabaikan kerana carian lalai tidak didayakan oleh dasar.</translation> <translation id="681021252041861472">Medan Diperlukan</translation> <translation id="6810899417690483278">ID Penyesuaian</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Gagal memuatkan data rantau</translation> <translation id="6825578344716086703">Anda cuba untuk mencapai <ph name="DOMAIN" />, tetapi pelayan memberikan sijil yang ditandatangani menggunakan algoritma tandatangan yang lemah (seperti SHA-1). Ini bermakna bahawa bukti kelayakan keselamatan yang diberi pelayan mungkin dipalsukan dan pelayan tersebut bukan seperti yang anda jangkakan (anda mungkin berkomunikasi dengan penyerang).</translation> <translation id="6831043979455480757">Terjemah</translation> @@ -824,7 +818,6 @@ <translation id="6915804003454593391">Pengguna:</translation> <translation id="6944692733090228304">Anda memasukkan kata laluan di tapak yang tidak diurus oleh <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Untuk melindungi akaun anda, jangan gunakan semula kata laluan anda pada apl dan tapak lain.</translation> <translation id="6945221475159498467">Pilih</translation> -<translation id="6948540501704460596">Untuk mendapatkan kad pada semua peranti anda, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Pilih alamat untuk melihat kaedah dan syarat pengambilan</translation> <translation id="6949872517221025916">Tetapkan Semula Kata Laluan</translation> <translation id="6950684638814147129">Ralat semasa menghuraikan nilai JSON: <ph name="ERROR" /></translation> @@ -839,7 +832,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Caj ini mungkin caj sekali atau caj berulang dan mungkin tidak ketara.</translation> <translation id="7029809446516969842">Kata laluan</translation> -<translation id="7042837854211185817">Untuk mendapatkan kad anda pada semua peranti, hidupkan penyegerakan.</translation> <translation id="7050187094878475250">Anda cuba untuk mencapai <ph name="DOMAIN" />, tetapi pelayan memberikan sijil yang tempoh sahnya terlalu panjang untuk boleh dipercayai.</translation> <translation id="7053983685419859001">Sekat</translation> <translation id="7064851114919012435">Maklumat hubungan</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb index 4007ce3..b2374cf5 100644 --- a/components/strings/components_strings_nl.xtb +++ b/components/strings/components_strings_nl.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Laden</translation> <translation id="1640180200866533862">Gebruikersbeleid</translation> <translation id="1640244768702815859">Probeer <ph name="BEGIN_LINK" />de homepage van de site te bezoeken<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">De netwerkconfiguratie is ongeldig en kan niet worden geïmporteerd.</translation> <translation id="1644574205037202324">Geschiedenis</translation> <translation id="1645368109819982629">Niet-ondersteund protocol</translation> <translation id="1655462015569774233">{1,plural, =1{Deze server kan niet bewijzen dat dit <ph name="DOMAIN" /> is. Het bijbehorende beveiligingscertificaat is gisteren verlopen. Dit kan worden veroorzaakt door een verkeerde configuratie of een aanvaller die je verbinding onderschept. De klok van je computer is momenteel ingesteld op <ph name="CURRENT_DATE" />. Is dat correct? Zo niet, dan moet je de klok van je systeem aanpassen en vervolgens deze pagina vernieuwen.}other{Deze server kan niet bewijzen dat dit <ph name="DOMAIN" /> is. Het bijbehorende beveiligingscertificaat is # dagen geleden verlopen. Dit kan worden veroorzaakt door een verkeerde configuratie of een aanvaller die je verbinding onderschept. De klok van je computer is momenteel ingesteld op <ph name="CURRENT_DATE" />. Is dat correct? Zo niet, dan moet je de klok van je systeem aanpassen en vervolgens deze pagina vernieuwen.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">De server kan niet bewijzen dat dit <ph name="DOMAIN" /> is. Het beveiligingscertificaat van de server is afkomstig van <ph name="DOMAIN2" />. Dit kan worden veroorzaakt door een verkeerde configuratie of een aanvaller die je verbinding onderschept.</translation> <translation id="2948083400971632585">Via de instellingenpagina kun je proxyservers uitschakelen die voor een verbinding zijn geconfigureerd.</translation> <translation id="2955913368246107853">Zoekbalk sluiten</translation> -<translation id="2958431318199492670">De netwerkconfiguratie voldoet niet aan de ONC-standaard. Delen van de configuratie worden mogelijk niet geïmporteerd.</translation> <translation id="2969319727213777354">Als je een beveiligde verbinding tot stand wilt brengen, moet je klok correct zijn ingesteld. Dit moet omdat de certificaten die deze websites gebruiken om zichzelf te identificeren, slechts gedurende bepaalde perioden geldig zijn. Aangezien de klok van je apparaat niet goed is ingesteld, kan Chrome deze certificaten niet verifiëren.</translation> <translation id="2972581237482394796">&Opnieuw</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, momenteel geselecteerd. <ph name="ROW_CONTENT" /></translation> @@ -353,7 +351,6 @@ <translation id="3391030046425686457">Afleveradres</translation> <translation id="3395827396354264108">Ophaalmethode</translation> <translation id="3399952811970034796">Bezorgadres</translation> -<translation id="3409072600744224192">Als je je kaarten op alle apparaten wilt bekijken, moet je <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Probeer andere programma's af te sluiten om geheugen vrij te maken.</translation> <translation id="3422472998109090673"><ph name="HOST_NAME" /> is momenteel niet bereikbaar.</translation> <translation id="3427092606871434483">Toestaan (standaard)</translation> @@ -578,7 +575,6 @@ <translation id="5045550434625856497">Onjuist wachtwoord</translation> <translation id="5056549851600133418">Artikelen voor jou</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Het proxy-adres controleren<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Als je je kaarten op alle apparaten wilt bekijken, moet je inloggen en synchronisatie inschakelen.</translation> <translation id="5086888986931078152">Mogelijk heb je geen toegang meer tot beveiligde content van bepaalde sites.</translation> <translation id="5087286274860437796">Het servercertificaat is momenteel niet geldig.</translation> <translation id="5087580092889165836">Kaart toevoegen</translation> @@ -624,7 +620,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> van <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Contactgegevens kiezen</translation> <translation id="5327248766486351172">Naam</translation> -<translation id="5327567770033251652">synchronisatie inschakelen</translation> <translation id="5332219387342487447">Verzendmethode</translation> <translation id="5355557959165512791">Je kunt <ph name="SITE" /> momenteel niet bezoeken, omdat het bijbehorende certificaat is ingetrokken. Netwerkfouten en aanvallen zijn doorgaans tijdelijk, dus deze pagina werkt later waarschijnlijk correct.</translation> <translation id="536296301121032821">Opslaan van beleidsinstellingen is mislukt</translation> @@ -802,7 +797,6 @@ <translation id="679355240208270552">Genegeerd omdat de standaard zoekoptie door het beleid is uitgeschakeld.</translation> <translation id="681021252041861472">Verplicht veld</translation> <translation id="6810899417690483278">Aanpassings-ID</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Kan regiogegevens niet laden</translation> <translation id="6825578344716086703">Je probeert <ph name="DOMAIN" /> te bereiken. De server heeft echter een certificaat geretourneerd dat een zwak ondertekeningsalgoritme (zoals SHA-1) gebruikt. Dit houdt in dat de betrouwbaarheidsverklaring van de server kan zijn vervalst. Het is mogelijk dat de server zelf een imitatie is (wellicht een server die je schade probeert te berokkenen).</translation> <translation id="6831043979455480757">Vertalen</translation> @@ -818,7 +812,6 @@ <translation id="6915804003454593391">Gebruiker:</translation> <translation id="6944692733090228304">Je hebt je wachtwoord ingevoerd op een site die niet door <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> wordt beheerd. Ter bescherming van je account kun je je wachtwoord beter niet hergebruiken voor andere apps en sites.</translation> <translation id="6945221475159498467">Selecteren</translation> -<translation id="6948540501704460596">Als je je kaarten op alle apparaten wilt bekijken, moet je <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Selecteer een adres om ophaalmethoden en vereisten te bekijken</translation> <translation id="6949872517221025916">Wachtwoord opnieuw instellen</translation> <translation id="6950684638814147129">Fout bij het parseren van de JSON-waarde: <ph name="ERROR" /></translation> @@ -833,7 +826,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Deze kosten kunnen eenmalig of terugkerend zijn en zijn mogelijk niet duidelijk.</translation> <translation id="7029809446516969842">Wachtwoorden</translation> -<translation id="7042837854211185817">Als je je kaarten op alle apparaten wilt bekijken, moet je synchronisatie inschakelen.</translation> <translation id="7050187094878475250">Je hebt geprobeerd <ph name="DOMAIN" /> te bereiken, maar de server heeft een certificaat gepresenteerd waarvan de geldigheidsperiode te lang is om betrouwbaar te zijn.</translation> <translation id="7053983685419859001">Blokkeren</translation> <translation id="7064851114919012435">Contactgegevens</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 2bf8aff..a193ea2 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Laster inn</translation> <translation id="1640180200866533862">Brukerretningslinjer</translation> <translation id="1640244768702815859">Prøv <ph name="BEGIN_LINK" />å gå til startsiden for nettstedet<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Nettverkskonfigurasjonen er ugyldig og kan ikke importeres.</translation> <translation id="1644574205037202324">Logg</translation> <translation id="1645368109819982629">Protokollen støttes ikke</translation> <translation id="1655462015569774233">{1,plural, =1{Denne tjeneren kunne ikke bevise at den er <ph name="DOMAIN" />, ettersom sikkerhetssertifikatet utløp i går. Dette kan skyldes en feilkonfigurasjon eller at en angriper avskjærer tilkoblingen mellom deg og nettstedet. Klokken på datamaskinen din er stilt til <ph name="CURRENT_DATE" />. Er det riktig? Hvis ikke bør du stille klokken på systemet og laste inn denne siden på nytt.}other{Denne tjeneren kunne ikke bevise at den er <ph name="DOMAIN" />, ettersom sikkerhetssertifikatet utløp for # dager siden. Dette kan skyldes en feilkonfigurasjon eller at en angriper avskjærer tilkoblingen mellom deg og nettstedet. Klokken på datamaskinen din er stilt til <ph name="CURRENT_DATE" />. Er det riktig? Hvis ikke bør du stille klokken på systemet og laste inn denne siden på nytt.}}</translation> @@ -283,7 +282,6 @@ <translation id="2941952326391522266">Denne tjeneren kunne ikke bevise at den er <ph name="DOMAIN" />. Tjenerens sikkerhetssertifikat er fra <ph name="DOMAIN2" />. Dette kan være forårsaket av en feilkonfigurering eller en angriper som avskjærer tilkoblingen din.</translation> <translation id="2948083400971632585">På innstillingssiden kan du deaktivere eventuelle mellomtjenere for tilkoblinger.</translation> <translation id="2955913368246107853">Lukk søkefelt</translation> -<translation id="2958431318199492670">Nettverkskonfigurasjonen overholder ikke ONC-standarden. Deler av konfigurasjonen kan muligens ikke importeres.</translation> <translation id="2969319727213777354">Klokken må være riktig stilt før du kan opprette sikre tilkoblinger. Grunnen til dette er at sertifikatene nettsteder identifiserer seg med, bare er gyldige i visse tidsperioder. Ettersom klokken på enheten din er feil, kan ikke Google Chrome bekrefte disse sertifikatene.</translation> <translation id="2972581237482394796">Gjø&r om</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, for øyeblikket valgt. <ph name="ROW_CONTENT" /></translation> @@ -801,7 +799,6 @@ <translation id="679355240208270552">Ignorert fordi standardsøk ikke er aktivert av regel.</translation> <translation id="681021252041861472">Obligatorisk felt</translation> <translation id="6810899417690483278">Tilpasnings-ID</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Kunne ikke laste inn områdedataene</translation> <translation id="6825578344716086703">Du prøvde å gå til <ph name="DOMAIN" />, men tjeneren presenterte et sertifikat som er signert med en svak signaturalgoritme (for eksempel SHA-1). Dette betyr at sikkerhetslegitimasjonen tjeneren presenterte, kan være forfalsket. Tjeneren kan med andre ord være en annen tjener enn du tror (og du kommuniserer kanskje med en angriper).</translation> <translation id="6831043979455480757">Oversett</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index b69c90f..ad958c7 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Wczytuję</translation> <translation id="1640180200866533862">Zasady dotyczące użytkowników</translation> <translation id="1640244768702815859">Otwórz <ph name="BEGIN_LINK" />stronę główną witryny<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Konfiguracja sieci jest nieprawidłowa i nie można jej zaimportować.</translation> <translation id="1644574205037202324">Historia</translation> <translation id="1645368109819982629">Nieobsługiwany protokół</translation> <translation id="1655462015569774233">{1,plural, =1{Ten serwer nie mógł udowodnić, że należy do <ph name="DOMAIN" />. Jego certyfikat bezpieczeństwa wygasł wczoraj. Może to być spowodowane błędną konfiguracją lub przechwyceniem połączenia. Zegar komputera jest obecnie ustawiony na <ph name="CURRENT_DATE" />. Czy to prawidłowa data? Jeśli nie, musisz skorygować zegar systemu, a następnie odświeżyć tę stronę.}few{Ten serwer nie mógł udowodnić, że należy do <ph name="DOMAIN" />. Jego certyfikat bezpieczeństwa wygasł # dni temu. Może to być spowodowane błędną konfiguracją lub przechwyceniem połączenia. Zegar komputera jest obecnie ustawiony na <ph name="CURRENT_DATE" />. Czy to prawidłowa data? Jeśli nie, musisz skorygować zegar systemu, a następnie odświeżyć tę stronę.}many{Ten serwer nie mógł udowodnić, że należy do <ph name="DOMAIN" />. Jego certyfikat bezpieczeństwa wygasł # dni temu. Może to być spowodowane błędną konfiguracją lub przechwyceniem połączenia. Zegar komputera jest obecnie ustawiony na <ph name="CURRENT_DATE" />. Czy to prawidłowa data? Jeśli nie, musisz skorygować zegar systemu, a następnie odświeżyć tę stronę.}other{Ten serwer nie mógł udowodnić, że należy do <ph name="DOMAIN" />. Jego certyfikat bezpieczeństwa wygasł # dnia temu. Może to być spowodowane błędną konfiguracją lub przechwyceniem połączenia. Zegar komputera jest obecnie ustawiony na <ph name="CURRENT_DATE" />. Czy to prawidłowa data? Jeśli nie, musisz skorygować zegar systemu, a następnie odświeżyć tę stronę.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Ten serwer nie mógł udowodnić, że należy do <ph name="DOMAIN" />. Jego certyfikat pochodzi z <ph name="DOMAIN2" />. Może to być spowodowane błędną konfiguracją lub przechwyceniem połączenia przez atakującego.</translation> <translation id="2948083400971632585">Możesz wyłączyć dowolne serwery proxy skonfigurowane dla połączenia na stronie ustawień.</translation> <translation id="2955913368246107853">Zamknij pasek wyszukiwania</translation> -<translation id="2958431318199492670">Konfiguracja sieci jest niezgodna ze standardem ONC. Jej fragmenty mogły nie zostać zaimportowane.</translation> <translation id="2969319727213777354">Aby urządzenie nawiązało bezpieczne połączenie, jego zegar musi wskazywać prawidłową godzinę. Jest to wymagane, bo certyfikaty używane do identyfikacji stron internetowych są ważne tylko przez określony czas. Zegar urządzenia jest ustawiony nieprawidłowo, więc Google Chrome nie może zweryfikować tych certyfikatów.</translation> <translation id="2972581237482394796">&Ponów</translation> <translation id="2977665033722899841">Obecnie wybrany wiersz to <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Adres dostawy</translation> <translation id="3395827396354264108">Metoda odbioru</translation> <translation id="3399952811970034796">Adres dostawy</translation> -<translation id="3409072600744224192">Aby korzystać ze swoich zakładek na wszystkich urządzeniach, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Zamknij inne programy, by zwolnić pamięć.</translation> <translation id="3422472998109090673">Strona <ph name="HOST_NAME" /> jest obecnie nieosiągalna.</translation> <translation id="3427092606871434483">Zezwalaj (domyślnie)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Nieprawidłowe hasło</translation> <translation id="5056549851600133418">Artykuły dla Ciebie</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Sprawdź adres serwera proxy<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Aby korzystać ze swoich kart na wszystkich urządzeniach, zaloguj się i włącz synchronizację.</translation> <translation id="5086888986931078152">Możesz stracić dostęp do treści chronionych na niektórych stronach.</translation> <translation id="5087286274860437796">Certyfikat serwera nie jest obecnie ważny.</translation> <translation id="5087580092889165836">Dodaj kartę</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> z <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Wybierz dane kontaktowe</translation> <translation id="5327248766486351172">Nazwa</translation> -<translation id="5327567770033251652">włącz synchronizację</translation> <translation id="5332219387342487447">Metoda wysyłki</translation> <translation id="5355557959165512791">Nie możesz teraz otworzyć strony <ph name="SITE" />, bo jej certyfikat został unieważniony. Błędy sieci i ataki są zazwyczaj przejściowe, więc prawdopodobnie strona będzie wkrótce działać.</translation> <translation id="536296301121032821">Zapisanie ustawień zasady nie powiodło się</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">Ignorowana, ponieważ wyszukiwarka domyślna nie jest dozwolona przez zasadę.</translation> <translation id="681021252041861472">Pole wymagane</translation> <translation id="6810899417690483278">Identyfikator dostosowania</translation> -<translation id="6820686453637990663">Kod CVC</translation> <translation id="6824266427216888781">Nie udało się załadować danych dotyczących regionów</translation> <translation id="6825578344716086703">Próbujesz wejść na <ph name="DOMAIN" />, ale serwer przedstawił certyfikat podpisany słabym algorytmem (takim jak SHA-1). Oznacza to, że dane uwierzytelniające podane przez serwer mogły zostać sfałszowane, a serwer może nie być tym, którego oczekujesz (możliwe, że komunikujesz się z intruzem).</translation> <translation id="6831043979455480757">Tłumacz</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">Użytkownik:</translation> <translation id="6944692733090228304">Wpisałeś swoje hasło na stronie, którą nie zarządza <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Aby chronić konto, nie używaj swojego hasła w innych aplikacjach ani witrynach.</translation> <translation id="6945221475159498467">Wybierz</translation> -<translation id="6948540501704460596">Aby korzystać ze swoich zakładek na wszystkich urządzeniach, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Aby zobaczyć metody odbioru oraz wymagania, wybierz adres</translation> <translation id="6949872517221025916">Resetuj hasło</translation> <translation id="6950684638814147129">Błąd podczas przetwarzania wartości JSON: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Może to być opłata jednorazowa lub cykliczna, a informacje o niej mogą nie być wyraźnie podane.</translation> <translation id="7029809446516969842">Hasła</translation> -<translation id="7042837854211185817">Aby korzystać ze swoich kart na wszystkich urządzeniach, włącz synchronizację.</translation> <translation id="7050187094878475250">Próbujesz połączyć się z domeną <ph name="DOMAIN" />, ale serwer przedstawił certyfikat, którego okres ważności jest za długi, by był wiarygodny.</translation> <translation id="7053983685419859001">Blokuj</translation> <translation id="7064851114919012435">Dane kontaktowe</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index c0edbff9..7294f69c 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Carregando</translation> <translation id="1640180200866533862">Políticas de usuário</translation> <translation id="1640244768702815859">Tente <ph name="BEGIN_LINK" />visitar a página inicial do site<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">A configuração de rede é inválida e não pôde ser importada.</translation> <translation id="1644574205037202324">Histórico</translation> <translation id="1645368109819982629">Protocolo não compatível</translation> <translation id="1655462015569774233">{1,plural, =1{Este servidor não conseguiu provar que é <ph name="DOMAIN" />; o certificado de segurança dele expirou ontem. Isso pode ser causado por uma configuração incorreta ou pela interceptação da sua conexão por um invasor. O relógio do seu computador está definido para <ph name="CURRENT_DATE" />. Essa data está correta? Se não estiver, corrija o relógio do sistema e depois atualize esta página.}one{Este servidor não conseguiu provar que é <ph name="DOMAIN" />. O certificado de segurança dele expirou há # dias. Isso pode ser causado por uma configuração incorreta ou pela interceptação da sua conexão por um invasor. O relógio do seu computador está definido para <ph name="CURRENT_DATE" />. Essa data está correta? Se não estiver, corrija o relógio do sistema e depois atualize esta página.}other{Este servidor não conseguiu provar que é <ph name="DOMAIN" />. O certificado de segurança dele expirou há # dias. Isso pode ser causado por uma configuração incorreta ou pela interceptação da sua conexão por um invasor. O relógio do seu computador está definido para <ph name="CURRENT_DATE" />. Essa data está correta? Se não estiver, corrija o relógio do sistema e depois atualize esta página.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Este servidor não conseguiu provar que é <ph name="DOMAIN" />. O certificado de segurança é de <ph name="DOMAIN2" />. Isso pode ser causado por uma configuração incorreta ou pela interceptação da sua conexão por um invasor.</translation> <translation id="2948083400971632585">Na página "Configurações", você pode desativar quaisquer proxies configurados para uma conexão.</translation> <translation id="2955913368246107853">Fechar barra de localização</translation> -<translation id="2958431318199492670">A configuração de rede não está de acordo com o padrão ONC. Partes da configuração podem não ser importadas.</translation> <translation id="2969319727213777354">Para estabelecer uma conexão segura, o relógio precisa estar configurado corretamente. Isso ocorre porque os certificados que os websites usam para se identificar são válidos apenas por períodos específicos. Como o relógio do seu dispositivo está incorreto, o Google Chrome não consegue verificar esses certificados.</translation> <translation id="2972581237482394796">&Refazer</translation> <translation id="2977665033722899841">Selecionado no momento: <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Endereço de entrega</translation> <translation id="3395827396354264108">Método de retirada</translation> <translation id="3399952811970034796">Endereço de Entrega</translation> -<translation id="3409072600744224192">Para ver seus cartões em todos os seus dispositivos, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Tente sair de outros programas para liberar memória.</translation> <translation id="3422472998109090673">No momento, não é possível acessar <ph name="HOST_NAME" />.</translation> <translation id="3427092606871434483">Permitir (padrão)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Senha incorreta</translation> <translation id="5056549851600133418">Artigos para você</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Verificar o endereço do proxy<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Para ver seus cartões em todos os seus dispositivos, faça login e ative a sincronização.</translation> <translation id="5086888986931078152">É possível que você perca o acesso a conteúdos protegidos de alguns sites.</translation> <translation id="5087286274860437796">O certificado do servidor não é válido no momento.</translation> <translation id="5087580092889165836">Adicionar cartão</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> de <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Escolher informações de contato</translation> <translation id="5327248766486351172">Nome</translation> -<translation id="5327567770033251652">ative a sincronização</translation> <translation id="5332219387342487447">Forma de envio</translation> <translation id="5355557959165512791">Não é possível acessar <ph name="SITE" /> neste momento, porque o certificado dele foi revogado. Como os ataques e erros de rede são geralmente temporários, esta página provavelmente funcionará mais tarde.</translation> <translation id="536296301121032821">Falha ao armazenar as configurações da política</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">Ignorado porque a pesquisa padrão não foi ativada pela política.</translation> <translation id="681021252041861472">Campo obrigatório</translation> <translation id="6810899417690483278">Código de personalização</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Falha ao carregar dados de regiões</translation> <translation id="6825578344716086703">Você tentou acessar <ph name="DOMAIN" />, mas o servidor apresentou um certificado assinado com um algoritmo de assinatura fraco (como SHA-1). Isso significa que as credenciais de segurança apresentadas pelo servidor podem ter sido forjadas, e talvez o servidor não seja o esperado (talvez você esteja se comunicando com um invasor).</translation> <translation id="6831043979455480757">Traduzir</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">Usuário:</translation> <translation id="6944692733090228304">Você inseriu sua senha em um site que não é gerenciado por <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Para proteger sua conta, não reutilize sua senha em outros apps e sites.</translation> <translation id="6945221475159498467">Selecionar</translation> -<translation id="6948540501704460596">Para ver seus cartões em todos os seus dispositivos, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Para ver métodos e requisitos de retirada, selecione um endereço</translation> <translation id="6949872517221025916">Redefinir senha</translation> <translation id="6950684638814147129">Erro ao analisar o valor JSON: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Essas cobranças podem ser únicas ou recorrentes e talvez não sejam óbvias.</translation> <translation id="7029809446516969842">Senhas</translation> -<translation id="7042837854211185817">Para ver seus cartões em todos os seus dispositivos, ative a sincronização.</translation> <translation id="7050187094878475250">Você tentou acessar <ph name="DOMAIN" />, mas o servidor apresentou um certificado cujo período de validade é extremamente longo, o que não é confiável.</translation> <translation id="7053983685419859001">Bloquear</translation> <translation id="7064851114919012435">Dados de contato</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index 8ace9c0..ca1f3f6e 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">A carregar</translation> <translation id="1640180200866533862">Políticas do utilizador</translation> <translation id="1640244768702815859">Experimente <ph name="BEGIN_LINK" />aceder à página inicial do site<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">A configuração de rede é inválida e não pode ser importada.</translation> <translation id="1644574205037202324">Histórico</translation> <translation id="1645368109819982629">Protocolo não suportado</translation> <translation id="1655462015569774233">{1,plural, =1{Este servidor não conseguiu provar que é <ph name="DOMAIN" />; o seu certificado de segurança expirou ontem. Isto pode ser o resultado de uma configuração incorreta ou de um invasor a intercetar a sua ligação. O relógio do seu computador está atualmente configurado para <ph name="CURRENT_DATE" />. Será que isso está correto? Em caso negativo, deve corrigir o relógio do seu sistema e depois atualizar esta página.}other{Este servidor não conseguiu provar que é <ph name="DOMAIN" />; o seu certificado de segurança expirou há # dias. Isto pode ser o resultado de uma configuração incorreta ou de um invasor a intercetar a sua ligação. O relógio do seu computador está atualmente configurado para <ph name="CURRENT_DATE" />. Será que isso está correto? Em caso negativo, deve corrigir o relógio do seu sistema e depois atualizar esta página.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Este servidor não conseguiu provar que é o domínio <ph name="DOMAIN" />; o respetivo certificado de segurança é do domínio <ph name="DOMAIN2" />. Isto pode ser o resultado de uma configuração incorreta ou de um invasor a intercetar a sua ligação.</translation> <translation id="2948083400971632585">Pode desativar qualquer proxy configurado para uma ligação a partir da página de definições.</translation> <translation id="2955913368246107853">Fechar barra de localização</translation> -<translation id="2958431318199492670">A configuração de rede não cumpre a norma ONC. Partes da configuração podem não ser importadas.</translation> <translation id="2969319727213777354">Para estabelecer uma ligação segura, o relógio tem de ser definido corretamente. Isto deve-se ao facto de os certificados que os Sites utilizam para se identificarem serem apenas válidos para períodos de tempo específicos. Uma vez que o relógio do seu dispositivo está incorreto, o Google Chrome não consegue validar estes certificados.</translation> <translation id="2972581237482394796">&Repetir</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" /> selecionado atualmente. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Endereço de entrega</translation> <translation id="3395827396354264108">Método de recolha</translation> <translation id="3399952811970034796">Endereço de entrega</translation> -<translation id="3409072600744224192">Para obter os seus cartões em todos os dispositivos, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Experimente fechar outros programas para libertar memória.</translation> <translation id="3422472998109090673"><ph name="HOST_NAME" /> está inacessível de momento.</translation> <translation id="3427092606871434483">Permitir (predefinição)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Palavra-passe incorrecta</translation> <translation id="5056549851600133418">Artigos para si</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Verificar o endereço proxy<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Para obter os seus cartões em todos os dispositivos, inicie sessão e ative a sincronização.</translation> <translation id="5086888986931078152">Pode perder o acesso ao conteúdo protegido de alguns sites.</translation> <translation id="5087286274860437796">De momento, o certificado do servidor não é válido.</translation> <translation id="5087580092889165836">Adicionar cartão</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> de <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Escolher informações de contacto</translation> <translation id="5327248766486351172">Nome</translation> -<translation id="5327567770033251652">ative a sincronização</translation> <translation id="5332219387342487447">Método de envio</translation> <translation id="5355557959165512791">Não pode visitar <ph name="SITE" /> neste momento, porque o certificado foi revogado. Os erros de rede e os ataques são geralmente temporários, pelo que esta página deverá funcionar mais tarde.</translation> <translation id="536296301121032821">Falha ao armazenar as definições da política</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">Ignorado porque a pesquisa predefinida não está ativada pela política.</translation> <translation id="681021252041861472">Campo obrigatório</translation> <translation id="6810899417690483278">ID de personalização</translation> -<translation id="6820686453637990663">Código de segurança</translation> <translation id="6824266427216888781">Falha ao carregar os dados das regiões</translation> <translation id="6825578344716086703">Tentou aceder a <ph name="DOMAIN" />, mas o servidor apresentou um certificado assinado utilizando um algoritmo de assinatura fraco (como SHA-1). Isto significa que as credenciais de segurança apresentadas pelo servidor podem ter sido falsificadas e que o servidor pode não ser aquele que pretende (pode estar a comunicar com um utilizador mal intencionado).</translation> <translation id="6831043979455480757">Traduzir</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">Utilizador:</translation> <translation id="6944692733090228304">Introduziu a palavra-passe num site que não é gerido pela <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Para proteger a conta, não reutilize a sua palavra-passe noutras aplicações e sites.</translation> <translation id="6945221475159498467">Selecionar</translation> -<translation id="6948540501704460596">Para obter os seus cartões em todos os dispositivos, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Para ver os métodos de recolha e os requisitos, selecione um endereço</translation> <translation id="6949872517221025916">Repor palavra-passe</translation> <translation id="6950684638814147129">Erro ao analisar o valor JSON: <ph name="ERROR" />.</translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Estas cobranças podem ser únicas ou recorrentes e podem não ser óbvias.</translation> <translation id="7029809446516969842">Palavras-passe</translation> -<translation id="7042837854211185817">Para obter os seus cartões em todos os dispositivos, ative a sincronização.</translation> <translation id="7050187094878475250">Tentou aceder a <ph name="DOMAIN" />, mas o servidor apresentou um certificado cujo período de validade é demasiado longo para ser fidedigno.</translation> <translation id="7053983685419859001">Bloquear</translation> <translation id="7064851114919012435">Informações de contacto</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb index fbb5e14..28fcfba 100644 --- a/components/strings/components_strings_ro.xtb +++ b/components/strings/components_strings_ro.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Se încarcă</translation> <translation id="1640180200866533862">Politici privind utilizatorii</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />Accesează pagina de pornire a site-ului<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Configurația rețelei este nevalidă și nu a putut fi importată.</translation> <translation id="1644574205037202324">Istoric</translation> <translation id="1645368109819982629">Protocol neacceptat</translation> <translation id="1655462015569774233">{1,plural, =1{Acest server nu a putut dovedi că este <ph name="DOMAIN" />. Certificatul său de securitate a expirat ieri. Cauza poate fi o eroare de configurare sau interceptarea conexiunii de către un atacator. În prezent, ora computerului este setată la <ph name="CURRENT_DATE" />. Este corect? Dacă nu este, corectează ora sistemului și actualizează pagina.}few{Acest server nu a putut dovedi că este <ph name="DOMAIN" />. Certificatul său de securitate a expirat acum # zile. Cauza poate fi o eroare de configurare sau interceptarea conexiunii de către un atacator. În prezent, ora computerului este setată la <ph name="CURRENT_DATE" />. Este corect? Dacă nu este, corectează ora sistemului și actualizează pagina.}other{Acest server nu a putut dovedi că este <ph name="DOMAIN" />. Certificatul său de securitate a expirat acum # de zile. Cauza poate fi o eroare de configurare sau interceptarea conexiunii de către un atacator. În prezent, ora computerului este setată la <ph name="CURRENT_DATE" />. Este corect? Dacă nu este, corectează ora sistemului și actualizează pagina.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Acest server nu a putut dovedi că este <ph name="DOMAIN" />; certificatul său de securitate provine de la <ph name="DOMAIN2" />. Cauza poate fi o configurare greșită sau interceptarea conexiunii de către un atacator.</translation> <translation id="2948083400971632585">Puteți să dezactivați serverele proxy configurate pentru o conexiune din pagina de setări.</translation> <translation id="2955913368246107853">Închide Bara de căutare</translation> -<translation id="2958431318199492670">Configurația rețelei nu respectă standardul ONC. Este posibil ca anumite părți ale configurației să nu fie importate.</translation> <translation id="2969319727213777354">Pentru a stabili o conexiune securizată, ceasul trebuie să fie setat corect, deoarece certificatele pe care site-urile le folosesc pentru a se identifica sunt valabile numai pentru anumite intervale de timp. Din moment ce ora de pe dispozitiv este incorectă, Google Chrome nu poate verifica aceste certificate.</translation> <translation id="2972581237482394796">&Repetă</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" /> selectat(ă). <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Adresă de livrare</translation> <translation id="3395827396354264108">Metodă de preluare</translation> <translation id="3399952811970034796">Adresă de livrare</translation> -<translation id="3409072600744224192">Pentru a accesa cardurile pe toate dispozitivele, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Încearcă să ieși din celelalte programe pentru a elibera memoria.</translation> <translation id="3422472998109090673">Momentan, <ph name="HOST_NAME" /> nu poate fi accesat.</translation> <translation id="3427092606871434483">Permite (în mod prestabilit)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Parolă incorectă</translation> <translation id="5056549851600133418">Articole pentru tine</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />să verifici adresa proxy-ului;<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Pentru a accesa cardurile pe toate dispozitivele, conectează-te și activează sincronizarea.</translation> <translation id="5086888986931078152">Este posibil să pierzi accesul la conținutul protejat de pe anumite site-uri.</translation> <translation id="5087286274860437796">Momentan, certificatul serverului este nevalid.</translation> <translation id="5087580092889165836">Adaugă un card</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> din <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Alege informațiile de contact</translation> <translation id="5327248766486351172">Nume</translation> -<translation id="5327567770033251652">activează sincronizarea</translation> <translation id="5332219387342487447">Metoda de expediere</translation> <translation id="5355557959165512791">Nu poți accesa <ph name="SITE" /> acum, deoarece certificatul său a fost revocat. Erorile de rețea și atacurile sunt de obicei temporare și probabil că această pagină va funcționa mai târziu.</translation> <translation id="536296301121032821">Setările pentru politică nu au putut fi stocate</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">Valoare ignorată, deoarece politica nu a activat căutarea prestabilită.</translation> <translation id="681021252041861472">Câmp obligatoriu</translation> <translation id="6810899417690483278">ID-ul de personalizare</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Datele regiunii nu au fost încărcate</translation> <translation id="6825578344716086703">Ai încercat să accesezi <ph name="DOMAIN" />, dar serverul a prezentat un certificat semnat folosind un algoritm de semnare slab (cum ar fi SHA-1). Acest lucru înseamnă că este posibil ca datele de conectare de securitate prezentate de server să fie falsificate sau ca serverul să nu fie cel așteptat (este posibil să comunici cu un atacator).</translation> <translation id="6831043979455480757">Tradu</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">Utilizator:</translation> <translation id="6944692733090228304">Ai introdus parola pe un site care nu este gestionat de <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Pentru a proteja contul, nu folosi aceeași parolă pentru alte aplicații și site-uri.</translation> <translation id="6945221475159498467">Selectează</translation> -<translation id="6948540501704460596">Pentru a accesa cardurile pe toate dispozitivele, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Pentru a vedea metodele de preluare și cerințele, selectează o adresă</translation> <translation id="6949872517221025916">Resetează parola</translation> <translation id="6950684638814147129">Eroare la analizarea valorii JSON: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Aceste costuri pot fi unice sau recurente și ascunse.</translation> <translation id="7029809446516969842">Parole</translation> -<translation id="7042837854211185817">Pentru a accesa cardurile pe toate dispozitivele, activează sincronizarea.</translation> <translation id="7050187094878475250">Ai încercat să accesezi <ph name="DOMAIN" />, dar serverul a prezentat un certificat a cărui perioadă de validitate este prea lungă pentru a fi de încredere.</translation> <translation id="7053983685419859001">Blochează</translation> <translation id="7064851114919012435">Informații de contact</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index 2fcdd58..03f16243 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Загрузка</translation> <translation id="1640180200866533862">Пользовательские правила</translation> <translation id="1640244768702815859">Попробуйте <ph name="BEGIN_LINK" />открыть главную страницу сайта<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Импорт невозможен: недопустимая конфигурация сети.</translation> <translation id="1644574205037202324">История</translation> <translation id="1645368109819982629">Неподдерживаемый протокол</translation> <translation id="1655462015569774233">{1,plural, =1{Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Срок действия его сертификата безопасности истек вчера. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные. Обратите внимание, что на компьютере установлено время <ph name="CURRENT_DATE" />. Если оно неправильное, измените его и обновите страницу.}one{Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Срок действия его сертификата безопасности истек # день назад. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные. Обратите внимание, что на компьютере установлено время <ph name="CURRENT_DATE" />. Если оно неправильное, измените его и обновите страницу.}few{Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Срок действия его сертификата безопасности истек # дня назад. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные. Обратите внимание, что на компьютере установлено время <ph name="CURRENT_DATE" />. Если оно неправильное, измените его и обновите страницу.}many{Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Срок действия его сертификата безопасности истек # дней назад. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные. Обратите внимание, что на компьютере установлено время <ph name="CURRENT_DATE" />. Если оно неправильное, измените его и обновите страницу.}other{Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Срок действия его сертификата безопасности истек # дня назад. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные. Обратите внимание, что на компьютере установлено время <ph name="CURRENT_DATE" />. Если оно неправильное, измените его и обновите страницу.}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">Далее</translation> <translation id="2365563543831475020"><ph name="CRASH_TIME" />: получен отчет о сбое (не загружен)</translation> <translation id="2367567093518048410">Уровень</translation> +<translation id="2378238891085281592">Вы работаете в режиме инкогнито</translation> <translation id="2384307209577226199">Для предприятий (по умолчанию)</translation> <translation id="2386255080630008482">Сертификат сервера отозван.</translation> <translation id="2392959068659972793">Показывать правила, значения которых не заданы</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Его сертификат безопасности относится к <ph name="DOMAIN2" />. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные.</translation> <translation id="2948083400971632585">Прокси-серверы, используемые для соединения, можно отключить на странице настроек.</translation> <translation id="2955913368246107853">Закрыть панель поиска</translation> -<translation id="2958431318199492670">Некоторые элементы сетевой конфигурации невозможно импортировать, поскольку она не соответствует стандарту ONC.</translation> <translation id="2969319727213777354">Для создания безопасного подключения необходимо, чтобы показания системных часов были верны. Причина в том, что сертификаты для идентификации сайтов имеют ограниченный срок действия. Если часы на устройстве неточны, Chrome не может проверить актуальность этих сертификатов.</translation> <translation id="2972581237482394796">&Повторить</translation> <translation id="2977665033722899841">Сейчас выбрано – <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" />.</translation> @@ -513,6 +512,7 @@ <translation id="450710068430902550">Доступ администратора</translation> <translation id="4515275063822566619">Карты и адреса, указанные в Chrome и в вашем аккаунте Google (<ph name="ACCOUNT_EMAIL" />). Вы можете изменить их на странице <ph name="BEGIN_LINK" />Настройки<ph name="END_LINK" />.</translation> <translation id="4522570452068850558">Подробнее</translation> +<translation id="4524805452350978254">Изменить</translation> <translation id="4552089082226364758">Flash</translation> <translation id="4558551763791394412">Отключите расширения.</translation> <translation id="457875822857220463">Доставка</translation> @@ -699,6 +699,7 @@ <translation id="5866257070973731571">Добавьте номер телефона</translation> <translation id="5869405914158311789">Не удается получить доступ к сайту</translation> <translation id="5869522115854928033">Сайты с сохраненными паролями</translation> +<translation id="5887400589839399685">Карта сохранена</translation> <translation id="5893752035575986141">Принимаются кредитные карты.</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (данные синхронизируются)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Используется 1 файл cookie}one{Используется # файл cookie}few{Используется # файла cookie}many{Используется # файлов cookie}other{Используется # файла cookie}}</translation> @@ -800,7 +801,6 @@ <translation id="679355240208270552">Игнорируется, так как в правиле не задан поиск по умолчанию.</translation> <translation id="681021252041861472">Обязательное поле</translation> <translation id="6810899417690483278">Идентификатор персонализации</translation> -<translation id="6820686453637990663">Код CVC</translation> <translation id="6824266427216888781">Не удалось загрузить данные регионов</translation> <translation id="6825578344716086703">Вы пытаетесь обратиться к серверу в домене <ph name="DOMAIN" />, но его сертификат подписан с помощью ненадежного алгоритма (например, SHA-1). Это означает, что учетные данные безопасности и сам сервер могут оказаться поддельными. Возможно, вы имеете дело со злоумышленниками.</translation> <translation id="6831043979455480757">Перевести</translation> @@ -819,11 +819,13 @@ <translation id="6948701128805548767">Выберите адрес, чтобы посмотреть способы и условия получения.</translation> <translation id="6949872517221025916">Сброс пароля</translation> <translation id="6950684638814147129">Ошибка при синтаксическом анализе значения JSON: <ph name="ERROR" /></translation> +<translation id="6957624206566198865">Открыть страницу в новой вкладке инкогнито</translation> <translation id="6957887021205513506">Возможно, сертификат сервера фальсифицирован.</translation> <translation id="6965382102122355670">ОК</translation> <translation id="6965978654500191972">Устройство</translation> <translation id="6970216967273061347">Район</translation> <translation id="6973656660372572881">Указаны как фиксированные прокси-серверы, так и URL PAC-скриптов.</translation> +<translation id="6984479912851154518">Вы выйдете из режима инкогнито, чтобы произвести оплату во внешнем приложении. Продолжить?</translation> <translation id="6989763994942163495">Показать дополнительные настройки</translation> <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Списание может быть разовым или повторяющимся без каких-либо уведомлений.</translation> @@ -1074,6 +1076,7 @@ <translation id="8820817407110198400">Закладки</translation> <translation id="883848425547221593">Другие закладки</translation> <translation id="884264119367021077">Адрес доставки</translation> +<translation id="8846319957959474018">Без труда открывайте приложения с помощью закладок</translation> <translation id="884923133447025588">Не обнаружен механизм отзыва.</translation> <translation id="885730110891505394">Доступ Google</translation> <translation id="8858065207712248076">Chrome рекомендует сбросить пароль, используемый в подразделении <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, если вы указывали его на других сайтах.</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index 6759a22..98d90ad8 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Prebieha načítavanie</translation> <translation id="1640180200866533862">Pravidlá pre používateľa</translation> <translation id="1640244768702815859">Skúste <ph name="BEGIN_LINK" />navštíviť domovskú stránku webu<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Konfigurácia siete je neplatná a nepodarilo sa ju importovať.</translation> <translation id="1644574205037202324">História</translation> <translation id="1645368109819982629">Nepodporovaný protokol</translation> <translation id="1655462015569774233">{1,plural, =1{Tomuto serveru sa nepodarilo dokázať, že ide o doménu <ph name="DOMAIN" />; platnosť jej bezpečnostného certifikátu vypršala včera. Môže to byť následok nesprávnej konfigurácie alebo napadnutia vášho pripojenia útočníkom. Hodiny vášho počítača sú momentálne nastavené na <ph name="CURRENT_DATE" />. Je tento čas správny? Ak nie, opravte čas na hodinách systému a potom obnovte túto stránku.}few{Tomuto serveru sa nepodarilo dokázať, že ide o doménu <ph name="DOMAIN" />; platnosť jej bezpečnostného certifikátu vypršala pred # dňami. Môže to byť následok nesprávnej konfigurácie alebo napadnutia vášho pripojenia útočníkom. Hodiny vášho počítača sú momentálne nastavené na <ph name="CURRENT_DATE" />. Je tento čas správny? Ak nie, opravte čas na hodinách systému a potom obnovte túto stránku.}many{Tomuto serveru sa nepodarilo dokázať, že ide o doménu <ph name="DOMAIN" />; platnosť jej bezpečnostného certifikátu vypršala pred # dňom. Môže to byť následok nesprávnej konfigurácie alebo napadnutia vášho pripojenia útočníkom. Hodiny vášho počítača sú momentálne nastavené na <ph name="CURRENT_DATE" />. Je tento čas správny? Ak nie, opravte čas na hodinách systému a potom obnovte túto stránku.}other{Tomuto serveru sa nepodarilo dokázať, že ide o doménu <ph name="DOMAIN" />; platnosť jej bezpečnostného certifikátu vypršala pred # dňami. Môže to byť následok nesprávnej konfigurácie alebo napadnutia vášho pripojenia útočníkom. Hodiny vášho počítača sú momentálne nastavené na <ph name="CURRENT_DATE" />. Je tento čas správny? Ak nie, opravte čas na hodinách systému a potom obnovte túto stránku.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Server nedokáže overiť, či ide o doménu <ph name="DOMAIN" />, jej bezpečnostný certifikát pochádza z domény <ph name="DOMAIN2" />. Môže to byť spôsobené nesprávnou konfiguráciou alebo tým, že vaše pripojenie zachytil útočník.</translation> <translation id="2948083400971632585">Môžete zakázať ktorékoľvek servery proxy nakonfigurované na pripojenie na stránke nastavení.</translation> <translation id="2955913368246107853">Zatvoriť panel pre vyhľadávanie</translation> -<translation id="2958431318199492670">Konfigurácia siete nie je v súlade so štandardom ONC. Niektoré časti konfigurácie sa nemusia importovať.</translation> <translation id="2969319727213777354">Ak chcete nadviazať zabezpečené pripojenie, vaše hodiny musia byť nastavené správne. Je to preto, že certifikáty, ktoré webové stránky používajú na vlastnú identifikáciu, sú platné iba určitý čas. Keďže nie sú hodiny vášho zariadenia nastavené správne, Chrome nemôže tieto certifikáty overiť.</translation> <translation id="2972581237482394796">&Dopredu</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, aktuálne vybraté. <ph name="ROW_CONTENT" /></translation> @@ -353,7 +351,6 @@ <translation id="3391030046425686457">Doručovacia adresa</translation> <translation id="3395827396354264108">Spôsob vyzdvihnutia</translation> <translation id="3399952811970034796">Doručovacia adresa</translation> -<translation id="3409072600744224192">Ak chcete mať karty vo všetkých zariadeniach, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Skúste ukončiť ostatné programy a uvoľniť tak miesto v pamäti.</translation> <translation id="3422472998109090673">Web <ph name="HOST_NAME" /> nie je momentálne k dispozícii.</translation> <translation id="3427092606871434483">Povoliť (predvolené)</translation> @@ -578,7 +575,6 @@ <translation id="5045550434625856497">Nesprávne heslo</translation> <translation id="5056549851600133418">Články pre vás</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Skontrolovať adresu proxy servera<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Ak chcete mať karty vo všetkých zariadeniach, prihláste sa a zapnite synchronizáciu.</translation> <translation id="5086888986931078152">Môžete stratiť prístup ku chránenému obsahu z niektorých webov.</translation> <translation id="5087286274860437796">Certifikát servera je momentálne neplatný</translation> <translation id="5087580092889165836">Pridať kartu</translation> @@ -624,7 +620,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> z <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Vybrať kontaktné informácie</translation> <translation id="5327248766486351172">Názov</translation> -<translation id="5327567770033251652">zapnite synchronizáciu</translation> <translation id="5332219387342487447">Spôsob dodania</translation> <translation id="5355557959165512791">Web <ph name="SITE" /> momentálne nemôžete navštíviť, pretože tento certifikát bol odvolaný. Chyby siete a útoky sú zvyčajne dočasné, takže by táto stránka mala neskôr pravdepodobne fungovať.</translation> <translation id="536296301121032821">Nastavenia pravidla sa nepodarilo uložiť</translation> @@ -802,7 +797,6 @@ <translation id="679355240208270552">Ignorované, pretože predvolené vyhľadávanie je zakázané pravidlom.</translation> <translation id="681021252041861472">Povinné pole</translation> <translation id="6810899417690483278">Identifikátor prispôsobenia</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Načítanie údajov o regiónoch zlyhalo</translation> <translation id="6825578344716086703">Pokúsili ste sa o prístup do domény <ph name="DOMAIN" />, server však predložil certifikát podpísaný slabým algoritmom podpisu. Znamená to, že predložené poverenia zabezpečenia mohli byť sfalšované a môže ísť o úplne iný server, než ste očakávali (možno komunikujete s útočníkom).</translation> <translation id="6831043979455480757">Preložiť</translation> @@ -818,7 +812,6 @@ <translation id="6915804003454593391">Používateľ:</translation> <translation id="6944692733090228304">Zadali ste heslo na webe, ktorý nie je spravovaný organizáciou <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Ak chcete, aby bol váš účet chránený, nepoužívajte jeho heslo pre iné aplikácie a weby.</translation> <translation id="6945221475159498467">Vybrať</translation> -<translation id="6948540501704460596">Ak chcete mať karty vo všetkých zariadeniach, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Ak chcete zobraziť spôsoby a požiadavky vyzdvihnutia, vyberte adresu</translation> <translation id="6949872517221025916">Obnovenie hesla</translation> <translation id="6950684638814147129">Chyba pri analyzovaní hodnoty JSON: <ph name="ERROR" /></translation> @@ -833,7 +826,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Tieto poplatky môžu byť jednorazové alebo opakované a nemusia byť predvídateľné.</translation> <translation id="7029809446516969842">Heslá</translation> -<translation id="7042837854211185817">Ak chcete získať karty vo všetkých zariadeniach, zapnite synchronizáciu.</translation> <translation id="7050187094878475250">Pokúsili ste sa prejsť do domény <ph name="DOMAIN" />, ale server udelil certifikát, ktorého obdobie platnosti je príliš dlhé, a preto nie je dôveryhodný</translation> <translation id="7053983685419859001">Blokovať</translation> <translation id="7064851114919012435">Kontaktné informácie</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb index 2f825a5..326f124c 100644 --- a/components/strings/components_strings_sl.xtb +++ b/components/strings/components_strings_sl.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Nalaganje</translation> <translation id="1640180200866533862">Uporabniški pravilniki</translation> <translation id="1640244768702815859">Poskusite <ph name="BEGIN_LINK" />obiskati domačo stran spletnega mesta<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Omrežna konfiguracija ni veljavna in je ni mogoče uvoziti.</translation> <translation id="1644574205037202324">Zgodovina</translation> <translation id="1645368109819982629">Nepodprt protokol</translation> <translation id="1655462015569774233">{1,plural, =1{Strežniku ni uspelo dokazati, da je domena <ph name="DOMAIN" />; njegovo varnostno potrdilo je poteklo včeraj. Razlog za to je lahko napačna konfiguracija ali napadalčevo prestrezanje povezave. Ura vašega računalnika je trenutno nastavljena na <ph name="CURRENT_DATE" />. Je to videti v redu? Če ni, pravilno nastavite sistemsko uro in nato osvežite stran.}one{Strežniku ni uspelo dokazati, da je domena <ph name="DOMAIN" />; njegovo varnostno potrdilo je poteklo pred # dnevom. Razlog za to je lahko napačna konfiguracija ali napadalčevo prestrezanje povezave. Ura vašega računalnika je trenutno nastavljena na <ph name="CURRENT_DATE" />. Je to videti v redu? Če ni, pravilno nastavite sistemsko uro in nato osvežite stran.}two{Strežniku ni uspelo dokazati, da je domena <ph name="DOMAIN" />; njegovo varnostno potrdilo je poteklo pred # dnevoma. Razlog za to je lahko napačna konfiguracija ali napadalčevo prestrezanje povezave. Ura vašega računalnika je trenutno nastavljena na <ph name="CURRENT_DATE" />. Je to videti v redu? Če ni, pravilno nastavite sistemsko uro in nato osvežite stran.}few{Strežniku ni uspelo dokazati, da je domena <ph name="DOMAIN" />; njegovo varnostno potrdilo je poteklo pred # dnevi. Razlog za to je lahko napačna konfiguracija ali napadalčevo prestrezanje povezave. Ura vašega računalnika je trenutno nastavljena na <ph name="CURRENT_DATE" />. Je to videti v redu? Če ni, pravilno nastavite sistemsko uro in nato osvežite stran.}other{Strežniku ni uspelo dokazati, da je domena <ph name="DOMAIN" />; njegovo varnostno potrdilo je poteklo pred # dnevi. Razlog za to je lahko napačna konfiguracija ali napadalčevo prestrezanje povezave. Ura vašega računalnika je trenutno nastavljena na <ph name="CURRENT_DATE" />. Je to videti v redu? Če ni, pravilno nastavite sistemsko uro in nato osvežite stran.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Strežniku ni uspelo dokazati, da je res <ph name="DOMAIN" />; njegovo varnostno potrdilo je od <ph name="DOMAIN2" />. Razlog za to je lahko napačna konfiguracija ali napadalčevo prestrezanje povezave.</translation> <translation id="2948083400971632585">Namestniške strežnike, konfigurirane za povezavo, lahko onemogočite na strani z nastavitvami.</translation> <translation id="2955913368246107853">Zapri vrstico za iskanje</translation> -<translation id="2958431318199492670">Omrežna konfiguracija ne ustreza standardu ONC. Deli konfiguracije morda niso bili uvoženi.</translation> <translation id="2969319727213777354">Če želite vzpostaviti varno povezavo, mora biti ura pravilno nastavljena. Potrdila, ki jih uporabljajo spletna mesta za prepoznavanje, namreč veljajo samo določen čas. Ker je ura naprave nepravilna, Google Chrome teh potrdil ne more preveriti.</translation> <translation id="2972581237482394796">&Uveljavi</translation> <translation id="2977665033722899841">Trenutno izbrano: <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Naslov za dostavo</translation> <translation id="3395827396354264108">Način prevzema</translation> <translation id="3399952811970034796">Naslov za dostavo</translation> -<translation id="3409072600744224192">Če želite dostopati do zaznamkov v vseh napravah, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Poskusite zapreti druge programe, da boste tako sprostili pomnilnik.</translation> <translation id="3422472998109090673">Spletno mesto <ph name="HOST_NAME" /> trenutno ni dosegljivo.</translation> <translation id="3427092606871434483">Dovoli (privzeto)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Nepravilno geslo</translation> <translation id="5056549851600133418">Članki za vas</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />preveriti naslov strežnika proxy<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Če želite dostopati do kartic v vseh napravah, se prijavite in vklopite sinhronizacijo.</translation> <translation id="5086888986931078152">Morda boste izgubili dostop do zaščitene vsebine na nekaterih spletnih mestih.</translation> <translation id="5087286274860437796">Potrdilo strežnika trenutno ni veljavno.</translation> <translation id="5087580092889165836">Dodaj kartico</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> od <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Izbira podatkov za stik</translation> <translation id="5327248766486351172">Ime</translation> -<translation id="5327567770033251652">vklop sinhronizacije</translation> <translation id="5332219387342487447">Način pošiljanja</translation> <translation id="5355557959165512791">Spletnega mesta <ph name="SITE" /> trenutno ni mogoče obiskati, saj je to potrdilo preklicano. Napake omrežja in napadi na omrežje so običajno začasni, zato bo ta stran verjetno delovala pozneje.</translation> <translation id="536296301121032821">Nastavitev pravilnika ni bilo mogoče shraniti</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">Prezrto, ker pravilnik ne omogoča privzetega iskanja.</translation> <translation id="681021252041861472">Obvezno polje</translation> <translation id="6810899417690483278">ID za prilagajanje</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Podatkov o območjih ni bilo mogoče naložiti</translation> <translation id="6825578344716086703">Poskusili ste dostopati do domene <ph name="DOMAIN" />, vendar ima strežnik potrdilo, podpisano s šibkim podpisnim algoritmom (kot je SHA-1). To pomeni, da so varnostne poverilnice, ki jih je poslal strežnik, morda ponarejene in strežnik morda ni tisti, ki ga pričakujete (morda komunicirate z napadalcem).</translation> <translation id="6831043979455480757">Prevedi</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">Uporabnik:</translation> <translation id="6944692733090228304">Vnesli ste geslo na spletnem mestu, ki ga ne upravlja: <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Zaradi zaščite računa gesla ne uporabljajte za druge aplikacije in spletna mesta.</translation> <translation id="6945221475159498467">Izberi</translation> -<translation id="6948540501704460596">Če želite dostopati do kartic v vseh napravah, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Če si želite ogledati načine prevzema in zahteve, izberite naslov</translation> <translation id="6949872517221025916">Ponastavitev gesla</translation> <translation id="6950684638814147129">Napaka pri razčlenjevanju vrednosti JSON: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Te bremenitve so lahko enkratne ali ponavljajoče se in morda niso očitne.</translation> <translation id="7029809446516969842">Gesla</translation> -<translation id="7042837854211185817">Če želite dostopati do kartic v vseh napravah, vklopite sinhronizacijo.</translation> <translation id="7050187094878475250">Poskusili ste odpreti <ph name="DOMAIN" />, vendar je strežnik uporabil potrdilo, ki ima predolgo obdobje veljavnosti, da bi bilo verodostojno.</translation> <translation id="7053983685419859001">Blokiraj</translation> <translation id="7064851114919012435">Podatki o stiku</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index d189a3d..650f6a6 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Учитавање</translation> <translation id="1640180200866533862">Смернице за кориснике</translation> <translation id="1640244768702815859">Покушајте да <ph name="BEGIN_LINK" />посетите почетну страницу сајта<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Конфигурација мреже је неважећа и не може да се увезе.</translation> <translation id="1644574205037202324">Историја</translation> <translation id="1645368109819982629">Неподржани протокол</translation> <translation id="1655462015569774233">{1,plural, =1{Овај сервер не може да докаже да је <ph name="DOMAIN" />; његов безбедносни сертификат је истекао јуче. Узрок томе је можда погрешна конфигурација или нападач који је прекинуо везу. Сат рачунара је тренутно подешен на <ph name="CURRENT_DATE" />. Да ли је то тачно? Ако није, требало би да исправите сат система и да затим освежите ову страницу.}one{Овај сервер не може да докаже да је <ph name="DOMAIN" />; његов безбедносни сертификат је истекао пре # дана. Узрок томе је можда погрешна конфигурација или нападач који је прекинуо везу. Сат рачунара је тренутно подешен на <ph name="CURRENT_DATE" />. Да ли је то тачно? Ако није, требало би да исправите сат система и да затим освежите ову страницу.}few{Овај сервер не може да докаже да је <ph name="DOMAIN" />; његов безбедносни сертификат је истекао пре # дана. Узрок томе је можда погрешна конфигурација или нападач који је прекинуо везу. Сат рачунара је тренутно подешен на <ph name="CURRENT_DATE" />. Да ли је то тачно? Ако није, требало би да исправите сат система и да затим освежите ову страницу.}other{Овај сервер не може да докаже да је <ph name="DOMAIN" />; његов безбедносни сертификат је истекао пре # дана. Узрок томе је можда погрешна конфигурација или нападач који је прекинуо везу. Сат рачунара је тренутно подешен на <ph name="CURRENT_DATE" />. Да ли је то тачно? Ако није, требало би да исправите сат система и да затим освежите ову страницу.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Овај сервер не може да докаже да је <ph name="DOMAIN" />; његов безбедносни сертификат је са домена <ph name="DOMAIN2" />. Узрок томе је можда погрешна конфигурација или нападач који је прекинуо везу.</translation> <translation id="2948083400971632585">На страници Подешавања можете да онемогућите све проксије конфигурисане за везу.</translation> <translation id="2955913368246107853">Затворите траку за проналажење</translation> -<translation id="2958431318199492670">Конфигурација мреже није у складу са ONC стандардом. Делови конфигурације не могу да се увезу.</translation> <translation id="2969319727213777354">Да бисте успоставили безбедну везу, сат на уређају мора да буде тачан. То је зато што сертификати које веб-сајтови користе за идентификацију важе само за одређене временске периоде. Пошто сат на вашем уређају није тачан, Google Chrome не може да верификује те сертификате.</translation> <translation id="2972581237482394796">&Понови радњу</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, тренутно изабрано. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Адреса испоруке</translation> <translation id="3395827396354264108">Начин преузимања</translation> <translation id="3399952811970034796">Адреса испоруке</translation> -<translation id="3409072600744224192">Да би вам картице били доступне на свим уређајима, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Пробајте да изађете из других програма да бисте ослободили меморију.</translation> <translation id="3422472998109090673">Хост <ph name="HOST_NAME" /> тренутно није доступан.</translation> <translation id="3427092606871434483">Дозволи (подразумевано)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Неисправна лозинка</translation> <translation id="5056549851600133418">Чланци за вас</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />да проверите адресу проксија<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Да би вам картице били доступне на свим уређајима, пријавите се и укључите синхронизацију.</translation> <translation id="5086888986931078152">Можете да изгубите приступ заштићеном садржају са неких сајтова.</translation> <translation id="5087286274860437796">Сертификат сервера тренутно није важећи.</translation> <translation id="5087580092889165836">Додај картицу</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" />. од <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Одаберите контакт информације</translation> <translation id="5327248766486351172">Назив</translation> -<translation id="5327567770033251652">укључи синхронизацију</translation> <translation id="5332219387342487447">Начин испоруке</translation> <translation id="5355557959165512791">Тренутно не можете да посетите <ph name="SITE" /> јер је његов сертификат опозван. Грешке и напади на мрежи су обично привремени, па ће ова страница вероватно функционисати касније.</translation> <translation id="536296301121032821">Складиштење подешавања смерница није успело</translation> @@ -806,7 +801,6 @@ <translation id="679355240208270552">Занемарује се зато што смернице нису омогућиле подразумевани претраживач.</translation> <translation id="681021252041861472">Обавезно поље</translation> <translation id="6810899417690483278">ИД за прилагођавање</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Учитавање података према регионима није успело</translation> <translation id="6825578344716086703">Покушали сте да посетите <ph name="DOMAIN" />, али је сервер послао сертификат потписан слабим алгоритмом (као што је SHA-1). То значи да су безбедносни акредитиви које је сервер послао можда кривотворени и сервер можда није онај који мислите да јесте (можда комуницирате са нападачем).</translation> <translation id="6831043979455480757">Преведи</translation> @@ -822,7 +816,6 @@ <translation id="6915804003454593391">Корисник:</translation> <translation id="6944692733090228304">Унели сте лозинку на сајту којим не управља <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Да бисте заштитили налог, не користите лозинку поново у другим апликацијама ни на другим сајтовима.</translation> <translation id="6945221475159498467">Изабери</translation> -<translation id="6948540501704460596">Да би вам картице били доступне на свим уређајима, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Да бисте видели начине и захтеве за преузимање, изаберите адресу</translation> <translation id="6949872517221025916">Ресетујте лозинку</translation> <translation id="6950684638814147129">Грешка при рашчлањивању JSON вредности: <ph name="ERROR" /></translation> @@ -837,7 +830,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Те наплате могу да буду једнократне или периодичне и можда нису одмах видљиве.</translation> <translation id="7029809446516969842">Лозинке</translation> -<translation id="7042837854211185817">Да би вам картице били доступне на свим уређајима, укључите синхронизацију.</translation> <translation id="7050187094878475250">Покушали сте да посетите <ph name="DOMAIN" />, али је сервер представио сертификат са периодом важења који је предугачак да би био поуздан.</translation> <translation id="7053983685419859001">Блокирај</translation> <translation id="7064851114919012435">Контакт информације</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb index 1a0d01d..ab6f32c 100644 --- a/components/strings/components_strings_sv.xtb +++ b/components/strings/components_strings_sv.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Läser in</translation> <translation id="1640180200866533862">Användarpolicyer</translation> <translation id="1640244768702815859">Testa att <ph name="BEGIN_LINK" />besöka webbplatsens startsida<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Nätverkskonfigurationen är ogiltig och kan inte importeras.</translation> <translation id="1644574205037202324">Historik</translation> <translation id="1645368109819982629">Det finns inget stöd för protokollet</translation> <translation id="1655462015569774233">{1,plural, =1{Det gick inte att bevisa att serverns identitet är <ph name="DOMAIN" /> eftersom dess säkerhetscertifikat gick ut i går. Det kan bero på att servern är felkonfigurerad eller att anslutningen har blivit kapad. Dagens datum är <ph name="CURRENT_DATE" /> enligt datorklockan. Går den rätt? I annat fall bör du ställa om datorklockan och sedan uppdatera sidan.}other{Det gick inte att bevisa att serverns identitet är <ph name="DOMAIN" /> eftersom dess säkerhetscertifikat gick ut för # dagar sedan. Det kan bero på att servern är felkonfigurerad eller att anslutningen har blivit kapad. Dagens datum är <ph name="CURRENT_DATE" /> enligt datorklockan. Går den rätt? I annat fall bör du ställa om datorklockan och sedan uppdatera sidan.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Servern kunde inte bevisa att den är <ph name="DOMAIN" /> eftersom dess säkerhetscertifikat kommer från <ph name="DOMAIN2" />. Detta kan orsakas av en felaktig konfigurering eller att någon spärrar anslutningen.</translation> <translation id="2948083400971632585">Du kan inaktivera alla proxyservrar som har konfigurerats för en anslutning från sidan Inställningar.</translation> <translation id="2955913368246107853">Stäng sökfältet</translation> -<translation id="2958431318199492670">Nätverkskonfigurationen uppfyller inte ONC-standarden. Det kan hända att delar av konfigurationen inte kan importeras.</translation> <translation id="2969319727213777354">Om du vill upprätta en säker anslutning måste klockan vara rätt inställd. Det beror på att certifikaten som webbplatserna använder för att identifiera sig har en bestämd giltighetstid. Google Chrome kan inte verifiera certifikaten eftersom klockan på enheten inte går rätt.</translation> <translation id="2972581237482394796">&Upprepa</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" /> är markerad just nu. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Leveransadress</translation> <translation id="3395827396354264108">Alternativ för utlämning</translation> <translation id="3399952811970034796">Leveransadress</translation> -<translation id="3409072600744224192"><ph name="SIGN_IN_LINK" /> om du vill få tillgång till dina kort på alla enheter.</translation> <translation id="3422248202833853650">Testa att stänga andra program för att frigöra minne.</translation> <translation id="3422472998109090673"><ph name="HOST_NAME" /> kan inte nås för tillfället.</translation> <translation id="3427092606871434483">Tillåt (standard)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Felaktigt lösenord</translation> <translation id="5056549851600133418">Artiklar för dig</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />kontrollera proxyadressen<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Logga in och aktivera synkronisering om du vill få tillgång till dina kort på alla enheter.</translation> <translation id="5086888986931078152">Du kan förlora tillgången till skyddat innehåll från några webbplatser.</translation> <translation id="5087286274860437796">Servercertifikatet är inte giltigt för närvarande.</translation> <translation id="5087580092889165836">Lägg till kort</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> av <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Välj kontaktuppgifter</translation> <translation id="5327248766486351172">Namn</translation> -<translation id="5327567770033251652">aktivera synkronisering</translation> <translation id="5332219387342487447">Fraktmetod</translation> <translation id="5355557959165512791">Det går inte att besöka <ph name="SITE" /> just nu eftersom dess certifikat har återkallats. Nätverksfel och attacker är ofta tillfälliga, så sidan kommer förmodligen att fungera senare.</translation> <translation id="536296301121032821">Det gick inte att spara policyinställningarna</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">Ignoreras eftersom standardsökmotorn inte har aktiverats av principen.</translation> <translation id="681021252041861472">Obligatoriskt fält</translation> <translation id="6810899417690483278">Anpassnings-id</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Det gick inte att läsa in regionsuppgifter</translation> <translation id="6825578344716086703">Du försökte besöka <ph name="DOMAIN" />, men servern skickade ett certifikat som signerats med en svag signaturalgoritm (t.ex. SHA-1). Det innebär att säkerhetsuppgifterna som servern uppgav kan vara förfalskade och att servern kanske inte är den server du tror (du kanske kommunicerar med en skadlig server).</translation> <translation id="6831043979455480757">Översätt</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">Användare:</translation> <translation id="6944692733090228304">Du har angett ditt lösenord på en webbplats som inte hanteras av <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Skydda kontot genom att inte återanvända lösenordet i andra appar och webbplatser.</translation> <translation id="6945221475159498467">Välj</translation> -<translation id="6948540501704460596"><ph name="SYNC_LINK" /> om du vill få tillgång till dina kort på alla enheter.</translation> <translation id="6948701128805548767">Välj en adress för att visa alternativ för utlämning och krav</translation> <translation id="6949872517221025916">Återställ lösenord</translation> <translation id="6950684638814147129">Analysen av JSON-värdet misslyckades: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Debiteringen kan göras en gång eller återkommande och det behöver inte framgå tydligt att detta händer.</translation> <translation id="7029809446516969842">Lösenord</translation> -<translation id="7042837854211185817">Aktivera synkronisering om du vill få tillgång till dina kort på alla enheter.</translation> <translation id="7050187094878475250">Du försökte nå <ph name="DOMAIN" />, men servern svarade med ett certifikat vars giltighetstid är för lång för att det ska vara trovärdigt.</translation> <translation id="7053983685419859001">Blockera</translation> <translation id="7064851114919012435">Kontaktuppgifter</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index 96288db..f9a6acfb 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Inapakia</translation> <translation id="1640180200866533862">Sera za mtumiaji</translation> <translation id="1640244768702815859">Jaribu <ph name="BEGIN_LINK" />kutembelea ukurasa wa kwanza wa tovuti<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Usanidi wa mtandao ni batili na usingeweza kuingizwa.</translation> <translation id="1644574205037202324">Historia</translation> <translation id="1645368109819982629">Itifaki haitumiki</translation> <translation id="1655462015569774233">{1,plural, =1{Seva hii haikuweza kuthibitisha kuwa ni <ph name="DOMAIN" />; cheti chake cha usalama kilikwisha muda jana. Hii inaweza kusababishwa na usanidi usiofaa au mvamizi kuingilia muunganisho wako. Saa ya kompyuta kwa sasa imewekwa kuwa <ph name="CURRENT_DATE" />. Je, hiyo ni sahihi? Ikiwa si sahihi, rekebisha saa ya mfumo wako kisha uonyeshe upya ukurasa huu.}other{Seva hii haikuweza kuthibitisha kuwa ni <ph name="DOMAIN" />; cheti chake cha usalama kilikwisha muda siku # zilizopita. Hii inaweza kusababishwa na usanidi usiofaa au mvamizi kuingilia muunganisho wako. Saa ya kompyuta kwa sasa imewekwa kuwa <ph name="CURRENT_DATE" />. Je, hiyo ni sahihi? Ikiwa si sahihi, rekebisha saa ya mfumo wako kisha uonyeshe upya ukurasa huu.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Seva hii haikuweza kuthibitisha kuwa ni <ph name="DOMAIN" />; cheti chake cha usalama kinatoka <ph name="DOMAIN2" />. Hii inaweza kusababishwa na usanidi usiofaa au mvamizi kuingilia muunganisho wako.</translation> <translation id="2948083400971632585">Unaweza kuzima proksi zozote zilizosanidiwa kwa muunganisho kutoka kwenye ukurasa wa mipangilio.</translation> <translation id="2955913368246107853">Funga upau wa kupata</translation> -<translation id="2958431318199492670">Usanidi wa mtandao hautii kiwango cha ONC. Sehemu za usanidi haziwezi kuingizwa.</translation> <translation id="2969319727213777354">Ili kutambua muunganisho salama, saa yako inahitaji kusahihishwa. Hii ni kwa sababu vyeti ambavyo tovuti hutumia kujitambua ni sahihi kwa vipindi mahususi pekee. Kwa kuwa saa ya kifaa chako si sahihi, Google Chrome haiwezi kuthibitisha vyeti hivi.</translation> <translation id="2972581237482394796">&Rudia</translation> <translation id="2977665033722899841">Umechagua <ph name="ROW_NAME" /> wakati huu. <ph name="ROW_CONTENT" /></translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Mahali pa kupeleka</translation> <translation id="3395827396354264108">Mbinu ya kuchukua</translation> <translation id="3399952811970034796">Mahali Bidhaa Itapelekwa</translation> -<translation id="3409072600744224192">Ili upate kadi zako kwenye vifaa vyako vyote, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Jaribu kuondoka kwenye programu nyingine ili upate nafasi zaidi.</translation> <translation id="3422472998109090673"><ph name="HOST_NAME" /> haiwezi kufikiwa kwa sasa.</translation> <translation id="3427092606871434483">Ruhusu (chaguomsingi)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Nenosiri lisilo sahihi</translation> <translation id="5056549851600133418">Makala kwa ajili yako</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Kuangalia anwani mbadala<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Ingia katika akaunti na uwashe kipengele cha kusawazisha ili upate kadi zako kwenye vifaa vyako vyote.</translation> <translation id="5086888986931078152">Utapoteza idhini ya kufikia maudhui yanayolindwa kwenye tovuti nyingine.</translation> <translation id="5087286274860437796">Cheti cha seva si sahihi kwa sasa.</translation> <translation id="5087580092889165836">Ongeza kadi</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> kati ya <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Chagua Maelezo ya Mawasiliano</translation> <translation id="5327248766486351172">Jina</translation> -<translation id="5327567770033251652">washa kipengele cha kusawazisha</translation> <translation id="5332219387342487447">Mbinu ya Usafirishaji</translation> <translation id="5355557959165512791">Huwezi kutembelea <ph name="SITE" /> sasa hivi kwa sababu cheti chake kimebatilishwa. Hitilafu na uvamizi wa mtandao kwa kawaida huwa wa muda, kwa hivyo huenda ukurasa huu utafanya kazi baadaye.</translation> <translation id="536296301121032821">Imeshindwa kuhifadhi mipangilio ya sera</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">Imepuuzwa kwa sababu utafutaji chaguomsingi umezimwa na sera.</translation> <translation id="681021252041861472">Sehemu Hii Sharti Ijazwe</translation> <translation id="6810899417690483278">Kitambulisho cha kubadilisha ili kukufaa</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Imeshindwa kupakia maeneo ya data</translation> <translation id="6825578344716086703">Umejaribu kufikia <ph name="DOMAIN" />, lakini seva iliwasilisha cheti kilichotiwa sahihi na kanuni duni. Hii inamaanisha kuwa stakabadhi za usalama zilizowasilishwa na seva hiyo huenda ni bandia na seva hiyo huenda ikawa si ile uliyotarajia (unaweza kuwa unawasiliana na mvamizi).</translation> <translation id="6831043979455480757">Tafsiri</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">Mtumiaji:</translation> <translation id="6944692733090228304">Uliweka nenosiri lako kwenye tovuti ambayo haisimamiwi na <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Ili kulinda akaunti yako, usitumie tena nenosiri lako kwenye programu na tovuti zingine.</translation> <translation id="6945221475159498467">Chagua</translation> -<translation id="6948540501704460596">Ili upate kadi zako kwenye vifaa vyako vyote, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Chagua anwani ili uone mbinu za kuchukua na mahitaji</translation> <translation id="6949872517221025916">Weka Nenosiri Jipya</translation> <translation id="6950684638814147129">Hitilafu fulani imetokea wakati wa kuchanganua thamani ya JSON: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Gharama hizi zinaweza kuwa za mara moja au za kujirudia na huenda zisiwe za moja kwa moja.</translation> <translation id="7029809446516969842">Manenosiri</translation> -<translation id="7042837854211185817">Ili upate kadi zako katika vifaa vyako vyote, washa kipengele cha kusawazisha.</translation> <translation id="7050187094878475250">Ulijaribu kufikia <ph name="DOMAIN" />, lakini seva ikawasilisha cheti ambacho muda wake sahihi ni mrefu sana wa kuweza kuaminika.</translation> <translation id="7053983685419859001">Zuia</translation> <translation id="7064851114919012435">Maelezo ya mawasiliano</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index 5149177e..0af87fc0 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">ஏற்றுகிறது</translation> <translation id="1640180200866533862">பயனர் கொள்கைகள்</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />தளத்தின் முகப்புப் பக்கத்திற்குச் செல்லவும்<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">பிணைய உள்ளமைவு தவறானது மேலும் அதை இறக்குமதி செய்ய முடியவில்லை.</translation> <translation id="1644574205037202324">வரலாறு</translation> <translation id="1645368109819982629">ஆதரிக்கப்படாத நெறிமுறை</translation> <translation id="1655462015569774233">{1,plural, =1{இந்தச் சேவையகம் தான் <ph name="DOMAIN" /> என்பதை நிரூபிக்க முடியவில்லை; இதன் பாதுகாப்புச் சான்றிதழ் நேற்று காலாவதியானது. இது தவறான உள்ளமைவால் ஏற்பட்டிருக்கலாம் அல்லது தீங்கிழைப்பவர் உங்கள் இணைப்பில் குறுக்கிட்டிருக்கலாம். உங்கள் கணினியின் கடிகாரம் தற்போது <ph name="CURRENT_DATE" /> என அமைக்கப்பட்டுள்ளது. அது சரியாக இருக்கிறதா? இல்லை என்றால், உங்கள் முறைமையின் கடிகாரத்தைச் சரிசெய்து, பின்னர் இந்தப் பக்கத்தைப் புதுப்பிக்க வேண்டும்.}other{இந்தச் சேவையகம் தான் <ph name="DOMAIN" /> என்பதை நிரூபிக்க முடியவில்லை; இதன் பாதுகாப்புச் சான்றிதழ் # நாட்களுக்கு முன்பு காலாவதியானது. இது தவறான உள்ளமைவால் ஏற்பட்டிருக்கலாம் அல்லது தீங்கிழைப்பவர் உங்கள் இணைப்பில் குறுக்கிட்டிருக்கலாம். உங்கள் கணினியின் கடிகாரம் தற்போது <ph name="CURRENT_DATE" /> என அமைக்கப்பட்டுள்ளது. அது சரியாக இருக்கிறதா? இல்லை என்றால், உங்கள் முறைமையின் கடிகாரத்தைச் சரிசெய்து, பின்னர் இந்தப் பக்கத்தைப் புதுப்பிக்க வேண்டும்.}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">தொடர்க</translation> <translation id="2365563543831475020"><ph name="CRASH_TIME" /> அன்று பெற்ற சிதைவு அறிக்கை பதிவேற்றப்படவில்லை</translation> <translation id="2367567093518048410">நிலை</translation> +<translation id="2378238891085281592">மறைநிலையில் இருக்கிறீர்கள்</translation> <translation id="2384307209577226199">நிறுவன இயல்புநிலை</translation> <translation id="2386255080630008482">சேவையகச் சான்றிதழ் திரும்பப் பெறப்பட்டது.</translation> <translation id="2392959068659972793">மதிப்பும் எதுவும் அமைக்கப்படாத கொள்கைகளைக் காட்டு</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">இது <ph name="DOMAIN" /> தான் என்பதை இந்தச் சேவையகம் உறுதிப்படுத்தவில்லை; இதன் பாதுகாப்புச் சான்றிதழ் <ph name="DOMAIN2" /> இலிருந்து பெறப்பட்டது. இது தவறான உள்ளமைவால் ஏற்பட்டிருக்கலாம் அல்லது தீங்கிழைப்பவர் உங்கள் இணைப்பில் குறுக்கிட்டிருக்கலாம்.</translation> <translation id="2948083400971632585">இணைப்பிற்காக உள்ளமைத்த எந்த பிராக்சிகளையும் நீங்கள் அமைப்புகள் பக்கத்திலிருந்து முடக்கலாம்.</translation> <translation id="2955913368246107853">தேடல் பெட்டியை மூடுக</translation> -<translation id="2958431318199492670">பிணைய உள்ளமைப்பானது ONC தரத்துடன் இணங்கவில்லை. உள்ளமைவின் பகுதிகள் இறக்குமதியாகாமல் போகக்கூடும்.</translation> <translation id="2969319727213777354">பாதுகாப்பான இணைப்பை ஏற்படுத்த, கடிகாரம் சரியாக அமைக்கப்பட வேண்டும். இணையதளங்கள் தங்களைத் தாமே அடையாளப்படுத்தப் பயன்படுத்தப்படும் சான்றிதழ்கள் குறிப்பிட்ட காலத்திற்கு மட்டும் செல்லுபடியாவதால், இது செய்யப்பட வேண்டும். உங்கள் சாதனத்தின் கடிகாரம் தவறாக இருப்பதால், இந்தச் சான்றிதழ்களை Google Chrome ஆல் சரிபார்க்க முடியவில்லை.</translation> <translation id="2972581237482394796">&மீண்டும் செய்</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, தற்போது தேர்ந்தெடுக்கப்பட்டது. <ph name="ROW_CONTENT" /></translation> @@ -511,6 +510,7 @@ <translation id="450710068430902550">நிர்வாகியுடன் பகிர்பவை</translation> <translation id="4515275063822566619">கார்டுகளும் முகவரிகளும் Chrome இலிருந்தும் <ph name="ACCOUNT_EMAIL" /> எனும் உங்கள் Google கணக்கிலிருந்தும் பெறப்பட்டவையாகும். <ph name="BEGIN_LINK" />அமைப்புகளில்<ph name="END_LINK" /> அவற்றை நிர்வகிக்கலாம்.</translation> <translation id="4522570452068850558">விவரங்கள்</translation> +<translation id="4524805452350978254">கார்டுகளை நிர்வகி</translation> <translation id="4552089082226364758">ஃப்ளாஷ்</translation> <translation id="4558551763791394412">நீட்டிப்புகளை முடக்கவும்.</translation> <translation id="457875822857220463">டெலிவரி</translation> @@ -697,6 +697,7 @@ <translation id="5866257070973731571">மொபைல் எண்ணைச் சேர்க்கவும்</translation> <translation id="5869405914158311789">இந்தத் தளத்தை அணுக முடியவில்லை</translation> <translation id="5869522115854928033">சேமிக்கப்பட்ட கடவுச்சொற்கள்</translation> +<translation id="5887400589839399685">கார்டு சேமிக்கப்பட்டது</translation> <translation id="5893752035575986141">கிரெடிட் கார்டுகள் ஏற்கப்படுகின்றன.</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (ஒத்திசைக்கப்பட்டது)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{ஒரு குக்கீ பயன்படுத்தப்படுகிறது}other{# குக்கீகள் பயன்படுத்தப்படுகின்றன}}</translation> @@ -797,7 +798,6 @@ <translation id="679355240208270552">கொள்கையின்படி இயல்புநிலைத் தேடல் முடக்கப்பட்டுள்ளதால் புறக்கணிக்கப்பட்டது.</translation> <translation id="681021252041861472">அவசியம்</translation> <translation id="6810899417690483278">தனிப்பயனாக்கல் ஐடி</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">மண்டலங்களின் தரவை ஏற்ற முடியவில்லை</translation> <translation id="6825578344716086703"><ph name="DOMAIN" />க்குச் செல்ல முயற்சி செய்தீர்கள். ஆனால் சேவையகமானது வலிமையற்ற கையொப்ப அல்காரிதமை (SHA-1 போன்றது) பயன்படுத்தி, கையொப்பமிடப்பட்ட சான்றிதழை வழங்கியது. அதாவது, சேவையகம் வழங்கிய பாதுகாப்பு அனுமதிச் சான்றுகள் போலியானதாக்கப்பட்டிருக்கலாம், மேலும் அந்தச் சேவையகம் நீங்கள் எதிர்பார்த்த (ஹேக்கருடன் தகவல் பரிமாற்றம் செய்திருக்கக்கூடும்) சேவையகமாக இல்லாமலிருக்கலாம்.</translation> <translation id="6831043979455480757">மொழிபெயர்</translation> @@ -816,11 +816,13 @@ <translation id="6948701128805548767">பிக்அப் முறைகளையும் தேவைகளையும் பார்க்க, முகவரியைத் தேர்ந்தெடுக்கவும்</translation> <translation id="6949872517221025916">கடவுச்சொல்லை மீட்டமைக்கவும்</translation> <translation id="6950684638814147129">JSON மதிப்பைப் பாகுபடுத்தும்போது பிழை நேர்ந்தது: <ph name="ERROR" /></translation> +<translation id="6957624206566198865">புதிய மறைநிலைத் தாவலில் பக்கத்தைத் திறக்கவும்</translation> <translation id="6957887021205513506">சேவையகத்தின் சான்றிதழ் போலியானது போல் தெரிகிறது.</translation> <translation id="6965382102122355670">சரி</translation> <translation id="6965978654500191972">சாதனம்</translation> <translation id="6970216967273061347">மாவட்டம்</translation> <translation id="6973656660372572881">நிலையான ப்ராக்ஸி சேவையகங்களும் .pac ஸ்கிரிப்ட் URL ஆகிய இரண்டும் குறிப்பிடப்பட்டுள்ளது.</translation> +<translation id="6984479912851154518">வெளிப் பயன்பாட்டின் மூலம் பணத்தை செலுத்த, மறைநிலையிலிருந்து வெளியேறுகிறது. தொடரவா?</translation> <translation id="6989763994942163495">மேம்பட்ட அமைப்புகளைக் காண்பி...</translation> <translation id="7012363358306927923">சீனா UnionPay</translation> <translation id="7016992613359344582">இந்தக் கட்டணங்கள் ஒருமுறை அல்லது தொடர்ந்து வசூலிக்கப்படலாம், அவை வெளிப்படையாகத் தெரிவிக்கப்படாமல் இருக்கலாம்.</translation> @@ -1071,6 +1073,7 @@ <translation id="8820817407110198400">புத்தகக்குறிகள்</translation> <translation id="883848425547221593">மற்ற புக்மார்க்குகள்</translation> <translation id="884264119367021077">ஷிப்பிங் முகவரி</translation> +<translation id="8846319957959474018">புத்தகக்குறிகளைப் பயன்படுத்தி ஆப்ஸை எளிதாகத் திறக்கலாம்</translation> <translation id="884923133447025588">திரும்பப்பெறுதல் செயல்முறை காணப்படவில்லை.</translation> <translation id="885730110891505394">Google உடன் பகிர்பவை</translation> <translation id="8858065207712248076">பிற தளங்களில் உங்கள் <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> கடவுச்சொல்லை மீண்டும் பயன்படுத்தினால், அதை மீட்டமைக்கும்படி Chrome பரிந்துரைக்கிறது.</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index ff54c21..614be2b 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">లోడ్ అవుతోంది</translation> <translation id="1640180200866533862">వినియోగదారు విధానాలు</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />సైట్ యొక్క హోమ్పేజీని సందర్శించడం<ph name="END_LINK" /> ప్రయత్నించండి.</translation> -<translation id="1644184664548287040">నెట్వర్క్ కాన్ఫిగరేషన్ చెల్లదు మరియు దిగుమతి చేయడం సాధ్యం కాదు.</translation> <translation id="1644574205037202324">చరిత్ర</translation> <translation id="1645368109819982629">ప్రోటోకాల్కు మద్దతు లేదు</translation> <translation id="1655462015569774233">{1,plural, =1{ఈ సర్వర్ ఇది <ph name="DOMAIN" /> అని నిరూపించలేకపోయింది; దీని భద్రతా ప్రమాణపత్రం గడువు నిన్న ముగిసింది. తప్పుగా కాన్ఫిగర్ చేసినందున లేదా దాడిచేసేవారు మీ కనెక్షన్కు అంతరాయం కలిగించినందున ఇలా జరిగి ఉండవచ్చు. మీ కంప్యూటర్ గడియారం ప్రస్తుతం <ph name="CURRENT_DATE" />కి సెట్ చేయబడింది. అది సరిగ్గా ఉందా? సరిగ్గా లేకుంటే, మీరు సిస్టమ్ గడియారాన్ని సరిచేసి, ఆపై ఈ పేజీని రీఫ్రెష్ చేయాలి.}other{ఈ సర్వర్ ఇది <ph name="DOMAIN" /> అని నిరూపించలేకపోయింది; దీని భద్రతా ప్రమాణపత్రం గడువు # రోజుల క్రితం ముగిసింది. తప్పుగా కాన్ఫిగర్ చేసినందున లేదా దాడిచేసేవారు మీ కనెక్షన్కు అంతరాయం కలిగించినందున ఇలా జరిగి ఉండవచ్చు. మీ కంప్యూటర్ గడియారం ప్రస్తుతం <ph name="CURRENT_DATE" />కి సెట్ చేయబడింది. అది సరిగ్గా ఉందా? సరిగ్గా లేకుంటే, మీరు సిస్టమ్ గడియారాన్ని సరిచేసి, ఆపై ఈ పేజీని రీఫ్రెష్ చేయాలి.}}</translation> @@ -283,7 +282,6 @@ <translation id="2941952326391522266">ఈ సర్వర్ <ph name="DOMAIN" /> అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రం <ph name="DOMAIN2" /> నుండి జారీ చేయబడింది. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడిచేసే వ్యక్తి మీ కనెక్షన్కి అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు.</translation> <translation id="2948083400971632585">మీరు సెట్టింగ్ల పేజీ నుండి కనెక్షన్ కోసం కాన్ఫిగర్ చేయబడిన ఏ ప్రాక్సీలను అయినా నిలిపివేయవచ్చు.</translation> <translation id="2955913368246107853">కనుగొను పట్టీని మూసివేయి</translation> -<translation id="2958431318199492670">నెట్వర్క్ కాన్ఫిగరేషన్ ONC ప్రమాణానికి అనుకూలంగా లేదు. కాన్ఫిగరేషన్లోని భాగాలు దిగుమతి కాకపోయి ఉండకపోవచ్చు.</translation> <translation id="2969319727213777354">సురక్షిత కనెక్షన్ను ఏర్పాటు చేయడానికి, మీ గడియారాన్ని సరైన సమయానికి సెట్ చేయాలి. ఎందుకంటే వెబ్సైట్లు వాటిని గుర్తించడానికి ఉపయోగించే ప్రమాణపత్రాలు నిర్దిష్ట కాలవ్యవధుల్లో మాత్రమే చెల్లుబాటు అవుతాయి. మీ పరికరం గడియారం సమయం తప్పుగా ఉన్నందున, Google Chrome ఈ ప్రమాణపత్రాలను ధృవీకరించలేదు.</translation> <translation id="2972581237482394796">&పునరావృతం</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, ప్రస్తుతం ఎంచుకోబడింది. <ph name="ROW_CONTENT" /></translation> @@ -801,7 +799,6 @@ <translation id="679355240208270552">విధానంచే డిఫాల్ట్ శోధన ప్రారంభించబడనందున విస్మరించబడింది.</translation> <translation id="681021252041861472">అవసరమైన ఫీల్డ్</translation> <translation id="6810899417690483278">అనుకూలీకరణ ID</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">ప్రాంతాల డేటాను లోడ్ చేయడం విఫలమైంది</translation> <translation id="6825578344716086703"><ph name="DOMAIN" />ను చేరుకోవడానికి మీరు ప్రయత్నించారు, కానీ సర్వర్ (SHA-1 వంటి) బలహీనమైన సంతకం అల్గారిథమ్ను ఉపయోగించి సంతకం చేసిన ప్రమాణపత్రాన్ని అందించింది. అంటే సర్వర్ అందించిన భద్రత ఆధారాలు నకిలీ కావచ్చు మరియు సర్వర్ మీరు ఊహించిన సర్వర్ కాకపోవచ్చు (మీరు హ్యాకర్తో పరస్పర చర్య చేస్తుండవచ్చు).</translation> <translation id="6831043979455480757">అనువదించు</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb index 2e9cf43..8273f17 100644 --- a/components/strings/components_strings_th.xtb +++ b/components/strings/components_strings_th.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">กำลังโหลด</translation> <translation id="1640180200866533862">นโยบายผู้ใช้</translation> <translation id="1640244768702815859">ลอง<ph name="BEGIN_LINK" />ไปที่หน้าแรกของเว็บไซต์<ph name="END_LINK" /></translation> -<translation id="1644184664548287040">การกำหนดค่าเครือข่ายไม่ถูกต้องและไม่สามารถนำเข้า</translation> <translation id="1644574205037202324">ประวัติการเข้าชม</translation> <translation id="1645368109819982629">ไม่รองรับโปรโตคอล</translation> <translation id="1655462015569774233">{1,plural, =1{เซิร์ฟเวอร์นี้พิสูจน์ไม่ได้ว่าเป็น <ph name="DOMAIN" /> เพราะใบรับรองความปลอดภัยหมดอายุไปเมื่อวานนี้ โดยอาจเกิดจากการกำหนดค่าผิดหรือผู้บุกรุกที่ขัดขวางการเชื่อมต่อของคุณ ขณะนี้นาฬิกาของคุณตั้งค่าไว้ที่วันที่ <ph name="CURRENT_DATE" /> การตั้งค่านี้ถูกต้องไหม หากไม่ถูกต้อง คุณควรแก้ไขนาฬิกาของระบบและรีเฟรชหน้านี้}other{เซิร์ฟเวอร์นี้พิสูจน์ไม่ได้ว่าเป็น <ph name="DOMAIN" /> เพราะใบรับรองความปลอดภัยหมดอายุไปเมื่อ # วันที่ผ่านมา โดยอาจเกิดจากการกำหนดค่าผิดหรือผู้บุกรุกที่ขัดขวางการเชื่อมต่อของคุณ ขณะนี้นาฬิกาของคุณตั้งค่าไว้ที่วันที่ <ph name="CURRENT_DATE" /> การตั้งค่านี้ถูกต้องไหม หากไม่ถูกต้อง คุณควรแก้ไขนาฬิกาของระบบและรีเฟรชหน้านี้}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">ดำเนินการต่อ</translation> <translation id="2365563543831475020">รายงานข้อขัดข้องเมื่อ <ph name="CRASH_TIME" /> ยังไม่ได้อัปโหลด</translation> <translation id="2367567093518048410">ระดับ</translation> +<translation id="2378238891085281592">คุณเข้าสู่โหมดส่วนตัวแล้ว</translation> <translation id="2384307209577226199">ค่าเริ่มต้นขององค์กร</translation> <translation id="2386255080630008482">ใบรับรองของเซิร์ฟเวอร์ถูกเพิกถอนแล้ว</translation> <translation id="2392959068659972793">แสดงนโยบายโดยที่ไม่ได้ตั้งค่า</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">เซิร์ฟเวอร์นี้ไม่สามารถพิสูจน์ได้ว่าเป็น <ph name="DOMAIN" /> เพราะใบรับรองความปลอดภัยมาจาก <ph name="DOMAIN2" /> โดยอาจเกิดจากการกำหนดค่าผิดหรือผู้บุกรุกที่ขัดขวางการเชื่อมต่อของคุณ</translation> <translation id="2948083400971632585">คุณสามารถปิดใช้งานพร็อกซีที่กำหนดค่าสำหรับการเชื่อมต่อจากหน้าการตั้งค่าได้</translation> <translation id="2955913368246107853">ปิดแถบค้นหา</translation> -<translation id="2958431318199492670">การกำหนดค่าเครือข่ายไม่เป็นไปตามมาตรฐาน ONC การกำหนดค่าบางส่วนอาจไม่ได้รับการนำเข้า</translation> <translation id="2969319727213777354">หากต้องการสร้างการเชื่อมต่อที่ปลอดภัย คุณต้องตั้งค่านาฬิกาให้ถูกต้องเนื่องจากใบรับรองที่เว็บไซต์ใช้เพื่อระบุตัวตนจะใช้ได้ในช่วงเวลาที่เจาะจงเท่านั้น แต่เนื่องจากนาฬิกาของอุปกรณ์ไม่ถูกต้อง Google Chrome จึงไม่สามารถยืนยันใบรับรองเหล่านี้</translation> <translation id="2972581237482394796">&ทำซ้ำ</translation> <translation id="2977665033722899841">เลือก <ph name="ROW_NAME" /> อยู่ตอนนี้ <ph name="ROW_CONTENT" /></translation> @@ -514,6 +513,7 @@ <translation id="450710068430902550">การแชร์กับผู้ดูแลระบบ</translation> <translation id="4515275063822566619">ข้อมูลบัตรและที่อยู่มาจาก Chrome และบัญชี Google (<ph name="ACCOUNT_EMAIL" />) คุณสามารถจัดการข้อมูลเหล่านี้ใน<ph name="BEGIN_LINK" />การตั้งค่า<ph name="END_LINK" /></translation> <translation id="4522570452068850558">รายละเอียด</translation> +<translation id="4524805452350978254">จัดการการ์ด</translation> <translation id="4552089082226364758">Flash</translation> <translation id="4558551763791394412">ลองปิดใช้ส่วนขยาย</translation> <translation id="457875822857220463">การจัดส่ง</translation> @@ -600,7 +600,7 @@ <translation id="5190835502935405962">แถบบุ๊กมาร์ก</translation> <translation id="5201306358585911203">หน้าที่ฝังไว้ในหน้าเว็บนี้บอกว่า</translation> <translation id="5205222826937269299">ต้องระบุชื่อ</translation> -<translation id="5215116848420601511">วิธีการชำระเงินและกรอกที่อยู่โดยใช้ Google Pay</translation> +<translation id="5215116848420601511">วิธีการชำระเงินและที่อยู่จาก Google Pay</translation> <translation id="5222812217790122047">ต้องระบุอีเมล</translation> <translation id="5230733896359313003">ที่อยู่ในการจัดส่ง</translation> <translation id="5250209940322997802">"เชื่อมต่อกับเครือข่าย"</translation> @@ -700,6 +700,7 @@ <translation id="5866257070973731571">เพิ่มหมายเลขโทรศัพท์</translation> <translation id="5869405914158311789">ไม่สามารถเข้าถึงเว็บไซต์นี้</translation> <translation id="5869522115854928033">รหัสผ่านที่บันทึกไว้</translation> +<translation id="5887400589839399685">บันทึกการ์ดแล้ว</translation> <translation id="5893752035575986141">รับบัตรเครดิต</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (ซิงค์แล้ว)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{ใช้งานอยู่ 1 รายการ}other{ใช้งานอยู่ # รายการ}}</translation> @@ -801,7 +802,6 @@ <translation id="679355240208270552">ไม่ใช้งานเนื่องจากมีการเปิดใช้การค้นหาเริ่มต้นตามนโยบาย</translation> <translation id="681021252041861472">ช่องที่ต้องกรอก</translation> <translation id="6810899417690483278">รหัสการปรับแต่ง</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">ไม่สามารถโหลดข้อมูลภูมิภาค</translation> <translation id="6825578344716086703">คุณพยายามเข้าถึง <ph name="DOMAIN" /> แต่เซิร์ฟเวอร์แสดงใบรับรองที่ลงนามด้วยอัลกอริทึมลายเซ็นที่ไม่รัดกุม (เช่น SHA-1) ซึ่งหมายความว่าข้อมูลรับรองด้านความปลอดภัยที่เซิร์ฟเวอร์แสดงอาจถูกปลอมแปลงขึ้น และเซิร์ฟเวอร์ดังกล่าวอาจไม่ใช่เซิร์ฟเวอร์ที่คุณคิด (คุณอาจกำลังติดต่อกับผู้โจมตี)</translation> <translation id="6831043979455480757">แปลภาษา</translation> @@ -820,11 +820,13 @@ <translation id="6948701128805548767">หากต้องการดูวิธีการรับสินค้าและข้อกำหนด โปรดเลือกที่อยู่</translation> <translation id="6949872517221025916">รีเซ็ตรหัสผ่าน</translation> <translation id="6950684638814147129">เกิดข้อผิดพลาดขณะแยกวิเคราะห์ค่า JSON: <ph name="ERROR" /></translation> +<translation id="6957624206566198865">เปิดหน้าเว็บในแท็บส่วนตัวใหม่</translation> <translation id="6957887021205513506">ใบรับรองของเซิร์ฟเวอร์น่าจะเป็นของปลอม</translation> <translation id="6965382102122355670">ตกลง</translation> <translation id="6965978654500191972">อุปกรณ์</translation> <translation id="6970216967273061347">เขต</translation> <translation id="6973656660372572881">มีการระบุทั้งพร็อกซีเซิร์ฟเวอร์แบบคงที่และ URL สคริปต์ .pac ไว้</translation> +<translation id="6984479912851154518">ออกจากโหมดส่วนตัวเพื่อชำระเงินผ่านแอปพลิเคชันภายนอก ดำเนินการต่อไหม</translation> <translation id="6989763994942163495">แสดงการตั้งค่าขั้นสูง...</translation> <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">การเรียกเก็บเงินเหล่านี้อาจเกิดขึ้นครั้งเดียวหรือเป็นเกิดขึ้นซ้ำๆ และอาจไม่แสดงอย่างชัดแจ้ง</translation> @@ -1076,6 +1078,7 @@ <translation id="8820817407110198400">บุ๊กมาร์ก</translation> <translation id="883848425547221593">บุ๊กมาร์กอื่นๆ</translation> <translation id="884264119367021077">ที่อยู่จัดส่ง</translation> +<translation id="8846319957959474018">เปิดแอปได้ง่ายๆ ด้วยบุ๊กมาร์ก</translation> <translation id="884923133447025588">ไม่พบกระบวนการเพิกถอน</translation> <translation id="885730110891505394">การแชร์กับ Google</translation> <translation id="8858065207712248076">Chrome ขอแนะนำให้รีเซ็ตรหัสผ่าน <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> หากคุณใช้รหัสผ่านนี้ซ้ำในเว็บไซต์อื่น</translation> @@ -1093,7 +1096,7 @@ <translation id="8957210676456822347">การให้สิทธิ์แคปทีฟพอร์ทัล</translation> <translation id="8971063699422889582">ใบรับรองของเซิร์ฟเวอร์หมดอายุแล้ว</translation> <translation id="8978053250194585037">เมื่อเร็วๆ นี้ Google Safe Browsing <ph name="BEGIN_LINK" />ตรวจพบฟิชชิง<ph name="END_LINK" />ใน <ph name="SITE" /> เว็บไซต์ฟิชชิงปลอมเป็นเว็บไซต์อื่นๆ เพื่อหลอกคุณ</translation> -<translation id="8983003182662520383">วิธีการชำระเงินและกรอกที่อยู่โดยใช้ Google Pay</translation> +<translation id="8983003182662520383">วิธีการชำระเงินและที่อยู่จาก Google Pay</translation> <translation id="8987927404178983737">เดือน</translation> <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">ไซต์ที่จะเปิดมีโปรแกรมที่เป็นอันตราย</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index 18d577e4..44b40db 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Yükleniyor</translation> <translation id="1640180200866533862">Kullanıcı politikaları</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />Sitenin ana sayfasını ziyaret etmeyi deneyin<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Ağ yapılandırması geçersiz, dolayısıyla içe aktarılamadı.</translation> <translation id="1644574205037202324">Geçmiş</translation> <translation id="1645368109819982629">Desteklenmeyen protokol</translation> <translation id="1655462015569774233">{1,plural, =1{Bu sunucu, <ph name="DOMAIN" /> olduğunu kanıtlayamadı. Güvenlik sertifikasının süresi dün sona erdi. Bu durum, bir yanlış yapılandırmadan veya bağlantınıza müdahale eden bir saldırgandan kaynaklanıyor olabilir. Bilgisayarınızın saati geçerli olarak <ph name="CURRENT_DATE" /> tarihine ayarlı. Bu ayar doğru görünüyor mu? Değilse, sisteminizin saatini düzeltmeli ve sonra bu sayfayı yenilemelisiniz.}other{Bu sunucu, <ph name="DOMAIN" /> olduğunu kanıtlayamadı. Güvenlik sertifikası # gün önce sona erdi. Bu durum, bir yanlış yapılandırmadan veya bağlantınıza müdahale eden bir saldırgandan kaynaklanıyor olabilir. Bilgisayarınızın saati geçerli olarak <ph name="CURRENT_DATE" /> tarihine ayarlı. Bu ayar doğru görünüyor mu? Değilse, sisteminizin saatini düzeltmeli ve sonra bu sayfayı yenilemelisiniz.}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">Devam Et</translation> <translation id="2365563543831475020">Yakalanan kilitlenme raporu (<ph name="CRASH_TIME" />) yüklenmedi</translation> <translation id="2367567093518048410">Düzey</translation> +<translation id="2378238891085281592">Gizli moda geçtiniz</translation> <translation id="2384307209577226199">Kuruluşun varsayılan ayarı</translation> <translation id="2386255080630008482">Sunucunun sertifikası iptal edildi.</translation> <translation id="2392959068659972793">Hiçbir değer ayarlanmamış politikaları göster</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">Bu sunucu <ph name="DOMAIN" /> olduğunu kanıtlayamadı. Güvenlik sertifikası <ph name="DOMAIN2" /> alan adından geliyor. Bu durum, bir yanlış yapılandırmadan veya bağlantıya müdahale eden bir saldırgandan kaynaklanıyor olabilir.</translation> <translation id="2948083400971632585">Ayarlar sayfasından, bir bağlantı için yapılandırılmış proxy'leri devre dışı bırakabilirsiniz.</translation> <translation id="2955913368246107853">Bulma çubuğunu kapat</translation> -<translation id="2958431318199492670">Ağ yapılandırması ONC standardıyla uyumlu değil. Yapılandırmanın bazı bölümleri içe aktarılamaz.</translation> <translation id="2969319727213777354">Güvenli bir bağlantı kurmak için saatinizin doğru ayarlanmış olması gerekir. Bunun sebebi, web sitelerinin kendilerini tanımlamak için kullandıkları sertifikaların sadece belli süreler için geçerli olmasıdır. Cihazınızın saati yanlış olduğundan, Google Chrome bu sertifikaları doğrulayamıyor.</translation> <translation id="2972581237482394796">&Yinele</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, şu anda seçili. <ph name="ROW_CONTENT" /></translation> @@ -514,6 +513,7 @@ <translation id="450710068430902550">Yöneticiyle Paylaşma</translation> <translation id="4515275063822566619">Kart ve adres bilgileri Chrome'dan ve Google Hesabınızdan (<ph name="ACCOUNT_EMAIL" />) alınmaktadır. Bunları <ph name="BEGIN_LINK" />Ayarlar<ph name="END_LINK" />'dan yönetebilirsiniz.</translation> <translation id="4522570452068850558">Ayrıntılar</translation> +<translation id="4524805452350978254">Kartları yönet</translation> <translation id="4552089082226364758">Flash</translation> <translation id="4558551763791394412">Uzantılarınızı devre dışı bırakmayı deneyin</translation> <translation id="457875822857220463">Teslimat</translation> @@ -700,6 +700,7 @@ <translation id="5866257070973731571">Telefon Numarası Ekleyin</translation> <translation id="5869405914158311789">Bu siteye ulaşılamıyor</translation> <translation id="5869522115854928033">Kayıtlı şifreler</translation> +<translation id="5887400589839399685">Kart kaydedildi</translation> <translation id="5893752035575986141">Kredi kartları kabul edilir.</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (senkronize edildi)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 çerez kullanımda}other{# çerez kullanımda}}</translation> @@ -801,7 +802,6 @@ <translation id="679355240208270552">Varsayılan arama motoru politika tarafından etkinleştirilmediği için yoksayıldı.</translation> <translation id="681021252041861472">Gerekli Alan</translation> <translation id="6810899417690483278">Özelleştirme Kimliği</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Bölge verileri yüklenemedi</translation> <translation id="6825578344716086703"><ph name="DOMAIN" /> alanına erişme girişiminde bulundunuz ancak sunucu SHA-1 gibi zayıf bir imza algoritması kullanılarak imzalanmış bir sertifika sağladı. Bu, sunucunun sağladığı güvenlik bilgilerinin sahte olabileceği anlamına gelir ve sunucu sizin beklediğiniz sunucu olmayabilir (bir saldırgan ile irtibat kuruyor olabilirsiniz).</translation> <translation id="6831043979455480757">Çevir</translation> @@ -820,11 +820,13 @@ <translation id="6948701128805548767">Alım yöntemlerini ve gereksinimlerini görmek için bir adres seçin</translation> <translation id="6949872517221025916">Şifreyi Sıfırla</translation> <translation id="6950684638814147129">JSON değeri ayrıştırılırken hata oluştu: <ph name="ERROR" /></translation> +<translation id="6957624206566198865">Sayfayı yeni bir Gizli sekmede aç</translation> <translation id="6957887021205513506">Sunucunun sertifikası sahte görünüyor.</translation> <translation id="6965382102122355670">Tamam</translation> <translation id="6965978654500191972">Cihaz</translation> <translation id="6970216967273061347">Bölge</translation> <translation id="6973656660372572881">Hem sabit proxy sunucular hem de bir .pac komut dosyası URL'si belirtildi.</translation> +<translation id="6984479912851154518">Harici bir uygulama üzerinden ödeme gerçekleştirmek için gizli moddan çıkılacak. Devam edilsin mi?</translation> <translation id="6989763994942163495">Gelişmiş ayarları göster...</translation> <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Bu ödemeler bir defalık alınabileceği gibi yinelenen ödemeler de olabilir ve bu durum açıkça belli olmayabilir.</translation> @@ -1076,6 +1078,7 @@ <translation id="8820817407110198400">Favoriler</translation> <translation id="883848425547221593">Diğer Yer İşaretleri</translation> <translation id="884264119367021077">Gönderim adresi</translation> +<translation id="8846319957959474018">Uygulamaları Yer İşaretleri ile kolayca açın</translation> <translation id="884923133447025588">İptal mekanizması bulunamadı.</translation> <translation id="885730110891505394">Google ile Paylaşma</translation> <translation id="8858065207712248076">Chrome, <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> şifrenizi başka sitelerde kullandıysanız sıfırlamanızı önerir.</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb index 53d142d..f1f8b30 100644 --- a/components/strings/components_strings_uk.xtb +++ b/components/strings/components_strings_uk.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Завантаження</translation> <translation id="1640180200866533862">Правила користувача</translation> <translation id="1640244768702815859"><ph name="BEGIN_LINK" />Відвідайте домашню сторінку цього сайту<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Конфігурація мережі недійсна та не може імпортуватися.</translation> <translation id="1644574205037202324">Історія</translation> <translation id="1645368109819982629">Протокол не підтримується</translation> <translation id="1655462015569774233">{1,plural, =1{Не вдалося підтвердити, що це сервер <ph name="DOMAIN" />. Його сертифікат перестав діяти учора. Можливо, сервер налаштовано неправильно або хтось намагається перехопити ваші дані. На годиннику вашого комп’ютера зараз <ph name="CURRENT_DATE" />. Якщо дата неправильна, налаштуйте системний годинник і оновіть цю сторінку.}one{Не вдалося підтвердити, що це сервер <ph name="DOMAIN" />. Його сертифікат перестав діяти # день тому. Можливо, сервер налаштовано неправильно або хтось намагається перехопити ваші дані. На годиннику вашого комп’ютера зараз <ph name="CURRENT_DATE" />. Якщо дата неправильна, налаштуйте системний годинник і оновіть цю сторінку.}few{Не вдалося підтвердити, що це сервер <ph name="DOMAIN" />. Його сертифікат перестав діяти # дні тому. Можливо, сервер налаштовано неправильно або хтось намагається перехопити ваші дані. На годиннику вашого комп’ютера зараз <ph name="CURRENT_DATE" />. Якщо дата неправильна, налаштуйте системний годинник і оновіть цю сторінку.}many{Не вдалося підтвердити, що це сервер <ph name="DOMAIN" />. Його сертифікат перестав діяти # днів тому. Можливо, сервер налаштовано неправильно або хтось намагається перехопити ваші дані. На годиннику вашого комп’ютера зараз <ph name="CURRENT_DATE" />. Якщо дата неправильна, налаштуйте системний годинник і оновіть цю сторінку.}other{Не вдалося підтвердити, що це сервер <ph name="DOMAIN" />. Його сертифікат перестав діяти # дня тому. Можливо, сервер налаштовано неправильно або хтось намагається перехопити ваші дані. На годиннику вашого комп’ютера зараз <ph name="CURRENT_DATE" />. Якщо дата неправильна, налаштуйте системний годинник і оновіть цю сторінку.}}</translation> @@ -284,7 +283,6 @@ <translation id="2941952326391522266">Цей сервер не зміг довести, що він – домен <ph name="DOMAIN" />. Його сертифікат безпеки походить із домену <ph name="DOMAIN2" />. Імовірні причини: неправильна конфігурація або хтось намагається перехопити ваше з’єднання.</translation> <translation id="2948083400971632585">Усі проксі-сервери, налаштовані для з’єднання, можна вимкнути на сторінці налаштувань.</translation> <translation id="2955913368246107853">Закрити панель пошуку</translation> -<translation id="2958431318199492670">Конфігурація мережі не відповідає стандарту ONC. Вона може імпортуватися частково.</translation> <translation id="2969319727213777354">Щоб установити безпечне з’єднання, потрібно правильно налаштувати час, оскільки сертифікати, які підтверджують справжність веб-сайтів, дійсні лише протягом певного періоду. На вашому пристрої неправильно налаштовано час, тому Chrome не може перевірити сертифікати.</translation> <translation id="2972581237482394796">&Повторити</translation> <translation id="2977665033722899841">Зараз вибрано: <ph name="ROW_NAME" /> (<ph name="ROW_CONTENT" />)</translation> @@ -356,7 +354,6 @@ <translation id="3391030046425686457">Адреса доставки</translation> <translation id="3395827396354264108">Спосіб отримання</translation> <translation id="3399952811970034796">Адреса доставки</translation> -<translation id="3409072600744224192">Щоб мати доступ до карток на всіх своїх пристроях, <ph name="SIGN_IN_LINK" />.</translation> <translation id="3422248202833853650">Щоб звільнити пам’ять, закрийте інші програми.</translation> <translation id="3422472998109090673">Хост <ph name="HOST_NAME" /> зараз недоступний.</translation> <translation id="3427092606871434483">Дозволяти (за умовчанням)</translation> @@ -582,7 +579,6 @@ <translation id="5045550434625856497">Неправильний пароль</translation> <translation id="5056549851600133418">Статті для вас</translation> <translation id="5070335125961472645"><ph name="BEGIN_LINK" />перевірити адресу проксі-сервера<ph name="END_LINK" /></translation> -<translation id="5072538239104292703">Щоб мати доступ до карток на всіх своїх пристроях, увійдіть в обліковий запис і ввімкніть синхронізацію.</translation> <translation id="5086888986931078152">Ви можете втратити доступ до захищеного вмісту на деяких сайтах.</translation> <translation id="5087286274860437796">Сертифікат сервера зараз недійсний.</translation> <translation id="5087580092889165836">Додати картку</translation> @@ -628,7 +624,6 @@ <translation id="5323105697514565458"><ph name="FRIENDLY_MATCH_TEXT" />, <ph name="MATCH_POSITION" /> з <ph name="NUM_MATCHES" /></translation> <translation id="5324080437450482387">Вибрати контактну інформацію</translation> <translation id="5327248766486351172">Назва</translation> -<translation id="5327567770033251652">увімкніть синхронізацію</translation> <translation id="5332219387342487447">Спосіб доставки</translation> <translation id="5355557959165512791">Зараз не можна перейти на сторінку <ph name="SITE" />, оскільки цей сертифікат відкликано. Помилки мережі й атаки зазвичай тимчасові, тому ця сторінка, скоріш за все, запрацює пізніше.</translation> <translation id="536296301121032821">Помилка збереження налаштувань правила</translation> @@ -807,7 +802,6 @@ <translation id="679355240208270552">Ігнорується, оскільки пошукову систему за умовчанням вимкнено правилом.</translation> <translation id="681021252041861472">Обов’язкове поле</translation> <translation id="6810899417690483278">Ідентифікатор налаштування</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Не вдалося завантажити дані регіонів</translation> <translation id="6825578344716086703">Ви спробували зв’язатися з доменом <ph name="DOMAIN" />, проте сервер надав сертифікат, підписаний із використанням слабкого алгоритму підпису (як-от SHA-1). Це означає, що облікові дані безпеки, надані сервером, можуть бути сфальсифікованими, а сервер – не тим, який вам потрібен (ви можете передавати свої дані зловмиснику).</translation> <translation id="6831043979455480757">Перекласти</translation> @@ -823,7 +817,6 @@ <translation id="6915804003454593391">Користувач:</translation> <translation id="6944692733090228304">Ви ввели пароль на сайті, яким не керує <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />. Щоб захистити свій обліковий запис, не використовуйте цей пароль для інших додатків і сайтів.</translation> <translation id="6945221475159498467">Вибрати</translation> -<translation id="6948540501704460596">Щоб мати доступ до карток на всіх своїх пристроях, <ph name="SYNC_LINK" />.</translation> <translation id="6948701128805548767">Укажіть адресу, щоб переглянути способи отримання та вимоги.</translation> <translation id="6949872517221025916">Скидання пароля</translation> <translation id="6950684638814147129">Сталася помилка під час синтаксичного аналізу значення JSON: <ph name="ERROR" /></translation> @@ -838,7 +831,6 @@ <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Такі стягнення можуть бути одноразовими чи регулярними й неочевидними.</translation> <translation id="7029809446516969842">Паролі</translation> -<translation id="7042837854211185817">Щоб мати доступ до карток на всіх своїх пристроях, увімкніть синхронізацію.</translation> <translation id="7050187094878475250">Ви намагалися зв’язатися з доменом <ph name="DOMAIN" />, але сервер надав сертифікат із задовгим терміном дії.</translation> <translation id="7053983685419859001">Блокувати</translation> <translation id="7064851114919012435">Контактна інформація</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index b3ab7f4e..3c6972e 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">Đang tải</translation> <translation id="1640180200866533862">Chính sách người dùng</translation> <translation id="1640244768702815859">Hãy thử <ph name="BEGIN_LINK" />truy cập trang chủ của trang web<ph name="END_LINK" />.</translation> -<translation id="1644184664548287040">Cấu hình mạng không hợp lệ và không thể nhập được.</translation> <translation id="1644574205037202324">Lịch sử</translation> <translation id="1645368109819982629">Giao thức không được hỗ trợ</translation> <translation id="1655462015569774233">{1,plural, =1{Máy chủ này không chứng minh được rằng đó là <ph name="DOMAIN" />; chứng chỉ bảo mật của máy chủ này đã hết hạn hôm qua. Điều này có thể do cấu hình sai hoặc có kẻ tấn công chặn kết nối của bạn. Đồng hồ máy tính của bạn hiện được đặt là <ph name="CURRENT_DATE" />. Ngày này có đúng không? Nếu không đúng, bạn phải sửa lại đồng hồ của hệ thống rồi làm mới trang này.}other{Máy chủ này không chứng minh được rằng đó là <ph name="DOMAIN" />; chứng chỉ bảo mật của máy chủ này đã hết hạn cách đây # ngày. Điều này có thể do cấu hình sai hoặc có kẻ tấn công chặn kết nối của bạn. Đồng hồ máy tính của bạn hiện được đặt là <ph name="CURRENT_DATE" />. Ngày này có đúng không? Nếu không đúng, bạn phải sửa lại đồng hồ của hệ thống rồi làm mới trang này.}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">Tiếp tục</translation> <translation id="2365563543831475020">Báo cáo sự cố được ghi lại vào <ph name="CRASH_TIME" /> chưa được tải lên</translation> <translation id="2367567093518048410">Mức độ</translation> +<translation id="2378238891085281592">Bạn đã chuyển sang chế độ riêng tư</translation> <translation id="2384307209577226199">Đặt mặc định trong môi trường doanh nghiệp</translation> <translation id="2386255080630008482">Chứng chỉ của máy chủ đã bị thu hồi.</translation> <translation id="2392959068659972793">Hiển thị chính sách không có giá trị được đặt</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">Máy chủ này không chứng minh được rằng đó là <ph name="DOMAIN" />; chứng chỉ bảo mật của máy chủ này là từ <ph name="DOMAIN2" />. Điều này có thể do định cấu hình sai hoặc có kẻ tấn công chặn kết nối của bạn.</translation> <translation id="2948083400971632585">Bạn có thể tắt mọi proxy được định cấu hình cho kết nối từ trang cài đặt.</translation> <translation id="2955913368246107853">Đóng thanh tìm</translation> -<translation id="2958431318199492670">Cấu hình mạng không tuân thủ tiêu chuẩn ONC. Các bộ phận của cấu hình có thể không được nhập.</translation> <translation id="2969319727213777354">Để thiết lập kết nối an toàn, bạn cần đặt thời gian đúng cho đồng hồ. Nguyên nhân là do chứng chỉ mà các trang web dùng để tự nhận dạng chỉ có hiệu lực trong khoảng thời gian cụ thể. Vì đồng hồ trên thiết bị của bạn không đúng nên Chrome không thể xác minh các chứng chỉ này.</translation> <translation id="2972581237482394796">&Làm lại</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />, hiện đã chọn. <ph name="ROW_CONTENT" /></translation> @@ -514,6 +513,7 @@ <translation id="450710068430902550">Chia sẻ với quản trị viên</translation> <translation id="4515275063822566619">Thẻ và địa chỉ từ Chrome và Tài khoản Google của bạn (<ph name="ACCOUNT_EMAIL" />). Bạn có thể quản lý thẻ và địa chỉ trong <ph name="BEGIN_LINK" />Cài đặt<ph name="END_LINK" />.</translation> <translation id="4522570452068850558">Chi tiết</translation> +<translation id="4524805452350978254">Quản lý thẻ</translation> <translation id="4552089082226364758">Flash</translation> <translation id="4558551763791394412">Thử tắt tiện ích.</translation> <translation id="457875822857220463">Giao hàng</translation> @@ -700,6 +700,7 @@ <translation id="5866257070973731571">Thêm số điện thoại</translation> <translation id="5869405914158311789">Không thể truy cập trang web này</translation> <translation id="5869522115854928033">Mật khẩu đã lưu</translation> +<translation id="5887400589839399685">Đã lưu thẻ</translation> <translation id="5893752035575986141">Thẻ tín dụng được chấp nhận.</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (được đồng bộ hóa)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Đang sử dụng 1 cookie}other{Đang sử dụng # cookie}}</translation> @@ -801,7 +802,6 @@ <translation id="679355240208270552">Đã bỏ qua vì chính sách đã tắt tìm kiếm mặc định.</translation> <translation id="681021252041861472">Trường bắt buộc</translation> <translation id="6810899417690483278">ID tùy chỉnh</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">Không tải được dữ liệu khu vực</translation> <translation id="6825578344716086703">Bạn đã cố gắng truy cập vào <ph name="DOMAIN" /> nhưng máy chủ xuất trình một chứng chỉ được ký bằng một thuật toán chữ ký yếu (chẳng hạn như SHA-1). Điều này có nghĩa là thông tin đăng nhập bảo mật mà máy chủ xuất trình có thể đã bị giả mạo và máy chủ đó có thể không phải là máy chủ mà bạn mong đợi (bạn có thể đang kết nối với kẻ tấn công).</translation> <translation id="6831043979455480757">Dịch</translation> @@ -820,11 +820,13 @@ <translation id="6948701128805548767">Để xem các yêu cầu và phương thức nhận hàng, hãy chọn một địa chỉ</translation> <translation id="6949872517221025916">Đặt lại mật khẩu</translation> <translation id="6950684638814147129">Lỗi khi phân tích cú pháp giá trị JSON: <ph name="ERROR" /></translation> +<translation id="6957624206566198865">Mở trang trong tab Riêng tư mới</translation> <translation id="6957887021205513506">Chứng chỉ của máy chủ dường như giả mạo.</translation> <translation id="6965382102122355670">OK</translation> <translation id="6965978654500191972">Thiết bị</translation> <translation id="6970216967273061347">Quận</translation> <translation id="6973656660372572881">Cả hai máy chủ proxy cố định và URL tập lệnh .pac đều được chỉ định.</translation> +<translation id="6984479912851154518">Đang rời khỏi chế độ riêng tư để thanh toán qua một ứng dụng bên ngoài. Bạn có muốn tiếp tục không?</translation> <translation id="6989763994942163495">Hiển thị cài đặt nâng cao...</translation> <translation id="7012363358306927923">China UnionPay</translation> <translation id="7016992613359344582">Các khoản phí này có thể là khoản thu một lần hoặc định kỳ và có thể không rõ ràng.</translation> @@ -1076,6 +1078,7 @@ <translation id="8820817407110198400">Dấu trang</translation> <translation id="883848425547221593">Dấu trang Khác</translation> <translation id="884264119367021077">Ðịa chỉ giao hàng</translation> +<translation id="8846319957959474018">Mở ứng dụng dễ dàng nhờ các dấu trang</translation> <translation id="884923133447025588">Không tìm thấy cơ chế thu hồi.</translation> <translation id="885730110891505394">Chia sẻ với Google</translation> <translation id="8858065207712248076">Chrome khuyên bạn nên đặt lại mật khẩu <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> của mình nếu đã sử dụng lại mật khẩu này trên các trang web khác.</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb index e9f482e..a2a637b 100644 --- a/components/strings/components_strings_zh-CN.xtb +++ b/components/strings/components_strings_zh-CN.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">正在加载</translation> <translation id="1640180200866533862">用户政策</translation> <translation id="1640244768702815859">请尝试<ph name="BEGIN_LINK" />访问该网站的首页<ph name="END_LINK" />。</translation> -<translation id="1644184664548287040">网络配置无效,无法导入。</translation> <translation id="1644574205037202324">历史记录</translation> <translation id="1645368109819982629">协议不受支持</translation> <translation id="1655462015569774233">{1,plural, =1{此服务器无法证明它是 <ph name="DOMAIN" />;其安全证书已在昨天过期。出现此问题的原因可能是配置有误,或有攻击者拦截了您的连接。计算机的时钟目前已设为 <ph name="CURRENT_DATE" />,该设置是否正确?如果不正确,请更正系统的时钟,然后刷新此页面。}other{此服务器无法证明它是 <ph name="DOMAIN" />;其安全证书已在 # 天前过期。出现此问题的原因可能是配置有误,或有攻击者拦截了您的连接。计算机的时钟目前已设为 <ph name="CURRENT_DATE" />,该设置是否正确?如果不正确,请更正系统的时钟,然后刷新此页面。}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">继续</translation> <translation id="2365563543831475020">于 <ph name="CRASH_TIME" /> 获取的崩溃报告未上传</translation> <translation id="2367567093518048410">级别</translation> +<translation id="2378238891085281592">您已启用无痕模式</translation> <translation id="2384307209577226199">在企业环境中默认实施</translation> <translation id="2386255080630008482">服务器的证书已撤消。</translation> <translation id="2392959068659972793">显示未设定值的政策</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">此服务器无法证明它是<ph name="DOMAIN" />;其安全证书来自<ph name="DOMAIN2" />。出现此问题的原因可能是配置有误或您的连接被拦截了。</translation> <translation id="2948083400971632585">您可以在设置页面中停用任何针对某个连接配置的代理。</translation> <translation id="2955913368246107853">关闭查找栏</translation> -<translation id="2958431318199492670">网络配置不符合 ONC 标准。无法导入配置的某些部分。</translation> <translation id="2969319727213777354">要建立安全连接,您的时钟设置必须正确。这是因为,网站用于证明身份的证书仅在特定时间段有效。由于您设备的时钟不正确,因此 Google Chrome 无法验证这些证书。</translation> <translation id="2972581237482394796">重做(&R)</translation> <translation id="2977665033722899841">目前已选择“<ph name="ROW_NAME" />”。<ph name="ROW_CONTENT" /></translation> @@ -511,6 +510,7 @@ <translation id="450710068430902550">与管理员分享</translation> <translation id="4515275063822566619">信用卡选项和地址选项均来自 Chrome 和您的 Google 帐号 (<ph name="ACCOUNT_EMAIL" />)。您可在<ph name="BEGIN_LINK" />设置<ph name="END_LINK" />中管理这些选项。</translation> <translation id="4522570452068850558">详细信息</translation> +<translation id="4524805452350978254">管理卡片</translation> <translation id="4552089082226364758">Flash</translation> <translation id="4558551763791394412">尝试停用扩展程序。</translation> <translation id="457875822857220463">递送</translation> @@ -697,6 +697,7 @@ <translation id="5866257070973731571">添加电话号码</translation> <translation id="5869405914158311789">无法访问此网站</translation> <translation id="5869522115854928033">已保存的密码</translation> +<translation id="5887400589839399685">已保存卡片</translation> <translation id="5893752035575986141">接受信用卡。</translation> <translation id="5908541034548427511"><ph name="TYPE_1" />(已同步)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{正在使用 1 个}other{正在使用 # 个}}</translation> @@ -797,7 +798,6 @@ <translation id="679355240208270552">由于政策未启用默认搜索引擎,因此政策值已被忽略。</translation> <translation id="681021252041861472">必填字段</translation> <translation id="6810899417690483278">自定义 ID</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">未能加载区域数据</translation> <translation id="6825578344716086703">您尝试访问的是 <ph name="DOMAIN" />,但是服务器出示的证书是使用弱签名算法(例如 SHA-1)签署的。这意味着服务器出示的安全凭据可能是伪造的,因此这可能并不是您想要访问的服务器(您可能正在与攻击者进行通信)。</translation> <translation id="6831043979455480757">翻译</translation> @@ -816,11 +816,13 @@ <translation id="6948701128805548767">要查看取货方式和要求,请选择相应地址</translation> <translation id="6949872517221025916">重置密码</translation> <translation id="6950684638814147129">解析 JSON 值时出错:<ph name="ERROR" /></translation> +<translation id="6957624206566198865">在新的无痕标签页中打开网页</translation> <translation id="6957887021205513506">该服务器的证书似乎是伪造的。</translation> <translation id="6965382102122355670">确定</translation> <translation id="6965978654500191972">设备</translation> <translation id="6970216967273061347">区</translation> <translation id="6973656660372572881">固定代理服务器和 .pac 脚本网址均已指定。</translation> +<translation id="6984479912851154518">即将退出无痕模式,以便通过外部应用付款。要继续吗?</translation> <translation id="6989763994942163495">显示高级设置...</translation> <translation id="7012363358306927923">中国银联</translation> <translation id="7016992613359344582">这些费用可能只收取一次,也可能会周期性收取,而且可能不易察觉。</translation> @@ -1072,6 +1074,7 @@ <translation id="8820817407110198400">书签</translation> <translation id="883848425547221593">其他书签</translation> <translation id="884264119367021077">送货地址</translation> +<translation id="8846319957959474018">利用书签轻松打开应用</translation> <translation id="884923133447025588">未找到任何吊销机制。</translation> <translation id="885730110891505394">与 Google 分享</translation> <translation id="8858065207712248076">如果您在其他网站上重复使用了您的 <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> 密码,Chrome 建议您重置该密码。</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index f4fc535f..f54b6b9 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -106,7 +106,6 @@ <translation id="1639239467298939599">載入中</translation> <translation id="1640180200866533862">使用者政策</translation> <translation id="1640244768702815859">請嘗試<ph name="BEGIN_LINK" />造訪網站首頁<ph name="END_LINK" />。</translation> -<translation id="1644184664548287040">網路設定無效,無法匯入。</translation> <translation id="1644574205037202324">歷史記錄</translation> <translation id="1645368109819982629">不支援的通訊協定</translation> <translation id="1655462015569774233">{1,plural, =1{這個伺服器無法證明所在網域是 <ph name="DOMAIN" />;伺服器的安全性憑證已在昨天過期。這可能是因為設定錯誤,或是有攻擊者攔截您的連線。您電腦的時鐘目前設為 <ph name="CURRENT_DATE" />,這是正確的時間嗎?如果不是的話,請更新系統時鐘,然後重新整理這個網頁。}other{這個伺服器無法證明所在網域是 <ph name="DOMAIN" />;伺服器的安全性憑證已在 # 天前過期。這可能是因為設定錯誤,或是有攻擊者攔截您的連線。您電腦的時鐘目前設為 <ph name="CURRENT_DATE" />,這是正確的時間嗎?如果不是的話,請更新系統時鐘,然後重新整理這個網頁。}}</translation> @@ -207,6 +206,7 @@ <translation id="2359808026110333948">繼續</translation> <translation id="2365563543831475020">當機報告擷取時間:<ph name="CRASH_TIME" /> (尚未上傳)</translation> <translation id="2367567093518048410">等級</translation> +<translation id="2378238891085281592">你已啟用私密模式</translation> <translation id="2384307209577226199">企業預設</translation> <translation id="2386255080630008482">伺服器憑證已遭撤銷。</translation> <translation id="2392959068659972793">顯示尚未設定任何值的政策</translation> @@ -283,7 +283,6 @@ <translation id="2941952326391522266">伺服器無法證明其屬於 <ph name="DOMAIN" /> 網域;其安全性憑證來自 <ph name="DOMAIN2" /> 網域。這可能是因為設定錯誤,或有攻擊者攔截你的連線所致。</translation> <translation id="2948083400971632585">你可以在設定頁面停用任何為連線設置的 Proxy。</translation> <translation id="2955913368246107853">關閉搜尋列</translation> -<translation id="2958431318199492670">網路設定未遵循 ONC 標準,系統可能無法匯入部分設定。</translation> <translation id="2969319727213777354">您必須正確設定時鐘,才能建立安全連線。這是因為網站驗證身分時所使用的憑證僅於特定一段時間內有效。由於您裝置的時鐘不正確,因此 Google Chrome 無法驗證這些憑證。</translation> <translation id="2972581237482394796">重做(&R)</translation> <translation id="2977665033722899841"><ph name="ROW_NAME" />,目前已選取。<ph name="ROW_CONTENT" /></translation> @@ -514,6 +513,7 @@ <translation id="450710068430902550">與管理員分享</translation> <translation id="4515275063822566619">信用卡和地址資訊皆來自 Chrome 和你的 Google 帳戶 (<ph name="ACCOUNT_EMAIL" />)。你可以在<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />頁面管理這些資訊。</translation> <translation id="4522570452068850558">詳細資訊</translation> +<translation id="4524805452350978254">管理卡片</translation> <translation id="4552089082226364758">Flash</translation> <translation id="4558551763791394412">試試看停用擴充功能。</translation> <translation id="457875822857220463">快遞</translation> @@ -700,6 +700,7 @@ <translation id="5866257070973731571">新增電話號碼</translation> <translation id="5869405914158311789">無法連上這個網站</translation> <translation id="5869522115854928033">已儲存的密碼</translation> +<translation id="5887400589839399685">已儲存卡片</translation> <translation id="5893752035575986141">接受簽帳金融卡。</translation> <translation id="5908541034548427511"><ph name="TYPE_1" /> (已同步)</translation> <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{目前使用 1 個 Cookie}other{目前使用 # 個 Cookie}}</translation> @@ -801,7 +802,6 @@ <translation id="679355240208270552">由於政策未啟用預設搜尋設定,因此遭到忽略。</translation> <translation id="681021252041861472">必填欄位</translation> <translation id="6810899417690483278">自訂 ID</translation> -<translation id="6820686453637990663">CVC</translation> <translation id="6824266427216888781">無法載入地區資料</translation> <translation id="6825578344716086703">你嘗試連上 <ph name="DOMAIN" />,但伺服器的憑證是以防護力薄弱的簽章演算法 (例如 SHA-1) 進行簽署。這代表伺服器提供的安全性憑證可能遭到偽造,而且這個伺服器可能並不是你的目標伺服器 (你的連線對象可能是攻擊者的電腦)。</translation> <translation id="6831043979455480757">翻譯</translation> @@ -820,11 +820,13 @@ <translation id="6948701128805548767">如要查看取件方式和相關規定,請選取一個地址</translation> <translation id="6949872517221025916">重設密碼</translation> <translation id="6950684638814147129">剖析 JSON 值時發生錯誤:<ph name="ERROR" /></translation> +<translation id="6957624206566198865">在新的私密分頁中開啟網頁</translation> <translation id="6957887021205513506">伺服器憑證疑似偽造。</translation> <translation id="6965382102122355670">確定</translation> <translation id="6965978654500191972">裝置</translation> <translation id="6970216967273061347">區</translation> <translation id="6973656660372572881">已指定固定的 Proxy 伺服器和 .pac 指令碼網址。</translation> +<translation id="6984479912851154518">即將退出私密模式,改為使用外部應用程式付款,要繼續嗎?</translation> <translation id="6989763994942163495">顯示進階設定...</translation> <translation id="7012363358306927923">中國銀聯</translation> <translation id="7016992613359344582">這些費用可能只收取一次,也可能週期性收取,而且您可能不會注意到這筆費用。</translation> @@ -1075,6 +1077,7 @@ <translation id="8820817407110198400">書籤</translation> <translation id="883848425547221593">其他書籤</translation> <translation id="884264119367021077">運送地址</translation> +<translation id="8846319957959474018">輕鬆在應用程式中開啟書籤</translation> <translation id="884923133447025588">未發現撤銷機制。</translation> <translation id="885730110891505394">與 Google 分享</translation> <translation id="8858065207712248076">如果你在其他網站上重複使用過你的 <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> 密碼,Chrome 會建議你重設密碼。</translation>
diff --git a/components/sync/test/android/javatests/src/org/chromium/components/sync/test/util/MockSyncContentResolverDelegate.java b/components/sync/test/android/javatests/src/org/chromium/components/sync/test/util/MockSyncContentResolverDelegate.java index 46eb87e..934f332 100644 --- a/components/sync/test/android/javatests/src/org/chromium/components/sync/test/util/MockSyncContentResolverDelegate.java +++ b/components/sync/test/android/javatests/src/org/chromium/components/sync/test/util/MockSyncContentResolverDelegate.java
@@ -212,7 +212,7 @@ pendingObserverCount.release(); } } - .execute(); + .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } else { mSyncStatusObserver.onStatusChanged(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS); pendingObserverCount.release();
diff --git a/components/sync_wifi/wifi_config_delegate_chromeos_unittest.cc b/components/sync_wifi/wifi_config_delegate_chromeos_unittest.cc index d5130d84..df200214 100644 --- a/components/sync_wifi/wifi_config_delegate_chromeos_unittest.cc +++ b/components/sync_wifi/wifi_config_delegate_chromeos_unittest.cc
@@ -59,6 +59,12 @@ const ErrorCallback& error_callback) override { NOTIMPLEMENTED(); } + void SetManagerProperty(const std::string& property_name, + const base::Value& value, + const base::Closure& callback, + const ErrorCallback& error_callback) override { + NOTIMPLEMENTED(); + } void CreateConfiguration(const std::string& userhash, const base::DictionaryValue& properties, const ServiceResultCallback& callback,
diff --git a/components/toolbar/test_toolbar_model.cc b/components/toolbar/test_toolbar_model.cc index 86ccbeb..61f7c35 100644 --- a/components/toolbar/test_toolbar_model.cc +++ b/components/toolbar/test_toolbar_model.cc
@@ -43,6 +43,10 @@ return base::string16(); } +base::string16 TestToolbarModel::GetSecureAccessibilityText() const { + return base::string16(); +} + base::string16 TestToolbarModel::GetEVCertName() const { return (security_level_ == security_state::EV_SECURE) ? ev_cert_name_ : base::string16();
diff --git a/components/toolbar/test_toolbar_model.h b/components/toolbar/test_toolbar_model.h index e7be4534..780820f 100644 --- a/components/toolbar/test_toolbar_model.h +++ b/components/toolbar/test_toolbar_model.h
@@ -30,6 +30,7 @@ bool ignore_editing) const override; const gfx::VectorIcon& GetVectorIcon() const override; base::string16 GetSecureVerboseText() const override; + base::string16 GetSecureAccessibilityText() const override; base::string16 GetEVCertName() const override; bool ShouldDisplayURL() const override; bool IsOfflinePage() const override;
diff --git a/components/toolbar/toolbar_model.h b/components/toolbar/toolbar_model.h index 0866ef20..cecb40a 100644 --- a/components/toolbar/toolbar_model.h +++ b/components/toolbar/toolbar_model.h
@@ -54,9 +54,13 @@ // OmniboxView::GetIcon(). virtual const gfx::VectorIcon& GetVectorIcon() const = 0; - // Returns text for the omnibox secure verbose chip. + // Returns text for the omnibox secure verbose chip, displayed next to the + // security icon on certain platforms. virtual base::string16 GetSecureVerboseText() const = 0; + // Returns text describing the security state for accessibility. + virtual base::string16 GetSecureAccessibilityText() const = 0; + // Returns the name of the EV cert holder. This returns an empty string if // the security level is not EV_SECURE. virtual base::string16 GetEVCertName() const = 0;
diff --git a/components/toolbar/toolbar_model_impl.cc b/components/toolbar/toolbar_model_impl.cc index 9005f15..f308fbc 100644 --- a/components/toolbar/toolbar_model_impl.cc +++ b/components/toolbar/toolbar_model_impl.cc
@@ -137,6 +137,23 @@ base::UTF8ToUTF16(cert->subject().country_name)); } +base::string16 ToolbarModelImpl::GetSecureText() const { + switch (GetSecurityLevel(false)) { + case security_state::HTTP_SHOW_WARNING: + return l10n_util::GetStringUTF16(IDS_NOT_SECURE_VERBOSE_STATE); + case security_state::EV_SECURE: + return GetEVCertName(); + case security_state::SECURE: + return l10n_util::GetStringUTF16(IDS_SECURE_VERBOSE_STATE); + case security_state::DANGEROUS: + return l10n_util::GetStringUTF16(delegate_->FailsMalwareCheck() + ? IDS_DANGEROUS_VERBOSE_STATE + : IDS_NOT_SECURE_VERBOSE_STATE); + default: + return base::string16(); + } +} + base::string16 ToolbarModelImpl::GetSecureVerboseText() const { if (IsOfflinePage()) return l10n_util::GetStringUTF16(IDS_OFFLINE_VERBOSE_STATE); @@ -148,32 +165,32 @@ toolbar::features::kSimplifyHttpsIndicator, toolbar::features::kSimplifyHttpsIndicatorParameterName) : std::string(); - switch (GetSecurityLevel(false)) { - case security_state::HTTP_SHOW_WARNING: - return l10n_util::GetStringUTF16(IDS_NOT_SECURE_VERBOSE_STATE); - case security_state::EV_SECURE: - if (parameter == - toolbar::features::kSimplifyHttpsIndicatorParameterEvToSecure) { - return l10n_util::GetStringUTF16(IDS_SECURE_VERBOSE_STATE); - } - if (parameter == - toolbar::features::kSimplifyHttpsIndicatorParameterBothToLock) { - return base::string16(); - } - return GetEVCertName(); - case security_state::SECURE: - if (parameter == - toolbar::features::kSimplifyHttpsIndicatorParameterKeepSecureChip) { - return l10n_util::GetStringUTF16(IDS_SECURE_VERBOSE_STATE); - } + + auto security_level = GetSecurityLevel(false); + if (security_level == security_state::EV_SECURE) { + if (parameter == + toolbar::features::kSimplifyHttpsIndicatorParameterEvToSecure) { + return l10n_util::GetStringUTF16(IDS_SECURE_VERBOSE_STATE); + } + if (parameter == + toolbar::features::kSimplifyHttpsIndicatorParameterBothToLock) { return base::string16(); - case security_state::DANGEROUS: - return l10n_util::GetStringUTF16(delegate_->FailsMalwareCheck() - ? IDS_DANGEROUS_VERBOSE_STATE - : IDS_NOT_SECURE_VERBOSE_STATE); - default: - return base::string16(); + } } + if (security_level == security_state::SECURE) { + if (parameter != + toolbar::features::kSimplifyHttpsIndicatorParameterKeepSecureChip) { + return base::string16(); + } + } + return GetSecureText(); +} + +base::string16 ToolbarModelImpl::GetSecureAccessibilityText() const { + if (IsOfflinePage()) + return l10n_util::GetStringUTF16(IDS_OFFLINE_VERBOSE_STATE); + + return GetSecureText(); } bool ToolbarModelImpl::ShouldDisplayURL() const {
diff --git a/components/toolbar/toolbar_model_impl.h b/components/toolbar/toolbar_model_impl.h index bfa873c..4ecdb17 100644 --- a/components/toolbar/toolbar_model_impl.h +++ b/components/toolbar/toolbar_model_impl.h
@@ -35,11 +35,14 @@ bool ignore_editing) const override; const gfx::VectorIcon& GetVectorIcon() const override; base::string16 GetSecureVerboseText() const override; + base::string16 GetSecureAccessibilityText() const override; base::string16 GetEVCertName() const override; bool ShouldDisplayURL() const override; bool IsOfflinePage() const override; private: + // Get the security text describing the current security state. + base::string16 GetSecureText() const; base::string16 GetFormattedURL( url_formatter::FormatUrlTypes format_types) const;
diff --git a/components/unified_consent/unified_consent_service.cc b/components/unified_consent/unified_consent_service.cc index cfed849..814507db5 100644 --- a/components/unified_consent/unified_consent_service.cc +++ b/components/unified_consent/unified_consent_service.cc
@@ -5,6 +5,8 @@ #include "components/unified_consent/unified_consent_service.h" #include "base/metrics/histogram_macros.h" +#include "base/scoped_observer.h" +#include "base/threading/sequenced_task_runner_handle.h" #include "components/autofill/core/common/autofill_prefs.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_change_registrar.h" @@ -16,6 +18,61 @@ #include "components/unified_consent/pref_names.h" #include "components/unified_consent/unified_consent_service_client.h" +namespace { + +// Used for observing the sync service and finishing the rollback once the sync +// engine is initialized. +// Note: This object is suicidal - it will kill itself after it finishes the +// rollback. +class RollbackHelper : public syncer::SyncServiceObserver { + public: + explicit RollbackHelper(syncer::SyncService* sync_service); + ~RollbackHelper() override = default; + + private: + // syncer::SyncServiceObserver: + void OnStateChanged(syncer::SyncService* sync_service) override; + + void DoRollbackIfPossibleAndDie(syncer::SyncService* sync_service); + + ScopedObserver<syncer::SyncService, RollbackHelper> scoped_sync_observer_; +}; + +RollbackHelper::RollbackHelper(syncer::SyncService* sync_service) + : scoped_sync_observer_(this) { + if (sync_service->IsEngineInitialized()) + DoRollbackIfPossibleAndDie(sync_service); + else + scoped_sync_observer_.Add(sync_service); +} + +void RollbackHelper::OnStateChanged(syncer::SyncService* sync_service) { + if (!sync_service->IsEngineInitialized()) + return; + + scoped_sync_observer_.RemoveAll(); + DoRollbackIfPossibleAndDie(sync_service); +} + +void RollbackHelper::DoRollbackIfPossibleAndDie( + syncer::SyncService* sync_service) { + DCHECK(!scoped_sync_observer_.IsObservingSources()); + + if (sync_service->GetPreferredDataTypes().HasAll( + syncer::UserSelectableTypes())) { + // As part of the migration of a profile to Unified Consent, sync everything + // is disabled but sync continues to be enabled for all data types. + // Therefore it is desired to restore sync everything when rolling back + // unified consent to leave sync in the same state as the one before + // migration. + sync_service->OnUserChoseDatatypes(true, syncer::UserSelectableTypes()); + } + + base::SequencedTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this); +} + +} // namespace + namespace unified_consent { UnifiedConsentService::UnifiedConsentService( @@ -67,6 +124,35 @@ static_cast<int>(MigrationState::NOT_INITIALIZED)); } +// static +void UnifiedConsentService::RollbackIfNeeded( + PrefService* user_pref_service, + syncer::SyncService* sync_service) { + DCHECK(user_pref_service); + + if (user_pref_service->GetInteger(prefs::kUnifiedConsentMigrationState) == + static_cast<int>(MigrationState::NOT_INITIALIZED)) { + // If there was no migration yet, nothing has to be rolled back. + return; + } + + if (user_pref_service->GetInteger(prefs::kUnifiedConsentMigrationState) == + static_cast<int>( + MigrationState::IN_PROGRESS_SHOULD_SHOW_CONSENT_BUMP) && + sync_service && + sync_service->GetDisableReasons() == + syncer::SyncService::DISABLE_REASON_NONE) { + // This will wait until the sync engine is initialized and then enables the + // sync-everything pref in case the user is syncing all data types. + new RollbackHelper(sync_service); + } + + // Clear all unified consent prefs. + user_pref_service->ClearPref(prefs::kUrlKeyedAnonymizedDataCollectionEnabled); + user_pref_service->ClearPref(prefs::kUnifiedConsentGiven); + user_pref_service->ClearPref(prefs::kUnifiedConsentMigrationState); +} + void UnifiedConsentService::SetUnifiedConsentGiven(bool unified_consent_given) { pref_service_->SetBoolean(prefs::kUnifiedConsentGiven, unified_consent_given); } @@ -149,6 +235,14 @@ } void UnifiedConsentService::OnStateChanged(syncer::SyncService* sync) { + if (!sync_service_->IsEngineInitialized()) + return; + + if (sync_service_->IsUsingSecondaryPassphrase() && IsUnifiedConsentGiven()) { + // Force off unified consent given when the user sets a custom passphrase. + SetUnifiedConsentGiven(false); + } + syncer::SyncPrefs sync_prefs(pref_service_); if (IsUnifiedConsentGiven() != sync_prefs.HasKeepEverythingSynced()) { // Make sync-everything consistent with the |kUnifiedConsentGiven| pref.
diff --git a/components/unified_consent/unified_consent_service.h b/components/unified_consent/unified_consent_service.h index 20674ed..0ad9dd80 100644 --- a/components/unified_consent/unified_consent_service.h +++ b/components/unified_consent/unified_consent_service.h
@@ -65,6 +65,11 @@ // Register the prefs used by this UnifiedConsentService. static void RegisterPrefs(user_prefs::PrefRegistrySyncable* registry); + // Rolls back changes made during migration. This method does nothing if the + // user hasn't migrated to unified consent yet. + static void RollbackIfNeeded(PrefService* user_pref_service, + syncer::SyncService* sync_service); + // This updates the consent pref and if |unified_consent_given| is true, all // unified consent services are enabled. void SetUnifiedConsentGiven(bool unified_consent_given);
diff --git a/components/unified_consent/unified_consent_service_unittest.cc b/components/unified_consent/unified_consent_service_unittest.cc index 645da65..7460fa6 100644 --- a/components/unified_consent/unified_consent_service_unittest.cc +++ b/components/unified_consent/unified_consent_service_unittest.cc
@@ -23,6 +23,9 @@ class TestSyncService : public syncer::FakeSyncService { public: + explicit TestSyncService(PrefService* pref_service) + : pref_service_(pref_service) {} + int GetDisableReasons() const override { return DISABLE_REASON_NONE; } TransportState GetTransportState() const override { return state_; } bool IsFirstSetupComplete() const override { return true; } @@ -31,23 +34,32 @@ } void OnUserChoseDatatypes(bool sync_everything, syncer::ModelTypeSet chosen_types) override { - is_syncing_everything_ = sync_everything; + syncer::SyncPrefs(pref_service_).SetKeepEverythingSynced(sync_everything); + chosen_types_ = chosen_types; + } + syncer::ModelTypeSet GetPreferredDataTypes() const override { + return chosen_types_; + } + bool IsUsingSecondaryPassphrase() const override { + return is_using_passphrase_; } void SetTransportState(TransportState state) { state_ = state; } + void SetIsUsingPassphrase(bool using_passphrase) { + is_using_passphrase_ = using_passphrase; + } + void FireStateChanged() { if (observer_) observer_->OnStateChanged(this); } - // This is a helper if the value is set through |OnUserChoseDatatypes|, which - // is not implemented in |FakeSyncService|. Usually - // |sync_prefs_.HasKeepEverythingSynced()| is used. - bool IsSyncingEverything() { return is_syncing_everything_; } private: syncer::SyncServiceObserver* observer_ = nullptr; TransportState state_ = TransportState::ACTIVE; - bool is_syncing_everything_ = false; + syncer::ModelTypeSet chosen_types_ = syncer::UserSelectableTypes(); + bool is_using_passphrase_ = false; + PrefService* pref_service_; }; const char kSpellCheckDummyEnabled[] = "spell_check_dummy.enabled"; @@ -105,6 +117,8 @@ class UnifiedConsentServiceTest : public testing::Test { public: + UnifiedConsentServiceTest() : sync_service_(&pref_service_) {} + // testing::Test: void SetUp() override { pref_service_.registry()->RegisterBooleanPref( @@ -115,7 +129,10 @@ false); } - void TearDown() override { consent_service_->Shutdown(); } + void TearDown() override { + if (consent_service_) + consent_service_->Shutdown(); + } void CreateConsentService(bool client_services_on_by_default = false) { auto client = @@ -207,9 +224,8 @@ CreateConsentService(); identity_test_environment_.SetPrimaryAccount("testaccount"); EXPECT_FALSE(pref_service_.GetBoolean(prefs::kUnifiedConsentGiven)); - EXPECT_FALSE(sync_service_.IsSyncingEverything()); + sync_service_.OnUserChoseDatatypes(false, syncer::UserSelectableTypes()); syncer::SyncPrefs sync_prefs(&pref_service_); - sync_prefs.SetKeepEverythingSynced(false); EXPECT_FALSE(sync_prefs.HasKeepEverythingSynced()); EXPECT_FALSE(consent_service_->IsUnifiedConsentGiven()); @@ -225,14 +241,33 @@ EXPECT_TRUE(consent_service_->IsUnifiedConsentGiven()); // Couldn't sync everything because sync is not active. - EXPECT_FALSE(sync_service_.IsSyncingEverything()); + EXPECT_FALSE(sync_prefs.HasKeepEverythingSynced()); // Initalize sync engine and therefore activate sync. sync_service_.SetTransportState(syncer::SyncService::TransportState::ACTIVE); sync_service_.FireStateChanged(); // UnifiedConsentService starts syncing everything. - EXPECT_TRUE(sync_service_.IsSyncingEverything()); + EXPECT_TRUE(sync_prefs.HasKeepEverythingSynced()); +} + +TEST_F(UnifiedConsentServiceTest, EnableUnfiedConsent_WithCustomPassphrase) { + CreateConsentService(); + identity_test_environment_.SetPrimaryAccount("testaccount"); + EXPECT_FALSE(consent_service_->IsUnifiedConsentGiven()); + EXPECT_FALSE(AreAllNonPersonalizedServicesEnabled()); + + // Enable Unified Consent. + consent_service_->SetUnifiedConsentGiven(true); + EXPECT_TRUE(consent_service_->IsUnifiedConsentGiven()); + EXPECT_TRUE(AreAllNonPersonalizedServicesEnabled()); + + // Set custom passphrase. + sync_service_.SetIsUsingPassphrase(true); + sync_service_.FireStateChanged(); + + // Setting a custom passphrase forces off unified consent given. + EXPECT_FALSE(consent_service_->IsUnifiedConsentGiven()); } // Test whether unified consent is disabled when any of its dependent services @@ -292,11 +327,9 @@ // Create inconsistent state. identity_test_environment_.SetPrimaryAccount("testaccount"); + sync_service_.OnUserChoseDatatypes(true, syncer::UserSelectableTypes()); syncer::SyncPrefs sync_prefs(&pref_service_); - sync_prefs.SetKeepEverythingSynced(true); EXPECT_TRUE(sync_prefs.HasKeepEverythingSynced()); - sync_service_.OnUserChoseDatatypes(true, {}); - EXPECT_TRUE(sync_service_.IsSyncingEverything()); EXPECT_FALSE(pref_service_.GetBoolean(prefs::kUnifiedConsentGiven)); CreateConsentService(true /* client services on by default */); @@ -305,7 +338,7 @@ // the migration state should be in-progress (i.e. the consent bump should be // shown). EXPECT_FALSE(pref_service_.GetBoolean(prefs::kUnifiedConsentGiven)); - EXPECT_FALSE(sync_service_.IsSyncingEverything()); + EXPECT_FALSE(sync_prefs.HasKeepEverythingSynced()); EXPECT_EQ( consent_service_->GetMigrationState(), unified_consent::MigrationState::IN_PROGRESS_SHOULD_SHOW_CONSENT_BUMP); @@ -330,11 +363,9 @@ // Create inconsistent state. identity_test_environment_.SetPrimaryAccount("testaccount"); + sync_service_.OnUserChoseDatatypes(true, syncer::UserSelectableTypes()); syncer::SyncPrefs sync_prefs(&pref_service_); - sync_prefs.SetKeepEverythingSynced(true); EXPECT_TRUE(sync_prefs.HasKeepEverythingSynced()); - sync_service_.OnUserChoseDatatypes(true, {}); - EXPECT_TRUE(sync_service_.IsSyncingEverything()); EXPECT_FALSE(pref_service_.GetBoolean(prefs::kUnifiedConsentGiven)); CreateConsentService(); @@ -343,7 +374,7 @@ // the migration state should be completed because not all on-by-default // privacy settings were on. EXPECT_FALSE(pref_service_.GetBoolean(prefs::kUnifiedConsentGiven)); - EXPECT_FALSE(sync_service_.IsSyncingEverything()); + EXPECT_FALSE(sync_prefs.HasKeepEverythingSynced()); EXPECT_EQ(consent_service_->GetMigrationState(), unified_consent::MigrationState::COMPLETED); @@ -359,8 +390,8 @@ base::HistogramTester histogram_tester; identity_test_environment_.SetPrimaryAccount("testaccount"); + sync_service_.OnUserChoseDatatypes(false, syncer::UserSelectableTypes()); syncer::SyncPrefs sync_prefs(&pref_service_); - sync_prefs.SetKeepEverythingSynced(false); EXPECT_FALSE(pref_service_.GetBoolean(prefs::kUnifiedConsentGiven)); EXPECT_FALSE(sync_prefs.HasKeepEverythingSynced()); @@ -427,4 +458,71 @@ } #endif // !defined(OS_CHROMEOS) +TEST_F(UnifiedConsentServiceTest, Rollback_WasSyncingEverything) { + identity_test_environment_.SetPrimaryAccount("testaccount"); + syncer::SyncPrefs sync_prefs(&pref_service_); + sync_service_.OnUserChoseDatatypes(true, syncer::UserSelectableTypes()); + EXPECT_TRUE(sync_prefs.HasKeepEverythingSynced()); + + // Migrate + CreateConsentService(true /* client services on by default */); + // Check expectations after migration. + EXPECT_FALSE(sync_prefs.HasKeepEverythingSynced()); + EXPECT_FALSE(pref_service_.GetBoolean(prefs::kUnifiedConsentGiven)); + EXPECT_EQ( + unified_consent::MigrationState::IN_PROGRESS_SHOULD_SHOW_CONSENT_BUMP, + consent_service_->GetMigrationState()); + + consent_service_->Shutdown(); + consent_service_.reset(); + + // Rollback + UnifiedConsentService::RollbackIfNeeded(&pref_service_, &sync_service_); + // Unified consent prefs should be cleared. + EXPECT_FALSE(pref_service_.GetBoolean(prefs::kUnifiedConsentGiven)); + EXPECT_EQ(static_cast<int>(unified_consent::MigrationState::NOT_INITIALIZED), + pref_service_.GetInteger( + unified_consent::prefs::kUnifiedConsentMigrationState)); + // Sync everything should be back on. + EXPECT_TRUE(sync_prefs.HasKeepEverythingSynced()); + + // Run until idle so the RollbackHelper is deleted. + base::RunLoop().RunUntilIdle(); +} + +TEST_F(UnifiedConsentServiceTest, Rollback_WasNotSyncingEverything) { + identity_test_environment_.SetPrimaryAccount("testaccount"); + syncer::SyncPrefs sync_prefs(&pref_service_); + syncer::ModelTypeSet chosen_data_types = syncer::UserSelectableTypes(); + chosen_data_types.Remove(syncer::BOOKMARKS); + sync_service_.OnUserChoseDatatypes(false, chosen_data_types); + EXPECT_FALSE(sync_prefs.HasKeepEverythingSynced()); + EXPECT_FALSE(sync_service_.GetPreferredDataTypes().HasAll( + syncer::UserSelectableTypes())); + + // Migrate + CreateConsentService(); + // Check expectations after migration. + EXPECT_FALSE(sync_prefs.HasKeepEverythingSynced()); + EXPECT_FALSE(pref_service_.GetBoolean(prefs::kUnifiedConsentGiven)); + EXPECT_EQ(unified_consent::MigrationState::COMPLETED, + consent_service_->GetMigrationState()); + + consent_service_->Shutdown(); + consent_service_.reset(); + + // Rollback + UnifiedConsentService::RollbackIfNeeded(&pref_service_, &sync_service_); + // Unified consent prefs should be cleared. + EXPECT_FALSE(pref_service_.GetBoolean(prefs::kUnifiedConsentGiven)); + EXPECT_EQ(static_cast<int>(unified_consent::MigrationState::NOT_INITIALIZED), + pref_service_.GetInteger( + unified_consent::prefs::kUnifiedConsentMigrationState)); + // Sync everything should be off because not all user types were on. + EXPECT_FALSE(sync_prefs.HasKeepEverythingSynced()); + + // Run until idle so the RollbackHelper is deleted. + base::RunLoop().RunUntilIdle(); +} + } // namespace unified_consent
diff --git a/components/update_client/BUILD.gn b/components/update_client/BUILD.gn index f5d203d..966e734 100644 --- a/components/update_client/BUILD.gn +++ b/components/update_client/BUILD.gn
@@ -177,6 +177,8 @@ "//components/version_info:version_info", "//courgette:courgette_lib", "//net:test_support", + "//services/network:test_support", + "//services/network/public/cpp:cpp", "//services/network/public/cpp:cpp_base", "//services/service_manager/public/cpp", "//services/service_manager/public/cpp/test:test_support",
diff --git a/components/update_client/background_downloader_win.cc b/components/update_client/background_downloader_win.cc index 185e6ec..7921cb1 100644 --- a/components/update_client/background_downloader_win.cc +++ b/components/update_client/background_downloader_win.cc
@@ -4,8 +4,6 @@ #include "components/update_client/background_downloader_win.h" -#include <atlbase.h> -#include <atlcom.h> #include <objbase.h> #include <winerror.h> @@ -28,6 +26,7 @@ #include "base/strings/sys_string_conversions.h" #include "base/task/post_task.h" #include "base/task/task_traits.h" +#include "base/win/atl.h" #include "base/win/scoped_co_mem.h" #include "components/update_client/task_traits.h" #include "components/update_client/update_client_errors.h"
diff --git a/components/update_client/component.cc b/components/update_client/component.cc index 19339f4..aba3bff 100644 --- a/components/update_client/component.cc +++ b/components/update_client/component.cc
@@ -507,7 +507,7 @@ crx_downloader_ = update_context.crx_downloader_factory( component.CanDoBackgroundDownload(), - update_context.config->RequestContext()); + update_context.config->URLLoaderFactory()); const auto& id = component.id_; crx_downloader_->set_progress_callback( @@ -576,7 +576,7 @@ crx_downloader_ = update_context.crx_downloader_factory( component.CanDoBackgroundDownload(), - update_context.config->RequestContext()); + update_context.config->URLLoaderFactory()); const auto& id = component.id_; crx_downloader_->set_progress_callback(
diff --git a/components/update_client/crx_downloader.cc b/components/update_client/crx_downloader.cc index 7af00a8..0fef333 100644 --- a/components/update_client/crx_downloader.cc +++ b/components/update_client/crx_downloader.cc
@@ -21,7 +21,7 @@ #include "components/update_client/update_client_errors.h" #include "components/update_client/url_fetcher_downloader.h" #include "components/update_client/utils.h" -#include "net/url_request/url_request_context_getter.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" namespace update_client { @@ -41,9 +41,10 @@ // which uses the BITS service. std::unique_ptr<CrxDownloader> CrxDownloader::Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { std::unique_ptr<CrxDownloader> url_fetcher_downloader = - std::make_unique<UrlFetcherDownloader>(nullptr, context_getter); + std::make_unique<UrlFetcherDownloader>(nullptr, + std::move(url_loader_factory)); #if defined(OS_WIN) if (is_background_download) {
diff --git a/components/update_client/crx_downloader.h b/components/update_client/crx_downloader.h index eab6741..9b138f7b 100644 --- a/components/update_client/crx_downloader.h +++ b/components/update_client/crx_downloader.h
@@ -19,9 +19,8 @@ #include "base/threading/thread_checker.h" #include "url/gurl.h" - -namespace net { -class URLRequestContextGetter; +namespace network { +class SharedURLLoaderFactory; } namespace update_client { @@ -65,6 +64,8 @@ // Path of the downloaded file if the download was successful. base::FilePath response; + // TODO(crbug.com/871211): These values are not being used in production + // code. Clean it up. // Number of bytes actually downloaded, not including the bytes downloaded // as a result of falling back on urls. int64_t downloaded_bytes; @@ -88,7 +89,7 @@ using Factory = std::unique_ptr<CrxDownloader> (*)( bool, - scoped_refptr<net::URLRequestContextGetter>); + scoped_refptr<network::SharedURLLoaderFactory>); // Factory method to create an instance of this class and build the // chain of responsibility. |is_background_download| specifies that a @@ -97,7 +98,7 @@ // code such as file IO operations. static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter); + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory); virtual ~CrxDownloader(); void set_progress_callback(const ProgressCallback& progress_callback);
diff --git a/components/update_client/crx_downloader_unittest.cc b/components/update_client/crx_downloader_unittest.cc index cb5c808..cf195323 100644 --- a/components/update_client/crx_downloader_unittest.cc +++ b/components/update_client/crx_downloader_unittest.cc
@@ -13,14 +13,15 @@ #include "base/memory/ref_counted.h" #include "base/path_service.h" #include "base/run_loop.h" +#include "base/test/bind_test_util.h" #include "base/test/scoped_task_environment.h" #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" #include "components/update_client/update_client_errors.h" #include "components/update_client/utils.h" #include "net/base/net_errors.h" -#include "net/url_request/test_url_request_interceptor.h" -#include "net/url_request/url_request_test_util.h" +#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" +#include "services/network/test/test_url_loader_factory.h" #include "testing/gtest/include/gtest/gtest.h" using base::ContentsEqual; @@ -29,9 +30,6 @@ namespace { -// Intercepts HTTP GET requests sent to "localhost". -typedef net::LocalHostTestURLRequestInterceptor GetInterceptor; - const char kTestFileName[] = "jebgalgnebhfojomionfpkfelancnnkf.crx"; const char hash_jebg[] = @@ -63,10 +61,16 @@ void DownloadProgress(int crx_context, const CrxDownloader::Result& result); + int GetInterceptorCount() { return interceptor_count_; } + + void AddResponse(const GURL& url, + const base::FilePath& file_path, + int net_error); + protected: std::unique_ptr<CrxDownloader> crx_downloader_; - std::unique_ptr<GetInterceptor> get_interceptor_; + network::TestURLLoaderFactory test_url_loader_factory_; CrxDownloader::DownloadCallback callback_; CrxDownloader::ProgressCallback progress_callback_; @@ -80,12 +84,16 @@ int num_progress_calls_; CrxDownloader::Result download_progress_result_; + // Accumulates the number of loads triggered. + int interceptor_count_ = 0; + // A magic value for the context to be used in the tests. static const int kExpectedContext = 0xaabb; private: base::test::ScopedTaskEnvironment scoped_task_environment_; - scoped_refptr<net::TestURLRequestContextGetter> context_; + scoped_refptr<network::SharedURLLoaderFactory> + test_shared_url_loader_factory_; base::OnceClosure quit_closure_; }; @@ -103,16 +111,11 @@ num_progress_calls_(0), scoped_task_environment_( base::test::ScopedTaskEnvironment::MainThreadType::IO), - context_(base::MakeRefCounted<net::TestURLRequestContextGetter>( - base::ThreadTaskRunnerHandle::Get())) {} + test_shared_url_loader_factory_( + base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( + &test_url_loader_factory_)) {} -CrxDownloaderTest::~CrxDownloaderTest() { - context_ = nullptr; - - // The GetInterceptor requires the message loop to run to destruct correctly. - get_interceptor_.reset(); - RunThreadsUntilIdle(); -} +CrxDownloaderTest::~CrxDownloaderTest() {} void CrxDownloaderTest::SetUp() { num_download_complete_calls_ = 0; @@ -121,11 +124,12 @@ download_progress_result_ = CrxDownloader::Result(); // Do not use the background downloader in these tests. - crx_downloader_ = CrxDownloader::Create(false, context_.get()); + crx_downloader_ = + CrxDownloader::Create(false, test_shared_url_loader_factory_); crx_downloader_->set_progress_callback(progress_callback_); - get_interceptor_ = std::make_unique<GetInterceptor>( - base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get()); + test_url_loader_factory_.SetInterceptor(base::BindLambdaForTesting( + [&](const network::ResourceRequest& request) { interceptor_count_++; })); } void CrxDownloaderTest::TearDown() { @@ -151,6 +155,26 @@ download_progress_result_ = result; } +void CrxDownloaderTest::AddResponse(const GURL& url, + const base::FilePath& file_path, + int net_error) { + if (net_error == net::OK) { + std::string data; + EXPECT_TRUE(base::ReadFileToString(file_path, &data)); + network::ResourceResponseHead head; + head.content_length = data.size(); + network::URLLoaderCompletionStatus status(net_error); + status.decoded_body_length = data.size(); + test_url_loader_factory_.AddResponse(url, head, data, status); + return; + } + + EXPECT_NE(net_error, net::OK); + test_url_loader_factory_.AddResponse( + url, network::ResourceResponseHead(), std::string(), + network::URLLoaderCompletionStatus(net_error)); +} + void CrxDownloaderTest::RunThreads() { base::RunLoop runloop; quit_closure_ = runloop.QuitClosure(); @@ -208,27 +232,23 @@ GURL("http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx"); const base::FilePath test_file(MakeTestFilePath(kTestFileName)); - get_interceptor_->SetResponse(expected_crx_url, test_file); + AddResponse(expected_crx_url, test_file, net::OK); crx_downloader_->StartDownloadFromUrl( expected_crx_url, std::string(hash_jebg), std::move(callback_)); RunThreads(); - EXPECT_EQ(1, get_interceptor_->GetHitCount()); + EXPECT_EQ(1, GetInterceptorCount()); EXPECT_EQ(1, num_download_complete_calls_); EXPECT_EQ(kExpectedContext, crx_context_); EXPECT_EQ(0, download_complete_result_.error); - EXPECT_EQ(1843, download_complete_result_.downloaded_bytes); - EXPECT_EQ(1843, download_complete_result_.total_bytes); EXPECT_TRUE(ContentsEqual(download_complete_result_.response, test_file)); EXPECT_TRUE( DeleteFileAndEmptyParentDirectory(download_complete_result_.response)); EXPECT_LE(1, num_progress_calls_); - EXPECT_EQ(1843, download_progress_result_.downloaded_bytes); - EXPECT_EQ(1843, download_progress_result_.total_bytes); } // Tests that downloading from one url fails if the actual hash of the file @@ -238,7 +258,7 @@ GURL("http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx"); const base::FilePath test_file(MakeTestFilePath(kTestFileName)); - get_interceptor_->SetResponse(expected_crx_url, test_file); + AddResponse(expected_crx_url, test_file, net::OK); crx_downloader_->StartDownloadFromUrl( expected_crx_url, @@ -247,19 +267,15 @@ std::move(callback_)); RunThreads(); - EXPECT_EQ(1, get_interceptor_->GetHitCount()); + EXPECT_EQ(1, GetInterceptorCount()); EXPECT_EQ(1, num_download_complete_calls_); EXPECT_EQ(kExpectedContext, crx_context_); EXPECT_EQ(static_cast<int>(CrxDownloaderError::BAD_HASH), download_complete_result_.error); - EXPECT_EQ(1843, download_complete_result_.downloaded_bytes); - EXPECT_EQ(1843, download_complete_result_.total_bytes); EXPECT_TRUE(download_complete_result_.response.empty()); EXPECT_LE(1, num_progress_calls_); - EXPECT_EQ(1843, download_progress_result_.downloaded_bytes); - EXPECT_EQ(1843, download_progress_result_.total_bytes); } // Tests that specifying two urls has no side effects. Expect a successful @@ -269,7 +285,7 @@ GURL("http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx"); const base::FilePath test_file(MakeTestFilePath(kTestFileName)); - get_interceptor_->SetResponse(expected_crx_url, test_file); + AddResponse(expected_crx_url, test_file, net::OK); std::vector<GURL> urls; urls.push_back(expected_crx_url); @@ -279,21 +295,17 @@ std::move(callback_)); RunThreads(); - EXPECT_EQ(1, get_interceptor_->GetHitCount()); + EXPECT_EQ(1, GetInterceptorCount()); EXPECT_EQ(1, num_download_complete_calls_); EXPECT_EQ(kExpectedContext, crx_context_); EXPECT_EQ(0, download_complete_result_.error); - EXPECT_EQ(1843, download_complete_result_.downloaded_bytes); - EXPECT_EQ(1843, download_complete_result_.total_bytes); EXPECT_TRUE(ContentsEqual(download_complete_result_.response, test_file)); EXPECT_TRUE( DeleteFileAndEmptyParentDirectory(download_complete_result_.response)); EXPECT_LE(1, num_progress_calls_); - EXPECT_EQ(1843, download_progress_result_.downloaded_bytes); - EXPECT_EQ(1843, download_progress_result_.total_bytes); } // Tests that the fallback to a valid url is successful. @@ -304,9 +316,8 @@ GURL("http://localhost/download/ihfokbkgjpifnbbojhneepfflplebdkc.crx"); const base::FilePath test_file(MakeTestFilePath(kTestFileName)); - get_interceptor_->SetResponse(expected_crx_url, test_file); - get_interceptor_->SetResponse(no_file_url, - base::FilePath(FILE_PATH_LITERAL("no-file"))); + AddResponse(expected_crx_url, test_file, net::OK); + AddResponse(no_file_url, base::FilePath(), net::ERR_FILE_NOT_FOUND); std::vector<GURL> urls; urls.push_back(no_file_url); @@ -316,22 +327,18 @@ std::move(callback_)); RunThreads(); - EXPECT_EQ(2, get_interceptor_->GetHitCount()); + EXPECT_EQ(2, GetInterceptorCount()); EXPECT_EQ(1, num_download_complete_calls_); EXPECT_EQ(kExpectedContext, crx_context_); EXPECT_EQ(0, download_complete_result_.error); - EXPECT_EQ(1843, download_complete_result_.downloaded_bytes); - EXPECT_EQ(1843, download_complete_result_.total_bytes); EXPECT_TRUE(ContentsEqual(download_complete_result_.response, test_file)); EXPECT_TRUE( DeleteFileAndEmptyParentDirectory(download_complete_result_.response)); - // Expect at least some progress reported by the fetcher. + // Expect at least some progress reported by the loader. EXPECT_LE(1, num_progress_calls_); - EXPECT_EQ(1843, download_progress_result_.downloaded_bytes); - EXPECT_EQ(1843, download_progress_result_.total_bytes); const auto download_metrics = crx_downloader_->download_metrics(); ASSERT_EQ(2u, download_metrics.size()); @@ -354,9 +361,8 @@ GURL("http://localhost/download/ihfokbkgjpifnbbojhneepfflplebdkc.crx"); const base::FilePath test_file(MakeTestFilePath(kTestFileName)); - get_interceptor_->SetResponse(expected_crx_url, test_file); - get_interceptor_->SetResponse(no_file_url, - base::FilePath(FILE_PATH_LITERAL("no-file"))); + AddResponse(expected_crx_url, test_file, net::OK); + AddResponse(no_file_url, base::FilePath(), net::ERR_FILE_NOT_FOUND); std::vector<GURL> urls; urls.push_back(expected_crx_url); @@ -366,21 +372,17 @@ std::move(callback_)); RunThreads(); - EXPECT_EQ(1, get_interceptor_->GetHitCount()); + EXPECT_EQ(1, GetInterceptorCount()); EXPECT_EQ(1, num_download_complete_calls_); EXPECT_EQ(kExpectedContext, crx_context_); EXPECT_EQ(0, download_complete_result_.error); - EXPECT_EQ(1843, download_complete_result_.downloaded_bytes); - EXPECT_EQ(1843, download_complete_result_.total_bytes); EXPECT_TRUE(ContentsEqual(download_complete_result_.response, test_file)); EXPECT_TRUE( DeleteFileAndEmptyParentDirectory(download_complete_result_.response)); EXPECT_LE(1, num_progress_calls_); - EXPECT_EQ(1843, download_progress_result_.downloaded_bytes); - EXPECT_EQ(1843, download_progress_result_.total_bytes); EXPECT_EQ(1u, crx_downloader_->download_metrics().size()); } @@ -390,8 +392,7 @@ const GURL expected_crx_url = GURL("http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx"); - get_interceptor_->SetResponse(expected_crx_url, - base::FilePath(FILE_PATH_LITERAL("no-file"))); + AddResponse(expected_crx_url, base::FilePath(), net::ERR_FILE_NOT_FOUND); std::vector<GURL> urls; urls.push_back(expected_crx_url); @@ -401,7 +402,7 @@ std::move(callback_)); RunThreads(); - EXPECT_EQ(2, get_interceptor_->GetHitCount()); + EXPECT_EQ(2, GetInterceptorCount()); EXPECT_EQ(1, num_download_complete_calls_); EXPECT_EQ(kExpectedContext, crx_context_);
diff --git a/components/update_client/update_client_unittest.cc b/components/update_client/update_client_unittest.cc index d0c9bc14..0418cf7 100644 --- a/components/update_client/update_client_unittest.cc +++ b/components/update_client/update_client_unittest.cc
@@ -278,7 +278,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -443,7 +443,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -646,7 +646,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -858,7 +858,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -1001,7 +1001,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -1191,7 +1191,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -1486,7 +1486,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -1764,7 +1764,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -2015,7 +2015,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -2240,7 +2240,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -2388,7 +2388,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -2520,7 +2520,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -2641,7 +2641,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -2731,7 +2731,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -2792,7 +2792,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return nullptr; } @@ -2924,7 +2924,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -3167,7 +3167,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -3338,7 +3338,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -3485,7 +3485,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -3669,7 +3669,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); } @@ -3816,7 +3816,7 @@ public: static std::unique_ptr<CrxDownloader> Create( bool is_background_download, - scoped_refptr<net::URLRequestContextGetter> context_getter) { + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { return std::make_unique<MockCrxDownloader>(); }
diff --git a/components/update_client/url_fetcher_downloader.cc b/components/update_client/url_fetcher_downloader.cc index 2a058555..4a098e508 100644 --- a/components/update_client/url_fetcher_downloader.cc +++ b/components/update_client/url_fetcher_downloader.cc
@@ -18,8 +18,9 @@ #include "components/update_client/utils.h" #include "net/base/load_flags.h" #include "net/traffic_annotation/network_traffic_annotation.h" -#include "net/url_request/url_fetcher.h" -#include "net/url_request/url_request_context_getter.h" +#include "services/network/public/cpp/resource_response.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" +#include "services/network/public/cpp/simple_url_loader.h" #include "url/gurl.h" namespace { @@ -32,32 +33,11 @@ namespace update_client { -UrlFetcherDownloader::URLFetcherDelegate::URLFetcherDelegate( - UrlFetcherDownloader* downloader) - : downloader_(downloader) {} - -UrlFetcherDownloader::URLFetcherDelegate::~URLFetcherDelegate() = default; - -void UrlFetcherDownloader::URLFetcherDelegate::OnURLFetchComplete( - const net::URLFetcher* source) { - downloader_->OnURLFetchComplete(source); -} - -void UrlFetcherDownloader::URLFetcherDelegate::OnURLFetchDownloadProgress( - const net::URLFetcher* source, - int64_t current, - int64_t total, - int64_t current_network_bytes) { - downloader_->OnURLFetchDownloadProgress(source, current, total, - current_network_bytes); -} - UrlFetcherDownloader::UrlFetcherDownloader( std::unique_ptr<CrxDownloader> successor, - scoped_refptr<net::URLRequestContextGetter> context_getter) + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) : CrxDownloader(std::move(successor)), - delegate_(std::make_unique<URLFetcherDelegate>(this)), - context_getter_(context_getter) {} + url_loader_factory_(std::move(url_loader_factory)) {} UrlFetcherDownloader::~UrlFetcherDownloader() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); @@ -114,15 +94,13 @@ if (download_dir_.empty()) { Result result; result.error = -1; - result.downloaded_bytes = downloaded_bytes_; - result.total_bytes = total_bytes_; DownloadMetrics download_metrics; download_metrics.url = url; download_metrics.downloader = DownloadMetrics::kUrlFetcher; download_metrics.error = -1; - download_metrics.downloaded_bytes = downloaded_bytes_; - download_metrics.total_bytes = total_bytes_; + download_metrics.downloaded_bytes = -1; + download_metrics.total_bytes = -1; download_metrics.download_time_ms = 0; main_task_runner()->PostTask( @@ -134,27 +112,37 @@ const base::FilePath response = download_dir_.AppendASCII(url.ExtractFileName()); + auto resource_request = std::make_unique<network::ResourceRequest>(); + resource_request->url = url; + resource_request->load_flags = net::LOAD_DO_NOT_SEND_COOKIES | + net::LOAD_DO_NOT_SAVE_COOKIES | + net::LOAD_DISABLE_CACHE; + url_loader_ = network::SimpleURLLoader::Create(std::move(resource_request), + traffic_annotation); + const int kMaxRetries = 3; + url_loader_->SetRetryOptions( + kMaxRetries, + network::SimpleURLLoader::RetryMode::RETRY_ON_NETWORK_CHANGE); - url_fetcher_ = net::URLFetcher::Create(0, url, net::URLFetcher::GET, - delegate_.get(), traffic_annotation); - url_fetcher_->SetRequestContext(context_getter_.get()); - url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES | - net::LOAD_DO_NOT_SAVE_COOKIES | - net::LOAD_DISABLE_CACHE); - url_fetcher_->SetAutomaticallyRetryOn5xx(false); - url_fetcher_->SetAutomaticallyRetryOnNetworkChanges(3); - url_fetcher_->SaveResponseToFileAtPath( - response, base::CreateSequencedTaskRunnerWithTraits(kTaskTraits)); - data_use_measurement::DataUseUserData::AttachToFetcher( - url_fetcher_.get(), data_use_measurement::DataUseUserData::UPDATE_CLIENT); + url_loader_->SetOnResponseStartedCallback(base::BindOnce( + &UrlFetcherDownloader::OnResponseStarted, base::Unretained(this))); + + // For the end-to-end system it is important that the client reports the + // number of bytes it loaded from the server even in the case that the + // overall network transaction failed. + url_loader_->SetAllowPartialResults(true); VLOG(1) << "Starting background download: " << url.spec(); - url_fetcher_->Start(); + url_loader_->DownloadToFile( + url_loader_factory_.get(), + base::BindOnce(&UrlFetcherDownloader::OnURLLoadComplete, + base::Unretained(this)), + response); download_start_time_ = base::TimeTicks::Now(); } -void UrlFetcherDownloader::OnURLFetchComplete(const net::URLFetcher* source) { +void UrlFetcherDownloader::OnURLLoadComplete(base::FilePath file_path) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); const base::TimeTicks download_end_time(base::TimeTicks::Now()); @@ -166,28 +154,44 @@ // Consider a 5xx response from the server as an indication to terminate // the request and avoid overloading the server in this case. // is not accepting requests for the moment. - const int fetch_error(GetFetchError(*url_fetcher_)); + int response_code = -1; + if (url_loader_->ResponseInfo() && url_loader_->ResponseInfo()->headers) { + response_code = url_loader_->ResponseInfo()->headers->response_code(); + } + + int fetch_error = -1; + if (!file_path.empty() && response_code == 200) { + fetch_error = 0; + } else if (response_code != -1) { + fetch_error = response_code; + } else { + fetch_error = url_loader_->NetError(); + } + const bool is_handled = fetch_error == 0 || IsHttpServerError(fetch_error); Result result; result.error = fetch_error; if (!fetch_error) { - source->GetResponseAsFilePath(true, &result.response); + result.response = file_path; } - result.downloaded_bytes = downloaded_bytes_; - result.total_bytes = total_bytes_; DownloadMetrics download_metrics; download_metrics.url = url(); download_metrics.downloader = DownloadMetrics::kUrlFetcher; download_metrics.error = fetch_error; - download_metrics.downloaded_bytes = downloaded_bytes_; + // Tests expected -1, in case of failures and no content is available. + download_metrics.downloaded_bytes = + fetch_error && !url_loader_->GetContentSize() + ? -1 + : url_loader_->GetContentSize(); download_metrics.total_bytes = total_bytes_; download_metrics.download_time_ms = download_time.InMilliseconds(); - VLOG(1) << "Downloaded " << downloaded_bytes_ << " bytes in " + VLOG(1) << "Downloaded " << url_loader_->GetContentSize() << " bytes in " << download_time.InMilliseconds() << "ms from " - << source->GetURL().spec() << " to " << result.response.value(); + << url_loader_->GetFinalURL().spec() << " to " + << result.response.value(); // Delete the download directory in the error cases. if (fetch_error && !download_dir_.empty()) @@ -201,21 +205,18 @@ download_metrics)); } -void UrlFetcherDownloader::OnURLFetchDownloadProgress( - const net::URLFetcher* source, - int64_t current, - int64_t total, - int64_t current_network_bytes) { +// This callback is used to indicate that a download has been started. +void UrlFetcherDownloader::OnResponseStarted( + const GURL& final_url, + const network::ResourceResponseHead& response_head) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - downloaded_bytes_ = current; - total_bytes_ = total; + if (response_head.content_length != -1) + total_bytes_ = response_head.content_length; - Result result; - result.downloaded_bytes = downloaded_bytes_; - result.total_bytes = total_bytes_; - - OnDownloadProgress(result); + // TODO(crbug.com/871211): |Result| is not being used on production. + // Clean it up. + OnDownloadProgress(Result()); } } // namespace update_client
diff --git a/components/update_client/url_fetcher_downloader.h b/components/update_client/url_fetcher_downloader.h index 442cbf2..03fee0a 100644 --- a/components/update_client/url_fetcher_downloader.h +++ b/components/update_client/url_fetcher_downloader.h
@@ -15,65 +15,42 @@ #include "base/threading/thread_checker.h" #include "base/time/time.h" #include "components/update_client/crx_downloader.h" -#include "net/url_request/url_fetcher_delegate.h" -namespace net { -class URLFetcher; -class URLRequestContextGetter; -} +namespace network { +class SharedURLLoaderFactory; +class SimpleURLLoader; +struct ResourceResponseHead; +} // namespace network namespace update_client { -// Implements a CRX downloader in top of the URLFetcher. +// Implements a CRX downloader in top of the SimpleURLLoader. class UrlFetcherDownloader : public CrxDownloader { public: UrlFetcherDownloader( std::unique_ptr<CrxDownloader> successor, - scoped_refptr<net::URLRequestContextGetter> context_getter); + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory); ~UrlFetcherDownloader() override; private: - class URLFetcherDelegate : public net::URLFetcherDelegate { - public: - explicit URLFetcherDelegate(UrlFetcherDownloader* downloader); - ~URLFetcherDelegate() override; - - private: - // Overrides for URLFetcherDelegate. - void OnURLFetchComplete(const net::URLFetcher* source) override; - void OnURLFetchDownloadProgress(const net::URLFetcher* source, - int64_t current, - int64_t total, - int64_t current_network_bytes) override; - // Not owned by this class. - UrlFetcherDownloader* downloader_ = nullptr; - DISALLOW_COPY_AND_ASSIGN(URLFetcherDelegate); - }; - // Overrides for CrxDownloader. void DoStartDownload(const GURL& url) override; void CreateDownloadDir(); void StartURLFetch(const GURL& url); - void OnURLFetchComplete(const net::URLFetcher* source); - void OnURLFetchDownloadProgress(const net::URLFetcher* source, - int64_t current, - int64_t total, - int64_t current_network_bytes); - + void OnURLLoadComplete(base::FilePath file_path); + void OnResponseStarted(const GURL& final_url, + const network::ResourceResponseHead& response_head); THREAD_CHECKER(thread_checker_); - std::unique_ptr<URLFetcherDelegate> delegate_; - - std::unique_ptr<net::URLFetcher> url_fetcher_; - scoped_refptr<net::URLRequestContextGetter> context_getter_; + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; + std::unique_ptr<network::SimpleURLLoader> url_loader_; // Contains a temporary download directory for the downloaded file. base::FilePath download_dir_; base::TimeTicks download_start_time_; - int64_t downloaded_bytes_ = -1; int64_t total_bytes_ = -1; DISALLOW_COPY_AND_ASSIGN(UrlFetcherDownloader);
diff --git a/components/url_formatter/idn_spoof_checker.cc b/components/url_formatter/idn_spoof_checker.cc index 602c1f45..7b18d59 100644 --- a/components/url_formatter/idn_spoof_checker.cc +++ b/components/url_formatter/idn_spoof_checker.cc
@@ -86,14 +86,13 @@ kTopDomainsHuffmanTree, sizeof(kTopDomainsHuffmanTree), kTopDomainsTrie, kTopDomainsTrieBits, kTopDomainsRootPosition}; -std::string LookupMatchInTopDomains(const icu::UnicodeString& ustr_skeleton) { +std::string LookupMatchInTopDomains(const std::string& skeleton) { + DCHECK(!skeleton.empty()); + DCHECK_NE(skeleton.back(), '.'); TopDomainPreloadDecoder preload_decoder( g_trie_params.huffman_tree, g_trie_params.huffman_tree_size, g_trie_params.trie, g_trie_params.trie_bits, g_trie_params.trie_root_position); - std::string skeleton; - ustr_skeleton.toUTF8String(skeleton); - DCHECK_NE(skeleton.back(), '.'); auto labels = base::SplitStringPiece(skeleton, ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); @@ -366,6 +365,17 @@ } std::string IDNSpoofChecker::GetSimilarTopDomain(base::StringPiece16 hostname) { + for (const std::string& skeleton : GetSkeletons(hostname)) { + DCHECK(!skeleton.empty()); + std::string matching_top_domain = LookupMatchInTopDomains(skeleton); + if (!matching_top_domain.empty()) + return matching_top_domain; + } + return std::string(); +} + +Skeletons IDNSpoofChecker::GetSkeletons(base::StringPiece16 hostname) { + Skeletons skeletons; size_t hostname_length = hostname.length() - (hostname.back() == '.' ? 1 : 0); icu::UnicodeString host(FALSE, hostname.data(), hostname_length); // If input has any characters outside Latin-Greek-Cyrillic and [0-9._-], @@ -376,7 +386,7 @@ extra_confusable_mapper_->transliterate(host); UErrorCode status = U_ZERO_ERROR; - icu::UnicodeString skeleton; + icu::UnicodeString ustr_skeleton; // Map U+04CF (ӏ) to lowercase L in addition to what uspoof_getSkeleton does // (mapping it to lowercase I). @@ -385,21 +395,27 @@ icu::UnicodeString host_alt(host); size_t length = host_alt.length(); char16_t* buffer = host_alt.getBuffer(-1); - for (char16_t* uc = buffer + u04cf_pos ; uc < buffer + length; ++uc) { + for (char16_t* uc = buffer + u04cf_pos; uc < buffer + length; ++uc) { if (*uc == 0x4CF) *uc = 0x6C; // Lowercase L } host_alt.releaseBuffer(length); - uspoof_getSkeletonUnicodeString(checker_, 0, host_alt, skeleton, &status); + uspoof_getSkeletonUnicodeString(checker_, 0, host_alt, ustr_skeleton, + &status); if (U_SUCCESS(status)) { - std::string match = LookupMatchInTopDomains(skeleton); - if (!match.empty()) - return match; + std::string skeleton; + ustr_skeleton.toUTF8String(skeleton); + skeletons.insert(skeleton); } } - uspoof_getSkeletonUnicodeString(checker_, 0, host, skeleton, &status); - return U_SUCCESS(status) ? LookupMatchInTopDomains(skeleton) : std::string(); + uspoof_getSkeletonUnicodeString(checker_, 0, host, ustr_skeleton, &status); + if (U_SUCCESS(status)) { + std::string skeleton; + ustr_skeleton.toUTF8String(skeleton); + skeletons.insert(skeleton); + } + return skeletons; } bool IDNSpoofChecker::IsMadeOfLatinAlikeCyrillic(
diff --git a/components/url_formatter/idn_spoof_checker.h b/components/url_formatter/idn_spoof_checker.h index 7c7d722..0b837c5d 100644 --- a/components/url_formatter/idn_spoof_checker.h +++ b/components/url_formatter/idn_spoof_checker.h
@@ -8,6 +8,7 @@ #include <memory> #include <string> +#include "base/containers/flat_set.h" #include "base/gtest_prod_util.h" #include "base/strings/string16.h" #include "base/strings/string_piece_forward.h" @@ -30,6 +31,8 @@ namespace url_formatter { FORWARD_DECLARE_TEST(UrlFormatterTest, IDNToUnicode); +using Skeletons = base::flat_set<std::string>; + // A helper class for IDN Spoof checking, used to ensure that no IDN input is // spoofable per Chromium's standard of spoofability. For a more thorough // explanation of how spoof checking works in Chromium, see @@ -64,6 +67,10 @@ // top domains. Note that non-IDN hostnames will not get here. std::string GetSimilarTopDomain(base::StringPiece16 hostname); + // Returns skeleton strings computed from |hostname|. This function can apply + // extra mappings to some characters to produce multiple skeletons. + Skeletons GetSkeletons(base::StringPiece16 hostname); + private: // Sets allowed characters in IDN labels and turns on USPOOF_CHAR_LIMIT. void SetAllowedUnicodeSet(UErrorCode* status);
diff --git a/components/url_formatter/url_formatter.cc b/components/url_formatter/url_formatter.cc index b044716c..527d596 100644 --- a/components/url_formatter/url_formatter.cc +++ b/components/url_formatter/url_formatter.cc
@@ -700,4 +700,8 @@ return StripWWW(base::ASCIIToUTF16(url.host_piece())); } +Skeletons GetSkeletons(const base::string16& host) { + return g_idn_spoof_checker.Get().GetSkeletons(host); +} + } // namespace url_formatter
diff --git a/components/url_formatter/url_formatter.h b/components/url_formatter/url_formatter.h index 82a5589f..988d325a 100644 --- a/components/url_formatter/url_formatter.h +++ b/components/url_formatter/url_formatter.h
@@ -21,6 +21,7 @@ #include <string> #include <vector> +#include "base/containers/flat_set.h" #include "base/strings/string16.h" #include "base/strings/string_piece.h" #include "base/strings/utf_offset_string_conversions.h" @@ -34,6 +35,8 @@ namespace url_formatter { +using Skeletons = base::flat_set<std::string>; + // Used by FormatUrl to specify handling of certain parts of the url. typedef uint32_t FormatUrlType; typedef uint32_t FormatUrlTypes; @@ -179,6 +182,9 @@ // Runs |url|'s host through StripWWW(). |url| must be valid. base::string16 StripWWWFromHost(const GURL& url); +// Returns skeleton strings computed from |host| for spoof checking. +Skeletons GetSkeletons(const base::string16& host); + } // namespace url_formatter #endif // COMPONENTS_URL_FORMATTER_URL_FORMATTER_H_
diff --git a/components/viz/common/BUILD.gn b/components/viz/common/BUILD.gn index 9ed1b00b..4be660c 100644 --- a/components/viz/common/BUILD.gn +++ b/components/viz/common/BUILD.gn
@@ -6,13 +6,18 @@ import("//testing/test.gni") import("//gpu/vulkan/features.gni") -viz_component("resource_format") { - output_name = "viz_resource_format" +source_set("resource_format") { + sources = [ + "resources/resource_format.h", + ] +} + +viz_component("resource_format_utils") { + output_name = "viz_resource_format_utils" defines = [ "VIZ_RESOURCE_FORMAT_IMPLEMENTATION" ] sources = [ - "resources/resource_format.h", "resources/resource_format_utils.cc", "resources/resource_format_utils.h", "viz_resource_format_export.h", @@ -20,6 +25,10 @@ configs = [ "//third_party/khronos:khronos_headers" ] + public_deps = [ + ":resource_format", + ] + deps = [ "//base", "//skia", @@ -188,7 +197,7 @@ } public_deps = [ - ":resource_format", + ":resource_format_utils", "//gpu/command_buffer/client", "//gpu/command_buffer/common", "//mojo/public/cpp/bindings",
diff --git a/components/viz/host/hit_test/hit_test_query.h b/components/viz/host/hit_test/hit_test_query.h index ae625d0..3289f42 100644 --- a/components/viz/host/hit_test/hit_test_query.h +++ b/components/viz/host/hit_test/hit_test_query.h
@@ -13,6 +13,10 @@ #include "components/viz/host/viz_host_export.h" #include "ui/gfx/geometry/point_f.h" +namespace content { +class HitTestRegionObserver; +} + namespace viz { struct Target { @@ -96,6 +100,7 @@ bool ContainsFrameSinkId(const FrameSinkId& frame_sink_id) const; private: + friend class content::HitTestRegionObserver; // Helper function to find |target| for |location_in_parent| in the // |region_index|, returns true if a target is found and false otherwise. // |location_in_parent| is in the coordinate space of |region_index|'s parent.
diff --git a/components/zucchini/BUILD.gn b/components/zucchini/BUILD.gn index 4e289e3..b15da9c 100644 --- a/components/zucchini/BUILD.gn +++ b/components/zucchini/BUILD.gn
@@ -11,12 +11,14 @@ # Disable DEX on Windows Official Builds. _enable_dex = !(is_win && is_official_build) + _enable_elf = true _enable_win = true # Disable ZTF (Zucchini Text Format) on official builds it is for testing only. _enable_ztf = !is_official_build flags = [ "ENABLE_DEX=$_enable_dex", + "ENABLE_ELF=$_enable_elf", "ENABLE_WIN=$_enable_win", "ENABLE_ZTF=$_enable_ztf", ] @@ -42,6 +44,8 @@ "disassembler.h", "disassembler_dex.cc", "disassembler_dex.h", + "disassembler_elf.cc", + "disassembler_elf.h", "disassembler_no_op.cc", "disassembler_no_op.h", "disassembler_win32.cc", @@ -158,6 +162,7 @@ "buffer_view_unittest.cc", "crc32_unittest.cc", "disassembler_dex_unittest.cc", + "disassembler_elf_unittest.cc", "disassembler_ztf_unittest.cc", "element_detection_unittest.cc", "encoded_view_unittest.cc",
diff --git a/components/zucchini/abs32_utils.cc b/components/zucchini/abs32_utils.cc index ab4372c..b3fd9f4 100644 --- a/components/zucchini/abs32_utils.cc +++ b/components/zucchini/abs32_utils.cc
@@ -136,10 +136,12 @@ for (auto unit = abs32_rva_extractor_.GetNext(); unit.has_value(); unit = abs32_rva_extractor_.GetNext()) { offset_t location = unit->location; - offset_t target = target_rva_to_offset_.Convert(unit->target_rva); - if (target == kInvalidOffset) - continue; - return Reference{location, target}; + // |target| will not be dereferenced, so we don't worry about it + // exceeding |image_.size()| (in fact, there are valid cases where it + // does). + offset_t unsafe_target = target_rva_to_offset_.Convert(unit->target_rva); + if (unsafe_target < kOffsetBound) + return Reference{location, unsafe_target}; } return base::nullopt; }
diff --git a/components/zucchini/disassembler.cc b/components/zucchini/disassembler.cc index 012e5efb..b6a2748 100644 --- a/components/zucchini/disassembler.cc +++ b/components/zucchini/disassembler.cc
@@ -8,6 +8,12 @@ namespace zucchini { +/******** EmptyReferenceReader ********/ + +base::Optional<Reference> EmptyReferenceReader::GetNext() { + return base::nullopt; +} + /******** ReferenceGroup ********/ std::unique_ptr<ReferenceReader> ReferenceGroup::GetReader(
diff --git a/components/zucchini/disassembler.h b/components/zucchini/disassembler.h index 4f528ed..ab1dafb 100644 --- a/components/zucchini/disassembler.h +++ b/components/zucchini/disassembler.h
@@ -17,6 +17,12 @@ namespace zucchini { +// A vacuous ReferenceReader that produces no references. +class EmptyReferenceReader : public ReferenceReader { + public: + base::Optional<Reference> GetNext() override; +}; + // Disassembler needs to be declared before ReferenceGroup because the latter // contains member pointers based on the former, and we use a compiler flag, // -fcomplete-member-pointers, which enforces that member pointer base types are
diff --git a/components/zucchini/disassembler_elf.cc b/components/zucchini/disassembler_elf.cc new file mode 100644 index 0000000..75690e9 --- /dev/null +++ b/components/zucchini/disassembler_elf.cc
@@ -0,0 +1,424 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/zucchini/disassembler_elf.h" + +#include <stddef.h> + +#include <algorithm> +#include <utility> + +#include "base/logging.h" +#include "base/numerics/safe_conversions.h" +#include "components/zucchini/abs32_utils.h" +#include "components/zucchini/algorithm.h" +#include "components/zucchini/buffer_source.h" + +namespace zucchini { + +namespace { + +// Determines whether |section| is a reloc section. +template <class Traits> +bool IsRelocSection(const typename Traits::Elf_Shdr& section) { + if (section.sh_size == 0) + return false; + if (section.sh_type == elf::SHT_REL) { + // Also validate |section.sh_entsize|, which gets used later. + return section.sh_entsize == sizeof(typename Traits::Elf_Rel); + } + if (section.sh_type == elf::SHT_RELA) + return section.sh_entsize == sizeof(typename Traits::Elf_Rela); + return false; +} + +// Determines whether |section| is a section with executable code. +template <class Traits> +bool IsExecSection(const typename Traits::Elf_Shdr& section) { + return (section.sh_flags & elf::SHF_EXECINSTR) != 0; +} + +} // namespace + +/******** ELF32Traits ********/ + +// static +constexpr Bitness Elf32Traits::kBitness; +constexpr elf::FileClass Elf32Traits::kIdentificationClass; + +/******** ELF32IntelTraits ********/ + +// static +constexpr ExecutableType Elf32IntelTraits::kExeType; +const char Elf32IntelTraits::kExeTypeString[] = "ELF x86"; +constexpr elf::MachineArchitecture Elf32IntelTraits::kMachineValue; +constexpr uint32_t Elf32IntelTraits::kRelType; + +/******** ELF64Traits ********/ + +// static +constexpr Bitness Elf64Traits::kBitness; +constexpr elf::FileClass Elf64Traits::kIdentificationClass; + +/******** ELF64IntelTraits ********/ + +// static +constexpr ExecutableType Elf64IntelTraits::kExeType; +const char Elf64IntelTraits::kExeTypeString[] = "ELF x64"; +constexpr elf::MachineArchitecture Elf64IntelTraits::kMachineValue; +constexpr uint32_t Elf64IntelTraits::kRelType; + +/******** DisassemblerElf ********/ + +// static. +template <class Traits> +bool DisassemblerElf<Traits>::QuickDetect(ConstBufferView image) { + BufferSource source(image); + + // Do not consume the bytes for the magic value, as they are part of the + // header. + if (!source.CheckNextBytes({0x7F, 'E', 'L', 'F'})) + return false; + + auto* header = source.GetPointer<typename Traits::Elf_Ehdr>(); + if (!header) + return false; + + if (header->e_ident[elf::EI_CLASS] != Traits::kIdentificationClass) + return false; + + if (header->e_ident[elf::EI_DATA] != 1) // Only ELFDATA2LSB is supported. + return false; + + if (header->e_type != elf::ET_EXEC && header->e_type != elf::ET_DYN) + return false; + + if (header->e_version != 1 || header->e_ident[elf::EI_VERSION] != 1) + return false; + + if (header->e_machine != supported_architecture()) + return false; + + if (header->e_shentsize != sizeof(typename Traits::Elf_Shdr)) + return false; + + return true; +} + +template <class Traits> +DisassemblerElf<Traits>::~DisassemblerElf() = default; + +template <class Traits> +ExecutableType DisassemblerElf<Traits>::GetExeType() const { + return Traits::kExeType; +} + +template <class Traits> +std::string DisassemblerElf<Traits>::GetExeTypeString() const { + return Traits::kExeTypeString; +} + +// |num_equivalence_iterations_| = 2 for reloc -> abs32. +template <class Traits> +DisassemblerElf<Traits>::DisassemblerElf() : Disassembler(2) {} + +template <class Traits> +bool DisassemblerElf<Traits>::Parse(ConstBufferView image) { + image_ = image; + if (!ParseHeader()) + return false; + ParseSections(); + return true; +} + +template <class Traits> +std::unique_ptr<ReferenceReader> DisassemblerElf<Traits>::MakeReadRelocs( + offset_t lo, + offset_t hi) { + DCHECK_LE(lo, hi); + DCHECK_LE(hi, image_.size()); + + if (reloc_section_dims_.empty()) + return std::make_unique<EmptyReferenceReader>(); + + return std::make_unique<RelocReaderElf>( + image_, Traits::kBitness, reloc_section_dims_, + supported_relocation_type(), lo, hi, translator_); +} + +template <class Traits> +std::unique_ptr<ReferenceWriter> DisassemblerElf<Traits>::MakeWriteRelocs( + MutableBufferView image) { + return std::make_unique<RelocWriterElf>(image, Traits::kBitness, translator_); +} + +template <class Traits> +std::unique_ptr<ReferenceReader> DisassemblerElf<Traits>::MakeReadAbs32( + offset_t lo, + offset_t hi) { + Abs32RvaExtractorWin32 abs_rva_extractor(image_, {Traits::kBitness, 0}, + abs32_locations_, lo, hi); + return std::make_unique<Abs32ReaderWin32>(std::move(abs_rva_extractor), + translator_); +} + +template <class Traits> +std::unique_ptr<ReferenceWriter> DisassemblerElf<Traits>::MakeWriteAbs32( + MutableBufferView image) { + return std::make_unique<Abs32WriterWin32>( + image, AbsoluteAddress(Traits::kBitness, 0), translator_); +} + +template <class Traits> +bool DisassemblerElf<Traits>::ParseHeader() { + BufferSource source(image_); + + // Ensures |header_| is valid later on. + if (!QuickDetect(image_)) + return false; + + header_ = source.GetPointer<typename Traits::Elf_Ehdr>(); + + sections_count_ = header_->e_shnum; + source = std::move(BufferSource(image_).Skip(header_->e_shoff)); + sections_ = source.GetArray<typename Traits::Elf_Shdr>(sections_count_); + if (!sections_) + return false; + offset_t section_table_end = + base::checked_cast<offset_t>(source.begin() - image_.begin()); + + segments_count_ = header_->e_phnum; + source = std::move(BufferSource(image_).Skip(header_->e_phoff)); + segments_ = source.GetArray<typename Traits::Elf_Phdr>(segments_count_); + if (!segments_) + return false; + offset_t segment_table_end = + base::checked_cast<offset_t>(source.begin() - image_.begin()); + + // Check string section -- even though we've stopped using them. + elf::Elf32_Half string_section_id = header_->e_shstrndx; + if (string_section_id >= sections_count_) + return false; + size_t section_names_size = sections_[string_section_id].sh_size; + if (section_names_size > 0) { + // If nonempty, then last byte of string section must be null. + const char* section_names = nullptr; + source = std::move( + BufferSource(image_).Skip(sections_[string_section_id].sh_offset)); + section_names = source.GetArray<char>(section_names_size); + if (!section_names || section_names[section_names_size - 1] != '\0') + return false; + } + + // Establish bound on encountered offsets. + offset_t offset_bound = std::max(section_table_end, segment_table_end); + + // Visit each section, validate, and add address translation data to |units|. + std::vector<AddressTranslator::Unit> units; + units.reserve(sections_count_); + + for (int i = 0; i < sections_count_; ++i) { + const typename Traits::Elf_Shdr* section = §ions_[i]; + + // Skip empty sections. These don't affect |offset_bound|, and don't + // contribute to RVA-offset mapping. + if (section->sh_size == 0) + continue; + + // Be lax with RVAs: Assume they fit in int32_t, even for 64-bit. If + // assumption fails, simply skip the section with warning. + if (!RangeIsBounded(section->sh_addr, section->sh_size, kRvaBound) || + !RangeIsBounded(section->sh_offset, section->sh_size, kOffsetBound)) { + LOG(WARNING) << "Section " << i << " does not fit in int32_t."; + continue; + } + + // Extract dimensions to 32-bit integers to facilitate conversion. Range of + // values was ensured above when checking that the section is bounded. + uint32_t sh_size = base::checked_cast<uint32_t>(section->sh_size); + offset_t sh_offset = base::checked_cast<offset_t>(section->sh_offset); + rva_t sh_addr = base::checked_cast<rva_t>(section->sh_addr); + + // Update |offset_bound|. + if (section->sh_type != elf::SHT_NOBITS) { + // Be strict with offsets: Any size overflow invalidates the file. + if (!image_.covers({sh_offset, sh_size})) + return false; + + offset_t section_end = sh_offset + sh_size; + offset_bound = std::max(offset_bound, section_end); + } + + // Compute mappings to translate between RVA and offset. As a heuristic, + // sections with RVA == 0 (i.e., |sh_addr == 0|) are ignored because these + // tend to be duplicates (which cause problems during lookup), and tend to + // be uninteresting. + if (section->sh_addr > 0) { + // Add |section| data for offset-RVA translation. + units.push_back({sh_offset, sh_size, sh_addr, sh_size}); + } + } + + // Initialize |translator_| for offset-RVA translations. Any inconsistency + // (e.g., 2 offsets correspond to the same RVA) would invalidate the ELF file. + if (translator_.Initialize(std::move(units)) != AddressTranslator::kSuccess) + return false; + + // Visits |segments_| to get better estimate on |offset_bound|. + for (const typename Traits::Elf_Phdr* segment = segments_; + segment != segments_ + segments_count_; ++segment) { + if (!RangeIsBounded(segment->p_offset, segment->p_filesz, kOffsetBound)) + return false; + offset_t segment_end = segment->p_offset + segment->p_filesz; + offset_bound = std::max(offset_bound, segment_end); + } + + if (offset_bound > image_.size()) + return false; + image_.shrink(offset_bound); + + return true; +} + +template <class Traits> +void DisassemblerElf<Traits>::ExtractInterestingSectionHeaders() { + DCHECK(reloc_section_dims_.empty()); + DCHECK(exec_headers_.empty()); + for (elf::Elf32_Half i = 0; i < sections_count_; ++i) { + const typename Traits::Elf_Shdr* section = sections_ + i; + if (IsRelocSection<Traits>(*section)) + reloc_section_dims_.emplace_back(*section); + else if (IsExecSection<Traits>(*section)) + exec_headers_.push_back(section); + } + auto comp = [](const typename Traits::Elf_Shdr* a, + const typename Traits::Elf_Shdr* b) { + return a->sh_offset < b->sh_offset; + }; + std::sort(reloc_section_dims_.begin(), reloc_section_dims_.end()); + std::sort(exec_headers_.begin(), exec_headers_.end(), comp); +} + +template <class Traits> +void DisassemblerElf<Traits>::GetAbs32FromRelocSections() { + constexpr int kAbs32Width = 4; + DCHECK(abs32_locations_.empty()); + auto relocs = MakeReadRelocs(0, offset_t(size())); + for (auto ref = relocs->GetNext(); ref; ref = relocs->GetNext()) { + // Reject null targets and targets outside |image_|. Note that here we + // assume abs32 targets are never "fake offsets". + if (ref->target > 0 && image_.covers({ref->target, kAbs32Width})) + abs32_locations_.push_back(ref->target); + } + abs32_locations_.shrink_to_fit(); + std::sort(abs32_locations_.begin(), abs32_locations_.end()); + + // Abs32 reference bodies must not overlap. If found, simply remove them. + size_t num_removed = + RemoveOverlappingAbs32Locations(Traits::kBitness, &abs32_locations_); + if (num_removed) { + LOG(WARNING) << "Warning: Found and removed " << num_removed + << " abs32 locations with overlapping bodies."; + } +} + +template <class Traits> +void DisassemblerElf<Traits>::GetRel32FromCodeSections() { + for (const typename Traits::Elf_Shdr* section : exec_headers_) + ParseExecSection(*section); + PostProcessRel32(); +} + +template <class Traits> +void DisassemblerElf<Traits>::ParseSections() { + ExtractInterestingSectionHeaders(); + GetAbs32FromRelocSections(); + GetRel32FromCodeSections(); +} + +/******** DisassemblerElfIntel ********/ + +template <class Traits> +DisassemblerElfIntel<Traits>::DisassemblerElfIntel() = default; + +template <class Traits> +DisassemblerElfIntel<Traits>::~DisassemblerElfIntel() = default; + +template <class Traits> +std::vector<ReferenceGroup> DisassemblerElfIntel<Traits>::MakeReferenceGroups() + const { + return {{ReferenceTypeTraits{4, TypeTag(kReloc), PoolTag(kReloc)}, + &DisassemblerElfIntel<Traits>::MakeReadRelocs, + &DisassemblerElfIntel<Traits>::MakeWriteRelocs}, + {ReferenceTypeTraits{4, TypeTag(kAbs32), PoolTag(kAbs32)}, + &DisassemblerElfIntel<Traits>::MakeReadAbs32, + &DisassemblerElfIntel<Traits>::MakeWriteAbs32}, + {ReferenceTypeTraits{4, TypeTag(kRel32), PoolTag(kRel32)}, + &DisassemblerElfIntel<Traits>::MakeReadRel32, + &DisassemblerElfIntel<Traits>::MakeWriteRel32}}; +} + +template <class Traits> +void DisassemblerElfIntel<Traits>::ParseExecSection( + const typename Traits::Elf_Shdr& section) { + ConstBufferView& image_ = this->image_; + auto& abs32_locations_ = this->abs32_locations_; + + std::ptrdiff_t from_offset_to_rva = section.sh_addr - section.sh_offset; + rva_t start_rva = section.sh_addr; + rva_t end_rva = start_rva + section.sh_size; + + AddressTranslator::RvaToOffsetCache target_rva_checker(this->translator_); + + ConstBufferView region(image_.begin() + section.sh_offset, section.sh_size); + Abs32GapFinder gap_finder(image_, region, abs32_locations_, 4); + std::unique_ptr<Rel32FinderIntel> finder = + std::make_unique<typename Traits::Rel32FinderUse>(image_); + for (auto gap = gap_finder.GetNext(); gap.has_value(); + gap = gap_finder.GetNext()) { + finder->Reset(gap.value()); + for (auto rel32 = finder->GetNext(); rel32.has_value(); + rel32 = finder->GetNext()) { + offset_t rel32_offset = offset_t(rel32->location - image_.begin()); + rva_t rel32_rva = rva_t(rel32_offset + from_offset_to_rva); + rva_t target_rva = rel32_rva + 4 + image_.read<uint32_t>(rel32_offset); + if (target_rva_checker.IsValid(target_rva) && + (rel32->can_point_outside_section || + (start_rva <= target_rva && target_rva < end_rva))) { + finder->Accept(); + rel32_locations_.push_back(rel32_offset); + } + } + } +} + +template <class Traits> +void DisassemblerElfIntel<Traits>::PostProcessRel32() { + rel32_locations_.shrink_to_fit(); + std::sort(rel32_locations_.begin(), rel32_locations_.end()); +} + +template <class Traits> +std::unique_ptr<ReferenceReader> DisassemblerElfIntel<Traits>::MakeReadRel32( + offset_t lo, + offset_t hi) { + return std::make_unique<Rel32ReaderX86>(this->image_, lo, hi, + &rel32_locations_, this->translator_); +} + +template <class Traits> +std::unique_ptr<ReferenceWriter> DisassemblerElfIntel<Traits>::MakeWriteRel32( + MutableBufferView image) { + return std::make_unique<Rel32WriterX86>(image, this->translator_); +} + +// Explicit instantiation for supported classes. +template class DisassemblerElfIntel<Elf32IntelTraits>; +template class DisassemblerElfIntel<Elf64IntelTraits>; +template bool DisassemblerElf<Elf32IntelTraits>::QuickDetect( + ConstBufferView image); +template bool DisassemblerElf<Elf64IntelTraits>::QuickDetect( + ConstBufferView image); + +} // namespace zucchini
diff --git a/components/zucchini/disassembler_elf.h b/components/zucchini/disassembler_elf.h new file mode 100644 index 0000000..a5b0a72 --- /dev/null +++ b/components/zucchini/disassembler_elf.h
@@ -0,0 +1,189 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_ZUCCHINI_DISASSEMBLER_ELF_H_ +#define COMPONENTS_ZUCCHINI_DISASSEMBLER_ELF_H_ + +#include <stdint.h> + +#include <memory> +#include <string> +#include <vector> + +#include "base/macros.h" +#include "components/zucchini/address_translator.h" +#include "components/zucchini/buffer_view.h" +#include "components/zucchini/disassembler.h" +#include "components/zucchini/image_utils.h" +#include "components/zucchini/rel32_finder.h" +#include "components/zucchini/rel32_utils.h" +#include "components/zucchini/reloc_elf.h" +#include "components/zucchini/type_elf.h" + +namespace zucchini { + +struct Elf32Traits { + static constexpr Bitness kBitness = kBit32; + static constexpr elf::FileClass kIdentificationClass = elf::ELFCLASS32; + using Elf_Shdr = elf::Elf32_Shdr; + using Elf_Phdr = elf::Elf32_Phdr; + using Elf_Ehdr = elf::Elf32_Ehdr; + using Elf_Rel = elf::Elf32_Rel; + using Elf_Rela = elf::Elf32_Rela; +}; + +// Architecture-specific definitions. +struct Elf32IntelTraits : public Elf32Traits { + static constexpr ExecutableType kExeType = kExeTypeElfX86; + static const char kExeTypeString[]; + static constexpr elf::MachineArchitecture kMachineValue = elf::EM_386; + static constexpr uint32_t kRelType = elf::R_386_RELATIVE; + using Rel32FinderUse = Rel32FinderX86; +}; + +struct Elf64Traits { + static constexpr Bitness kBitness = kBit64; + static constexpr elf::FileClass kIdentificationClass = elf::ELFCLASS64; + using Elf_Shdr = elf::Elf64_Shdr; + using Elf_Phdr = elf::Elf64_Phdr; + using Elf_Ehdr = elf::Elf64_Ehdr; + using Elf_Rel = elf::Elf64_Rel; + using Elf_Rela = elf::Elf64_Rela; +}; + +// Architecture-specific definitions. +struct Elf64IntelTraits : public Elf64Traits { + static constexpr ExecutableType kExeType = kExeTypeElfX64; + static const char kExeTypeString[]; + static constexpr elf::MachineArchitecture kMachineValue = elf::EM_X86_64; + static constexpr uint32_t kRelType = elf::R_X86_64_RELATIVE; + using Rel32FinderUse = Rel32FinderX64; +}; + +// Disassembler for ELF. +template <class Traits> +class DisassemblerElf : public Disassembler { + public: + using HeaderVector = std::vector<const typename Traits::Elf_Shdr*>; + + // Applies quick checks to determine whether |image| *may* point to the start + // of an executable. Returns true iff the check passes. + static bool QuickDetect(ConstBufferView image); + + ~DisassemblerElf() override; + + // Disassembler: + ExecutableType GetExeType() const override; + std::string GetExeTypeString() const override; + std::vector<ReferenceGroup> MakeReferenceGroups() const override = 0; + + // Find/Receive functions that are common among different architectures. + std::unique_ptr<ReferenceReader> MakeReadRelocs(offset_t lo, offset_t hi); + std::unique_ptr<ReferenceWriter> MakeWriteRelocs(MutableBufferView image); + std::unique_ptr<ReferenceReader> MakeReadAbs32(offset_t lo, offset_t hi); + std::unique_ptr<ReferenceWriter> MakeWriteAbs32(MutableBufferView image); + + const AddressTranslator& translator() const { return translator_; } + + protected: + friend Disassembler; + + DisassemblerElf(); + + bool Parse(ConstBufferView image) override; + + // Returns the supported Elf_Ehdr::e_machine enum. + static constexpr elf::MachineArchitecture supported_architecture() { + return Traits::kMachineValue; + } + + // Returns the type to look for in the reloc section. + static constexpr uint32_t supported_relocation_type() { + return Traits::kRelType; + } + + // Performs architecture-specific parsing of an executable section, to extract + // rel32 references. + virtual void ParseExecSection(const typename Traits::Elf_Shdr& section) = 0; + + // Processes rel32 data after they are extracted from executable sections. + virtual void PostProcessRel32() = 0; + + // The parsing routines below return true on success, and false on failure. + + // Parses ELF header and section headers, and performs basic validation. + bool ParseHeader(); + + // Extracts and stores section headers that we need. + void ExtractInterestingSectionHeaders(); + + // Parsing functions that extract references from various sections. + void GetAbs32FromRelocSections(); + void GetRel32FromCodeSections(); + void ParseSections(); + + // Main ELF header. + const typename Traits::Elf_Ehdr* header_ = nullptr; + + // Section header table, ordered by section id. + elf::Elf32_Half sections_count_ = 0; + const typename Traits::Elf_Shdr* sections_ = nullptr; + + // Program header table. + elf::Elf32_Half segments_count_ = 0; + const typename Traits::Elf_Phdr* segments_ = nullptr; + + // Translator between offsets and RVAs. + AddressTranslator translator_; + + // Identity translator for abs32 translation. + AddressTranslator identity_translator_; + + // Extracted relocation section dimensions data, sorted by file offsets. + std::vector<SectionDimensionsElf> reloc_section_dims_; + + // Headers of executable sections, sorted by file offsets of the data each + // header points to. + std::vector<const typename Traits::Elf_Shdr*> exec_headers_; + + // Sorted file offsets of abs32 locations. + std::vector<offset_t> abs32_locations_; + + private: + DISALLOW_COPY_AND_ASSIGN(DisassemblerElf); +}; + +// Disassembler for ELF with Intel architectures. +template <class Traits> +class DisassemblerElfIntel : public DisassemblerElf<Traits> { + public: + enum ReferenceType : uint8_t { kReloc, kAbs32, kRel32, kTypeCount }; + + DisassemblerElfIntel(); + ~DisassemblerElfIntel() override; + + // Disassembler: + std::vector<ReferenceGroup> MakeReferenceGroups() const override; + + // DisassemblerElf: + void ParseExecSection(const typename Traits::Elf_Shdr& section) override; + void PostProcessRel32() override; + + // Specialized Find/Receive functions. + std::unique_ptr<ReferenceReader> MakeReadRel32(offset_t lo, offset_t hi); + std::unique_ptr<ReferenceWriter> MakeWriteRel32(MutableBufferView image); + + private: + // Sorted file offsets of rel32 locations. + std::vector<offset_t> rel32_locations_; + + DISALLOW_COPY_AND_ASSIGN(DisassemblerElfIntel); +}; + +using DisassemblerElfX86 = DisassemblerElfIntel<Elf32IntelTraits>; +using DisassemblerElfX64 = DisassemblerElfIntel<Elf64IntelTraits>; + +} // namespace zucchini + +#endif // COMPONENTS_ZUCCHINI_DISASSEMBLER_ELF_H_
diff --git a/components/zucchini/disassembler_elf_unittest.cc b/components/zucchini/disassembler_elf_unittest.cc new file mode 100644 index 0000000..2db8635 --- /dev/null +++ b/components/zucchini/disassembler_elf_unittest.cc
@@ -0,0 +1,94 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/zucchini/disassembler_elf.h" + +#include <stddef.h> +#include <stdint.h> + +#include <algorithm> +#include <random> +#include <vector> + +#include "components/zucchini/test_utils.h" +#include "components/zucchini/type_elf.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace zucchini { + +TEST(DisassemblerElfTest, QuickDetect) { + std::vector<uint8_t> image_data; + ConstBufferView image; + + // Empty. + EXPECT_FALSE(DisassemblerElfX86::QuickDetect(image)); + EXPECT_FALSE(DisassemblerElfX64::QuickDetect(image)); + + // Unrelated. + image_data = ParseHexString("DE AD"); + image = {image_data.data(), image_data.size()}; + EXPECT_FALSE(DisassemblerElfX86::QuickDetect(image)); + EXPECT_FALSE(DisassemblerElfX64::QuickDetect(image)); + + // Only Magic. + image_data = ParseHexString("7F 45 4C 46"); + image = {image_data.data(), image_data.size()}; + EXPECT_FALSE(DisassemblerElfX86::QuickDetect(image)); + EXPECT_FALSE(DisassemblerElfX64::QuickDetect(image)); + + // Only identification. + image_data = + ParseHexString("7F 45 4C 46 01 01 01 00 00 00 00 00 00 00 00 00"); + image = {image_data.data(), image_data.size()}; + EXPECT_FALSE(DisassemblerElfX86::QuickDetect(image)); + EXPECT_FALSE(DisassemblerElfX64::QuickDetect(image)); + + // Large enough, filled with zeros. + image_data.assign(sizeof(elf::Elf32_Ehdr), 0); + image = {image_data.data(), image_data.size()}; + EXPECT_FALSE(DisassemblerElfX86::QuickDetect(image)); + EXPECT_FALSE(DisassemblerElfX64::QuickDetect(image)); + + // Random. + std::random_device rd; + std::mt19937 gen{rd()}; + std::generate(image_data.begin(), image_data.end(), gen); + image = {image_data.data(), image_data.size()}; + EXPECT_FALSE(DisassemblerElfX86::QuickDetect(image)); + EXPECT_FALSE(DisassemblerElfX64::QuickDetect(image)); + + // Typical x86 elf header. + { + elf::Elf32_Ehdr header = {}; + auto e_ident = + ParseHexString("7F 45 4C 46 01 01 01 00 00 00 00 00 00 00 00 00"); + std::copy(e_ident.begin(), e_ident.end(), header.e_ident); + header.e_type = elf::ET_EXEC; + header.e_machine = elf::EM_386; + header.e_version = 1; + header.e_shentsize = sizeof(elf::Elf32_Shdr); + ConstBufferView image(reinterpret_cast<const uint8_t*>(&header), + sizeof(header)); + EXPECT_TRUE(DisassemblerElfX86::QuickDetect(image)); + EXPECT_FALSE(DisassemblerElfX64::QuickDetect(image)); + } + + // Typical x64 elf header. + { + elf::Elf64_Ehdr header = {}; + auto e_ident = + ParseHexString("7F 45 4C 46 02 01 01 00 00 00 00 00 00 00 00 00"); + std::copy(e_ident.begin(), e_ident.end(), header.e_ident); + header.e_type = elf::ET_EXEC; + header.e_machine = elf::EM_X86_64; + header.e_version = 1; + header.e_shentsize = sizeof(elf::Elf64_Shdr); + ConstBufferView image(reinterpret_cast<const uint8_t*>(&header), + sizeof(header)); + EXPECT_FALSE(DisassemblerElfX86::QuickDetect(image)); + EXPECT_TRUE(DisassemblerElfX64::QuickDetect(image)); + } +} + +} // namespace zucchini
diff --git a/components/zucchini/element_detection.cc b/components/zucchini/element_detection.cc index 6b31f612..fa5adf40 100644 --- a/components/zucchini/element_detection.cc +++ b/components/zucchini/element_detection.cc
@@ -19,6 +19,10 @@ #include "components/zucchini/disassembler_win32.h" #endif // BUILDFLAG(ENABLE_WIN) +#if BUILDFLAG(ENABLE_ELF) +#include "components/zucchini/disassembler_elf.h" +#endif // BUILDFLAG(ENABLE_ELF) + #if BUILDFLAG(ENABLE_ZTF) #include "components/zucchini/disassembler_ztf.h" #endif // BUILDFLAG(ENABLE_ZTF) @@ -50,6 +54,20 @@ } #endif // BUILDFLAG(ENABLE_WIN) +#if BUILDFLAG(ENABLE_ELF) + if (DisassemblerElfX86::QuickDetect(image)) { + auto disasm = Disassembler::Make<DisassemblerElfX86>(image); + if (disasm && disasm->size() >= kMinProgramSize) + return disasm; + } + + if (DisassemblerElfX64::QuickDetect(image)) { + auto disasm = Disassembler::Make<DisassemblerElfX64>(image); + if (disasm && disasm->size() >= kMinProgramSize) + return disasm; + } +#endif // BUILDFLAG(ENABLE_ELF) + #if BUILDFLAG(ENABLE_DEX) if (DisassemblerDex::QuickDetect(image)) { auto disasm = Disassembler::Make<DisassemblerDex>(image); @@ -79,6 +97,12 @@ case kExeTypeWin32X64: return Disassembler::Make<DisassemblerWin32X64>(image); #endif // BUILDFLAG(ENABLE_WIN) +#if BUILDFLAG(ENABLE_ELF) + case kExeTypeElfX86: + return Disassembler::Make<DisassemblerElfX86>(image); + case kExeTypeElfX64: + return Disassembler::Make<DisassemblerElfX64>(image); +#endif // BUILDFLAG(ENABLE_ELF) #if BUILDFLAG(ENABLE_DEX) case kExeTypeDex: return Disassembler::Make<DisassemblerDex>(image);
diff --git a/components/zucchini/type_elf.h b/components/zucchini/type_elf.h index 99dcba2..2bbe6dc1 100644 --- a/components/zucchini/type_elf.h +++ b/components/zucchini/type_elf.h
@@ -67,8 +67,30 @@ Elf64_Half e_shstrndx; }; +// Identification Indexes in header->e_ident. +enum IdentificationIndex { + EI_MAG0 = 0, // File identification. + EI_MAG1 = 1, // File identification. + EI_MAG2 = 2, // File identification. + EI_MAG3 = 3, // File identification. + EI_CLASS = 4, // File class. + EI_DATA = 5, // Data encoding. + EI_VERSION = 6, // File version. + EI_OSABI = 7, // Operating system/ABI identification. + EI_ABIVERSION = 8, // ABI version. + EI_PAD = 9, // Start of padding bytes. + EI_NIDENT = 16 // Size of e_ident[]. +}; + +// Values for header->e_ident[EI_CLASS]. +enum FileClass { + ELFCLASSNONE = 0, // Invalid class. + ELFCLASS32 = 1, // 32-bit objects. + ELFCLASS64 = 2 // 64-bit objects. +}; + // Values for header->e_type. -enum e_type_values { +enum FileType { ET_NONE = 0, // No file type ET_REL = 1, // Relocatable file ET_EXEC = 2, // Executable file @@ -79,7 +101,7 @@ }; // Values for header->e_machine. -enum e_machine_values { +enum MachineArchitecture { EM_NONE = 0, // No machine. EM_386 = 3, // Intel Architecture. EM_ARM = 40, // ARM Architecture.
diff --git a/content/app/strings/translations/content_strings_es.xtb b/content/app/strings/translations/content_strings_es.xtb index 4c542b6b..370c170 100644 --- a/content/app/strings/translations/content_strings_es.xtb +++ b/content/app/strings/translations/content_strings_es.xtb
@@ -106,7 +106,7 @@ <translation id="4757246831282535685">panel de pestaña</translation> <translation id="4763480195061959176">vídeo</translation> <translation id="479989351350248267">buscar</translation> -<translation id="4812940957355064477">Debes introducir un número.</translation> +<translation id="4812940957355064477">Debes introducir un número</translation> <translation id="4912536737030637138">entrada bibliográfica</translation> <translation id="4975562563186953947"><ph name="SELECTED_COUNT" /> seleccionados</translation> <translation id="4992066212339426712">Activar sonido</translation>
diff --git a/content/app/strings/translations/content_strings_fi.xtb b/content/app/strings/translations/content_strings_fi.xtb index 4207c01..7d8bdda9 100644 --- a/content/app/strings/translations/content_strings_fi.xtb +++ b/content/app/strings/translations/content_strings_fi.xtb
@@ -136,7 +136,7 @@ <translation id="57838592816432529">Mykistä</translation> <translation id="5860033963881614850">Pois käytöstä</translation> <translation id="588258955323874662">Koko ruutu</translation> -<translation id="5888666972993069672"><ph name="DEVICE_FRIENDLY_NAME" /> on suoratoiston kohde</translation> +<translation id="5888666972993069672">Katsotaan TV:stä <ph name="DEVICE_FRIENDLY_NAME" /></translation> <translation id="5939518447894949180">Tyhjennä</translation> <translation id="5966707198760109579">Viikko</translation> <translation id="5987525920412732405">pyöräytyspainike</translation>
diff --git a/content/app/strings/translations/content_strings_mr.xtb b/content/app/strings/translations/content_strings_mr.xtb index 60b8d16..9ad8055 100644 --- a/content/app/strings/translations/content_strings_mr.xtb +++ b/content/app/strings/translations/content_strings_mr.xtb
@@ -81,7 +81,7 @@ <translation id="3808586225841795776">संज्ञा</translation> <translation id="3822383571486410024">कृपया हा मजकूर <ph name="MIN_CHARACTERS" /> वर्ण किंवा त्यापेक्षा अधिक मोठा करा (आपण सध्या <ph name="CURRENT_LENGTH" /> वर्ण वापरत आहात).</translation> <translation id="383465348367842624">'<ph name="ATSIGN" />' मागुन येणार्या भागामध्ये '<ph name="INVALIDCHARACTER" />' चिन्ह नसावे.</translation> -<translation id="3846214748874656680">पूर्णस्क्रीनमधून बाहेर पडा</translation> +<translation id="3846214748874656680">क्षेत्रेमधून बाहेर पडा</translation> <translation id="3920932319529768807">निष्कर्ष</translation> <translation id="3924558731517983934">अॅप्लिकेशन</translation> <translation id="3944740393230681990">उपोद्घात</translation> @@ -135,7 +135,7 @@ <translation id="576709008726043716">परिचय</translation> <translation id="57838592816432529">निःशब्द करा</translation> <translation id="5860033963881614850">बंद</translation> -<translation id="588258955323874662">पूर्णस्क्रीन</translation> +<translation id="588258955323874662">क्षेत्रे</translation> <translation id="5888666972993069672">आता <ph name="DEVICE_FRIENDLY_NAME" /> वर कास्ट करत आहे</translation> <translation id="5939518447894949180">रीसेट करा</translation> <translation id="5966707198760109579">आठवडा</translation>
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn index 62a0273c..15d7277 100644 --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn
@@ -419,7 +419,6 @@ "background_fetch/background_fetch_registration_notifier.h", "background_fetch/background_fetch_request_info.cc", "background_fetch/background_fetch_request_info.h", - "background_fetch/background_fetch_request_manager.h", "background_fetch/background_fetch_request_match_params.cc", "background_fetch/background_fetch_request_match_params.h", "background_fetch/background_fetch_scheduler.cc",
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm index 07e9862..2e0f37f 100644 --- a/content/browser/accessibility/browser_accessibility_cocoa.mm +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -1720,8 +1720,11 @@ std::string role_attribute; if (owner_->GetHtmlAttribute("role", &role_attribute)) { ax::mojom::Role internalRole = [self internalRole]; - if ((internalRole != ax::mojom::Role::kGroup && - internalRole != ax::mojom::Role::kListItem) || + if ((internalRole != ax::mojom::Role::kBlockquote && + internalRole != ax::mojom::Role::kCaption && + internalRole != ax::mojom::Role::kGroup && + internalRole != ax::mojom::Role::kListItem && + internalRole != ax::mojom::Role::kParagraph) || internalRole == ax::mojom::Role::kTab) { // TODO(dtseng): This is not localized; see crbug/84814. return base::SysUTF8ToNSString(role_attribute);
diff --git a/content/browser/accessibility/browser_accessibility_com_win.h b/content/browser/accessibility/browser_accessibility_com_win.h index b6b9250..775cbb6c 100644 --- a/content/browser/accessibility/browser_accessibility_com_win.h +++ b/content/browser/accessibility/browser_accessibility_com_win.h
@@ -5,8 +5,6 @@ #ifndef CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_COM_WIN_H_ #define CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_COM_WIN_H_ -#include <atlbase.h> -#include <atlcom.h> #include <oleacc.h> #include <stddef.h> #include <stdint.h> @@ -15,6 +13,7 @@ #include "base/compiler_specific.h" #include "base/gtest_prod_util.h" #include "base/macros.h" +#include "base/win/atl.h" #include "content/browser/accessibility/browser_accessibility.h" #include "content/browser/accessibility/browser_accessibility_win.h" #include "content/common/content_export.h"
diff --git a/content/browser/accessibility/browser_accessibility_win.h b/content/browser/accessibility/browser_accessibility_win.h index ec38830e..b8cf5cd53 100644 --- a/content/browser/accessibility/browser_accessibility_win.h +++ b/content/browser/accessibility/browser_accessibility_win.h
@@ -5,9 +5,7 @@ #ifndef CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_WIN_H_ #define CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_WIN_H_ -#include <atlbase.h> -#include <atlcom.h> - +#include "base/win/atl.h" #include "content/browser/accessibility/browser_accessibility.h" #include "content/browser/accessibility/browser_accessibility_com_win.h" #include "content/common/content_export.h"
diff --git a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc index 4541b57..b1942ea 100644 --- a/content/browser/accessibility/cross_platform_accessibility_browsertest.cc +++ b/content/browser/accessibility/cross_platform_accessibility_browsertest.cc
@@ -23,8 +23,7 @@ #include "ui/accessibility/ax_tree.h" #if defined(OS_WIN) -#include <atlbase.h> -#include <atlcom.h> +#include "base/win/atl.h" #include "base/win/scoped_com_initializer.h" #include "ui/base/win/atl_module.h" #endif
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc index b0c2af3..a09888fda 100644 --- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc +++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -412,6 +412,10 @@ RunAriaTest(FILE_PATH_LITERAL("aria-banner.html")); } +IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaBlockquote) { + RunAriaTest(FILE_PATH_LITERAL("aria-blockquote.html")); +} + IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaBusy) { RunAriaTest(FILE_PATH_LITERAL("aria-busy.html")); } @@ -420,6 +424,10 @@ RunAriaTest(FILE_PATH_LITERAL("aria-button.html")); } +IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaCaption) { + RunAriaTest(FILE_PATH_LITERAL("aria-caption.html")); +} + IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaCell) { RunAriaTest(FILE_PATH_LITERAL("aria-cell.html")); } @@ -733,6 +741,10 @@ RunAriaTest(FILE_PATH_LITERAL("aria-option.html")); } +IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaParagraph) { + RunAriaTest(FILE_PATH_LITERAL("aria-paragraph.html")); +} + IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaPosinset) { RunAriaTest(FILE_PATH_LITERAL("aria-posinset.html")); }
diff --git a/content/browser/appcache/appcache_disk_cache.cc b/content/browser/appcache/appcache_disk_cache.cc index 98c1a5a..c7018934 100644 --- a/content/browser/appcache/appcache_disk_cache.cc +++ b/content/browser/appcache/appcache_disk_cache.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/bind_helpers.h" +#include "base/callback_helpers.h" #include "base/files/file_path.h" #include "base/logging.h" #include "base/memory/ref_counted.h" @@ -16,6 +17,7 @@ #include "base/stl_util.h" #include "base/strings/string_number_conversions.h" #include "net/base/cache_type.h" +#include "net/base/completion_repeating_callback.h" #include "net/base/net_errors.h" namespace content { @@ -65,27 +67,28 @@ int64_t offset, net::IOBuffer* buf, int buf_len, - const net::CompletionCallback& callback) override { + net::CompletionOnceCallback callback) override { if (offset < 0 || offset > std::numeric_limits<int32_t>::max()) return net::ERR_INVALID_ARGUMENT; if (!disk_cache_entry_) return net::ERR_ABORTED; - return disk_cache_entry_->ReadData( - index, static_cast<int>(offset), buf, buf_len, callback); + return disk_cache_entry_->ReadData(index, static_cast<int>(offset), buf, + buf_len, std::move(callback)); } int Write(int index, int64_t offset, net::IOBuffer* buf, int buf_len, - const net::CompletionCallback& callback) override { + net::CompletionOnceCallback callback) override { if (offset < 0 || offset > std::numeric_limits<int32_t>::max()) return net::ERR_INVALID_ARGUMENT; if (!disk_cache_entry_) return net::ERR_ABORTED; const bool kTruncate = true; - return disk_cache_entry_->WriteData( - index, static_cast<int>(offset), buf, buf_len, callback, kTruncate); + return disk_cache_entry_->WriteData(index, static_cast<int>(offset), buf, + buf_len, std::move(callback), + kTruncate); } int64_t GetSize(int index) override { @@ -122,9 +125,9 @@ static int CreateEntry(const base::WeakPtr<AppCacheDiskCache>& owner, int64_t key, Entry** entry, - const net::CompletionCallback& callback) { + net::CompletionOnceCallback callback) { scoped_refptr<ActiveCall> active_call( - new ActiveCall(owner, entry, callback)); + new ActiveCall(owner, entry, std::move(callback))); int rv = owner->disk_cache()->CreateEntry( base::Int64ToString(key), net::HIGHEST, &active_call->entry_ptr_, base::BindOnce(&ActiveCall::OnAsyncCompletion, active_call)); @@ -134,9 +137,9 @@ static int OpenEntry(const base::WeakPtr<AppCacheDiskCache>& owner, int64_t key, Entry** entry, - const net::CompletionCallback& callback) { + net::CompletionOnceCallback callback) { scoped_refptr<ActiveCall> active_call( - new ActiveCall(owner, entry, callback)); + new ActiveCall(owner, entry, std::move(callback))); int rv = owner->disk_cache()->OpenEntry( base::Int64ToString(key), net::HIGHEST, &active_call->entry_ptr_, base::BindOnce(&ActiveCall::OnAsyncCompletion, active_call)); @@ -145,9 +148,9 @@ static int DoomEntry(const base::WeakPtr<AppCacheDiskCache>& owner, int64_t key, - const net::CompletionCallback& callback) { + net::CompletionOnceCallback callback) { scoped_refptr<ActiveCall> active_call( - new ActiveCall(owner, nullptr, callback)); + new ActiveCall(owner, nullptr, std::move(callback))); int rv = owner->disk_cache()->DoomEntry( base::Int64ToString(key), net::HIGHEST, base::BindOnce(&ActiveCall::OnAsyncCompletion, active_call)); @@ -159,10 +162,10 @@ ActiveCall(const base::WeakPtr<AppCacheDiskCache>& owner, Entry** entry, - const net::CompletionCallback& callback) + net::CompletionOnceCallback callback) : owner_(owner), entry_(entry), - callback_(callback), + callback_(std::move(callback)), entry_ptr_(nullptr) { DCHECK(owner_); } @@ -192,12 +195,12 @@ rv = net::ERR_ABORTED; } } - callback_.Run(rv); + std::move(callback_).Run(rv); } base::WeakPtr<AppCacheDiskCache> owner_; Entry** entry_; - net::CompletionCallback callback_; + net::CompletionOnceCallback callback_; disk_cache::Entry* entry_ptr_; }; @@ -219,15 +222,16 @@ int disk_cache_size, bool force, base::OnceClosure post_cleanup_callback, - const net::CompletionCallback& callback) { + net::CompletionOnceCallback callback) { return Init(net::APP_CACHE, disk_cache_directory, disk_cache_size, force, - std::move(post_cleanup_callback), callback); + std::move(post_cleanup_callback), std::move(callback)); } int AppCacheDiskCache::InitWithMemBackend( - int mem_cache_size, const net::CompletionCallback& callback) { + int mem_cache_size, + net::CompletionOnceCallback callback) { return Init(net::MEMORY_CACHE, base::FilePath(), mem_cache_size, false, - base::OnceClosure(), callback); + base::OnceClosure(), std::move(callback)); } void AppCacheDiskCache::Disable() { @@ -254,59 +258,63 @@ int AppCacheDiskCache::CreateEntry(int64_t key, Entry** entry, - const net::CompletionCallback& callback) { + net::CompletionOnceCallback callback) { DCHECK(entry); DCHECK(!callback.is_null()); if (is_disabled_) return net::ERR_ABORTED; if (is_initializing_or_waiting_to_initialize()) { - pending_calls_.push_back(PendingCall(CREATE, key, entry, callback)); + pending_calls_.push_back( + PendingCall(CREATE, key, entry, std::move(callback))); return net::ERR_IO_PENDING; } if (!disk_cache_) return net::ERR_FAILED; - return ActiveCall::CreateEntry( - weak_factory_.GetWeakPtr(), key, entry, callback); + return ActiveCall::CreateEntry(weak_factory_.GetWeakPtr(), key, entry, + std::move(callback)); } int AppCacheDiskCache::OpenEntry(int64_t key, Entry** entry, - const net::CompletionCallback& callback) { + net::CompletionOnceCallback callback) { DCHECK(entry); DCHECK(!callback.is_null()); if (is_disabled_) return net::ERR_ABORTED; if (is_initializing_or_waiting_to_initialize()) { - pending_calls_.push_back(PendingCall(OPEN, key, entry, callback)); + pending_calls_.push_back( + PendingCall(OPEN, key, entry, std::move(callback))); return net::ERR_IO_PENDING; } if (!disk_cache_) return net::ERR_FAILED; - return ActiveCall::OpenEntry( - weak_factory_.GetWeakPtr(), key, entry, callback); + return ActiveCall::OpenEntry(weak_factory_.GetWeakPtr(), key, entry, + std::move(callback)); } int AppCacheDiskCache::DoomEntry(int64_t key, - const net::CompletionCallback& callback) { + net::CompletionOnceCallback callback) { DCHECK(!callback.is_null()); if (is_disabled_) return net::ERR_ABORTED; if (is_initializing_or_waiting_to_initialize()) { - pending_calls_.push_back(PendingCall(DOOM, key, nullptr, callback)); + pending_calls_.push_back( + PendingCall(DOOM, key, nullptr, std::move(callback))); return net::ERR_IO_PENDING; } if (!disk_cache_) return net::ERR_FAILED; - return ActiveCall::DoomEntry(weak_factory_.GetWeakPtr(), key, callback); + return ActiveCall::DoomEntry(weak_factory_.GetWeakPtr(), key, + std::move(callback)); } AppCacheDiskCache::AppCacheDiskCache(bool use_simple_cache) @@ -323,10 +331,13 @@ PendingCallType call_type, int64_t key, Entry** entry, - const net::CompletionCallback& callback) - : call_type(call_type), key(key), entry(entry), callback(callback) {} + net::CompletionOnceCallback callback) + : call_type(call_type), + key(key), + entry(entry), + callback(std::move(callback)) {} -AppCacheDiskCache::PendingCall::PendingCall(const PendingCall& other) = default; +AppCacheDiskCache::PendingCall::PendingCall(PendingCall&& other) = default; AppCacheDiskCache::PendingCall::~PendingCall() {} @@ -335,7 +346,7 @@ int cache_size, bool force, base::OnceClosure post_cleanup_callback, - const net::CompletionCallback& callback) { + net::CompletionOnceCallback callback) { DCHECK(!is_initializing_or_waiting_to_initialize() && !disk_cache_.get()); is_disabled_ = false; create_backend_callback_ = new CreateBackendCallbackShim(this); @@ -350,7 +361,7 @@ base::BindOnce(&CreateBackendCallbackShim::Callback, create_backend_callback_)); if (rv == net::ERR_IO_PENDING) - init_callback_ = callback; + init_callback_ = std::move(callback); else OnCreateBackendComplete(rv); return rv; @@ -364,29 +375,31 @@ // Invoke our clients callback function. if (!init_callback_.is_null()) { - init_callback_.Run(rv); - init_callback_.Reset(); + std::move(init_callback_).Run(rv); } // Service pending calls that were queued up while we were initializing. - for (const auto& call : pending_calls_) { + for (auto& call : pending_calls_) { + // This is safe, because the callback will only be called once. + net::CompletionRepeatingCallback copyable_callback = + base::AdaptCallbackForRepeating(std::move(call.callback)); rv = net::ERR_FAILED; switch (call.call_type) { case CREATE: - rv = CreateEntry(call.key, call.entry, call.callback); + rv = CreateEntry(call.key, call.entry, copyable_callback); break; case OPEN: - rv = OpenEntry(call.key, call.entry, call.callback); + rv = OpenEntry(call.key, call.entry, copyable_callback); break; case DOOM: - rv = DoomEntry(call.key, call.callback); + rv = DoomEntry(call.key, copyable_callback); break; default: NOTREACHED(); break; } if (rv != net::ERR_IO_PENDING) - call.callback.Run(rv); + copyable_callback.Run(rv); } pending_calls_.clear(); }
diff --git a/content/browser/appcache/appcache_disk_cache.h b/content/browser/appcache/appcache_disk_cache.h index 5eba6053..73bccf9d 100644 --- a/content/browser/appcache/appcache_disk_cache.h +++ b/content/browser/appcache/appcache_disk_cache.h
@@ -15,6 +15,7 @@ #include "base/memory/ref_counted.h" #include "content/browser/appcache/appcache_response.h" #include "content/common/content_export.h" +#include "net/base/completion_once_callback.h" #include "net/disk_cache/disk_cache.h" namespace content { @@ -32,23 +33,23 @@ int disk_cache_size, bool force, base::OnceClosure post_cleanup_callback, - const net::CompletionCallback& callback); + net::CompletionOnceCallback callback); // Initializes the object to use memory only storage. // This is used for Chrome's incognito browsing. int InitWithMemBackend(int disk_cache_size, - const net::CompletionCallback& callback); + net::CompletionOnceCallback callback); void Disable(); bool is_disabled() const { return is_disabled_; } int CreateEntry(int64_t key, Entry** entry, - const net::CompletionCallback& callback) override; + net::CompletionOnceCallback callback) override; int OpenEntry(int64_t key, Entry** entry, - const net::CompletionCallback& callback) override; - int DoomEntry(int64_t key, const net::CompletionCallback& callback) override; + net::CompletionOnceCallback callback) override; + int DoomEntry(int64_t key, net::CompletionOnceCallback callback) override; void set_is_waiting_to_initialize(bool is_waiting_to_initialize) { is_waiting_to_initialize_ = is_waiting_to_initialize; @@ -73,21 +74,19 @@ DOOM }; struct PendingCall { - PendingCallType call_type; - int64_t key; - Entry** entry; - net::CompletionCallback callback; - PendingCall(); - PendingCall(PendingCallType call_type, int64_t key, Entry** entry, - const net::CompletionCallback& callback); - - PendingCall(const PendingCall& other); + net::CompletionOnceCallback callback); + PendingCall(PendingCall&& other); ~PendingCall(); + + PendingCallType call_type; + int64_t key; + Entry** entry; + net::CompletionOnceCallback callback; }; using PendingCalls = std::vector<PendingCall>; @@ -104,7 +103,7 @@ int cache_size, bool force, base::OnceClosure post_cleanup_callback, - const net::CompletionCallback& callback); + net::CompletionOnceCallback callback); void OnCreateBackendComplete(int rv); void AddOpenEntry(EntryImpl* entry) { open_entries_.insert(entry); } void RemoveOpenEntry(EntryImpl* entry) { open_entries_.erase(entry); } @@ -112,7 +111,7 @@ bool use_simple_cache_; bool is_disabled_; bool is_waiting_to_initialize_; - net::CompletionCallback init_callback_; + net::CompletionOnceCallback init_callback_; scoped_refptr<CreateBackendCallbackShim> create_backend_callback_; PendingCalls pending_calls_; OpenEntries open_entries_;
diff --git a/content/browser/appcache/appcache_disk_cache_unittest.cc b/content/browser/appcache/appcache_disk_cache_unittest.cc index 321ad52..f6e4cf4 100644 --- a/content/browser/appcache/appcache_disk_cache_unittest.cc +++ b/content/browser/appcache/appcache_disk_cache_unittest.cc
@@ -10,6 +10,7 @@ #include "base/single_thread_task_runner.h" #include "base/test/scoped_task_environment.h" #include "base/threading/thread_task_runner_handle.h" +#include "net/base/completion_repeating_callback.h" #include "net/base/io_buffer.h" #include "net/base/net_errors.h" #include "net/base/test_completion_callback.h" @@ -24,9 +25,8 @@ void SetUp() override { ASSERT_TRUE(directory_.CreateUniqueTempDir()); - completion_callback_ = base::Bind( - &AppCacheDiskCacheTest::OnComplete, - base::Unretained(this)); + completion_callback_ = base::BindRepeating( + &AppCacheDiskCacheTest::OnComplete, base::Unretained(this)); } void TearDown() override { scoped_task_environment_.RunUntilIdle(); } @@ -42,7 +42,7 @@ base::test::ScopedTaskEnvironment scoped_task_environment_; base::ScopedTempDir directory_; - net::CompletionCallback completion_callback_; + net::CompletionRepeatingCallback completion_callback_; std::vector<int> completion_results_; static const int k10MBytes = 10 * 1024 * 1024;
diff --git a/content/browser/appcache/appcache_quota_client.cc b/content/browser/appcache/appcache_quota_client.cc index 378bb0e..c9266e4 100644 --- a/content/browser/appcache/appcache_quota_client.cc +++ b/content/browser/appcache/appcache_quota_client.cc
@@ -7,6 +7,7 @@ #include <algorithm> #include <map> #include <set> +#include <utility> #include "base/bind.h" #include "base/bind_helpers.h" @@ -207,15 +208,16 @@ return service_->storage()->usage_map(); } -net::CancelableCompletionCallback* +net::CancelableCompletionRepeatingCallback* AppCacheQuotaClient::GetServiceDeleteCallback() { - // Lazily created due to CancelableCompletionCallback's threading - // restrictions, there is no way to detach from the thread created on. + // Lazily created due to base::CancelableCallback's threading restrictions, + // there is no way to detach from the thread created on. if (!service_delete_callback_) { - service_delete_callback_.reset( - new net::CancelableCompletionCallback( - base::Bind(&AppCacheQuotaClient::DidDeleteAppCachesForOrigin, - base::Unretained(this)))); + service_delete_callback_ = + std::make_unique<net::CancelableCompletionRepeatingCallback>( + base::BindRepeating( + &AppCacheQuotaClient::DidDeleteAppCachesForOrigin, + base::Unretained(this))); } return service_delete_callback_.get(); }
diff --git a/content/browser/appcache/appcache_quota_client.h b/content/browser/appcache/appcache_quota_client.h index d40424d..a5dc1e6 100644 --- a/content/browser/appcache/appcache_quota_client.h +++ b/content/browser/appcache/appcache_quota_client.h
@@ -14,7 +14,7 @@ #include "base/memory/ref_counted.h" #include "content/browser/appcache/appcache_storage.h" #include "content/common/content_export.h" -#include "net/base/completion_callback.h" +#include "net/base/completion_repeating_callback.h" #include "storage/browser/quota/quota_client.h" #include "storage/browser/quota/quota_task.h" #include "third_party/blink/public/mojom/quota/quota_types.mojom.h" @@ -67,7 +67,7 @@ void ProcessPendingRequests(); void DeletePendingRequests(); const AppCacheStorage::UsageMap* GetUsageMap(); - net::CancelableCompletionCallback* GetServiceDeleteCallback(); + net::CancelableCompletionRepeatingCallback* GetServiceDeleteCallback(); // For use by appcache internals during initialization and shutdown. CONTENT_EXPORT void NotifyAppCacheReady(); @@ -81,7 +81,8 @@ // And once it's ready, we can only handle one delete request at a time, // so we queue up additional requests while one is in already in progress. DeletionCallback current_delete_request_callback_; - std::unique_ptr<net::CancelableCompletionCallback> service_delete_callback_; + std::unique_ptr<net::CancelableCompletionRepeatingCallback> + service_delete_callback_; AppCacheServiceImpl* service_; bool appcache_is_ready_;
diff --git a/content/browser/appcache/appcache_request_handler.cc b/content/browser/appcache/appcache_request_handler.cc index 65cc571..1c17bc4 100644 --- a/content/browser/appcache/appcache_request_handler.cc +++ b/content/browser/appcache/appcache_request_handler.cc
@@ -403,8 +403,8 @@ } if (should_reset_appcache_ && !manifest_url.is_empty()) { - host_->service()->DeleteAppCacheGroup( - manifest_url, net::CompletionCallback()); + host_->service()->DeleteAppCacheGroup(manifest_url, + net::CompletionOnceCallback()); DeliverNetworkResponse(); return; }
diff --git a/content/browser/appcache/appcache_response.cc b/content/browser/appcache/appcache_response.cc index dd47432b..36ab2e6 100644 --- a/content/browser/appcache/appcache_response.cc +++ b/content/browser/appcache/appcache_response.cc
@@ -6,6 +6,8 @@ #include <stddef.h> +#include <utility> + #include "base/bind.h" #include "base/bind_helpers.h" #include "base/compiler_specific.h" @@ -17,7 +19,7 @@ #include "base/strings/string_util.h" #include "base/threading/thread_task_runner_handle.h" #include "content/browser/appcache/appcache_storage.h" -#include "net/base/completion_callback.h" +#include "net/base/completion_once_callback.h" #include "net/base/io_buffer.h" #include "net/base/net_errors.h" #include "storage/common/storage_histograms.h" @@ -159,28 +161,34 @@ rv = net::ERR_FAILED; } else { entry_ptr = new AppCacheDiskCacheInterface::Entry*; - open_callback_ = - base::Bind(&AppCacheResponseIO::OpenEntryCallback, - weak_factory_.GetWeakPtr(), base::Owned(entry_ptr)); - rv = disk_cache_->OpenEntry(response_id_, entry_ptr, open_callback_); + rv = disk_cache_->OpenEntry( + response_id_, entry_ptr, + base::BindOnce(&AppCacheResponseIO::OpenEntryCallback, + weak_factory_.GetWeakPtr(), entry_ptr)); } if (rv != net::ERR_IO_PENDING) - OpenEntryCallback(entry_ptr, rv); + OpenEntryCallback(weak_factory_.GetWeakPtr(), entry_ptr, rv); } +// static void AppCacheResponseIO::OpenEntryCallback( - AppCacheDiskCacheInterface::Entry** entry, int rv) { - DCHECK(info_buffer_.get() || buffer_.get()); - - if (!open_callback_.is_null()) { - if (rv == net::OK) { - DCHECK(entry); - entry_ = *entry; - } - open_callback_.Reset(); + base::WeakPtr<AppCacheResponseIO> response, + AppCacheDiskCacheInterface::Entry** entry, + int rv) { + if (!response) { + delete entry; + return; } - OnOpenEntryComplete(); + + DCHECK(response->info_buffer_.get() || response->buffer_.get()); + + if (!response->entry_ && rv == net::OK) { + DCHECK(entry); + response->entry_ = *entry; + } + delete entry; + response->OnOpenEntryComplete(); } @@ -408,55 +416,73 @@ } else { creation_phase_ = INITIAL_ATTEMPT; entry_ptr = new AppCacheDiskCacheInterface::Entry*; - create_callback_ = - base::Bind(&AppCacheResponseWriter::OnCreateEntryComplete, - weak_factory_.GetWeakPtr(), base::Owned(entry_ptr)); - rv = disk_cache_->CreateEntry(response_id_, entry_ptr, create_callback_); + rv = disk_cache_->CreateEntry( + response_id_, entry_ptr, + base::BindOnce(&AppCacheResponseWriter::OnCreateEntryComplete, + weak_factory_.GetWeakPtr(), entry_ptr)); } if (rv != net::ERR_IO_PENDING) - OnCreateEntryComplete(entry_ptr, rv); + OnCreateEntryComplete(weak_factory_.GetWeakPtr(), entry_ptr, rv); } +// static void AppCacheResponseWriter::OnCreateEntryComplete( - AppCacheDiskCacheInterface::Entry** entry, int rv) { - DCHECK(info_buffer_.get() || buffer_.get()); - - if (!disk_cache_) { - ScheduleIOCompletionCallback(net::ERR_FAILED); + base::WeakPtr<AppCacheResponseWriter> writer, + AppCacheDiskCacheInterface::Entry** entry, + int rv) { + if (!writer) { + if (entry) { + delete entry; + } return; - } else if (creation_phase_ == INITIAL_ATTEMPT) { + } + + DCHECK(writer->info_buffer_.get() || writer->buffer_.get()); + + if (!writer->disk_cache_) { + if (entry) { + delete entry; + } + writer->ScheduleIOCompletionCallback(net::ERR_FAILED); + return; + } else if (writer->creation_phase_ == INITIAL_ATTEMPT) { if (rv != net::OK) { // We may try to overwrite existing entries. - creation_phase_ = DOOM_EXISTING; - rv = disk_cache_->DoomEntry(response_id_, create_callback_); + delete entry; + writer->creation_phase_ = DOOM_EXISTING; + rv = writer->disk_cache_->DoomEntry( + writer->response_id_, + base::BindOnce(&AppCacheResponseWriter::OnCreateEntryComplete, writer, + nullptr)); if (rv != net::ERR_IO_PENDING) - OnCreateEntryComplete(nullptr, rv); + OnCreateEntryComplete(writer, nullptr, rv); return; } - } else if (creation_phase_ == DOOM_EXISTING) { - creation_phase_ = SECOND_ATTEMPT; + } else if (writer->creation_phase_ == DOOM_EXISTING) { + DCHECK_EQ(nullptr, entry); + writer->creation_phase_ = SECOND_ATTEMPT; AppCacheDiskCacheInterface::Entry** entry_ptr = new AppCacheDiskCacheInterface::Entry*; - create_callback_ = - base::Bind(&AppCacheResponseWriter::OnCreateEntryComplete, - weak_factory_.GetWeakPtr(), base::Owned(entry_ptr)); - rv = disk_cache_->CreateEntry(response_id_, entry_ptr, create_callback_); + rv = writer->disk_cache_->CreateEntry( + writer->response_id_, entry_ptr, + base::BindOnce(&AppCacheResponseWriter::OnCreateEntryComplete, writer, + entry_ptr)); if (rv != net::ERR_IO_PENDING) - OnCreateEntryComplete(entry_ptr, rv); + OnCreateEntryComplete(writer, entry_ptr, rv); return; } - if (!create_callback_.is_null()) { - if (rv == net::OK) - entry_ = *entry; - - create_callback_.Reset(); + if (!writer->entry_ && rv == net::OK) { + DCHECK(entry); + writer->entry_ = *entry; } - if (info_buffer_.get()) - ContinueWriteInfo(); + delete entry; + + if (writer->info_buffer_.get()) + writer->ContinueWriteInfo(); else - ContinueWriteData(); + writer->ContinueWriteData(); } // AppCacheResponseMetadataWriter ---------------------------------------------- @@ -474,7 +500,7 @@ void AppCacheResponseMetadataWriter::WriteMetadata( net::IOBuffer* buf, int buf_len, - const net::CompletionCallback& callback) { + net::CompletionOnceCallback callback) { DCHECK(!callback.is_null()); DCHECK(!IsIOPending()); DCHECK(buf); @@ -483,7 +509,7 @@ buffer_ = buf; write_amount_ = buf_len; - callback_ = callback; // cleared on completion + callback_ = std::move(callback); // cleared on completion OpenEntryIfNeeded(); }
diff --git a/content/browser/appcache/appcache_response.h b/content/browser/appcache/appcache_response.h index fb85715..c5edbd2 100644 --- a/content/browser/appcache/appcache_response.h +++ b/content/browser/appcache/appcache_response.h
@@ -14,7 +14,7 @@ #include "base/memory/weak_ptr.h" #include "content/common/appcache_interfaces.h" #include "content/common/content_export.h" -#include "net/base/completion_callback.h" +#include "net/base/completion_once_callback.h" #include "net/http/http_response_info.h" #include "url/gurl.h" @@ -84,12 +84,12 @@ int64_t offset, net::IOBuffer* buf, int buf_len, - const net::CompletionCallback& callback) = 0; + net::CompletionOnceCallback callback) = 0; virtual int Write(int index, int64_t offset, net::IOBuffer* buf, int buf_len, - const net::CompletionCallback& callback) = 0; + net::CompletionOnceCallback callback) = 0; virtual int64_t GetSize(int index) = 0; virtual void Close() = 0; protected: @@ -101,12 +101,11 @@ virtual int CreateEntry(int64_t key, Entry** entry, - const net::CompletionCallback& callback) = 0; + net::CompletionOnceCallback callback) = 0; virtual int OpenEntry(int64_t key, Entry** entry, - const net::CompletionCallback& callback) = 0; - virtual int DoomEntry(int64_t key, - const net::CompletionCallback& callback) = 0; + net::CompletionOnceCallback callback) = 0; + virtual int DoomEntry(int64_t key, net::CompletionOnceCallback callback) = 0; const char* uma_name() const { return uma_name_; } base::WeakPtr<AppCacheDiskCacheInterface> GetWeakPtr(); @@ -146,12 +145,14 @@ scoped_refptr<net::IOBuffer> buffer_; int buffer_len_; OnceCompletionCallback callback_; - net::CompletionCallback open_callback_; + net::CompletionOnceCallback open_callback_; base::WeakPtrFactory<AppCacheResponseIO> weak_factory_; private: void OnRawIOComplete(int result); - void OpenEntryCallback(AppCacheDiskCacheInterface::Entry** entry, int rv); + static void OpenEntryCallback(base::WeakPtr<AppCacheResponseIO> response, + AppCacheDiskCacheInterface::Entry** entry, + int rv); }; // Reads existing response data from storage. If the object is deleted @@ -277,13 +278,15 @@ void ContinueWriteInfo(); void ContinueWriteData(); void CreateEntryIfNeededAndContinue(); - void OnCreateEntryComplete(AppCacheDiskCacheInterface::Entry** entry, int rv); + static void OnCreateEntryComplete( + base::WeakPtr<AppCacheResponseWriter> writer, + AppCacheDiskCacheInterface::Entry** entry, + int rv); int info_size_; int write_position_; int write_amount_; CreationPhase creation_phase_; - net::CompletionCallback create_callback_; base::WeakPtrFactory<AppCacheResponseWriter> weak_factory_; }; @@ -307,7 +310,7 @@ // progress. void WriteMetadata(net::IOBuffer* buf, int buf_len, - const net::CompletionCallback& callback); + net::CompletionOnceCallback callback); // Returns true if there is a write pending. bool IsWritePending() { return IsIOPending(); }
diff --git a/content/browser/appcache/appcache_service_impl.cc b/content/browser/appcache/appcache_service_impl.cc index daf00d06..4dca31e 100644 --- a/content/browser/appcache/appcache_service_impl.cc +++ b/content/browser/appcache/appcache_service_impl.cc
@@ -25,7 +25,6 @@ #include "content/browser/appcache/appcache_response.h" #include "content/browser/appcache/appcache_service_impl.h" #include "content/browser/appcache/appcache_storage_impl.h" -#include "net/base/completion_callback.h" #include "net/base/io_buffer.h" #include "storage/browser/quota/special_storage_policy.h" @@ -90,11 +89,11 @@ class AppCacheServiceImpl::DeleteHelper : public AsyncHelper { public: - DeleteHelper( - AppCacheServiceImpl* service, const GURL& manifest_url, - const net::CompletionCallback& callback) - : AsyncHelper(service, callback), manifest_url_(manifest_url) { - } + DeleteHelper(AppCacheServiceImpl* service, + const GURL& manifest_url, + net::CompletionOnceCallback callback) + : AsyncHelper(service, std::move(callback)), + manifest_url_(manifest_url) {} void Start() override { service_->storage()->LoadOrCreateGroup(manifest_url_, this); @@ -137,8 +136,8 @@ public: DeleteOriginHelper(AppCacheServiceImpl* service, const url::Origin& origin, - const net::CompletionCallback& callback) - : AsyncHelper(service, callback), + net::CompletionOnceCallback callback) + : AsyncHelper(service, std::move(callback)), origin_(origin), num_caches_to_delete_(0), successes_(0), @@ -261,7 +260,7 @@ const GURL& manifest_url, int64_t cache_id, int64_t response_id) - : AsyncHelper(service, net::CompletionCallback()), + : AsyncHelper(service, net::CompletionOnceCallback()), manifest_url_(manifest_url), cache_id_(cache_id), response_id_(response_id), @@ -320,7 +319,8 @@ if (cache_->cache_id() == cache_id_) { AppCacheHistograms::CountCheckResponseResult( AppCacheHistograms::ENTRY_NOT_FOUND); - service_->DeleteAppCacheGroup(manifest_url_, net::CompletionCallback()); + service_->DeleteAppCacheGroup(manifest_url_, + net::CompletionOnceCallback()); } else { AppCacheHistograms::CountCheckResponseResult( AppCacheHistograms::RESPONSE_OUT_OF_DATE); @@ -344,7 +344,7 @@ if (result < 0) { AppCacheHistograms::CountCheckResponseResult( AppCacheHistograms::READ_HEADERS_ERROR); - service_->DeleteAppCacheGroup(manifest_url_, net::CompletionCallback()); + service_->DeleteAppCacheGroup(manifest_url_, net::CompletionOnceCallback()); delete this; return; } @@ -380,7 +380,7 @@ AppCacheHistograms::CountCheckResponseResult(check_result); if (check_result != AppCacheHistograms::RESPONSE_OK) - service_->DeleteAppCacheGroup(manifest_url_, net::CompletionCallback()); + service_->DeleteAppCacheGroup(manifest_url_, net::CompletionOnceCallback()); delete this; } @@ -484,15 +484,17 @@ void AppCacheServiceImpl::DeleteAppCacheGroup( const GURL& manifest_url, - const net::CompletionCallback& callback) { - DeleteHelper* helper = new DeleteHelper(this, manifest_url, callback); + net::CompletionOnceCallback callback) { + DeleteHelper* helper = + new DeleteHelper(this, manifest_url, std::move(callback)); helper->Start(); } void AppCacheServiceImpl::DeleteAppCachesForOrigin( const url::Origin& origin, - const net::CompletionCallback& callback) { - DeleteOriginHelper* helper = new DeleteOriginHelper(this, origin, callback); + net::CompletionOnceCallback callback) { + DeleteOriginHelper* helper = + new DeleteOriginHelper(this, origin, std::move(callback)); helper->Start(); }
diff --git a/content/browser/appcache/appcache_service_impl.h b/content/browser/appcache/appcache_service_impl.h index bf6fabe..9ec9ad6 100644 --- a/content/browser/appcache/appcache_service_impl.h +++ b/content/browser/appcache/appcache_service_impl.h
@@ -21,7 +21,7 @@ #include "content/common/appcache_interfaces.h" #include "content/common/content_export.h" #include "content/public/browser/appcache_service.h" -#include "net/base/completion_callback.h" +#include "net/base/completion_once_callback.h" #include "net/base/net_errors.h" #include "storage/browser/quota/quota_manager_proxy.h" @@ -105,14 +105,13 @@ void GetAllAppCacheInfo(AppCacheInfoCollection* collection, OnceCompletionCallback callback) override; void DeleteAppCacheGroup(const GURL& manifest_url, - const net::CompletionCallback& callback) override; + net::CompletionOnceCallback callback) override; // Deletes all appcaches for the origin, 'callback' is invoked upon // completion. This method always completes asynchronously. // (virtual for unit testing) - virtual void DeleteAppCachesForOrigin( - const url::Origin& origin, - const net::CompletionCallback& callback); + virtual void DeleteAppCachesForOrigin(const url::Origin& origin, + net::CompletionOnceCallback callback); // Checks the integrity of 'response_id' by reading the headers and data. // If it cannot be read, the cache group for 'manifest_url' is deleted.
diff --git a/content/browser/appcache/appcache_service_unittest.cc b/content/browser/appcache/appcache_service_unittest.cc index 6d0d46cb..50a7421 100644 --- a/content/browser/appcache/appcache_service_unittest.cc +++ b/content/browser/appcache/appcache_service_unittest.cc
@@ -18,7 +18,7 @@ #include "content/browser/appcache/appcache_response.h" #include "content/browser/appcache/appcache_service_impl.h" #include "content/browser/appcache/mock_appcache_storage.h" -#include "net/base/completion_callback.h" +#include "net/base/completion_once_callback.h" #include "net/base/io_buffer.h" #include "net/http/http_response_headers.h" #include "testing/gtest/include/gtest/gtest.h" @@ -101,10 +101,7 @@ kManifestUrl(kOriginURL.Resolve("manifest")), service_(new AppCacheServiceImpl(nullptr)), delete_result_(net::OK), - delete_completion_count_(0), - deletion_callback_( - base::Bind(&AppCacheServiceImplTest::OnDeleteAppCachesComplete, - base::Unretained(this))) { + delete_completion_count_(0) { // Setup to use mock storage. service_->storage_.reset(new MockAppCacheStorage(service_.get())); } @@ -183,6 +180,11 @@ return pickle->size(); } + net::CompletionOnceCallback deletion_callback() { + return base::BindOnce(&AppCacheServiceImplTest::OnDeleteAppCachesComplete, + base::Unretained(this)); + } + const GURL kOriginURL; const url::Origin kOrigin; const GURL kManifestUrl; @@ -191,12 +193,11 @@ std::unique_ptr<AppCacheServiceImpl> service_; int delete_result_; int delete_completion_count_; - net::CompletionCallback deletion_callback_; }; TEST_F(AppCacheServiceImplTest, DeleteAppCachesForOrigin) { // Without giving mock storage simiulated info, should fail. - service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); + service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback()); EXPECT_EQ(0, delete_completion_count_); base::RunLoop().RunUntilIdle(); EXPECT_EQ(1, delete_completion_count_); @@ -205,7 +206,7 @@ // Should succeed given an empty info collection. mock_storage()->SimulateGetAllInfo(new content::AppCacheInfoCollection); - service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); + service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback()); EXPECT_EQ(0, delete_completion_count_); base::RunLoop().RunUntilIdle(); EXPECT_EQ(1, delete_completion_count_); @@ -227,7 +228,7 @@ info_vector.push_back(mock_manifest_3); info->infos_by_origin[kOrigin] = info_vector; mock_storage()->SimulateGetAllInfo(info.get()); - service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); + service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback()); EXPECT_EQ(0, delete_completion_count_); base::RunLoop().RunUntilIdle(); EXPECT_EQ(1, delete_completion_count_); @@ -238,7 +239,7 @@ info->infos_by_origin[kOrigin] = info_vector; mock_storage()->SimulateGetAllInfo(info.get()); mock_storage()->SimulateMakeGroupObsoleteFailure(); - service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); + service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback()); EXPECT_EQ(0, delete_completion_count_); base::RunLoop().RunUntilIdle(); EXPECT_EQ(1, delete_completion_count_); @@ -247,7 +248,7 @@ // Should complete with abort error if the service is deleted // prior to a delete completion. - service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); + service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback()); EXPECT_EQ(0, delete_completion_count_); service_.reset(); // kill it EXPECT_EQ(1, delete_completion_count_);
diff --git a/content/browser/appcache/appcache_storage.h b/content/browser/appcache/appcache_storage.h index 2bf62b2..5e49a276 100644 --- a/content/browser/appcache/appcache_storage.h +++ b/content/browser/appcache/appcache_storage.h
@@ -18,7 +18,6 @@ #include "base/memory/weak_ptr.h" #include "content/browser/appcache/appcache_working_set.h" #include "content/common/content_export.h" -#include "net/base/completion_callback.h" #include "url/origin.h" class GURL;
diff --git a/content/browser/appcache/appcache_update_job.cc b/content/browser/appcache/appcache_update_job.cc index a6d6416..922f664 100644 --- a/content/browser/appcache/appcache_update_job.cc +++ b/content/browser/appcache/appcache_update_job.cc
@@ -893,7 +893,8 @@ GURL(), 0, false /*is_cross_origin*/), DB_ERROR, GURL()); AppCacheHistograms::AddMissingManifestEntrySample(); - service->DeleteAppCacheGroup(manifest_url_, net::CompletionCallback()); + service->DeleteAppCacheGroup(manifest_url_, + net::CompletionOnceCallback()); } return; }
diff --git a/content/browser/appcache/appcache_update_job.h b/content/browser/appcache/appcache_update_job.h index 262da88..79eabef4 100644 --- a/content/browser/appcache/appcache_update_job.h +++ b/content/browser/appcache/appcache_update_job.h
@@ -26,7 +26,6 @@ #include "content/browser/appcache/appcache_storage.h" #include "content/common/appcache_interfaces.h" #include "content/common/content_export.h" -#include "net/base/completion_callback.h" #include "net/http/http_response_headers.h" #include "net/url_request/url_request.h" #include "url/gurl.h"
diff --git a/content/browser/appcache/mock_appcache_service.cc b/content/browser/appcache/mock_appcache_service.cc index da773f18..6505950 100644 --- a/content/browser/appcache/mock_appcache_service.cc +++ b/content/browser/appcache/mock_appcache_service.cc
@@ -4,6 +4,8 @@ #include "content/browser/appcache/mock_appcache_service.h" +#include <utility> + #include "base/bind.h" #include "base/location.h" #include "base/single_thread_task_runner.h" @@ -11,17 +13,16 @@ namespace content { -static void DeferredCallCallback( - const net::CompletionCallback& callback, int rv) { - callback.Run(rv); +static void DeferredCallCallback(net::CompletionOnceCallback callback, int rv) { + std::move(callback).Run(rv); } void MockAppCacheService::DeleteAppCachesForOrigin( const url::Origin& origin, - const net::CompletionCallback& callback) { + net::CompletionOnceCallback callback) { ++delete_called_count_; base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&DeferredCallCallback, callback, + FROM_HERE, base::BindOnce(&DeferredCallCallback, std::move(callback), mock_delete_appcaches_for_origin_result_)); }
diff --git a/content/browser/appcache/mock_appcache_service.h b/content/browser/appcache/mock_appcache_service.h index 51ac9c76..322d12f 100644 --- a/content/browser/appcache/mock_appcache_service.h +++ b/content/browser/appcache/mock_appcache_service.h
@@ -24,9 +24,8 @@ // Just returns a canned completion code without actually // removing groups and caches in our mock storage instance. - void DeleteAppCachesForOrigin( - const url::Origin& origin, - const net::CompletionCallback& callback) override; + void DeleteAppCachesForOrigin(const url::Origin& origin, + net::CompletionOnceCallback callback) override; void set_quota_manager_proxy(storage::QuotaManagerProxy* proxy) { quota_manager_proxy_ = proxy;
diff --git a/content/browser/appcache/mock_appcache_storage.h b/content/browser/appcache/mock_appcache_storage.h index 09a1fbd..4823ff05 100644 --- a/content/browser/appcache/mock_appcache_storage.h +++ b/content/browser/appcache/mock_appcache_storage.h
@@ -144,7 +144,8 @@ if (!disk_cache_) { const int kMaxCacheSize = 10 * 1024 * 1024; disk_cache_.reset(new AppCacheDiskCache); - disk_cache_->InitWithMemBackend(kMaxCacheSize, net::CompletionCallback()); + disk_cache_->InitWithMemBackend(kMaxCacheSize, + net::CompletionOnceCallback()); } return disk_cache_.get(); }
diff --git a/content/browser/background_fetch/background_fetch_context.cc b/content/browser/background_fetch/background_fetch_context.cc index 9fdaeda..55bbbde 100644 --- a/content/browser/background_fetch/background_fetch_context.cc +++ b/content/browser/background_fetch/background_fetch_context.cc
@@ -220,11 +220,6 @@ service_worker_registration_id) { DCHECK(saved_iter->second); - // TODO(crbug.com/850512): Temporary work-around for a crash where fetches - // for a given Service Worker registration are abandoned twice. - if (saved_iter->second->aborted()) - continue; - saved_iter->second->Abort( BackgroundFetchReasonToAbort::SERVICE_WORKER_UNAVAILABLE); } @@ -305,8 +300,8 @@ DCHECK_CURRENTLY_ON(BrowserThread::IO); auto controller = std::make_unique<BackgroundFetchJobController>( - &delegate_proxy_, registration_id, options, icon, registration.downloaded, - scheduler_.get(), + &delegate_proxy_, scheduler_.get(), registration_id, options, icon, + registration.downloaded, // Safe because JobControllers are destroyed before RegistrationNotifier. base::BindRepeating(&BackgroundFetchRegistrationNotifier::Notify, base::Unretained(registration_notifier_.get())), @@ -443,7 +438,6 @@ // after the waitUntil promise of the backgroundfetched/backgroundfetchfail // event has been resolved. Store the information we want to persist after // the controller is gone, in completed_fetches_. - scheduler_->RemoveJobController(registration_id); if (preserve_info_to_dispatch_click_event) { completed_fetches_[registration_id.unique_id()] = {registration_id, background_fetch_state};
diff --git a/content/browser/background_fetch/background_fetch_context.h b/content/browser/background_fetch/background_fetch_context.h index 50de614..146b027 100644 --- a/content/browser/background_fetch/background_fetch_context.h +++ b/content/browser/background_fetch/background_fetch_context.h
@@ -249,7 +249,7 @@ std::unique_ptr<BackgroundFetchScheduler> scheduler_; // Map from background fetch registration |unique_id|s to active job - // controllers. Must be destroyed before |data_manager_| and + // controllers. Must be destroyed before |data_manager_|, |scheduler_| and // |registration_notifier_|. std::map<std::string, std::unique_ptr<BackgroundFetchJobController>> job_controllers_;
diff --git a/content/browser/background_fetch/background_fetch_data_manager.cc b/content/browser/background_fetch/background_fetch_data_manager.cc index 3157dc5..8597fc7 100644 --- a/content/browser/background_fetch/background_fetch_data_manager.cc +++ b/content/browser/background_fetch/background_fetch_data_manager.cc
@@ -159,12 +159,12 @@ void BackgroundFetchDataManager::MarkRequestAsComplete( const BackgroundFetchRegistrationId& registration_id, - BackgroundFetchRequestInfo* request, - BackgroundFetchScheduler::MarkedCompleteCallback callback) { + scoped_refptr<BackgroundFetchRequestInfo> request_info, + base::OnceClosure closure) { DCHECK_CURRENTLY_ON(BrowserThread::IO); AddDatabaseTask(std::make_unique<background_fetch::MarkRequestCompleteTask>( - this, registration_id, request, std::move(callback))); + this, registration_id, std::move(request_info), std::move(closure))); } void BackgroundFetchDataManager::GetSettledFetchesForRegistration(
diff --git a/content/browser/background_fetch/background_fetch_data_manager.h b/content/browser/background_fetch/background_fetch_data_manager.h index cdc4d36..a250971 100644 --- a/content/browser/background_fetch/background_fetch_data_manager.h +++ b/content/browser/background_fetch/background_fetch_data_manager.h
@@ -160,11 +160,10 @@ // BackgroundFetchScheduler::RequestProvider implementation: void PopNextRequest(const BackgroundFetchRegistrationId& registration_id, NextRequestCallback callback) override; - void MarkRequestAsComplete( const BackgroundFetchRegistrationId& registration_id, - BackgroundFetchRequestInfo* request, - BackgroundFetchScheduler::MarkedCompleteCallback callback) override; + scoped_refptr<BackgroundFetchRequestInfo> request_info, + base::OnceClosure closure) override; void ShutdownOnIO();
diff --git a/content/browser/background_fetch/background_fetch_data_manager_unittest.cc b/content/browser/background_fetch/background_fetch_data_manager_unittest.cc index f4e4c45..08db0e6 100644 --- a/content/browser/background_fetch/background_fetch_data_manager_unittest.cc +++ b/content/browser/background_fetch/background_fetch_data_manager_unittest.cc
@@ -16,6 +16,7 @@ #include "base/guid.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" +#include "base/test/metrics/histogram_tester.h" #include "content/browser/background_fetch/background_fetch.pb.h" #include "content/browser/background_fetch/background_fetch_data_manager_observer.h" #include "content/browser/background_fetch/background_fetch_request_info.h" @@ -1346,9 +1347,9 @@ // Sanity check that the responses are written to / read from the cache. EXPECT_TRUE(MatchCache(requests[0])); EXPECT_TRUE(MatchCache(requests[1])); - EXPECT_EQ(settled_fetches[0].response.cache_storage_cache_name, + EXPECT_EQ(settled_fetches[0].response->cache_storage_cache_name, kExampleUniqueId); - EXPECT_EQ(settled_fetches[1].response.cache_storage_cache_name, + EXPECT_EQ(settled_fetches[1].response->cache_storage_cache_name, kExampleUniqueId); RestartDataManagerFromPersistentStorage(); @@ -1443,7 +1444,7 @@ &succeeded, &settled_fetches); ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE); EXPECT_EQ(settled_fetches.size(), 1u); - EXPECT_EQ(settled_fetches[0].response.response_type, + EXPECT_EQ(settled_fetches[0].response->response_type, network::mojom::FetchResponseType::kError); } @@ -1658,4 +1659,37 @@ EXPECT_EQ(num_parallel_creates - 1, duplicated_developer_id_count); } +TEST_F(BackgroundFetchDataManagerTest, StorageErrorsReported) { + int64_t sw_id = RegisterServiceWorker(); + ASSERT_NE(blink::mojom::kInvalidServiceWorkerRegistrationId, sw_id); + + auto requests = CreateValidRequests(origin(), 3u /* num_requests */); + BackgroundFetchOptions options; + blink::mojom::BackgroundFetchError error; + BackgroundFetchRegistrationId registration_id( + sw_id, origin(), kExampleDeveloperId, kExampleUniqueId); + + { + base::HistogramTester histogram_tester; + CreateRegistration(registration_id, requests, options, SkBitmap(), &error); + ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE); + histogram_tester.ExpectBucketCount( + "BackgroundFetch.Storage.CreateMetadataTask", 0 /* kNone */, 1); + } + + BackgroundFetchRegistrationId registration_id2( + sw_id, url::Origin::Create(GURL("https://examplebad.com")), + kAlternativeDeveloperId, kAlternativeUniqueId); + + { + base::HistogramTester histogram_tester; + // This should fail because the Service Worker doesn't exist. + CreateRegistration(registration_id2, requests, options, SkBitmap(), &error); + ASSERT_EQ(error, blink::mojom::BackgroundFetchError::STORAGE_ERROR); + histogram_tester.ExpectBucketCount( + "BackgroundFetch.Storage.CreateMetadataTask", + 1 /* kServiceWorkerStorageError */, 1); + } +} + } // namespace content
diff --git a/content/browser/background_fetch/background_fetch_job_controller.cc b/content/browser/background_fetch/background_fetch_job_controller.cc index eb084c69..f95b4be 100644 --- a/content/browser/background_fetch/background_fetch_job_controller.cc +++ b/content/browser/background_fetch/background_fetch_job_controller.cc
@@ -6,26 +6,25 @@ #include <utility> -#include "content/browser/background_fetch/background_fetch_request_manager.h" #include "content/public/browser/browser_thread.h" namespace content { BackgroundFetchJobController::BackgroundFetchJobController( BackgroundFetchDelegateProxy* delegate_proxy, + BackgroundFetchScheduler* scheduler, const BackgroundFetchRegistrationId& registration_id, const BackgroundFetchOptions& options, const SkBitmap& icon, uint64_t bytes_downloaded, - BackgroundFetchRequestManager* request_manager, ProgressCallback progress_callback, BackgroundFetchScheduler::FinishedCallback finished_callback) - : BackgroundFetchScheduler::Controller(registration_id, + : BackgroundFetchScheduler::Controller(scheduler, + registration_id, std::move(finished_callback)), options_(options), icon_(icon), complete_requests_downloaded_bytes_cache_(bytes_downloaded), - request_manager_(request_manager), delegate_proxy_(delegate_proxy), progress_callback_(std::move(progress_callback)), weak_ptr_factory_(this) { @@ -74,12 +73,15 @@ } void BackgroundFetchJobController::StartRequest( - scoped_refptr<BackgroundFetchRequestInfo> request) { + scoped_refptr<BackgroundFetchRequestInfo> request, + RequestFinishedCallback request_finished_callback) { DCHECK_CURRENTLY_ON(BrowserThread::IO); DCHECK_LT(completed_downloads_, total_downloads_); + DCHECK(request_finished_callback); DCHECK(request); - active_request_download_bytes_[request->download_guid()] = 0; + active_request_downloaded_bytes_ = 0; + active_request_finished_callback_ = std::move(request_finished_callback); delegate_proxy_->StartRequest(registration_id().unique_id(), registration_id().origin(), request); @@ -99,11 +101,10 @@ uint64_t bytes_downloaded) { DCHECK_CURRENTLY_ON(BrowserThread::IO); - const std::string& download_guid = request->download_guid(); - if (active_request_download_bytes_[download_guid] == bytes_downloaded) + if (active_request_downloaded_bytes_ == bytes_downloaded) return; - active_request_download_bytes_[download_guid] = bytes_downloaded; + active_request_downloaded_bytes_ = bytes_downloaded; progress_callback_.Run(registration_id().unique_id(), options_.download_total, complete_requests_downloaded_bytes_cache_ + @@ -114,11 +115,18 @@ const scoped_refptr<BackgroundFetchRequestInfo>& request) { DCHECK_CURRENTLY_ON(BrowserThread::IO); - active_request_download_bytes_.erase(request->download_guid()); + // It's possible for the DidCompleteRequest() callback to have been in-flight + // while this Job Controller was being aborted, in which case the + // |active_request_finished_callback_| will have been reset. + if (!active_request_finished_callback_) + return; + + active_request_downloaded_bytes_ = 0; + complete_requests_downloaded_bytes_cache_ += request->GetFileSize(); ++completed_downloads_; - request_manager_->MarkRequestAsComplete(registration_id(), request.get()); + std::move(active_request_finished_callback_).Run(request); } void BackgroundFetchJobController::UpdateUI( @@ -130,29 +138,18 @@ } uint64_t BackgroundFetchJobController::GetInProgressDownloadedBytes() { - uint64_t sum = 0; - for (const auto& entry : active_request_download_bytes_) - sum += entry.second; - return sum; + return active_request_downloaded_bytes_; } void BackgroundFetchJobController::Abort( BackgroundFetchReasonToAbort reason_to_abort) { + // Stop propagating any in-flight events to the scheduler. + active_request_finished_callback_.Reset(); + + // Cancel any in-flight downloads and UI through the BGFetchDelegate. delegate_proxy_->Abort(registration_id().unique_id()); - std::vector<std::string> aborted_guids; - for (const auto& pair : active_request_download_bytes_) - aborted_guids.push_back(pair.first); - request_manager_->OnJobAborted(registration_id(), std::move(aborted_guids)); - if (reason_to_abort != BackgroundFetchReasonToAbort::ABORTED_BY_DEVELOPER) { - // Don't call Finish() here, so that we don't mark data for deletion while - // there are active fetches. - // Once the controller finishes processing, this function will be called - // again. (BackgroundFetchScheduler's finished_callback_ will call - // BackgroundFetchJobController::Abort() with |cancel_download| set to - // true.) - Finish(reason_to_abort); - } + Finish(reason_to_abort); } } // namespace content
diff --git a/content/browser/background_fetch/background_fetch_job_controller.h b/content/browser/background_fetch/background_fetch_job_controller.h index f1f0784..e57a219 100644 --- a/content/browser/background_fetch/background_fetch_job_controller.h +++ b/content/browser/background_fetch/background_fetch_job_controller.h
@@ -26,8 +26,6 @@ namespace content { -class BackgroundFetchRequestManager; - // The JobController will be responsible for coordinating communication with the // DownloadManager. It will get requests from the RequestManager and dispatch // them to the DownloadService. It lives entirely on the IO thread. @@ -51,11 +49,11 @@ BackgroundFetchJobController( BackgroundFetchDelegateProxy* delegate_proxy, + BackgroundFetchScheduler* scheduler, const BackgroundFetchRegistrationId& registration_id, const BackgroundFetchOptions& options, const SkBitmap& icon, uint64_t bytes_downloaded, - BackgroundFetchRequestManager* request_manager, ProgressCallback progress_callback, BackgroundFetchScheduler::FinishedCallback finished_callback); ~BackgroundFetchJobController() override; @@ -96,7 +94,8 @@ // BackgroundFetchScheduler::Controller implementation: bool HasMoreRequests() override; - void StartRequest(scoped_refptr<BackgroundFetchRequestInfo> request) override; + void StartRequest(scoped_refptr<BackgroundFetchRequestInfo> request, + RequestFinishedCallback request_finished_callback) override; void Abort(BackgroundFetchReasonToAbort reason_to_abort) override; private: @@ -107,17 +106,16 @@ // Icon for the represented background fetch registration. SkBitmap icon_; - // Map from in-progress |download_guid|s to number of bytes downloaded. - base::flat_map<std::string, uint64_t> active_request_download_bytes_; + // Number of bytes downloaded for the active request. + uint64_t active_request_downloaded_bytes_ = 0; + + // Finished callback to invoke when the active request has finished. + RequestFinishedCallback active_request_finished_callback_; // Cache of downloaded byte count stored by the DataManager, to enable // delivering progress events without having to read from the database. uint64_t complete_requests_downloaded_bytes_cache_; - // The RequestManager's lifetime is controlled by the BackgroundFetchContext - // and will be kept alive until after the JobController is destroyed. - BackgroundFetchRequestManager* request_manager_; - // Proxy for interacting with the BackgroundFetchDelegate across thread // boundaries. It is owned by the BackgroundFetchContext. BackgroundFetchDelegateProxy* delegate_proxy_;
diff --git a/content/browser/background_fetch/background_fetch_job_controller_unittest.cc b/content/browser/background_fetch/background_fetch_job_controller_unittest.cc index 423fc1e..3ab1aec 100644 --- a/content/browser/background_fetch/background_fetch_job_controller_unittest.cc +++ b/content/browser/background_fetch/background_fetch_job_controller_unittest.cc
@@ -20,6 +20,7 @@ #include "content/browser/background_fetch/background_fetch_context.h" #include "content/browser/background_fetch/background_fetch_data_manager.h" #include "content/browser/background_fetch/background_fetch_registration_id.h" +#include "content/browser/background_fetch/background_fetch_scheduler.h" #include "content/browser/background_fetch/background_fetch_test_base.h" #include "content/browser/service_worker/service_worker_context_wrapper.h" #include "content/browser/storage_partition_impl.h" @@ -40,64 +41,42 @@ enum class JobCompletionStatus { kRunning, kCompleted, kAborted }; -class FakeBackgroundFetchRequestManager : public BackgroundFetchRequestManager { - public: - void AddDownloadJob(const BackgroundFetchRegistrationId& registration_id, - const std::set<std::string>& download_guids) { - DCHECK(!registration_status_map_.count(registration_id.unique_id())); - registration_status_map_.emplace(registration_id.unique_id(), - RegistrationState(download_guids)); - } - - // BackgroundFetchRequestManager implementation: - void MarkRequestAsComplete( - const BackgroundFetchRegistrationId& registration_id, - scoped_refptr<BackgroundFetchRequestInfo> request) override { - DCHECK(registration_status_map_.count(registration_id.unique_id())); - auto& state = registration_status_map_[registration_id.unique_id()]; - - DCHECK_EQ(state.status, JobCompletionStatus::kRunning); - DCHECK(state.uncompleted_downloads.count(request->download_guid())); - state.uncompleted_downloads.erase(request->download_guid()); - - if (state.uncompleted_downloads.size() == 0) { - state.status = JobCompletionStatus::kCompleted; - } - } - - void OnJobAborted(const BackgroundFetchRegistrationId& registration_id, - std::vector<std::string> aborted_guids) override { - DCHECK(registration_status_map_.count(registration_id.unique_id())); - auto& state = registration_status_map_[registration_id.unique_id()]; - DCHECK_EQ(state.status, JobCompletionStatus::kRunning); - state.status = JobCompletionStatus::kAborted; - } - - JobCompletionStatus GetCompletionStatus( - const BackgroundFetchRegistrationId& registration_id) { - DCHECK(registration_status_map_.count(registration_id.unique_id())); - return registration_status_map_[registration_id.unique_id()].status; - } - - struct RegistrationState { - RegistrationState() = default; - explicit RegistrationState(const std::set<std::string>& downloads) - : uncompleted_downloads(downloads) {} - JobCompletionStatus status = JobCompletionStatus::kRunning; - std::set<std::string> uncompleted_downloads; - }; - - std::map<std::string, RegistrationState> registration_status_map_; -}; - } // namespace class BackgroundFetchJobControllerTest : public BackgroundFetchTestBase { public: BackgroundFetchJobControllerTest() = default; - ~BackgroundFetchJobControllerTest() override = default; + // Returns the status for the active job for |registration_id|. The + // registration should only ever exist in |finished_requests_| in case the + // request was aborted, given the absence of a scheduler. + JobCompletionStatus GetCompletionStatus( + const BackgroundFetchRegistrationId& registration_id) { + if (finished_requests_.count(registration_id)) { + DCHECK_NE(finished_requests_[registration_id], + BackgroundFetchReasonToAbort::NONE); + + return JobCompletionStatus::kAborted; + } + + DCHECK(pending_requests_counts_.count(registration_id)); + if (!pending_requests_counts_[registration_id]) + return JobCompletionStatus::kCompleted; + + return JobCompletionStatus::kRunning; + } + + // To be called when a request for |registration_id| has finished. + void OnRequestFinished( + const BackgroundFetchRegistrationId& registration_id, + scoped_refptr<content::BackgroundFetchRequestInfo> request_info) { + DCHECK(pending_requests_counts_.count(registration_id)); + + EXPECT_GE(pending_requests_counts_[registration_id], 1); + pending_requests_counts_[registration_id]--; + } + // Creates a new Background Fetch registration, whose id will be stored in the // |*registration_id|, and registers it with the DataManager for the included // |request_data|. If |auto_complete_requests| is true, the request will @@ -116,7 +95,6 @@ base::GenerateGUID()); std::vector<scoped_refptr<BackgroundFetchRequestInfo>> request_infos; - std::set<std::string> uncompleted_downloads_guids; int request_counter = 0; for (const auto& pair : request_data) { ServiceWorkerFetchRequest fetch_request( @@ -126,11 +104,9 @@ request_counter++, fetch_request); request->InitializeDownloadGuid(); request_infos.push_back(request); - uncompleted_downloads_guids.insert(request->download_guid()); } - request_manager_.AddDownloadJob(*registration_id, - uncompleted_downloads_guids); + pending_requests_counts_[*registration_id] = request_data.size(); if (auto_complete_requests) { // Provide fake responses for the given |request_data| pairs. @@ -155,15 +131,17 @@ delegate_proxy_ = std::make_unique<BackgroundFetchDelegateProxy>(delegate_); auto controller = std::make_unique<BackgroundFetchJobController>( - delegate_proxy_.get(), registration_id, BackgroundFetchOptions(), - SkBitmap(), 0 /* bytes_downloaded */, &request_manager_, + delegate_proxy_.get(), context_->scheduler_.get(), registration_id, + BackgroundFetchOptions(), SkBitmap(), 0 /* bytes_downloaded */, base::BindRepeating( &BackgroundFetchJobControllerTest::DidUpdateProgress, base::Unretained(this)), - base::BindOnce(&BackgroundFetchJobControllerTest::OnJobFinished)); + base::BindOnce(&BackgroundFetchJobControllerTest::DidFinishJob, + base::Unretained(this))); controller->InitializeRequestStatus( 0, total_downloads, {} /* outstanding_guids */, "" /* ui_title */); + return controller; } @@ -180,7 +158,7 @@ StoragePartitionImpl* partition = static_cast<StoragePartitionImpl*>( BrowserContext::GetDefaultStoragePartition(browser_context())); - context_ = new BackgroundFetchContext( + context_ = base::MakeRefCounted<BackgroundFetchContext>( browser_context(), base::WrapRefCounted(embedded_worker_test_helper()->context_wrapper()), base::WrapRefCounted(partition->GetCacheStorageContext())); @@ -195,11 +173,14 @@ } protected: - FakeBackgroundFetchRequestManager request_manager_; scoped_refptr<BackgroundFetchContext> context_; uint64_t last_downloaded_ = 0; + std::map<BackgroundFetchRegistrationId, int> pending_requests_counts_; + std::map<BackgroundFetchRegistrationId, BackgroundFetchReasonToAbort> + finished_requests_; + // Closure that will be invoked every time the JobController receives a // progress update from a download. base::RepeatingClosure job_progress_closure_; @@ -217,8 +198,14 @@ job_progress_closure_.Run(); } - static void OnJobFinished(const BackgroundFetchRegistrationId&, - BackgroundFetchReasonToAbort reason_to_abort) {} + void DidFinishJob(const BackgroundFetchRegistrationId& registration_id, + BackgroundFetchReasonToAbort reason_to_abort) { + auto iter = pending_requests_counts_.find(registration_id); + DCHECK(iter != pending_requests_counts_.end()); + + finished_requests_[registration_id] = reason_to_abort; + pending_requests_counts_.erase(iter); + } DISALLOW_COPY_AND_ASSIGN(BackgroundFetchJobControllerTest); }; @@ -231,17 +218,20 @@ true /* auto_complete_requests */); EXPECT_EQ(JobCompletionStatus::kRunning, - request_manager_.GetCompletionStatus(registration_id)); + GetCompletionStatus(registration_id)); std::unique_ptr<BackgroundFetchJobController> controller = CreateJobController(registration_id, requests.size()); - controller->StartRequest(requests[0]); + controller->StartRequest( + requests[0], + base::BindOnce(&BackgroundFetchJobControllerTest::OnRequestFinished, + base::Unretained(this), registration_id)); base::RunLoop().RunUntilIdle(); EXPECT_EQ(JobCompletionStatus::kCompleted, - request_manager_.GetCompletionStatus(registration_id)); + GetCompletionStatus(registration_id)); } TEST_F(BackgroundFetchJobControllerTest, MultipleRequestJob) { @@ -255,31 +245,40 @@ true /* auto_complete_requests */); EXPECT_EQ(JobCompletionStatus::kRunning, - request_manager_.GetCompletionStatus(registration_id)); + GetCompletionStatus(registration_id)); std::unique_ptr<BackgroundFetchJobController> controller = CreateJobController(registration_id, requests.size()); - controller->StartRequest(requests[0]); + controller->StartRequest( + requests[0], + base::BindOnce(&BackgroundFetchJobControllerTest::OnRequestFinished, + base::Unretained(this), registration_id)); base::RunLoop().RunUntilIdle(); EXPECT_EQ(JobCompletionStatus::kRunning, - request_manager_.GetCompletionStatus(registration_id)); + GetCompletionStatus(registration_id)); - controller->StartRequest(requests[1]); + controller->StartRequest( + requests[1], + base::BindOnce(&BackgroundFetchJobControllerTest::OnRequestFinished, + base::Unretained(this), registration_id)); base::RunLoop().RunUntilIdle(); EXPECT_EQ(JobCompletionStatus::kRunning, - request_manager_.GetCompletionStatus(registration_id)); + GetCompletionStatus(registration_id)); - controller->StartRequest(requests[2]); + controller->StartRequest( + requests[2], + base::BindOnce(&BackgroundFetchJobControllerTest::OnRequestFinished, + base::Unretained(this), registration_id)); base::RunLoop().RunUntilIdle(); EXPECT_EQ(JobCompletionStatus::kCompleted, - request_manager_.GetCompletionStatus(registration_id)); + GetCompletionStatus(registration_id)); } TEST_F(BackgroundFetchJobControllerTest, Abort) { @@ -290,18 +289,22 @@ true /* auto_complete_requests */); EXPECT_EQ(JobCompletionStatus::kRunning, - request_manager_.GetCompletionStatus(registration_id)); + GetCompletionStatus(registration_id)); std::unique_ptr<BackgroundFetchJobController> controller = CreateJobController(registration_id, requests.size()); - controller->StartRequest(requests[0]); + controller->StartRequest( + requests[0], + base::BindOnce(&BackgroundFetchJobControllerTest::OnRequestFinished, + base::Unretained(this), registration_id)); + controller->Abort(BackgroundFetchReasonToAbort::CANCELLED_FROM_UI); base::RunLoop().RunUntilIdle(); EXPECT_EQ(JobCompletionStatus::kAborted, - request_manager_.GetCompletionStatus(registration_id)); + GetCompletionStatus(registration_id)); } TEST_F(BackgroundFetchJobControllerTest, Progress) { @@ -312,12 +315,15 @@ true /* auto_complete_requests */); EXPECT_EQ(JobCompletionStatus::kRunning, - request_manager_.GetCompletionStatus(registration_id)); + GetCompletionStatus(registration_id)); std::unique_ptr<BackgroundFetchJobController> controller = CreateJobController(registration_id, requests.size()); - controller->StartRequest(requests[0]); + controller->StartRequest( + requests[0], + base::BindOnce(&BackgroundFetchJobControllerTest::OnRequestFinished, + base::Unretained(this), registration_id)); { base::RunLoop run_loop; @@ -328,12 +334,12 @@ EXPECT_GT(last_downloaded_, 0u); EXPECT_LT(last_downloaded_, strlen(kExampleResponseData)); EXPECT_EQ(JobCompletionStatus::kRunning, - request_manager_.GetCompletionStatus(registration_id)); + GetCompletionStatus(registration_id)); base::RunLoop().RunUntilIdle(); EXPECT_EQ(JobCompletionStatus::kCompleted, - request_manager_.GetCompletionStatus(registration_id)); + GetCompletionStatus(registration_id)); EXPECT_EQ(last_downloaded_, strlen(kExampleResponseData)); } @@ -345,7 +351,7 @@ true /* auto_complete_requests */); EXPECT_EQ(JobCompletionStatus::kRunning, - request_manager_.GetCompletionStatus(registration_id)); + GetCompletionStatus(registration_id)); std::unique_ptr<BackgroundFetchJobController> controller = CreateJobController(registration_id, requests.size()); @@ -357,7 +363,7 @@ base::RunLoop().RunUntilIdle(); EXPECT_EQ(JobCompletionStatus::kAborted, - request_manager_.GetCompletionStatus(registration_id)); + GetCompletionStatus(registration_id)); } TEST_F(BackgroundFetchJobControllerTest, ServiceWorkerDatabaseDeleted) { @@ -368,7 +374,7 @@ true /* auto_complete_requests */); EXPECT_EQ(JobCompletionStatus::kRunning, - request_manager_.GetCompletionStatus(registration_id)); + GetCompletionStatus(registration_id)); std::unique_ptr<BackgroundFetchJobController> controller = CreateJobController(registration_id, requests.size()); @@ -380,7 +386,7 @@ base::RunLoop().RunUntilIdle(); EXPECT_EQ(JobCompletionStatus::kAborted, - request_manager_.GetCompletionStatus(registration_id)); + GetCompletionStatus(registration_id)); } } // namespace content
diff --git a/content/browser/background_fetch/background_fetch_request_manager.h b/content/browser/background_fetch/background_fetch_request_manager.h deleted file mode 100644 index 6a264c8..0000000 --- a/content/browser/background_fetch/background_fetch_request_manager.h +++ /dev/null
@@ -1,41 +0,0 @@ -// Copyright 2017 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 CONTENT_BROWSER_BACKGROUND_FETCH_BACKGROUND_FETCH_REQUEST_MANAGER_H_ -#define CONTENT_BROWSER_BACKGROUND_FETCH_BACKGROUND_FETCH_REQUEST_MANAGER_H_ - -#include <string> -#include <vector> - -#include "base/callback_forward.h" -#include "base/memory/scoped_refptr.h" - -namespace content { - -class BackgroundFetchRegistrationId; -class BackgroundFetchRequestInfo; - -// Interface for manager requests that are part of a Background Fetch. -// Implementations maintain a queue of requests for each given -// |BackgroundFetchRegistrationId| that may be backed by a database. -class BackgroundFetchRequestManager { - public: - virtual ~BackgroundFetchRequestManager() {} - - // Marks that the |request|, part of the Background Fetch identified by - // |registration_id|, has completed. - virtual void MarkRequestAsComplete( - const BackgroundFetchRegistrationId& registration_id, - scoped_refptr<BackgroundFetchRequestInfo> request) = 0; - - // Called when the job identified by |registration_id| has been aborted along - // with the GUIDs of any associated downloads that were still active. - virtual void OnJobAborted( - const BackgroundFetchRegistrationId& registration_id, - std::vector<std::string> aborted_guids) = 0; -}; - -} // namespace content - -#endif // CONTENT_BROWSER_BACKGROUND_FETCH_BACKGROUND_FETCH_REQUEST_MANAGER_H_
diff --git a/content/browser/background_fetch/background_fetch_scheduler.cc b/content/browser/background_fetch/background_fetch_scheduler.cc index fb9e052e..4fe7cf3 100644 --- a/content/browser/background_fetch/background_fetch_scheduler.cc +++ b/content/browser/background_fetch/background_fetch_scheduler.cc
@@ -10,10 +10,13 @@ namespace content { BackgroundFetchScheduler::Controller::Controller( + BackgroundFetchScheduler* scheduler, const BackgroundFetchRegistrationId& registration_id, FinishedCallback finished_callback) - : registration_id_(registration_id), + : scheduler_(scheduler), + registration_id_(registration_id), finished_callback_(std::move(finished_callback)) { + DCHECK(scheduler_); DCHECK(finished_callback_); } @@ -24,121 +27,121 @@ DCHECK(reason_to_abort != BackgroundFetchReasonToAbort::NONE || !HasMoreRequests()); - if (reason_to_abort != BackgroundFetchReasonToAbort::NONE) - aborted_ = true; + scheduler_->RemoveJobController(this); - DCHECK(finished_callback_); + // Developer-initiated abortions will have already marked the registration for + // deletion, so make sure that we don't execute the same code-path twice. + if (reason_to_abort == BackgroundFetchReasonToAbort::ABORTED_BY_DEVELOPER) + return; + + // Race conditions make it possible for a controller to finish twice. This + // should be removed when the scheduler starts owning the controllers. + if (!finished_callback_) + return; + std::move(finished_callback_).Run(registration_id_, reason_to_abort); } BackgroundFetchScheduler::BackgroundFetchScheduler( - BackgroundFetchScheduler::RequestProvider* request_provider) + RequestProvider* request_provider) : request_provider_(request_provider) {} BackgroundFetchScheduler::~BackgroundFetchScheduler() = default; -void BackgroundFetchScheduler::RemoveJobController( - const BackgroundFetchRegistrationId& registration_id) { - for (auto iter = controller_queue_.begin(); iter != controller_queue_.end(); - /* no increment */) { - if ((**iter).registration_id() == registration_id) - iter = controller_queue_.erase(iter); - else - iter++; - } -} - -void BackgroundFetchScheduler::AddJobController( - BackgroundFetchScheduler::Controller* controller) { - controller_queue_.push_back(controller); - - if (!controller_queue_.empty() && - download_controller_map_.size() < max_concurrent_downloads_) { - ScheduleDownload(); - } -} - -void BackgroundFetchScheduler::ScheduleDownload() { - DCHECK(download_controller_map_.size() < max_concurrent_downloads_); - - if (lock_scheduler_ || controller_queue_.empty()) - return; - - auto* controller = controller_queue_.front(); - controller_queue_.pop_front(); - - // Making an async call, `ScheduleDownload` shouldn't be called anymore. - lock_scheduler_ = true; - request_provider_->PopNextRequest( - controller->registration_id(), - base::BindOnce(&BackgroundFetchScheduler::DidPopNextRequest, - base::Unretained(this), controller)); -} - -void BackgroundFetchScheduler::DidPopNextRequest( - BackgroundFetchScheduler::Controller* controller, - scoped_refptr<BackgroundFetchRequestInfo> request_info) { +void BackgroundFetchScheduler::AddJobController(Controller* controller) { DCHECK(controller); - lock_scheduler_ = false; // Can schedule downloads again. + controller_queue_.push_back(controller); - // Storage error, fetch might have been aborted. - if (!request_info) { - ScheduleDownload(); - return; - } - - // Database tasks issued by the DataManager cannot be recalled, which means - // that it's possible to have a race condition where a request will have been - // retrieved for a controller that's otherwise been aborted. - if (controller->aborted()) - return; - - download_controller_map_[request_info->download_guid()] = controller; - controller->StartRequest(request_info); - - if (download_controller_map_.size() < max_concurrent_downloads_) + if (!active_controller_) ScheduleDownload(); } -void BackgroundFetchScheduler::MarkRequestAsComplete( - const BackgroundFetchRegistrationId& registration_id, - scoped_refptr<BackgroundFetchRequestInfo> request) { - DCHECK(download_controller_map_.count(request->download_guid())); - auto* controller = download_controller_map_[request->download_guid()]; - download_controller_map_.erase(request->download_guid()); +void BackgroundFetchScheduler::RemoveJobController(Controller* controller) { + DCHECK(controller); - request_provider_->MarkRequestAsComplete( - controller->registration_id(), request.get(), - base::BindOnce(&BackgroundFetchScheduler::DidMarkRequestAsComplete, - base::Unretained(this), controller)); -} + base::EraseIf(controller_queue_, [controller](Controller* queued_controller) { + return controller == queued_controller; + }); -void BackgroundFetchScheduler::DidMarkRequestAsComplete( - BackgroundFetchScheduler::Controller* controller) { - // Database tasks issued by the DataManager cannot be recalled, which means - // that it's possible to have a race condition where a request will have been - // marked as complete for a controller that's otherwise been aborted. - if (controller->aborted()) + if (active_controller_ != controller) return; - if (controller->HasMoreRequests()) - controller_queue_.push_back(controller); - else - controller->Finish(BackgroundFetchReasonToAbort::NONE); + // TODO(peter): Move cancellation of requests to the scheduler. + active_controller_ = nullptr; ScheduleDownload(); } -void BackgroundFetchScheduler::OnJobAborted( - const BackgroundFetchRegistrationId& registration_id, - std::vector<std::string> aborted_guids) { - // For every active download that was aborted, remove it and schedule a new - // download. - for (const auto& guid : aborted_guids) { - download_controller_map_.erase(guid); +void BackgroundFetchScheduler::ScheduleDownload() { + DCHECK(!active_controller_); + if (controller_queue_.empty()) + return; + + active_controller_ = controller_queue_.front(); + controller_queue_.pop_front(); + + request_provider_->PopNextRequest( + active_controller_->registration_id(), + base::BindOnce(&BackgroundFetchScheduler::DidPopNextRequest, + weak_ptr_factory_.GetWeakPtr())); +} + +void BackgroundFetchScheduler::DidPopNextRequest( + scoped_refptr<BackgroundFetchRequestInfo> request_info) { + // It's possible for the |active_controller_| to have been aborted while the + // next request was being retrieved. Bail out when that happens. + if (!active_controller_) { ScheduleDownload(); + return; } + + // There might've been a storage error when |request_info| could not be loaded + // from the database. Bail out in this case as well. + if (!request_info) { + // TODO(peter): Should we abort the |active_controller_| in this case? + active_controller_ = nullptr; + + ScheduleDownload(); + return; + } + + // Otherwise start the |request_info| through the live Job Controller. + active_controller_->StartRequest( + std::move(request_info), + base::BindOnce(&BackgroundFetchScheduler::MarkRequestAsComplete, + weak_ptr_factory_.GetWeakPtr())); +} + +void BackgroundFetchScheduler::MarkRequestAsComplete( + scoped_refptr<BackgroundFetchRequestInfo> request_info) { + // It's possible for the |active_controller_| to have been aborted while the + // request was being started. Bail out in that case. + if (!active_controller_) + return; + + request_provider_->MarkRequestAsComplete( + active_controller_->registration_id(), std::move(request_info), + base::BindOnce(&BackgroundFetchScheduler::DidMarkRequestAsComplete, + weak_ptr_factory_.GetWeakPtr())); +} + +void BackgroundFetchScheduler::DidMarkRequestAsComplete() { + // It's possible for the |active_controller_| to have been aborted while the + // request was being marked as completed. Bail out in that case. + if (!active_controller_) + return; + + // Continue with the |active_controller_| while there are files pending. + if (active_controller_->HasMoreRequests()) { + request_provider_->PopNextRequest( + active_controller_->registration_id(), + base::BindOnce(&BackgroundFetchScheduler::DidPopNextRequest, + weak_ptr_factory_.GetWeakPtr())); + return; + } + + active_controller_->Finish(BackgroundFetchReasonToAbort::NONE); } } // namespace content
diff --git a/content/browser/background_fetch/background_fetch_scheduler.h b/content/browser/background_fetch/background_fetch_scheduler.h index c0adb43..449ea669 100644 --- a/content/browser/background_fetch/background_fetch_scheduler.h +++ b/content/browser/background_fetch/background_fetch_scheduler.h
@@ -13,8 +13,8 @@ #include "base/callback.h" #include "base/containers/circular_deque.h" #include "base/macros.h" +#include "base/memory/weak_ptr.h" #include "content/browser/background_fetch/background_fetch_registration_id.h" -#include "content/browser/background_fetch/background_fetch_request_manager.h" #include "content/common/content_export.h" namespace content { @@ -25,25 +25,26 @@ // Maintains a list of Controllers and chooses which ones should launch new // downloads. -class CONTENT_EXPORT BackgroundFetchScheduler - : public BackgroundFetchRequestManager { +class CONTENT_EXPORT BackgroundFetchScheduler { public: using FinishedCallback = base::OnceCallback<void(const BackgroundFetchRegistrationId&, BackgroundFetchReasonToAbort)>; - using MarkedCompleteCallback = base::OnceCallback<void()>; // Interface for download job controllers. class CONTENT_EXPORT Controller { public: + using RequestFinishedCallback = + base::OnceCallback<void(scoped_refptr<BackgroundFetchRequestInfo>)>; + virtual ~Controller(); // Returns whether the Controller has any pending download requests. virtual bool HasMoreRequests() = 0; // Requests the download manager to start fetching |request|. - virtual void StartRequest( - scoped_refptr<BackgroundFetchRequestInfo> request) = 0; + virtual void StartRequest(scoped_refptr<BackgroundFetchRequestInfo> request, + RequestFinishedCallback callback) = 0; void Finish(BackgroundFetchReasonToAbort reason_to_abort); @@ -51,16 +52,18 @@ return registration_id_; } - bool aborted() const { return aborted_; } - protected: - Controller(const BackgroundFetchRegistrationId& registration_id, + Controller(BackgroundFetchScheduler* scheduler, + const BackgroundFetchRegistrationId& registration_id, FinishedCallback finished_callback); private: + // The |scheduler_| is guaranteed to outlive the controllers due to their + // declaration order in the BackgroundFetchContext. + BackgroundFetchScheduler* scheduler_; + BackgroundFetchRegistrationId registration_id_; FinishedCallback finished_callback_; - bool aborted_ = false; }; using NextRequestCallback = @@ -76,57 +79,42 @@ const BackgroundFetchRegistrationId& registration_id, NextRequestCallback callback) = 0; - // Marks |request| as complete and calls |callback| when done. + // Marks |request_info| as complete and calls |callback| when done. virtual void MarkRequestAsComplete( const BackgroundFetchRegistrationId& registration_id, - BackgroundFetchRequestInfo* request, - MarkedCompleteCallback callback) = 0; + scoped_refptr<BackgroundFetchRequestInfo> request_info, + base::OnceClosure closure) = 0; }; explicit BackgroundFetchScheduler(RequestProvider* request_provider); - - ~BackgroundFetchScheduler() override; + ~BackgroundFetchScheduler(); // Adds a new job controller to the scheduler. May immediately start to // schedule jobs for |controller|. void AddJobController(Controller* controller); - // Removes a job controller from the scheduler. Abort ongoing fetches on the - // controller before calling this. - // TODO(crbug.com/850075): Move management of active fetches to - // BackgroundFetchScheduler. - void RemoveJobController( - const BackgroundFetchRegistrationId& registration_id); - - void set_max_concurrent_downloads(size_t new_max) { - max_concurrent_downloads_ = new_max; - } - - // BackgroundFetchRequestManager implementation: - void MarkRequestAsComplete( - const BackgroundFetchRegistrationId& registration_id, - scoped_refptr<BackgroundFetchRequestInfo> request) override; - void OnJobAborted(const BackgroundFetchRegistrationId& registration_id, - std::vector<std::string> aborted_guids) override; + // Removes the |controller| from the scheduler. Pending updates will be + // ignored and it won't be considered for further requests. + void RemoveJobController(Controller* controller); private: void ScheduleDownload(); - void DidPopNextRequest(BackgroundFetchScheduler::Controller* controller, - scoped_refptr<BackgroundFetchRequestInfo>); + void DidPopNextRequest( + scoped_refptr<BackgroundFetchRequestInfo> request_info); - void DidMarkRequestAsComplete( - BackgroundFetchScheduler::Controller* controller); + void MarkRequestAsComplete( + scoped_refptr<BackgroundFetchRequestInfo> request_info); + void DidMarkRequestAsComplete(); RequestProvider* request_provider_; // The scheduler owns all the job controllers, holding them either in the // controller queue or the guid to controller map. base::circular_deque<Controller*> controller_queue_; - std::map<std::string, Controller*> download_controller_map_; + Controller* active_controller_ = nullptr; - bool lock_scheduler_ = false; - size_t max_concurrent_downloads_ = 1; + base::WeakPtrFactory<BackgroundFetchScheduler> weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(BackgroundFetchScheduler); };
diff --git a/content/browser/background_fetch/background_fetch_scheduler_unittest.cc b/content/browser/background_fetch/background_fetch_scheduler_unittest.cc index fdee316..156d262c 100644 --- a/content/browser/background_fetch/background_fetch_scheduler_unittest.cc +++ b/content/browser/background_fetch/background_fetch_scheduler_unittest.cc
@@ -31,10 +31,9 @@ const std::string& name, std::vector<std::string>* controller_sequence_list, int total_jobs) - : BackgroundFetchScheduler::Controller( - registration_id, - base::BindOnce(&FakeController::OnJobFinished)), - scheduler_(scheduler), + : BackgroundFetchScheduler::Controller(scheduler, + registration_id, + base::DoNothing()), controller_sequence_list_(controller_sequence_list), name_(name), total_jobs_(total_jobs) {} @@ -43,28 +42,20 @@ // BackgroundFetchScheduler::Controller implementation: bool HasMoreRequests() override { return jobs_started_ < total_jobs_; } - void StartRequest( - scoped_refptr<BackgroundFetchRequestInfo> request) override { + void StartRequest(scoped_refptr<BackgroundFetchRequestInfo> request, + RequestFinishedCallback callback) override { DCHECK_LT(jobs_started_, total_jobs_); ++jobs_started_; controller_sequence_list_->push_back(name_ + base::IntToString(jobs_started_)); + BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, - base::BindOnce(&FakeController::OnDownloadCompleted, - base::Unretained(this), std::move(request))); + base::BindOnce(std::move(callback), std::move(request))); } private: - void OnDownloadCompleted(scoped_refptr<BackgroundFetchRequestInfo> request) { - scheduler_->MarkRequestAsComplete(registration_id(), std::move(request)); - } - - static void OnJobFinished(const BackgroundFetchRegistrationId&, - BackgroundFetchReasonToAbort reason_to_abort) {} - int jobs_started_ = 0; - BackgroundFetchScheduler* scheduler_; std::vector<std::string>* controller_sequence_list_; std::string name_; int total_jobs_; @@ -108,9 +99,9 @@ void MarkRequestAsComplete( const BackgroundFetchRegistrationId& registration_id, - BackgroundFetchRequestInfo* request, - BackgroundFetchScheduler::MarkedCompleteCallback callback) override { - std::move(callback).Run(); + scoped_refptr<BackgroundFetchRequestInfo> request_info, + base::OnceClosure closure) override { + std::move(closure).Run(); } protected: @@ -156,46 +147,13 @@ // Only one task is run at a time so after 3 barrier iterations, 3 tasks // should have been have run. - EXPECT_THAT(controller_sequence_list_, ElementsAre("A1", "B1", "A2")); + EXPECT_THAT(controller_sequence_list_, ElementsAre("A1", "A2", "A3")); } base::RunLoop().RunUntilIdle(); EXPECT_THAT(controller_sequence_list_, - ElementsAre("A1", "B1", "A2", "B2", "A3", "B3", "A4", "B4")); -} - -TEST_F(BackgroundFetchSchedulerTest, TwoControllers_TwoConcurrent) { - BackgroundFetchRegistrationId registration_id1( - kExampleServiceWorkerRegistrationId, origin(), kExampleDeveloperId1, - base::GenerateGUID()); - BackgroundFetchRegistrationId registration_id2( - kExampleServiceWorkerRegistrationId, origin(), kExampleDeveloperId2, - base::GenerateGUID()); - FakeController controller1(registration_id1, &scheduler_, "A", - &controller_sequence_list_, 4); - FakeController controller2(registration_id2, &scheduler_, "B", - &controller_sequence_list_, 4); - - scheduler_.set_max_concurrent_downloads(2); - scheduler_.AddJobController(&controller1); - scheduler_.AddJobController(&controller2); - - { - base::RunLoop run_loop; - PostQuitAfterRepeatingBarriers(run_loop.QuitClosure(), 3); - run_loop.Run(); - - // Two tasks are run at a time so after 3 barrier iterations, 6 tasks should - // have run. - EXPECT_THAT(controller_sequence_list_, - ElementsAre("A1", "B1", "A2", "B2", "A3", "B3")); - } - - base::RunLoop().RunUntilIdle(); - - EXPECT_THAT(controller_sequence_list_, - ElementsAre("A1", "B1", "A2", "B2", "A3", "B3", "A4", "B4")); + ElementsAre("A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4")); } } // namespace content
diff --git a/content/browser/background_fetch/background_fetch_service_unittest.cc b/content/browser/background_fetch/background_fetch_service_unittest.cc index 9a73efb..f6e0a0c5 100644 --- a/content/browser/background_fetch/background_fetch_service_unittest.cc +++ b/content/browser/background_fetch/background_fetch_service_unittest.cc
@@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <algorithm> #include <map> #include <memory> #include <utility> @@ -9,6 +10,7 @@ #include "base/auto_reset.h" #include "base/macros.h" #include "base/run_loop.h" +#include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/test/metrics/histogram_tester.h" #include "base/time/time.h" @@ -47,6 +49,16 @@ return icon; } +bool ContainsHeader(const base::flat_map<std::string, std::string>& headers, + const std::string& target) { + return headers.cend() != + std::find_if(headers.cbegin(), headers.cend(), + [target](const auto& pair) -> bool { + return base::CompareCaseInsensitiveASCII(pair.first, + target) == 0; + }); +} + class BadMessageObserver { public: BadMessageObserver() @@ -529,41 +541,45 @@ ASSERT_EQ(fetches[i].request.url, requests[i].url); EXPECT_EQ(fetches[i].request.method, requests[i].method); - EXPECT_EQ(fetches[i].response.url_list[0], fetches[i].request.url); - EXPECT_EQ(fetches[i].response.response_type, + EXPECT_EQ(fetches[i].response->url_list[0], fetches[i].request.url); + EXPECT_EQ(fetches[i].response->response_type, network::mojom::FetchResponseType::kDefault); switch (i) { case 0: - EXPECT_EQ(fetches[i].response.status_code, kFirstResponseCode); - EXPECT_EQ(fetches[i].response.headers.count("Content-Type"), 1u); - EXPECT_EQ(fetches[i].response.headers.count("X-Cat"), 1u); + EXPECT_EQ(fetches[i].response->status_code, kFirstResponseCode); + EXPECT_TRUE( + ContainsHeader(fetches[i].response->headers, "Content-Type")); + EXPECT_TRUE(ContainsHeader(fetches[i].response->headers, "X-Cat")); break; case 1: - EXPECT_EQ(fetches[i].response.status_code, kSecondResponseCode); - EXPECT_EQ(fetches[i].response.headers.count("Content-Type"), 1u); - EXPECT_EQ(fetches[i].response.headers.count("X-Cat"), 0u); + EXPECT_EQ(fetches[i].response->status_code, kSecondResponseCode); + EXPECT_TRUE( + ContainsHeader(fetches[i].response->headers, "Content-Type")); + EXPECT_FALSE(ContainsHeader(fetches[i].response->headers, "X-Cat")); break; case 2: - EXPECT_EQ(fetches[i].response.status_code, kThirdResponseCode); - EXPECT_EQ(fetches[i].response.headers.count("Content-Type"), 1u); - EXPECT_EQ(fetches[i].response.headers.count("X-Cat"), 0u); + EXPECT_EQ(fetches[i].response->status_code, kThirdResponseCode); + EXPECT_TRUE( + ContainsHeader(fetches[i].response->headers, "Content-Type")); + EXPECT_FALSE(ContainsHeader(fetches[i].response->headers, "X-Cat")); break; default: NOTREACHED(); } // TODO(peter): change-detector tests for unsupported properties. - EXPECT_EQ(fetches[i].response.error, + EXPECT_EQ(fetches[i].response->error, blink::mojom::ServiceWorkerResponseError::kUnknown); // Verify that all properties have a sensible value. - EXPECT_FALSE(fetches[i].response.response_time.is_null()); + EXPECT_FALSE(fetches[i].response->response_time.is_null()); // Verify that the response blobs have been populated. We cannot consume // their data here since the handles have already been released. - ASSERT_FALSE(fetches[i].response.blob_uuid.empty()); - ASSERT_GT(fetches[i].response.blob_size, 0u); + ASSERT_TRUE(fetches[i].response->blob); + ASSERT_FALSE(fetches[i].response->blob->uuid.empty()); + ASSERT_GT(fetches[i].response->blob->size, 0u); } } @@ -628,30 +644,29 @@ ASSERT_EQ(fetches[i].request.url, requests[i].url); EXPECT_EQ(fetches[i].request.method, requests[i].method); - EXPECT_EQ(fetches[i].response.url_list[0], fetches[i].request.url); - EXPECT_EQ(fetches[i].response.response_type, + EXPECT_EQ(fetches[i].response->url_list[0], fetches[i].request.url); + EXPECT_EQ(fetches[i].response->response_type, network::mojom::FetchResponseType::kDefault); switch (i) { case 0: - EXPECT_EQ(fetches[i].response.status_code, 404); + EXPECT_EQ(fetches[i].response->status_code, 404); break; case 1: - EXPECT_EQ(fetches[i].response.status_code, 0); + EXPECT_EQ(fetches[i].response->status_code, 0); break; default: NOTREACHED(); } - EXPECT_TRUE(fetches[i].response.headers.empty()); - EXPECT_TRUE(fetches[i].response.blob_uuid.empty()); - EXPECT_EQ(fetches[i].response.blob_size, 0u); - EXPECT_FALSE(fetches[i].response.response_time.is_null()); + EXPECT_TRUE(fetches[i].response->headers.empty()); + EXPECT_FALSE(fetches[i].response->blob); + EXPECT_FALSE(fetches[i].response->response_time.is_null()); // TODO(peter): change-detector tests for unsupported properties. - EXPECT_EQ(fetches[i].response.error, + EXPECT_EQ(fetches[i].response->error, blink::mojom::ServiceWorkerResponseError::kUnknown); - EXPECT_TRUE(fetches[i].response.cors_exposed_header_names.empty()); + EXPECT_TRUE(fetches[i].response->cors_exposed_header_names.empty()); } }
diff --git a/content/browser/background_fetch/storage/cleanup_task.cc b/content/browser/background_fetch/storage/cleanup_task.cc index 8940c09d..96ac829 100644 --- a/content/browser/background_fetch/storage/cleanup_task.cc +++ b/content/browser/background_fetch/storage/cleanup_task.cc
@@ -57,7 +57,8 @@ case DatabaseStatus::kNotFound: break; case DatabaseStatus::kFailed: - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; } @@ -93,9 +94,14 @@ } void CleanupTask::FinishWithError(blink::mojom::BackgroundFetchError error) { + ReportStorageError(); Finished(); // Destroys |this|. } +std::string CleanupTask::HistogramName() const { + return "CleanupTask"; +} + } // namespace background_fetch } // namespace content
diff --git a/content/browser/background_fetch/storage/cleanup_task.h b/content/browser/background_fetch/storage/cleanup_task.h index e116f78..4bbfbe5 100644 --- a/content/browser/background_fetch/storage/cleanup_task.h +++ b/content/browser/background_fetch/storage/cleanup_task.h
@@ -38,6 +38,8 @@ void FinishWithError(blink::mojom::BackgroundFetchError error) override; + std::string HistogramName() const override; + base::WeakPtrFactory<CleanupTask> weak_factory_; // Keep as last. DISALLOW_COPY_AND_ASSIGN(CleanupTask);
diff --git a/content/browser/background_fetch/storage/create_metadata_task.cc b/content/browser/background_fetch/storage/create_metadata_task.cc index cab3c9e..43b46cba 100644 --- a/content/browser/background_fetch/storage/create_metadata_task.cc +++ b/content/browser/background_fetch/storage/create_metadata_task.cc
@@ -57,7 +57,8 @@ blink::mojom::BackgroundFetchError::DUPLICATED_DEVELOPER_ID); return; case DatabaseStatus::kFailed: - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; } @@ -137,7 +138,8 @@ std::string serialized_metadata_proto; if (!metadata_proto_->SerializeToString(&serialized_metadata_proto)) { - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; } @@ -148,7 +150,8 @@ ui_options.set_icon(std::move(serialized_icon_)); if (!ui_options.SerializeToString(&serialized_ui_options_proto)) { - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; } @@ -184,7 +187,8 @@ break; case DatabaseStatus::kFailed: case DatabaseStatus::kNotFound: - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; } @@ -206,10 +210,16 @@ } } + ReportStorageError(); + std::move(callback_).Run(error, registration); Finished(); // Destroys |this|. } +std::string CreateMetadataTask::HistogramName() const { + return "CreateMetadataTask"; +} + } // namespace background_fetch } // namespace content
diff --git a/content/browser/background_fetch/storage/create_metadata_task.h b/content/browser/background_fetch/storage/create_metadata_task.h index 11bdea37..bd7e0dc 100644 --- a/content/browser/background_fetch/storage/create_metadata_task.h +++ b/content/browser/background_fetch/storage/create_metadata_task.h
@@ -54,6 +54,8 @@ void FinishWithError(blink::mojom::BackgroundFetchError error) override; + std::string HistogramName() const override; + BackgroundFetchRegistrationId registration_id_; std::vector<ServiceWorkerFetchRequest> requests_; BackgroundFetchOptions options_;
diff --git a/content/browser/background_fetch/storage/get_developer_ids_task.cc b/content/browser/background_fetch/storage/get_developer_ids_task.cc index 1f17021..78186816 100644 --- a/content/browser/background_fetch/storage/get_developer_ids_task.cc +++ b/content/browser/background_fetch/storage/get_developer_ids_task.cc
@@ -48,17 +48,23 @@ break; } case DatabaseStatus::kFailed: - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); break; } } void GetDeveloperIdsTask::FinishWithError( blink::mojom::BackgroundFetchError error) { + ReportStorageError(); std::move(callback_).Run(error, std::move(developer_ids_)); Finished(); // Destroys |this|. } +std::string GetDeveloperIdsTask::HistogramName() const { + return "GetDeveloperIdsTask"; +} + } // namespace background_fetch } // namespace content
diff --git a/content/browser/background_fetch/storage/get_developer_ids_task.h b/content/browser/background_fetch/storage/get_developer_ids_task.h index e9db088..0d79dea 100644 --- a/content/browser/background_fetch/storage/get_developer_ids_task.h +++ b/content/browser/background_fetch/storage/get_developer_ids_task.h
@@ -40,6 +40,8 @@ void FinishWithError(blink::mojom::BackgroundFetchError error) override; + std::string HistogramName() const override; + int64_t service_worker_registration_id_; url::Origin origin_;
diff --git a/content/browser/background_fetch/storage/get_initialization_data_task.cc b/content/browser/background_fetch/storage/get_initialization_data_task.cc index 0e1d38cc..a5c1e3b5 100644 --- a/content/browser/background_fetch/storage/get_initialization_data_task.cc +++ b/content/browser/background_fetch/storage/get_initialization_data_task.cc
@@ -507,12 +507,25 @@ AddDatabaseTask(std::make_unique<MarkRegistrationForDeletionTask>( data_manager(), data.second.registration_id, base::DoNothing())); } + + if (data.second.error == + blink::mojom::BackgroundFetchError::STORAGE_ERROR) { + // The subtasks only access the Service Worker storage, so if there is + // a storage error, that would be the cause. + SetStorageError(BackgroundFetchStorageError::kServiceWorkerStorageError); + } } + ReportStorageError(); + std::move(callback_).Run(error, std::move(results)); Finished(); // Destroys |this|. } +std::string GetInitializationDataTask::HistogramName() const { + return "GetInitializationDataTask"; +} + } // namespace background_fetch } // namespace content
diff --git a/content/browser/background_fetch/storage/get_initialization_data_task.h b/content/browser/background_fetch/storage/get_initialization_data_task.h index b92ca140..bae5662 100644 --- a/content/browser/background_fetch/storage/get_initialization_data_task.h +++ b/content/browser/background_fetch/storage/get_initialization_data_task.h
@@ -85,6 +85,8 @@ void FinishWithError(blink::mojom::BackgroundFetchError error) override; + std::string HistogramName() const override; + GetInitializationDataCallback callback_; // Map from the unique_id to the initialization data.
diff --git a/content/browser/background_fetch/storage/get_registration_task.cc b/content/browser/background_fetch/storage/get_registration_task.cc index e8cbc868..c8e9859 100644 --- a/content/browser/background_fetch/storage/get_registration_task.cc +++ b/content/browser/background_fetch/storage/get_registration_task.cc
@@ -37,6 +37,8 @@ blink::mojom::BackgroundFetchError error, std::unique_ptr<proto::BackgroundFetchMetadata> metadata_proto) { metadata_proto_ = std::move(metadata_proto); + if (error == blink::mojom::BackgroundFetchError::STORAGE_ERROR) + SetStorageError(BackgroundFetchStorageError::kServiceWorkerStorageError); FinishWithError(error); } @@ -50,10 +52,16 @@ registration = ToBackgroundFetchRegistration(*metadata_proto_); } + ReportStorageError(); + std::move(callback_).Run(error, registration); Finished(); // Destroys |this|. } +std::string GetRegistrationTask::HistogramName() const { + return "GetRegistrationTask"; +} + } // namespace background_fetch } // namespace content
diff --git a/content/browser/background_fetch/storage/get_registration_task.h b/content/browser/background_fetch/storage/get_registration_task.h index 1178529..908b8568 100644 --- a/content/browser/background_fetch/storage/get_registration_task.h +++ b/content/browser/background_fetch/storage/get_registration_task.h
@@ -46,6 +46,8 @@ void FinishWithError(blink::mojom::BackgroundFetchError error) override; + std::string HistogramName() const override; + int64_t service_worker_registration_id_; url::Origin origin_; std::string developer_id_;
diff --git a/content/browser/background_fetch/storage/get_settled_fetches_task.cc b/content/browser/background_fetch/storage/get_settled_fetches_task.cc index d9a417d..e39a864 100644 --- a/content/browser/background_fetch/storage/get_settled_fetches_task.cc +++ b/content/browser/background_fetch/storage/get_settled_fetches_task.cc
@@ -10,49 +10,6 @@ #include "content/browser/cache_storage/cache_storage_manager.h" #include "content/browser/service_worker/service_worker_context_wrapper.h" -namespace mojo { - -// TODO(leonhsl): Deprecate this converter once we replace usages of -// content::ServiceWorkerResponse with blink::mojom::FetchAPIResponse in -// background_fetch codes. -template <> -struct TypeConverter<content::ServiceWorkerResponse, - blink::mojom::FetchAPIResponse> { - static content::ServiceWorkerResponse Convert( - const blink::mojom::FetchAPIResponse& input) { - content::ServiceWorkerResponse output; - output.url_list = std::move(input.url_list); - output.status_code = input.status_code; - output.status_text = std::move(input.status_text); - output.response_type = input.response_type; - output.headers.insert(input.headers.begin(), input.headers.end()); - if (input.blob) { - output.blob_uuid = input.blob->uuid; - output.blob_size = input.blob->size; - output.blob = base::MakeRefCounted<storage::BlobHandle>( - blink::mojom::BlobPtr(std::move(input.blob->blob))); - } - output.error = input.error; - output.response_time = input.response_time; - output.is_in_cache_storage = input.is_in_cache_storage; - if (input.cache_storage_cache_name) { - output.cache_storage_cache_name = - std::move(*(input.cache_storage_cache_name)); - } - output.cors_exposed_header_names = - std::move(input.cors_exposed_header_names); - if (input.side_data_blob) { - output.side_data_blob_uuid = input.side_data_blob->uuid; - output.side_data_blob_size = input.side_data_blob->size; - output.side_data_blob = base::MakeRefCounted<storage::BlobHandle>( - blink::mojom::BlobPtr(std::move(input.side_data_blob->blob))); - } - return output; - } -}; - -} // namespace mojo - namespace content { namespace background_fetch { @@ -214,7 +171,7 @@ FillUncachedResponse(settled_fetch, std::move(callback)); return; } - settled_fetch->response = cache_response->To<ServiceWorkerResponse>(); + settled_fetch->response = std::move(cache_response); std::move(callback).Run(); } @@ -224,9 +181,11 @@ background_fetch_succeeded_ = false; // TODO(rayankans): Fill unmatched response with error reports. - settled_fetch->response.response_type = + DCHECK(!settled_fetch->response); + settled_fetch->response = blink::mojom::FetchAPIResponse::New(); + settled_fetch->response->response_type = network::mojom::FetchResponseType::kError; - settled_fetch->response.url_list.push_back(settled_fetch->request.url); + settled_fetch->response->url_list.push_back(settled_fetch->request.url); std::move(callback).Run(); }
diff --git a/content/browser/background_fetch/storage/mark_registration_for_deletion_task.cc b/content/browser/background_fetch/storage/mark_registration_for_deletion_task.cc index 1f12e1a1..6007fb6b 100644 --- a/content/browser/background_fetch/storage/mark_registration_for_deletion_task.cc +++ b/content/browser/background_fetch/storage/mark_registration_for_deletion_task.cc
@@ -47,7 +47,8 @@ FinishWithError(blink::mojom::BackgroundFetchError::INVALID_ID); return; case DatabaseStatus::kFailed: - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; } @@ -75,7 +76,8 @@ } else { // Service worker database has been corrupted. Abandon fetches. AbandonFetches(registration_id_.service_worker_registration_id()); - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; } } @@ -87,7 +89,8 @@ case DatabaseStatus::kNotFound: break; case DatabaseStatus::kFailed: - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; } @@ -100,10 +103,15 @@ void MarkRegistrationForDeletionTask::FinishWithError( blink::mojom::BackgroundFetchError error) { + ReportStorageError(); std::move(callback_).Run(error); Finished(); // Destroys |this|. } +std::string MarkRegistrationForDeletionTask::HistogramName() const { + return "MarkRegistrationForDeletionTask"; +} + } // namespace background_fetch } // namespace content
diff --git a/content/browser/background_fetch/storage/mark_registration_for_deletion_task.h b/content/browser/background_fetch/storage/mark_registration_for_deletion_task.h index 0c78c17..a411955 100644 --- a/content/browser/background_fetch/storage/mark_registration_for_deletion_task.h +++ b/content/browser/background_fetch/storage/mark_registration_for_deletion_task.h
@@ -37,6 +37,8 @@ void FinishWithError(blink::mojom::BackgroundFetchError error) override; + std::string HistogramName() const override; + BackgroundFetchRegistrationId registration_id_; HandleBackgroundFetchErrorCallback callback_;
diff --git a/content/browser/background_fetch/storage/mark_request_complete_task.cc b/content/browser/background_fetch/storage/mark_request_complete_task.cc index 998eaa4..def9f0b0 100644 --- a/content/browser/background_fetch/storage/mark_request_complete_task.cc +++ b/content/browser/background_fetch/storage/mark_request_complete_task.cc
@@ -39,11 +39,11 @@ DatabaseTaskHost* host, BackgroundFetchRegistrationId registration_id, scoped_refptr<BackgroundFetchRequestInfo> request_info, - MarkedCompleteCallback callback) + base::OnceClosure closure) : DatabaseTask(host), registration_id_(registration_id), request_info_(std::move(request_info)), - callback_(std::move(callback)), + closure_(std::move(closure)), weak_factory_(this) {} MarkRequestCompleteTask::~MarkRequestCompleteTask() = default; @@ -140,10 +140,11 @@ CacheStorageCacheHandle handle, blink::mojom::CacheStorageError error) { if (error != blink::mojom::CacheStorageError::kSuccess) { - // TODO(crbug.com/780025): Log failures to UMA. + SetStorageError(BackgroundFetchStorageError::kCacheStorageError); CreateAndStoreCompletedRequest(std::move(done_closure)); return; } + DCHECK(handle.value()); auto request = std::make_unique<ServiceWorkerFetchRequest>( @@ -162,7 +163,8 @@ CacheStorageCacheHandle handle, base::OnceClosure done_closure, blink::mojom::CacheStorageError error) { - // TODO(crbug.com/780025): Log failures to UMA. + if (error != blink::mojom::CacheStorageError::kSuccess) + SetStorageError(BackgroundFetchStorageError::kCacheStorageError); CreateAndStoreCompletedRequest(std::move(done_closure)); } @@ -193,7 +195,7 @@ break; case DatabaseStatus::kFailed: case DatabaseStatus::kNotFound: - // TODO(crbug.com/780025): Log failures to UMA. + SetStorageError(BackgroundFetchStorageError::kServiceWorkerStorageError); std::move(done_closure).Run(); return; } @@ -210,7 +212,8 @@ void MarkRequestCompleteTask::DidDeleteActiveRequest( base::OnceClosure done_closure, blink::ServiceWorkerStatusCode status) { - // TODO(crbug.com/780025): Log failures to UMA. + if (ToDatabaseStatus(status) != DatabaseStatus::kOk) + SetStorageError(BackgroundFetchStorageError::kServiceWorkerStorageError); std::move(done_closure).Run(); } @@ -232,7 +235,7 @@ blink::mojom::BackgroundFetchError error, std::unique_ptr<proto::BackgroundFetchMetadata> metadata) { if (!metadata || error != blink::mojom::BackgroundFetchError::NONE) { - // TODO(crbug.com/780025): Log failures to UMA. + SetStorageError(BackgroundFetchStorageError::kServiceWorkerStorageError); std::move(done_closure).Run(); return; } @@ -252,16 +255,22 @@ void MarkRequestCompleteTask::DidStoreMetadata( base::OnceClosure done_closure, blink::ServiceWorkerStatusCode status) { - // TODO(crbug.com/780025): Log failures to UMA. + SetStorageError(BackgroundFetchStorageError::kServiceWorkerStorageError); std::move(done_closure).Run(); } void MarkRequestCompleteTask::FinishWithError( blink::mojom::BackgroundFetchError error) { - std::move(callback_).Run(); + ReportStorageError(); + + std::move(closure_).Run(); Finished(); } +std::string MarkRequestCompleteTask::HistogramName() const { + return "MarkRequestCompleteTask"; +} + } // namespace background_fetch } // namespace content
diff --git a/content/browser/background_fetch/storage/mark_request_complete_task.h b/content/browser/background_fetch/storage/mark_request_complete_task.h index 4bc6895..2e44c16 100644 --- a/content/browser/background_fetch/storage/mark_request_complete_task.h +++ b/content/browser/background_fetch/storage/mark_request_complete_task.h
@@ -21,13 +21,11 @@ // download response in cache storage. class MarkRequestCompleteTask : public DatabaseTask { public: - using MarkedCompleteCallback = base::OnceCallback<void()>; - MarkRequestCompleteTask( DatabaseTaskHost* host, BackgroundFetchRegistrationId registration_id, scoped_refptr<BackgroundFetchRequestInfo> request_info, - MarkedCompleteCallback callback); + base::OnceClosure closure); ~MarkRequestCompleteTask() override; @@ -67,9 +65,11 @@ void FinishWithError(blink::mojom::BackgroundFetchError error) override; + std::string HistogramName() const override; + BackgroundFetchRegistrationId registration_id_; scoped_refptr<BackgroundFetchRequestInfo> request_info_; - MarkedCompleteCallback callback_; + base::OnceClosure closure_; proto::BackgroundFetchCompletedRequest completed_request_; bool is_response_successful_ = true;
diff --git a/content/browser/background_fetch/storage/start_next_pending_request_task.cc b/content/browser/background_fetch/storage/start_next_pending_request_task.cc index d0ae4e3..acccbe3 100644 --- a/content/browser/background_fetch/storage/start_next_pending_request_task.cc +++ b/content/browser/background_fetch/storage/start_next_pending_request_task.cc
@@ -46,8 +46,8 @@ switch (ToDatabaseStatus(status)) { case DatabaseStatus::kNotFound: case DatabaseStatus::kFailed: - // TODO(crbug.com/780025): Log failures to UMA. - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; case DatabaseStatus::kOk: if (data.empty()) { @@ -60,7 +60,8 @@ if (!pending_request_.ParseFromString(data.front())) { // Service Worker database has been corrupted. Abandon fetches. AbandonFetches(registration_id_.service_worker_registration_id()); - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; } @@ -79,7 +80,8 @@ blink::ServiceWorkerStatusCode status) { switch (ToDatabaseStatus(status)) { case DatabaseStatus::kFailed: - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; case DatabaseStatus::kNotFound: CreateAndStoreActiveRequest(); @@ -89,7 +91,8 @@ if (!active_request_.ParseFromString(data.front())) { // Service worker database has been corrupted. Abandon fetches. AbandonFetches(registration_id_.service_worker_registration_id()); - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; } StartDownload(); @@ -125,7 +128,8 @@ break; case DatabaseStatus::kFailed: case DatabaseStatus::kNotFound: - FinishWithError(blink::mojom::BackgroundFetchError::NONE); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; } StartDownload(); @@ -153,17 +157,28 @@ void StartNextPendingRequestTask::DidDeletePendingRequest( blink::ServiceWorkerStatusCode status) { - // TODO(crbug.com/780025): Log failures to UMA. - FinishWithError(blink::mojom::BackgroundFetchError::NONE); + if (ToDatabaseStatus(status) != DatabaseStatus::kOk) { + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); + } else { + FinishWithError(blink::mojom::BackgroundFetchError::NONE); + } } void StartNextPendingRequestTask::FinishWithError( blink::mojom::BackgroundFetchError error) { + ReportStorageError(); + if (callback_) std::move(callback_).Run(nullptr /* request */); + Finished(); // Destroys |this|. } +std::string StartNextPendingRequestTask::HistogramName() const { + return "StartNextPendingRequestTask"; +} + } // namespace background_fetch } // namespace content
diff --git a/content/browser/background_fetch/storage/start_next_pending_request_task.h b/content/browser/background_fetch/storage/start_next_pending_request_task.h index fcef4e4..5faaeb0 100644 --- a/content/browser/background_fetch/storage/start_next_pending_request_task.h +++ b/content/browser/background_fetch/storage/start_next_pending_request_task.h
@@ -53,6 +53,8 @@ void FinishWithError(blink::mojom::BackgroundFetchError error) override; + std::string HistogramName() const override; + BackgroundFetchRegistrationId registration_id_; BackgroundFetchRegistration registration_; NextRequestCallback callback_;
diff --git a/content/browser/background_fetch/storage/update_registration_ui_task.cc b/content/browser/background_fetch/storage/update_registration_ui_task.cc index 7f81f6b3..e86b2d2 100644 --- a/content/browser/background_fetch/storage/update_registration_ui_task.cc +++ b/content/browser/background_fetch/storage/update_registration_ui_task.cc
@@ -53,7 +53,8 @@ blink::ServiceWorkerStatusCode status) { switch (ToDatabaseStatus(status)) { case DatabaseStatus::kFailed: - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; case DatabaseStatus::kNotFound: case DatabaseStatus::kOk: @@ -61,7 +62,8 @@ } if (data.empty() || !ui_options_.ParseFromString(data[0])) { - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; } @@ -100,7 +102,8 @@ break; case DatabaseStatus::kFailed: case DatabaseStatus::kNotFound: - FinishWithError(blink::mojom::BackgroundFetchError::STORAGE_ERROR); + SetStorageErrorAndFinish( + BackgroundFetchStorageError::kServiceWorkerStorageError); return; } @@ -112,10 +115,16 @@ for (auto& observer : data_manager()->observers()) observer.OnUpdatedUI(registration_id_, title_, icon_); + ReportStorageError(); + std::move(callback_).Run(error); Finished(); // Destroys |this|. } +std::string UpdateRegistrationUITask::HistogramName() const { + return "UpdateRegistrationUITask"; +} + } // namespace background_fetch } // namespace content
diff --git a/content/browser/background_fetch/storage/update_registration_ui_task.h b/content/browser/background_fetch/storage/update_registration_ui_task.h index c5fe433..1958f7ce 100644 --- a/content/browser/background_fetch/storage/update_registration_ui_task.h +++ b/content/browser/background_fetch/storage/update_registration_ui_task.h
@@ -46,6 +46,8 @@ void FinishWithError(blink::mojom::BackgroundFetchError error) override; + std::string HistogramName() const override; + BackgroundFetchRegistrationId registration_id_; base::Optional<std::string> title_; base::Optional<SkBitmap> icon_;
diff --git a/content/browser/devtools/protocol/system_info_handler.cc b/content/browser/devtools/protocol/system_info_handler.cc index c6673d3..c0c84ef 100644 --- a/content/browser/devtools/protocol/system_info_handler.cc +++ b/content/browser/devtools/protocol/system_info_handler.cc
@@ -33,7 +33,8 @@ // Give the GPU process a few seconds to provide GPU info. // Linux Debug builds need more time -- see Issue 796437. -#if defined(OS_LINUX) && !defined(NDEBUG) +// Windows builds need more time -- see Issue 873112. +#if (defined(OS_LINUX) && !defined(NDEBUG)) || defined(OS_WIN) const int kGPUInfoWatchdogTimeoutMs = 20000; #else const int kGPUInfoWatchdogTimeoutMs = 5000;
diff --git a/content/browser/frame_host/interstitial_page_impl.cc b/content/browser/frame_host/interstitial_page_impl.cc index 04922e2..9b2e4ec 100644 --- a/content/browser/frame_host/interstitial_page_impl.cc +++ b/content/browser/frame_host/interstitial_page_impl.cc
@@ -528,6 +528,7 @@ if (!controller_->delegate()->IsHidden()) render_view_host_->GetWidget()->GetView()->Show(); controller_->delegate()->AttachInterstitialPage(this); + render_view_host_->GetWidget()->GetView()->OnInterstitialPageAttached(); RenderWidgetHostView* rwh_view = controller_->delegate()->GetRenderViewHost()->GetWidget()->GetView();
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index a710cf1..143644b 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -846,7 +846,7 @@ Send(new FrameMsg_MediaPlayerActionAt(routing_id_, point_in_view, action)); } -void RenderFrameHostImpl::CreateNetworkServiceDefaultFactory( +bool RenderFrameHostImpl::CreateNetworkServiceDefaultFactory( network::mojom::URLLoaderFactoryRequest default_factory_request) { network::mojom::URLLoaderFactoryParamsPtr params = network::mojom::URLLoaderFactoryParams::New(); @@ -857,9 +857,9 @@ SiteIsolationPolicy::PopulateURLLoaderFactoryParamsPtrForCORB(params.get()); auto* context = GetSiteInstance()->GetBrowserContext(); - GetContentClient()->browser()->WillCreateURLLoaderFactory( - context, this, false /* is_navigation */, &default_factory_request, - nullptr /* redirect_checker */); + bool bypass_redirect_checks = + GetContentClient()->browser()->WillCreateURLLoaderFactory( + context, this, false /* is_navigation */, &default_factory_request); // Keep DevTools proxy lasy, i.e. closest to the network. RenderFrameDevToolsAgentHost::WillCreateURLLoaderFactory( this, false /* is_navigation */, false /* is_download */, @@ -877,6 +877,7 @@ std::move(default_factory_request), GetProcess()->GetID(), original_factory.PassInterface()); } + return bypass_redirect_checks; } gfx::NativeView RenderFrameHostImpl::GetNativeView() { @@ -4034,8 +4035,11 @@ if (!default_factory_info) { // Otherwise default to a Network Service-backed loader from the // appropriate NetworkContext. - CreateNetworkServiceDefaultFactoryAndObserve( - mojo::MakeRequest(&default_factory_info)); + bool bypass_redirect_checks = + CreateNetworkServiceDefaultFactoryAndObserve( + mojo::MakeRequest(&default_factory_info)); + subresource_loader_factories->set_bypass_redirect_checks( + bypass_redirect_checks); } DCHECK(default_factory_info); @@ -4080,8 +4084,7 @@ network::mojom::URLLoaderFactoryPtrInfo factory_proxy_info; auto factory_request = mojo::MakeRequest(&factory_proxy_info); GetContentClient()->browser()->WillCreateURLLoaderFactory( - browser_context, this, false /* is_navigation */, &factory_request, - nullptr /* redirect_checker */); + browser_context, this, false /* is_navigation */, &factory_request); // Keep DevTools proxy lasy, i.e. closest to the network. RenderFrameDevToolsAgentHost::WillCreateURLLoaderFactory( this, false /* is_navigation */, false /* is_download */, @@ -4210,11 +4213,12 @@ std::unique_ptr<URLLoaderFactoryBundleInfo> subresource_loader_factories; if (base::FeatureList::IsEnabled(network::features::kNetworkService)) { network::mojom::URLLoaderFactoryPtrInfo default_factory_info; - CreateNetworkServiceDefaultFactoryAndObserve( + bool bypass_redirect_checks = CreateNetworkServiceDefaultFactoryAndObserve( mojo::MakeRequest(&default_factory_info)); subresource_loader_factories = std::make_unique<URLLoaderFactoryBundleInfo>( std::move(default_factory_info), - std::map<std::string, network::mojom::URLLoaderFactoryPtrInfo>()); + std::map<std::string, network::mojom::URLLoaderFactoryPtrInfo>(), + bypass_redirect_checks); } SaveSubresourceFactories(std::move(subresource_loader_factories)); @@ -4748,13 +4752,14 @@ DCHECK(network_service_connection_error_handler_holder_.is_bound()); network::mojom::URLLoaderFactoryPtrInfo default_factory_info; - CreateNetworkServiceDefaultFactoryAndObserve( + bool bypass_redirect_checks = CreateNetworkServiceDefaultFactoryAndObserve( mojo::MakeRequest(&default_factory_info)); std::unique_ptr<URLLoaderFactoryBundleInfo> subresource_loader_factories = - std::make_unique<URLLoaderFactoryBundleInfo>(); - subresource_loader_factories->default_factory_info() = - std::move(default_factory_info); + std::make_unique<URLLoaderFactoryBundleInfo>( + std::move(default_factory_info), + std::map<std::string, network::mojom::URLLoaderFactoryPtrInfo>(), + bypass_redirect_checks); SaveSubresourceFactories(std::move(subresource_loader_factories)); GetNavigationControl()->UpdateSubresourceLoaderFactories( CloneSubresourceFactories()); @@ -4769,9 +4774,10 @@ return result; } -void RenderFrameHostImpl::CreateNetworkServiceDefaultFactoryAndObserve( +bool RenderFrameHostImpl::CreateNetworkServiceDefaultFactoryAndObserve( network::mojom::URLLoaderFactoryRequest default_factory_request) { - CreateNetworkServiceDefaultFactory(std::move(default_factory_request)); + bool bypass_redirect_checks = + CreateNetworkServiceDefaultFactory(std::move(default_factory_request)); // Add connection error observer when Network Service is running // out-of-process. @@ -4791,6 +4797,7 @@ &RenderFrameHostImpl::UpdateSubresourceLoaderFactories, weak_ptr_factory_.GetWeakPtr())); } + return bypass_redirect_checks; } bool RenderFrameHostImpl::CanExecuteJavaScript() { @@ -5158,6 +5165,9 @@ navigation_request_ ? navigation_request_->navigation_handle() : nullptr; // Determine if the current NavigationHandle can be used. + // + // TODO(lukasza, clamy): https://crbug.com/784904: Match commit IPC to proper + // NavigationHandle without requiring URLs to match. if (navigation_handle && navigation_handle->GetURL() == params.url) { std::unique_ptr<NavigationHandleImpl> result_navigation_handle = navigation_request()->TakeNavigationHandle(); @@ -5166,15 +5176,29 @@ return result_navigation_handle; } - // If the URL does not match what the NavigationHandle expects, treat the - // commit as a new navigation. This can happen when loading a Data - // navigation with LoadDataWithBaseURL. + // At this point we know that the right/matching |navigation_request_| has + // already been found based on navigation id look-up performed by + // RFHI::OnCrossDocumentCommitProcessed. OTOH, we cannot use + // |navigation_handle|, because it has a mismatched URL (which would cause + // DCHECKs - for example in NavigationHandleImpl::DidCommitNavigation). // + // Because of the above, if the URL does not match what the NavigationHandle + // expects, we want to treat the commit as a new navigation. + // This mostly works, but there are some remaining issues here tracked + // by https://crbug.com/872803. + // + // The URL mismatch can happen when loading a Data navigation with + // LoadDataWithBaseURL. // TODO(csharrison): Data navigations loaded with LoadDataWithBaseURL get // reset here, because the NavigationHandle tracks the URL but the params.url // tracks the data. The trick of saving the old entry ids for these // navigations should go away when this is properly handled. - // See crbug.com/588317. + // See https://crbug.com/588317. + // + // Other cases are where URL mismatch can happen is when committing an error + // page - for example this can happen during CSP/frame-ancestors checks (see + // https://crbug.com/759184). + int entry_id_for_data_nav = 0; bool is_renderer_initiated = true; @@ -5198,6 +5222,11 @@ entry_id_for_data_nav = navigation_handle->pending_nav_entry_id(); is_renderer_initiated = pending_entry->is_renderer_initiated(); } + + // Going forward we'll use the NavigationHandle created below. Therefore we + // should destroy the old |navigation_request_| and the NavigationHandle it + // owns. This avoids the leak reported in https://crbug.com/872803. + navigation_request_.reset(); } // There is no pending NavigationEntry in these cases, so pass 0 as the
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h index e4231a5..970421be 100644 --- a/content/browser/frame_host/render_frame_host_impl.h +++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -251,7 +251,7 @@ void ExecuteMediaPlayerActionAtLocation( const gfx::Point&, const blink::WebMediaPlayerAction& action) override; - void CreateNetworkServiceDefaultFactory( + bool CreateNetworkServiceDefaultFactory( network::mojom::URLLoaderFactoryRequest default_factory_request) override; // IPC::Sender @@ -1044,8 +1044,10 @@ // Creates a Network Service-backed factory from appropriate |NetworkContext| // and sets a connection error handler to trigger - // |OnNetworkServiceConnectionError()| if the factory is out-of-process. - void CreateNetworkServiceDefaultFactoryAndObserve( + // |OnNetworkServiceConnectionError()| if the factory is out-of-process. If + // this returns true, any redirect safety checks should be bypassed in + // downstream loaders. + bool CreateNetworkServiceDefaultFactoryAndObserve( network::mojom::URLLoaderFactoryRequest default_factory_request); // Returns true if the ExecuteJavaScript() API can be used on this host.
diff --git a/content/browser/frame_host/render_frame_host_impl_browsertest.cc b/content/browser/frame_host/render_frame_host_impl_browsertest.cc index 87210e4..078899ab 100644 --- a/content/browser/frame_host/render_frame_host_impl_browsertest.cc +++ b/content/browser/frame_host/render_frame_host_impl_browsertest.cc
@@ -28,6 +28,7 @@ #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h" +#include "content/public/test/navigation_handle_observer.h" #include "content/public/test/test_frame_navigation_observer.h" #include "content/public/test/test_navigation_observer.h" #include "content/public/test/test_utils.h" @@ -1831,4 +1832,44 @@ main_frame->GetCanonicalUrlForSharing(base::DoNothing()); } +// This test makes sure that when a blocked frame commits with a different URL, +// it doesn't lead to a leaked NavigationHandle. This is a regression test for +// https://crbug.com/872803. +IN_PROC_BROWSER_TEST_F(RenderFrameHostImplBrowserTest, + ErrorPagesShouldntLeakNavigationHandles) { + GURL main_url(embedded_test_server()->GetURL( + "foo.com", "/frame_tree/page_with_one_frame.html")); + EXPECT_TRUE(NavigateToURL(shell(), main_url)); + + GURL blocked_url(embedded_test_server()->GetURL( + "blocked.com", "/frame-ancestors-none.html")); + WebContents* web_contents = shell()->web_contents(); + NavigationHandleObserver nav_handle_observer(web_contents, blocked_url); + EXPECT_TRUE(NavigateIframeToURL(web_contents, "child0", blocked_url)); + + // Verify that the NavigationHandle / NavigationRequest didn't leak. + RenderFrameHostImpl* frame = static_cast<RenderFrameHostImpl*>( + shell()->web_contents()->GetAllFrames()[1]); + EXPECT_EQ(0u, frame->GetNavigationEntryIdsPendingCommit().size()); + + // TODO(lukasza, clamy): https://crbug.com/784904: Verify that + // WebContentsObserver::DidFinishNavigation was called with the same + // NavigationHandle as WebContentsObserver::DidStartNavigation. This requires + // properly matching the commit IPC to the NavigationHandle (ignoring that + // their URLs do not match - matching instead using navigation id or mojo + // interface identity). + // + // Subsequent checks don't make sense before WCO::DidFinishNavigation is + // called - this is why ASSERT_TRUE is used here. + // ASSERT_TRUE(nav_handle_observer.has_committed()); + // EXPECT_EQ(net::ERR_BLOCKED_BY_RESPONSE, + // nav_handle_observer.net_error_code()); + + // TODO(lukasza): https://crbug.com/759184: Verify + // |nav_handle_observer.last_committed_url()| below - this should be possible + // once we handle frame-ancestors CSP in the browser process and commit it + // with the original URL. + // EXPECT_EQ(blocked_url, nav_handle_observer.last_committed_url()); +} + } // namespace content
diff --git a/content/browser/gpu/ca_transaction_gpu_coordinator.cc b/content/browser/gpu/ca_transaction_gpu_coordinator.cc index 38af2b3b..8f3efa6a 100644 --- a/content/browser/gpu/ca_transaction_gpu_coordinator.cc +++ b/content/browser/gpu/ca_transaction_gpu_coordinator.cc
@@ -13,30 +13,52 @@ namespace content { -CATransactionGPUCoordinator::CATransactionGPUCoordinator(GpuProcessHost* host) - : host_(host) { +// static +scoped_refptr<CATransactionGPUCoordinator> CATransactionGPUCoordinator::Create( + GpuProcessHost* host) { + scoped_refptr<CATransactionGPUCoordinator> result( + new CATransactionGPUCoordinator(host)); + // Avoid modifying result's refcount in the constructor by performing this + // PostTask afterward. DCHECK_CURRENTLY_ON(BrowserThread::IO); ui::WindowResizeHelperMac::Get()->task_runner()->PostTask( FROM_HERE, - base::BindOnce(&ui::CATransactionCoordinator::AddPostCommitObserver, - base::Unretained(&ui::CATransactionCoordinator::Get()), - base::RetainedRef(this))); + base::BindOnce( + &CATransactionGPUCoordinator::AddPostCommitObserverOnUIThread, + result)); + return result; } +CATransactionGPUCoordinator::CATransactionGPUCoordinator(GpuProcessHost* host) + : host_(host) {} + CATransactionGPUCoordinator::~CATransactionGPUCoordinator() { DCHECK(!host_); + DCHECK(!registered_as_observer_); } void CATransactionGPUCoordinator::HostWillBeDestroyed() { DCHECK_CURRENTLY_ON(BrowserThread::IO); ui::WindowResizeHelperMac::Get()->task_runner()->PostTask( FROM_HERE, - base::BindOnce(&ui::CATransactionCoordinator::RemovePostCommitObserver, - base::Unretained(&ui::CATransactionCoordinator::Get()), - base::RetainedRef(this))); + base::BindOnce( + &CATransactionGPUCoordinator::RemovePostCommitObserverOnUIThread, + this)); host_ = nullptr; } +void CATransactionGPUCoordinator::AddPostCommitObserverOnUIThread() { + DCHECK(!registered_as_observer_); + ui::CATransactionCoordinator::Get().AddPostCommitObserver(this); + registered_as_observer_ = true; +} + +void CATransactionGPUCoordinator::RemovePostCommitObserverOnUIThread() { + DCHECK(registered_as_observer_); + ui::CATransactionCoordinator::Get().RemovePostCommitObserver(this); + registered_as_observer_ = false; +} + void CATransactionGPUCoordinator::OnActivateForTransaction() { DCHECK_CURRENTLY_ON(BrowserThread::UI); BrowserThread::PostTask(
diff --git a/content/browser/gpu/ca_transaction_gpu_coordinator.h b/content/browser/gpu/ca_transaction_gpu_coordinator.h index 8abda39b..53b52a2 100644 --- a/content/browser/gpu/ca_transaction_gpu_coordinator.h +++ b/content/browser/gpu/ca_transaction_gpu_coordinator.h
@@ -17,30 +17,41 @@ // Synchronizes CATransaction commits between the browser and GPU processes. class CATransactionGPUCoordinator - : public base::RefCountedThreadSafe<CATransactionGPUCoordinator>, - public ui::CATransactionCoordinator::PostCommitObserver { + : public ui::CATransactionCoordinator::PostCommitObserver { public: - CATransactionGPUCoordinator(GpuProcessHost* host); - + static scoped_refptr<CATransactionGPUCoordinator> Create( + GpuProcessHost* host); void HostWillBeDestroyed(); private: friend class base::RefCountedThreadSafe<CATransactionGPUCoordinator>; - virtual ~CATransactionGPUCoordinator(); + CATransactionGPUCoordinator(GpuProcessHost* host); + ~CATransactionGPUCoordinator() override; // ui::CATransactionObserver implementation void OnActivateForTransaction() override; void OnEnterPostCommit() override; bool ShouldWaitInPostCommit() override; + void AddPostCommitObserverOnUIThread(); + void RemovePostCommitObserverOnUIThread(); + void OnActivateForTransactionOnIO(); void OnEnterPostCommitOnIO(); void OnCommitCompletedOnIO(); void OnCommitCompletedOnUI(); - GpuProcessHost* host_; // weak + // The GpuProcessHost to use to initiate GPU-side CATransactions. This is only + // to be accessed on the IO thread. + GpuProcessHost* host_ = nullptr; + + // The number CATransactions that have not yet completed. This is only to be + // accessed on the UI thread. int pending_commit_count_ = 0; + // Egregious state tracking to debug https://crbug.com/871430 + bool registered_as_observer_ = false; + DISALLOW_COPY_AND_ASSIGN(CATransactionGPUCoordinator); };
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc index 29ee919..e6e0973 100644 --- a/content/browser/gpu/gpu_process_host.cc +++ b/content/browser/gpu/gpu_process_host.cc
@@ -702,11 +702,6 @@ kind_(kind), process_launched_(false), status_(UNKNOWN), -#if defined(OS_MACOSX) - // TODO(ccameron): This is temporarily disabled to see if it is the cause - // of https://crbug.com/871430 - ca_transaction_gpu_coordinator_(nullptr), -#endif gpu_host_binding_(this), weak_ptr_factory_(this) { if (base::CommandLine::ForCurrentProcess()->HasSwitch( @@ -938,6 +933,10 @@ InitOzone(); #endif // defined(USE_OZONE) +#if defined(OS_MACOSX) + ca_transaction_gpu_coordinator_ = CATransactionGPUCoordinator::Create(this); +#endif + return true; }
diff --git a/content/browser/loader/loader_browsertest.cc b/content/browser/loader/loader_browsertest.cc index 2a7dd5c..435e302 100644 --- a/content/browser/loader/loader_browsertest.cc +++ b/content/browser/loader/loader_browsertest.cc
@@ -628,6 +628,93 @@ EXPECT_TRUE(delegate.page_transition() & ui::PAGE_TRANSITION_CLIENT_REDIRECT); } +IN_PROC_BROWSER_TEST_F(LoaderBrowserTest, SubresourceRedirectToDataURLBlocked) { + ASSERT_TRUE(embedded_test_server()->Start()); + + EXPECT_TRUE(NavigateToURL(shell(), embedded_test_server()->GetURL("/echo"))); + + GURL subresource_url = embedded_test_server()->GetURL( + "/server-redirect?data:text/plain,redirected1"); + std::string script = R"((url => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.onload = () => domAutomationController.send("ALLOWED"); + xhr.onerror = () => domAutomationController.send("BLOCKED"); + xhr.send(); + }))"; + std::string result; + ASSERT_TRUE(ExecuteScriptAndExtractString( + shell(), script + "('" + subresource_url.spec() + "')", &result)); + + EXPECT_EQ("BLOCKED", result); +} + +IN_PROC_BROWSER_TEST_F(LoaderBrowserTest, RedirectToDataURLBlocked) { + ASSERT_TRUE(embedded_test_server()->Start()); + EXPECT_FALSE(NavigateToURL( + shell(), embedded_test_server()->GetURL( + "/server-redirect?data:text/plain,redirected1"))); +} + +namespace { + +// Creates a valid filesystem URL. +GURL CreateFileSystemURL(Shell* window) { + std::string filesystem_url_string; + EXPECT_TRUE( + ExecuteScriptAndExtractString(window, R"( + var blob = new Blob(['<html><body>hello</body></html>'], + {type: 'text/html'}); + window.webkitRequestFileSystem(TEMPORARY, blob.size, fs => { + fs.root.getFile('foo.html', {create: true}, file => { + file.createWriter(writer => { + writer.write(blob); + writer.onwriteend = () => { + domAutomationController.send(file.toURL()); + } + }); + }); + });)", &filesystem_url_string)); + GURL filesystem_url(filesystem_url_string); + EXPECT_TRUE(filesystem_url.is_valid()); + EXPECT_TRUE(filesystem_url.SchemeIsFileSystem()); + return filesystem_url; +} + +} // namespace + +IN_PROC_BROWSER_TEST_F(LoaderBrowserTest, + SubresourceRedirectToFileSystemURLBlocked) { + ASSERT_TRUE(embedded_test_server()->Start()); + + EXPECT_TRUE(NavigateToURL(shell(), embedded_test_server()->GetURL("/echo"))); + + GURL subresource_url = embedded_test_server()->GetURL( + "/server-redirect?" + CreateFileSystemURL(shell()).spec()); + std::string script = R"((url => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.onload = () => domAutomationController.send("ALLOWED"); + xhr.onerror = () => domAutomationController.send("BLOCKED"); + xhr.send(); + }))"; + std::string result; + ASSERT_TRUE(ExecuteScriptAndExtractString( + shell(), script + "('" + subresource_url.spec() + "')", &result)); + + EXPECT_EQ("BLOCKED", result); +} + +IN_PROC_BROWSER_TEST_F(LoaderBrowserTest, RedirectToFileSystemURLBlocked) { + ASSERT_TRUE(embedded_test_server()->Start()); + // Need to navigate to a URL first so the filesystem can be created. + EXPECT_TRUE(NavigateToURL(shell(), embedded_test_server()->GetURL("/echo"))); + + EXPECT_FALSE(NavigateToURL( + shell(), embedded_test_server()->GetURL( + "/server-redirect?" + CreateFileSystemURL(shell()).spec()))); +} + namespace { // Checks whether the given urls are requested, and that GetPreviewsState()
diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc index e51aedd..da35abf 100644 --- a/content/browser/loader/navigation_url_loader_impl.cc +++ b/content/browser/loader/navigation_url_loader_impl.cc
@@ -10,6 +10,7 @@ #include "base/bind_helpers.h" #include "base/feature_list.h" #include "base/metrics/histogram_macros.h" +#include "base/optional.h" #include "base/stl_util.h" #include "base/task/post_task.h" #include "base/trace_event/trace_event.h" @@ -52,7 +53,6 @@ #include "content/public/browser/navigation_data.h" #include "content/public/browser/navigation_ui_data.h" #include "content/public/browser/plugin_service.h" -#include "content/public/browser/redirect_checker.h" #include "content/public/browser/resource_dispatcher_host_delegate.h" #include "content/public/browser/ssl_status.h" #include "content/public/browser/url_loader_request_interceptor.h" @@ -62,8 +62,11 @@ #include "content/public/common/url_utils.h" #include "content/public/common/webplugininfo.h" #include "net/base/load_flags.h" +#include "net/cert/sct_status_flags.h" +#include "net/cert/signed_certificate_timestamp_and_status.h" #include "net/http/http_content_disposition.h" #include "net/http/http_request_headers.h" +#include "net/ssl/ssl_info.h" #include "net/traffic_annotation/network_traffic_annotation.h" #include "net/url_request/redirect_util.h" #include "net/url_request/url_request.h" @@ -312,14 +315,8 @@ } // Determines whether it is safe to redirect to |url|. -bool IsSafeRedirectTarget(const GURL& url, ResourceContext* resource_context) { - static base::NoDestructor<std::set<std::string>> kUnsafeSchemes( - std::set<std::string>({ - url::kAboutScheme, url::kDataScheme, url::kFileScheme, - url::kFileSystemScheme, - })); - return !HasWebUIScheme(url) && - kUnsafeSchemes->find(url.scheme()) == kUnsafeSchemes->end() && +bool IsRedirectSafe(const GURL& url, ResourceContext* resource_context) { + return IsSafeRedirectTarget(url) && GetContentClient()->browser()->IsSafeRedirectTarget(url, resource_context); } @@ -342,21 +339,23 @@ std::unique_ptr<network::ResourceRequest> resource_request, ResourceContext* resource_context, const GURL& url, + bool is_main_frame, network::mojom::URLLoaderFactoryRequest proxied_factory_request, network::mojom::URLLoaderFactoryPtrInfo proxied_factory_info, std::set<std::string> known_schemes, - scoped_refptr<RedirectChecker> redirect_checker, + bool bypass_redirect_checks, const base::WeakPtr<NavigationURLLoaderImpl>& owner) : interceptors_(std::move(initial_interceptors)), resource_request_(std::move(resource_request)), resource_context_(resource_context), url_(url), + is_main_frame_(is_main_frame), owner_(owner), response_loader_binding_(this), proxied_factory_request_(std::move(proxied_factory_request)), proxied_factory_info_(std::move(proxied_factory_info)), known_schemes_(std::move(known_schemes)), - redirect_checker_(std::move(redirect_checker)), + bypass_redirect_checks_(bypass_redirect_checks), weak_factory_(this) {} ~URLLoaderRequestController() override { @@ -938,6 +937,11 @@ private: // network::mojom::URLLoaderClient implementation: void OnReceiveResponse(const network::ResourceResponseHead& head) override { + // Record the SCT histogram before checking if anything wants to intercept + // the response, so interceptors like AppCache and extensions can't hide + // values from the histograms. + RecordSCTHistogramIfNeeded(head.ssl_info); + received_response_ = true; // If the default loader (network) was used to handle the URL load request @@ -1121,17 +1125,11 @@ void OnReceiveRedirect(const net::RedirectInfo& redirect_info, const network::ResourceResponseHead& head) override { - if (base::FeatureList::IsEnabled(network::features::kNetworkService)) { - bool bypass_safety_checks = - redirect_checker_ && - redirect_checker_->ShouldAllowRedirect(global_request_id_.request_id, - redirect_info); - if (!bypass_safety_checks && - !IsSafeRedirectTarget(redirect_info.new_url, resource_context_)) { - OnComplete( - network::URLLoaderCompletionStatus(net::ERR_UNSAFE_REDIRECT)); - return; - } + if (base::FeatureList::IsEnabled(network::features::kNetworkService) && + !bypass_redirect_checks_ && + !IsRedirectSafe(redirect_info.new_url, resource_context_)) { + OnComplete(network::URLLoaderCompletionStatus(net::ERR_UNSAFE_REDIRECT)); + return; } if (--redirect_limit_ == 0) { @@ -1174,6 +1172,8 @@ } void OnComplete(const network::URLLoaderCompletionStatus& status) override { + RecordSCTHistogramIfNeeded(status.ssl_info); + UMA_HISTOGRAM_BOOLEAN( "Navigation.URLLoaderNetworkService.OnCompleteHasSSLInfo", status.ssl_info.has_value()); @@ -1250,6 +1250,21 @@ web_contents_getter_); } + void RecordSCTHistogramIfNeeded( + const base::Optional<net::SSLInfo>& ssl_info) { + if (is_main_frame_ && url_.SchemeIsCryptographic() && + ssl_info.has_value()) { + int num_valid_scts = 0; + for (const auto& signed_certificate_timestamps : + ssl_info->signed_certificate_timestamps) { + if (signed_certificate_timestamps.status == net::ct::SCT_STATUS_OK) + ++num_valid_scts; + } + UMA_HISTOGRAM_COUNTS_100( + "Net.CertificateTransparency.MainFrameValidSCTCount", num_valid_scts); + } + } + std::vector<std::unique_ptr<NavigationLoaderInterceptor>> interceptors_; size_t interceptor_index_ = 0; @@ -1278,6 +1293,8 @@ // Current URL that is being navigated, updated after redirection. GURL url_; + const bool is_main_frame_; + // Currently used by the AppCache loader to pass its factory to the // renderer which enables it to handle subresources. base::Optional<SubresourceLoaderParams> subresource_loader_params_; @@ -1340,7 +1357,8 @@ // protocol handlers. std::set<std::string> known_schemes_; - scoped_refptr<RedirectChecker> redirect_checker_; + // If true, redirect checks will be handled in a proxy, and not here. + bool bypass_redirect_checks_; mutable base::WeakPtrFactory<URLLoaderRequestController> weak_factory_; @@ -1388,10 +1406,10 @@ /* initial_interceptors = */ std::vector<std::unique_ptr<NavigationLoaderInterceptor>>(), std::move(new_request), resource_context, - request_info->common_params.url, + request_info->common_params.url, request_info->is_main_frame, /* proxied_url_loader_factory_request */ nullptr, /* proxied_url_loader_factory_info */ nullptr, std::set<std::string>(), - /* redirect_checker */ nullptr, weak_factory_.GetWeakPtr()); + /* bypass_redirect_checks */ false, weak_factory_.GetWeakPtr()); BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, @@ -1420,7 +1438,7 @@ network::mojom::URLLoaderFactoryPtrInfo proxied_factory_info; network::mojom::URLLoaderFactoryRequest proxied_factory_request; - scoped_refptr<RedirectChecker> redirect_checker; + bool bypass_redirect_checks = false; auto* partition = static_cast<StoragePartitionImpl*>(storage_partition); if (frame_tree_node) { // |frame_tree_node| may be null in some unit test environments. @@ -1437,7 +1455,8 @@ auto factory_request = mojo::MakeRequest(&factory_info); bool use_proxy = GetContentClient()->browser()->WillCreateURLLoaderFactory( partition->browser_context(), frame_tree_node->current_frame_host(), - true /* is_navigation */, &factory_request, &redirect_checker); + true /* is_navigation */, &factory_request); + bypass_redirect_checks = use_proxy; if (RenderFrameDevToolsAgentHost::WillCreateURLLoaderFactory( frame_tree_node->current_frame_host(), true, false, &factory_request)) { @@ -1469,9 +1488,10 @@ DCHECK(!request_controller_); request_controller_ = std::make_unique<URLLoaderRequestController>( std::move(initial_interceptors), std::move(new_request), resource_context, - request_info->common_params.url, std::move(proxied_factory_request), - std::move(proxied_factory_info), std::move(known_schemes), - std::move(redirect_checker), weak_factory_.GetWeakPtr()); + request_info->common_params.url, request_info->is_main_frame, + std::move(proxied_factory_request), std::move(proxied_factory_info), + std::move(known_schemes), bypass_redirect_checks, + weak_factory_.GetWeakPtr()); BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::BindOnce( @@ -1569,7 +1589,7 @@ auto* frame = frame_tree_node->current_frame_host(); GetContentClient()->browser()->WillCreateURLLoaderFactory( frame->GetSiteInstance()->GetBrowserContext(), frame, - true /* is_navigation */, &factory, nullptr /* redirect_checker */); + true /* is_navigation */, &factory); it->second->Clone(std::move(factory)); }
diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc index 4665a64..caf7dd8 100644 --- a/content/browser/loader/resource_dispatcher_host_impl.cc +++ b/content/browser/loader/resource_dispatcher_host_impl.cc
@@ -91,7 +91,6 @@ #include "net/base/registry_controlled_domains/registry_controlled_domain.h" #include "net/base/upload_data_stream.h" #include "net/base/url_util.h" -#include "net/cert/cert_status_flags.h" #include "net/cookies/cookie_monster.h" #include "net/http/http_request_headers.h" #include "net/http/http_response_headers.h" @@ -169,11 +168,6 @@ url_loader_client->OnComplete(status); } -bool IsValidatedSCT( - const net::SignedCertificateTimestampAndStatus& sct_status) { - return sct_status.status == net::ct::SCT_STATUS_OK; -} - // Returns the PreviewsState for enabled previews after requesting it from // the delegate. The PreviewsState is a bitmask of potentially several // Previews optimizations that are initially enabled for a navigation. @@ -605,18 +599,6 @@ void ResourceDispatcherHostImpl::DidFinishLoading(ResourceLoader* loader) { ResourceRequestInfoImpl* info = loader->GetRequestInfo(); - // Record final result of all resource loads. - if (info->GetResourceType() == RESOURCE_TYPE_MAIN_FRAME) { - if (loader->request()->url().SchemeIsCryptographic()) { - int num_valid_scts = std::count_if( - loader->request()->ssl_info().signed_certificate_timestamps.begin(), - loader->request()->ssl_info().signed_certificate_timestamps.end(), - IsValidatedSCT); - UMA_HISTOGRAM_COUNTS_100( - "Net.CertificateTransparency.MainFrameValidSCTCount", num_valid_scts); - } - } - if (delegate_) delegate_->RequestComplete(loader->request()); @@ -1927,6 +1909,7 @@ } // static +// This is duplicated in services/network/network_service.cc. bool ResourceDispatcherHostImpl::LoadInfoIsMoreInteresting(const LoadInfo& a, const LoadInfo& b) { // Set |*_uploading_size| to be the size of the corresponding upload body if
diff --git a/content/browser/loader/resource_dispatcher_host_impl.h b/content/browser/loader/resource_dispatcher_host_impl.h index b8a81809..1a3c389 100644 --- a/content/browser/loader/resource_dispatcher_host_impl.h +++ b/content/browser/loader/resource_dispatcher_host_impl.h
@@ -330,6 +330,7 @@ private: class ScheduledResourceRequestAdapter; + friend class NetworkServiceClient; friend class ResourceDispatcherHostTest; FRIEND_TEST_ALL_PREFIXES(ResourceDispatcherHostTest,
diff --git a/content/browser/network_service_client.cc b/content/browser/network_service_client.cc index 2716025..3e5aed5 100644 --- a/content/browser/network_service_client.cc +++ b/content/browser/network_service_client.cc
@@ -425,4 +425,34 @@ process_id, routing_id, url, first_party_url, cookie, blocked_by_policy); } +void NetworkServiceClient::OnLoadingStateUpdate( + std::vector<network::mojom::LoadInfoPtr> infos, + OnLoadingStateUpdateCallback callback) { + auto rdh_infos = std::make_unique<ResourceDispatcherHostImpl::LoadInfoList>(); + + // TODO(jam): once ResourceDispatcherHost is gone remove the translation + // (other than adding the WebContents callback). + for (auto& info : infos) { + ResourceDispatcherHostImpl::LoadInfo load_info; + load_info.host = std::move(info->host); + load_info.load_state.state = static_cast<net::LoadState>(info->load_state); + load_info.load_state.param = std::move(info->state_param); + load_info.upload_position = info->upload_position; + load_info.upload_size = info->upload_size; + load_info.web_contents_getter = + info->process_id + ? base::BindRepeating(WebContentsImpl::FromRenderFrameHostID, + info->process_id, info->routing_id) + : base::BindRepeating(WebContents::FromFrameTreeNodeId, + info->routing_id); + rdh_infos->push_back(std::move(load_info)); + } + + auto* rdh = ResourceDispatcherHostImpl::Get(); + ResourceDispatcherHostImpl::UpdateLoadStateOnUI(rdh->loader_delegate_, + std::move(rdh_infos)); + + std::move(callback).Run(); +} + } // namespace content
diff --git a/content/browser/network_service_client.h b/content/browser/network_service_client.h index 68c0af0a..8375a1e 100644 --- a/content/browser/network_service_client.h +++ b/content/browser/network_service_client.h
@@ -63,6 +63,8 @@ const GURL& first_party_url, const net::CanonicalCookie& cookie, bool blocked_by_policy) override; + void OnLoadingStateUpdate(std::vector<network::mojom::LoadInfoPtr> infos, + OnLoadingStateUpdateCallback callback) override; private: mojo::Binding<network::mojom::NetworkServiceClient> binding_;
diff --git a/content/browser/renderer_host/legacy_render_widget_host_win.h b/content/browser/renderer_host/legacy_render_widget_host_win.h index 79bad95..af30d9ef 100644 --- a/content/browser/renderer_host/legacy_render_widget_host_win.h +++ b/content/browser/renderer_host/legacy_render_widget_host_win.h
@@ -5,15 +5,14 @@ #ifndef CONTENT_BROWSER_RENDERER_HOST_LEGACY_RENDER_WIDGET_HOST_WIN_H_ #define CONTENT_BROWSER_RENDERER_HOST_LEGACY_RENDER_WIDGET_HOST_WIN_H_ -#include <atlbase.h> #include <atlcrack.h> -#include <atlwin.h> #include <oleacc.h> #include <wrl/client.h> #include <memory> #include "base/macros.h" +#include "base/win/atl.h" #include "content/common/content_export.h" #include "ui/compositor/compositor_animation_observer.h" #include "ui/gfx/geometry/rect.h"
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc index 71942db..7823c96 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.cc +++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -216,7 +216,14 @@ host()->SetView(this); touch_selection_controller_client_manager_ = std::make_unique<TouchSelectionControllerClientManagerAndroid>(this); + UpdateNativeViewTree(parent_native_view); + // This RWHVA may have been created speculatively. We should give any + // existing RWHVAs priority for receiving input events, otherwise a + // speculative RWHVA could be sent input events intended for the currently + // showing RWHVA. + if (parent_native_view) + parent_native_view->MoveToBack(&view_); CreateOverscrollControllerIfPossible(); @@ -818,6 +825,8 @@ } void RenderWidgetHostViewAndroid::OnDidNavigateMainFrameToNewPage() { + if (view_.parent()) + view_.parent()->MoveToFront(&view_); ResetGestureDetection(); } @@ -913,6 +922,11 @@ return latest_capture_sequence_number_; } +void RenderWidgetHostViewAndroid::OnInterstitialPageAttached() { + if (view_.parent()) + view_.parent()->MoveToFront(&view_); +} + void RenderWidgetHostViewAndroid::OnInterstitialPageGoingAway() { sync_compositor_.reset(); }
diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h index 8d3c70cd..4aad963 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.h +++ b/content/browser/renderer_host/render_widget_host_view_android.h
@@ -160,6 +160,7 @@ bool IsInVR() const override; void DidOverscroll(const ui::DidOverscrollParams& params) override; void DidStopFlinging() override; + void OnInterstitialPageAttached() override; void OnInterstitialPageGoingAway() override; std::unique_ptr<SyntheticGestureTarget> CreateSyntheticGestureTarget() override;
diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h index 922f7897..a8065f2 100644 --- a/content/browser/renderer_host/render_widget_host_view_base.h +++ b/content/browser/renderer_host/render_widget_host_view_base.h
@@ -412,6 +412,9 @@ // Returns true if this view's size have been initialized. virtual bool HasSize() const; + // Informs the view that the assocaited InterstitialPage was attached. + virtual void OnInterstitialPageAttached() {} + // Tells the view that the assocaited InterstitialPage will going away (but is // not yet destroyed, as InterstitialPage destruction is asynchronous). The // view may use this notification to clean up associated resources. This
diff --git a/content/browser/scheduler/responsiveness/native_event_observer.cc b/content/browser/scheduler/responsiveness/native_event_observer.cc index 651681a..4225e9a 100644 --- a/content/browser/scheduler/responsiveness/native_event_observer.cc +++ b/content/browser/scheduler/responsiveness/native_event_observer.cc
@@ -2,23 +2,61 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Needed for defined(OS_WIN) +#include "build/build_config.h" + +// Windows headers must come first. +#if defined(OS_WIN) +#include <windows.h> + +#include <timeapi.h> +#endif + +// Proceed with header includes in usual order. #include "content/browser/scheduler/responsiveness/native_event_observer.h" #include "ui/events/platform/platform_event_source.h" -#if defined(OS_LINUX) #if defined(USE_X11) #include "ui/events/platform/x11/x11_event_source.h" // nogncheck #elif defined(USE_OZONE) #include "ui/events/event.h" #endif +#if defined(OS_LINUX) #include "ui/events/platform_event.h" #endif +#if defined(OS_WIN) +#include "base/message_loop/message_loop_current.h" +#endif + namespace content { namespace responsiveness { +#if defined(OS_WIN) || (defined(OS_LINUX) && defined(USE_X11)) + +namespace { + +// Clamps a TimeDelta to be within [0 seconds, 30 seconds]. +// Relies on the assumption that |delta| is >= 0 seconds. +base::TimeDelta ClampDeltaFromExternalSource(const base::TimeDelta& delta) { + DCHECK_GE(delta, base::TimeDelta()); + + // Ignore pathologically long deltas. External source is probably having + // issues. + constexpr base::TimeDelta pathologically_long_duration = + base::TimeDelta::FromSeconds(30); + if (delta > pathologically_long_duration) + return base::TimeDelta(); + + return delta; +} + +} // namespace + +#endif // defined(OS_WIN) || (defined(OS_LINUX) && defined(USE_X11)) + NativeEventObserver::NativeEventObserver( WillRunEventCallback will_run_event_callback, DidRunEventCallback did_run_event_callback) @@ -31,7 +69,6 @@ DeregisterObserver(); } -#if !defined(OS_MACOSX) #if defined(OS_LINUX) void NativeEventObserver::RegisterObserver() { ui::PlatformEventSource::GetInstance()->AddPlatformEventObserver(this); @@ -56,30 +93,65 @@ uint32_t current_server_time_ms = static_cast<uint32_t>( ui::X11EventSource::GetInstance()->GetCurrentServerTime()); - int32_t delta_ms = current_server_time_ms - event_server_time_ms; - - // If for some reason server time is not monotonically increasing, ignore it. - if (delta_ms < 0) - delta_ms = 0; - - // Ignore pathologically long deltas. Server is probably having issues. + // On X11, event times are in X11 Server time. To convert to base::TimeTicks, + // we perform a round-trip to the X11 Server, subtract the two times to get a + // TimeDelta, and then subtract that from base::TimeTicks::Now(). Since we're + // working with units of time from an external source, we clamp the TimeDelta + // to reasonable values. + uint32_t delta_ms = current_server_time_ms - event_server_time_ms; base::TimeDelta delta = base::TimeDelta::FromMilliseconds(delta_ms); - base::TimeDelta long_duration = base::TimeDelta::FromSeconds(30); - if (delta > long_duration) - delta = base::TimeDelta(); + base::TimeDelta sanitized = ClampDeltaFromExternalSource(delta); - did_run_event_callback_.Run(&event, base::TimeTicks::Now() - delta); + did_run_event_callback_.Run(&event, base::TimeTicks::Now() - sanitized); #else #error #endif } -#else // defined(OS_LINUX) -// TODO(erikchen): Implement this for non-macOS, non-Linux platforms. -// https://crbug.com/859155. +#endif // defined(OS_LINUX) + +#if defined(OS_WIN) +void NativeEventObserver::RegisterObserver() { + base::MessageLoopCurrentForUI::Get()->AddMessagePumpObserver(this); +} +void NativeEventObserver::DeregisterObserver() { + base::MessageLoopCurrentForUI::Get()->RemoveMessagePumpObserver(this); +} +void NativeEventObserver::WillDispatchMSG(const MSG& msg) { + will_run_event_callback_.Run(&msg); +} +void NativeEventObserver::DidDispatchMSG(const MSG& msg) { + // On Windows, MSG.time is in units of milliseconds since system started. It + // uses the timer exposed by ::GetTickCount(). + // https://blogs.msdn.microsoft.com/oldnewthing/20140122-00/?p=2013 + // + // This timer has ~16ms granularity. This is okay for us since we require + // ~100ms granularity. + // https://randomascii.wordpress.com/2013/05/09/timegettime-versus-gettickcount/ + // + // To convert MSG.time to TimeTicks, we subtract MSG.time from + // ::GetTickCount() to create a TimeDelta, and then subtract that from + // TimeTicks::Now(). + // + // We cast both values to DWORD [uint32], perform subtraction to get a uint32, + // and then shove that into a TimeDelta. + // + // Note: Both measurements of time can experience rollover. If one of them has + // rolled over but the other has not, then the result will be very large. + // ClampDeltaFromExternalSource takes care of this, in addition to any other + // odd timing issues that may come up [e.g. MSG.time time-traveling to give a + // larger value than ::timeGetTime() -- this has not been observed in practice + // but since we don't control the code in question, we trust nothing]. + base::TimeDelta delta = base::TimeDelta::FromMilliseconds( + ::GetTickCount() - static_cast<DWORD>(msg.time)); + base::TimeDelta sanitized = ClampDeltaFromExternalSource(delta); + did_run_event_callback_.Run(&msg, base::TimeTicks::Now() - sanitized); +} +#endif // defined(OS_WIN) + +#if defined(OS_ANDROID) || defined(OS_FUCHSIA) void NativeEventObserver::RegisterObserver() {} void NativeEventObserver::DeregisterObserver() {} -#endif // defined(OS_LINUX) -#endif // !defined(OS_MACOSX) +#endif // defined(OS_ANDROID) || defined(OS_FUCHSIA) } // namespace responsiveness } // namespace content
diff --git a/content/browser/scheduler/responsiveness/native_event_observer.h b/content/browser/scheduler/responsiveness/native_event_observer.h index ab2ff65..5aaefd3 100644 --- a/content/browser/scheduler/responsiveness/native_event_observer.h +++ b/content/browser/scheduler/responsiveness/native_event_observer.h
@@ -18,6 +18,10 @@ #include "ui/events/platform/platform_event_observer.h" #endif +#if defined(OS_WIN) +#include "base/message_loop/message_pump_win.h" +#endif + namespace content { namespace responsiveness { @@ -37,6 +41,8 @@ : public NativeEventProcessorObserver #elif defined(OS_LINUX) : public ui::PlatformEventObserver +#elif defined(OS_WIN) + : public base::MessagePumpForUI::Observer #endif { public: @@ -71,6 +77,10 @@ // Exposed for tests. void WillProcessEvent(const ui::PlatformEvent& event) override; void DidProcessEvent(const ui::PlatformEvent& event) override; +#elif defined(OS_WIN) + // base::MessagePumpForUI::Observer overrides: + void WillDispatchMSG(const MSG& msg) override; + void DidDispatchMSG(const MSG& msg) override; #endif private:
diff --git a/content/browser/scheduler/responsiveness/native_event_observer_browsertest_win.cc b/content/browser/scheduler/responsiveness/native_event_observer_browsertest_win.cc new file mode 100644 index 0000000..426ec6ff --- /dev/null +++ b/content/browser/scheduler/responsiveness/native_event_observer_browsertest_win.cc
@@ -0,0 +1,76 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "content/browser/scheduler/responsiveness/native_event_observer.h" + +#include "base/bind_helpers.h" +#include "base/win/message_window.h" +#include "content/public/test/content_browser_test.h" + +namespace content { +namespace responsiveness { + +namespace { + +bool HandleMessage(UINT message, + WPARAM wparam, + LPARAM lparam, + LRESULT* result) { + return false; +} + +} // namespace + +class ResponsivenessNativeEventObserverBrowserTest : public ContentBrowserTest { + public: + void WillRunEvent(const void* opaque_id) { + ASSERT_FALSE(will_run_id_); + will_run_id_ = opaque_id; + } + void DidRunEvent(const void* opaque_id, base::TimeTicks creation_time) { + ASSERT_FALSE(did_run_id_); + did_run_id_ = opaque_id; + creation_time_ = creation_time; + std::move(quit_closure_).Run(); + } + + protected: + const void* will_run_id_ = nullptr; + const void* did_run_id_ = nullptr; + base::TimeTicks creation_time_; + base::OnceClosure quit_closure_; +}; + +IN_PROC_BROWSER_TEST_F(ResponsivenessNativeEventObserverBrowserTest, + EventForwarding) { + base::win::MessageWindow window; + EXPECT_TRUE(window.Create(base::BindRepeating(&HandleMessage))); + + NativeEventObserver observer( + base::BindRepeating( + &ResponsivenessNativeEventObserverBrowserTest::WillRunEvent, + base::Unretained(this)), + base::BindRepeating( + &ResponsivenessNativeEventObserverBrowserTest::DidRunEvent, + base::Unretained(this))); + base::TimeTicks time_at_creation = base::TimeTicks::Now(); + + EXPECT_FALSE(will_run_id_); + EXPECT_FALSE(did_run_id_); + + EXPECT_NE(PostMessage(window.hwnd(), WM_USER, 100, 0), 0); + base::RunLoop run_loop; + quit_closure_ = run_loop.QuitClosure(); + run_loop.Run(); + + EXPECT_EQ(will_run_id_, did_run_id_); + EXPECT_NE(will_run_id_, nullptr); + + // time_at_creation should be really similar to creation_time_. As a sanity + // check, make sure they're within a second of each other. + EXPECT_LT(fabs((creation_time_ - time_at_creation).InMilliseconds()), 1000); +} + +} // namespace responsiveness +} // namespace content
diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc index d6074bed..303dafd 100644 --- a/content/browser/service_worker/embedded_worker_instance.cc +++ b/content/browser/service_worker/embedded_worker_instance.cc
@@ -916,7 +916,7 @@ return; if (inflight_start_task_) inflight_start_task_->set_skip_recording_startup_time(); - registry_->OnDevToolsAttached(embedded_worker_id_); + registry_->AbortLifetimeTracking(embedded_worker_id_); } void EmbeddedWorkerInstance::OnNetworkAccessedForScriptLoad() {
diff --git a/content/browser/service_worker/embedded_worker_registry.cc b/content/browser/service_worker/embedded_worker_registry.cc index c63e6333..34287d99 100644 --- a/content/browser/service_worker/embedded_worker_registry.cc +++ b/content/browser/service_worker/embedded_worker_registry.cc
@@ -68,7 +68,7 @@ lifetime_tracker_.StopTiming(embedded_worker_id); } -void EmbeddedWorkerRegistry::OnDevToolsAttached(int embedded_worker_id) { +void EmbeddedWorkerRegistry::AbortLifetimeTracking(int embedded_worker_id) { lifetime_tracker_.AbortTiming(embedded_worker_id); }
diff --git a/content/browser/service_worker/embedded_worker_registry.h b/content/browser/service_worker/embedded_worker_registry.h index 20825f6..8aa97437 100644 --- a/content/browser/service_worker/embedded_worker_registry.h +++ b/content/browser/service_worker/embedded_worker_registry.h
@@ -55,9 +55,8 @@ bool OnWorkerStarted(int process_id, int embedded_worker_id); void OnWorkerStopped(int process_id, int embedded_worker_id); - // Called by EmbeddedWorkerInstance when it learns DevTools has attached to - // it. - void OnDevToolsAttached(int embedded_worker_id); + // Aborts the timer which tracks the lifetime of the worker for UMA logging. + void AbortLifetimeTracking(int embedded_worker_id); // Returns an embedded worker instance for given |embedded_worker_id|. EmbeddedWorkerInstance* GetWorker(int embedded_worker_id);
diff --git a/content/browser/service_worker/embedded_worker_test_helper.cc b/content/browser/service_worker/embedded_worker_test_helper.cc index 038247a..3983e51 100644 --- a/content/browser/service_worker/embedded_worker_test_helper.cc +++ b/content/browser/service_worker/embedded_worker_test_helper.cc
@@ -352,6 +352,17 @@ std::move(callback)); } + void DispatchExtendableMessageEventWithCustomTimeout( + mojom::ExtendableMessageEventPtr event, + base::TimeDelta timeout, + DispatchExtendableMessageEventWithCustomTimeoutCallback callback) + override { + if (!helper_) + return; + helper_->OnExtendableMessageEventStub(std::move(event), + std::move(callback)); + } + void Ping(PingCallback callback) override { std::move(callback).Run(); } void SetIdleTimerDelayToZero() override {
diff --git a/content/browser/service_worker/service_worker_context_wrapper.cc b/content/browser/service_worker/service_worker_context_wrapper.cc index 0e08a0f..b246259 100644 --- a/content/browser/service_worker/service_worker_context_wrapper.cc +++ b/content/browser/service_worker/service_worker_context_wrapper.cc
@@ -13,6 +13,7 @@ #include "base/barrier_closure.h" #include "base/bind.h" #include "base/files/file_path.h" +#include "base/guid.h" #include "base/lazy_instance.h" #include "base/location.h" #include "base/logging.h" @@ -33,6 +34,7 @@ #include "storage/browser/quota/special_storage_policy.h" #include "third_party/blink/public/common/service_worker/service_worker_status_code.h" #include "third_party/blink/public/mojom/service_worker/service_worker_registration.mojom.h" +#include "url/gurl.h" namespace content { @@ -42,6 +44,10 @@ base::LazyInstance<HeaderNameSet>::DestructorAtExit g_excluded_header_name_set = LAZY_INSTANCE_INITIALIZER; +// Value used to set the timeout when starting a long running ServiceWorker. See +// ServiceWorkerContextWrapper::StartServiceWorkerAndDispatchLongRunningMessage. +const int kActiveWorkerTimeoutDays = 999; + void WorkerStarted(ServiceWorkerContextWrapper::StatusCallback callback, blink::ServiceWorkerStatusCode status) { DCHECK_CURRENTLY_ON(BrowserThread::IO); @@ -152,6 +158,12 @@ status == blink::ServiceWorkerStatusCode::kOk)); } +void MessageFinishedSending(ServiceWorkerContext::ResultCallback callback, + blink::ServiceWorkerStatusCode status) { + DCHECK_CURRENTLY_ON(BrowserThread::IO); + std::move(callback).Run(status == blink::ServiceWorkerStatusCode::kOk); +} + } // namespace // static @@ -453,6 +465,78 @@ std::move(failure_callback))); } +void ServiceWorkerContextWrapper:: + StartServiceWorkerAndDispatchLongRunningMessage( + const GURL& pattern, + blink::TransferableMessage message, + ResultCallback result_callback) { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); + + if (!context_core_) { + std::move(result_callback).Run(false); + return; + } + + context_core_->storage()->FindRegistrationForPattern( + net::SimplifyUrlForRequest(pattern), + base::BindOnce(&ServiceWorkerContextWrapper:: + DidFindRegistrationForLongRunningMessage, + this, std::move(message), pattern, + std::move(result_callback))); +} + +void ServiceWorkerContextWrapper::DidFindRegistrationForLongRunningMessage( + blink::TransferableMessage message, + const GURL& source_origin, + ResultCallback result_callback, + blink::ServiceWorkerStatusCode service_worker_status, + scoped_refptr<ServiceWorkerRegistration> registration) { + if (service_worker_status != blink::ServiceWorkerStatusCode::kOk) { + LOG(WARNING) << "No registration available, status: " + << static_cast<int>(service_worker_status); + std::move(result_callback).Run(false); + return; + } + registration->active_version()->StartWorker( + ServiceWorkerMetrics::EventType::LONG_RUNNING_MESSAGE, + base::BindOnce(&ServiceWorkerContextWrapper:: + DidStartServiceWorkerForLongRunningMessage, + this, std::move(message), source_origin, registration, + std::move(result_callback))); +} + +void ServiceWorkerContextWrapper::DidStartServiceWorkerForLongRunningMessage( + blink::TransferableMessage message, + const GURL& source_origin, + scoped_refptr<ServiceWorkerRegistration> registration, + ResultCallback result_callback, + blink::ServiceWorkerStatusCode status) { + if (status != blink::ServiceWorkerStatusCode::kOk) { + std::move(result_callback).Run(false); + return; + } + + scoped_refptr<ServiceWorkerVersion> version = registration->active_version(); + + int request_id = version->StartRequestWithCustomTimeout( + ServiceWorkerMetrics::EventType::LONG_RUNNING_MESSAGE, + base::BindOnce(&MessageFinishedSending, std::move(result_callback)), + base::TimeDelta::FromDays(kActiveWorkerTimeoutDays), + ServiceWorkerVersion::CONTINUE_ON_TIMEOUT); + + mojom::ExtendableMessageEventPtr event = mojom::ExtendableMessageEvent::New(); + event->message = std::move(message); + event->source_origin = url::Origin::Create(source_origin); + event->source_info_for_service_worker = + version->provider_host() + ->GetOrCreateServiceWorkerObjectHost(version) + ->CreateCompleteObjectInfoToSend(); + + version->endpoint()->DispatchExtendableMessageEventWithCustomTimeout( + std::move(event), base::TimeDelta::FromDays(kActiveWorkerTimeoutDays), + version->CreateSimpleEventCallback(request_id)); +} + void ServiceWorkerContextWrapper::StartServiceWorkerForNavigationHint( const GURL& document_url, StartServiceWorkerForNavigationHintCallback callback) {
diff --git a/content/browser/service_worker/service_worker_context_wrapper.h b/content/browser/service_worker/service_worker_context_wrapper.h index f99033af..b2af671 100644 --- a/content/browser/service_worker/service_worker_context_wrapper.h +++ b/content/browser/service_worker/service_worker_context_wrapper.h
@@ -131,6 +131,10 @@ void StartWorkerForPattern(const GURL& pattern, StartWorkerCallback info_callback, base::OnceClosure failure_callback) override; + void StartServiceWorkerAndDispatchLongRunningMessage( + const GURL& pattern, + blink::TransferableMessage message, + ResultCallback result_callback) override; void StartServiceWorkerForNavigationHint( const GURL& document_url, StartServiceWorkerForNavigationHintCallback callback) override; @@ -358,6 +362,27 @@ base::OnceClosure callback, scoped_refptr<base::SingleThreadTaskRunner> task_runner_for_callback); + void DidFindRegistrationForLongRunningMessage( + blink::TransferableMessage message, + const GURL& source_origin, + ResultCallback result_callback, + blink::ServiceWorkerStatusCode service_worker_status, + scoped_refptr<ServiceWorkerRegistration> registration); + + void DidStartServiceWorkerForLongRunningMessage( + blink::TransferableMessage message, + const GURL& source_origin, + scoped_refptr<ServiceWorkerRegistration> registration, + ServiceWorkerContext::ResultCallback result_callback, + blink::ServiceWorkerStatusCode service_worker_status); + + void SendActiveWorkerMessage( + blink::TransferableMessage message, + const GURL& source_origin, + ServiceWorkerContext::ResultCallback result_callback, + blink::ServiceWorkerStatusCode status, + scoped_refptr<ServiceWorkerRegistration> registration); + // The core context is only for use on the IO thread. // Can be null before/during init, during/after shutdown, and after // DeleteAndStartOver fails.
diff --git a/content/browser/service_worker/service_worker_metrics.cc b/content/browser/service_worker/service_worker_metrics.cc index e071aab..39644f8 100644 --- a/content/browser/service_worker/service_worker_metrics.cc +++ b/content/browser/service_worker/service_worker_metrics.cc
@@ -109,6 +109,8 @@ return "_ABORT_PAYMENT"; case ServiceWorkerMetrics::EventType::COOKIE_CHANGE: return "_COOKIE_CHANGE"; + case ServiceWorkerMetrics::EventType::LONG_RUNNING_MESSAGE: + return "_LONG_RUNNING_MESSAGE"; case ServiceWorkerMetrics::EventType::NUM_TYPES: NOTREACHED() << static_cast<int>(event_type); } @@ -287,6 +289,8 @@ return "Abort Payment"; case EventType::COOKIE_CHANGE: return "Cookie Change"; + case EventType::LONG_RUNNING_MESSAGE: + return "Long Running Message"; case EventType::NUM_TYPES: break; } @@ -667,6 +671,10 @@ case EventType::COOKIE_CHANGE: UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.CookieChangeEvent.Time", time); break; + case EventType::LONG_RUNNING_MESSAGE: + // Since this event is expected to last indefinitely we don't need to log + // how long they actually last. + break; case EventType::NAVIGATION_HINT: // The navigation hint should not be sent as an event.
diff --git a/content/browser/service_worker/service_worker_metrics.h b/content/browser/service_worker/service_worker_metrics.h index 274d281..cae26aa 100644 --- a/content/browser/service_worker/service_worker_metrics.h +++ b/content/browser/service_worker/service_worker_metrics.h
@@ -213,6 +213,7 @@ CAN_MAKE_PAYMENT = 28, ABORT_PAYMENT = 29, COOKIE_CHANGE = 30, + LONG_RUNNING_MESSAGE = 31, // Add new events to record here. NUM_TYPES };
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc index 41e60f2..e27574e 100644 --- a/content/browser/service_worker/service_worker_version.cc +++ b/content/browser/service_worker/service_worker_version.cc
@@ -516,10 +516,17 @@ event_type == ServiceWorkerMetrics::EventType::ACTIVATE || event_type == ServiceWorkerMetrics::EventType::MESSAGE || event_type == ServiceWorkerMetrics::EventType::EXTERNAL_REQUEST || + event_type == ServiceWorkerMetrics::EventType::LONG_RUNNING_MESSAGE || status() == ACTIVATED) << "Event of type " << static_cast<int>(event_type) << " can only be dispatched to an active worker: " << status(); + if (context_ && + event_type == ServiceWorkerMetrics::EventType::LONG_RUNNING_MESSAGE) { + context_->embedded_worker_registry()->AbortLifetimeTracking( + embedded_worker_->embedded_worker_id()); + } + if (event_type != ServiceWorkerMetrics::EventType::INSTALL && event_type != ServiceWorkerMetrics::EventType::ACTIVATE && event_type != ServiceWorkerMetrics::EventType::MESSAGE) {
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc index 76991e6..68dec4b4 100644 --- a/content/browser/site_per_process_browsertest.cc +++ b/content/browser/site_per_process_browsertest.cc
@@ -136,8 +136,12 @@ #include "content/browser/android/ime_adapter_android.h" #include "content/browser/renderer_host/input/touch_selection_controller_client_manager_android.h" #include "content/browser/renderer_host/render_widget_host_view_android.h" +#include "content/browser/web_contents/web_contents_view_android.h" #include "content/public/browser/android/child_process_importance.h" #include "content/test/mock_overscroll_refresh_handler_android.h" +#include "ui/android/view_android.h" +#include "ui/android/window_android.h" +#include "ui/events/android/event_handler_android.h" #include "ui/events/android/motion_event_android.h" #include "ui/gfx/geometry/point_f.h" #endif @@ -10132,6 +10136,76 @@ } #if defined(OS_ANDROID) + +namespace { + +class MockEventHandlerAndroid : public ui::EventHandlerAndroid { + public: + bool OnTouchEvent(const ui::MotionEventAndroid& event) override { + did_receive_event_ = true; + return true; + } + + bool did_receive_event() { return did_receive_event_; } + + private: + bool did_receive_event_ = false; +}; + +} // namespace + +IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, + SpeculativeRenderFrameHostDoesNotReceiveInput) { + GURL url1(embedded_test_server()->GetURL("a.com", "/title1.html")); + EXPECT_TRUE(NavigateToURL(shell(), url1)); + + RenderWidgetHostViewAndroid* rwhva = + static_cast<RenderWidgetHostViewAndroid*>( + shell()->web_contents()->GetRenderWidgetHostView()); + ui::ViewAndroid* rwhva_native_view = rwhva->GetNativeView(); + FrameTreeNode* root = web_contents()->GetFrameTree()->root(); + + // Start a cross-site navigation. + GURL url2(embedded_test_server()->GetURL("b.com", "/title2.html")); + TestNavigationManager nav_manager(web_contents(), url2); + shell()->LoadURL(url2); + + // Wait for the request, but don't commit it yet. This should create a + // speculative RenderFrameHost. + ASSERT_TRUE(nav_manager.WaitForRequestStart()); + RenderFrameHostImpl* root_speculative_rfh = + root->render_manager()->speculative_frame_host(); + EXPECT_TRUE(root_speculative_rfh); + RenderWidgetHostViewAndroid* rwhv_speculative = + static_cast<RenderWidgetHostViewAndroid*>( + root_speculative_rfh->GetView()); + ui::ViewAndroid* rwhv_speculative_native_view = + rwhv_speculative->GetNativeView(); + + ui::ViewAndroid* root_view = web_contents()->GetView()->GetNativeView(); + EXPECT_TRUE(root_view); + + MockEventHandlerAndroid mock_handler; + rwhva_native_view->set_event_handler(&mock_handler); + MockEventHandlerAndroid mock_handler_speculative; + rwhv_speculative_native_view->set_event_handler(&mock_handler_speculative); + // Avoid having the root try to handle the following event. + root_view->set_event_handler(nullptr); + + auto size = root_view->GetSize(); + float x = size.width() / 2; + float y = size.height() / 2; + ui::MotionEventAndroid::Pointer pointer0(0, x, y, 0, 0, 0, 0, 0); + ui::MotionEventAndroid::Pointer pointer1(0, 0, 0, 0, 0, 0, 0, 0); + ui::MotionEventAndroid event(nullptr, nullptr, 1.f / root_view->GetDipScale(), + 0.f, 0.f, 0.f, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, + false, &pointer0, &pointer1); + root_view->OnTouchEventForTesting(event); + + EXPECT_TRUE(mock_handler.did_receive_event()); + EXPECT_FALSE(mock_handler_speculative.did_receive_event()); +} + IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, TestChildProcessImportance) { web_contents()->SetMainFrameImportance(ChildProcessImportance::MODERATE);
diff --git a/content/browser/site_per_process_hit_test_browsertest.cc b/content/browser/site_per_process_hit_test_browsertest.cc index 3d07ce8e0..0f098484 100644 --- a/content/browser/site_per_process_hit_test_browsertest.cc +++ b/content/browser/site_per_process_hit_test_browsertest.cc
@@ -4603,7 +4603,7 @@ protected: // Load the page |host_name| and retrieve the hit test data from HitTestQuery. - std::vector<viz::AggregatedHitTestRegion> SetupAndGettHitTestData( + std::vector<viz::AggregatedHitTestRegion> SetupAndGetHitTestData( const std::string& host_name) { GURL main_url(embedded_test_server()->GetURL(host_name)); EXPECT_TRUE(NavigateToURL(shell(), main_url)); @@ -4616,13 +4616,14 @@ static_cast<RenderWidgetHostViewBase*>( root->current_frame_host()->GetRenderWidgetHost()->GetView()); - HitTestRegionObserver observer(rwhv_root->GetFrameSinkId()); - for (unsigned i = 0; i < root->child_count(); i++) { WaitForHitTestDataOrChildSurfaceReady( root->child_at(i)->current_frame_host()); } + HitTestRegionObserver observer(rwhv_root->GetRootFrameSinkId()); + observer.WaitForHitTestData(); + device_scale_factor_ = rwhv_root->GetDeviceScaleFactor(); DCHECK_GT(device_scale_factor_, 0); @@ -4698,7 +4699,7 @@ if (!features::IsVizHitTestingEnabled()) return; auto hit_test_data = - SetupAndGettHitTestData("/frame_tree/page_with_transformed_iframe.html"); + SetupAndGetHitTestData("/frame_tree/page_with_transformed_iframe.html"); float device_scale_factor = current_device_scale_factor(); // Compute screen space transform for iframe element. @@ -4724,7 +4725,7 @@ if (!features::IsVizHitTestingEnabled()) return; auto hit_test_data = - SetupAndGettHitTestData("/frame_tree/page_with_clipped_iframe.html"); + SetupAndGetHitTestData("/frame_tree/page_with_clipped_iframe.html"); float device_scale_factor = current_device_scale_factor(); gfx::Transform expected_transform; // In V1 hit testing or V2 hit testing slow path, we expected unclipped iframe @@ -4764,7 +4765,7 @@ RotatedClippedOOPIF) { if (!features::IsVizHitTestingEnabled()) return; - auto hit_test_data = SetupAndGettHitTestData( + auto hit_test_data = SetupAndGetHitTestData( "/frame_tree/page_with_rotated_clipped_iframe.html"); float device_scale_factor = current_device_scale_factor(); // +-Root @@ -4805,7 +4806,7 @@ ClippedRotatedOOPIF) { if (!features::IsVizHitTestingEnabled()) return; - auto hit_test_data = SetupAndGettHitTestData( + auto hit_test_data = SetupAndGetHitTestData( "/frame_tree/page_with_clipped_rotated_iframe.html"); float device_scale_factor = current_device_scale_factor(); // +-Root @@ -4855,7 +4856,7 @@ if (!features::IsVizHitTestingEnabled()) return; auto hit_test_data = - SetupAndGettHitTestData("/frame_tree/page_with_clip_path_iframe.html"); + SetupAndGetHitTestData("/frame_tree/page_with_clip_path_iframe.html"); float device_scale_factor = current_device_scale_factor(); gfx::Transform expected_transform; gfx::Rect expected_region = gfx::ScaleToEnclosingRect( @@ -4880,7 +4881,7 @@ if (!features::IsVizHitTestingEnabled()) return; auto hit_test_data = - SetupAndGettHitTestData("/frame_tree/page_with_overlapped_iframes.html"); + SetupAndGetHitTestData("/frame_tree/page_with_overlapped_iframes.html"); float device_scale_factor = current_device_scale_factor(); gfx::Transform expected_transform1; gfx::Transform expected_transform2; @@ -4910,7 +4911,7 @@ if (!features::IsVizHitTestingEnabled()) return; auto hit_test_data = - SetupAndGettHitTestData("/frame_tree/page_with_masked_iframe.html"); + SetupAndGetHitTestData("/frame_tree/page_with_masked_iframe.html"); float device_scale_factor = current_device_scale_factor(); gfx::Transform expected_transform; gfx::Rect expected_region = gfx::ScaleToEnclosingRect(
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc index a17afd3..98f5408bc 100644 --- a/content/browser/storage_partition_impl.cc +++ b/content/browser/storage_partition_impl.cc
@@ -1305,8 +1305,7 @@ if (g_url_loader_factory_callback_for_test.Get().is_null()) { auto request = mojo::MakeRequest(&url_loader_factory_for_browser_process_); GetContentClient()->browser()->WillCreateURLLoaderFactory( - browser_context(), nullptr, false /* is_navigation */, &request, - nullptr /* redirect_checker */); + browser_context(), nullptr, false /* is_navigation */, &request); GetNetworkContext()->CreateURLLoaderFactory(std::move(request), std::move(params)); is_test_url_loader_factory_for_browser_process_ = false;
diff --git a/content/browser/tracing/background_tracing_manager_impl.cc b/content/browser/tracing/background_tracing_manager_impl.cc index 9ce32f1..4f88229 100644 --- a/content/browser/tracing/background_tracing_manager_impl.cc +++ b/content/browser/tracing/background_tracing_manager_impl.cc
@@ -653,7 +653,8 @@ BENCHMARK_EXECUTION_METRIC: return "blink.console,v8"; case BackgroundTracingConfigImpl::CategoryPreset::BENCHMARK_NAVIGATION: - return "benchmark,toplevel,ipc,base,browser,navigation,omnibox"; + return "benchmark,toplevel,ipc,base,browser,navigation,omnibox," + "disabled-by-default-system_stats"; case BackgroundTracingConfigImpl::CategoryPreset::BLINK_STYLE: return "blink_style"; case BackgroundTracingConfigImpl::CategoryPreset::CATEGORY_PRESET_UNSET:
diff --git a/content/browser/web_contents/web_contents_android.cc b/content/browser/web_contents/web_contents_android.cc index f82e6b7..5438f60c9 100644 --- a/content/browser/web_contents/web_contents_android.cc +++ b/content/browser/web_contents/web_contents_android.cc
@@ -860,16 +860,6 @@ return web_contents_->IsBeingDestroyed(); } -int WebContentsAndroid::GetTopControlsShrinkBlinkHeightPixForTesting( - JNIEnv* env, - const JavaParamRef<jobject>& obj) { - RenderWidgetHostViewAndroid* rwhva = GetRenderWidgetHostViewAndroid(); - float scale = web_contents_->GetNativeView()->GetDipScale(); - return (rwhva && rwhva->DoBrowserControlsShrinkBlinkSize()) - ? rwhva->GetTopControlsHeight() * scale - : 0; -} - void WebContentsAndroid::SetDisplayCutoutSafeArea( JNIEnv* env, const base::android::JavaParamRef<jobject>& obj,
diff --git a/content/browser/web_contents/web_contents_android.h b/content/browser/web_contents/web_contents_android.h index d5094a6a..cb299e2 100644 --- a/content/browser/web_contents/web_contents_android.h +++ b/content/browser/web_contents/web_contents_android.h
@@ -243,12 +243,6 @@ bool IsBeingDestroyed(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); - // Returns the amount of the top controls height if controls are in the state - // of shrinking Blink's view size, otherwise 0. - int GetTopControlsShrinkBlinkHeightPixForTesting( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& obj); - void SetDisplayCutoutSafeArea(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj, int top,
diff --git a/content/browser/web_contents/web_contents_impl_browsertest.cc b/content/browser/web_contents/web_contents_impl_browsertest.cc index 345f6ff..a26ee97 100644 --- a/content/browser/web_contents/web_contents_impl_browsertest.cc +++ b/content/browser/web_contents/web_contents_impl_browsertest.cc
@@ -57,6 +57,7 @@ #include "net/dns/mock_host_resolver.h" #include "net/test/embedded_test_server/controllable_http_response.h" #include "net/test/embedded_test_server/embedded_test_server.h" +#include "services/network/public/cpp/features.h" #include "testing/gmock/include/gmock/gmock.h" #include "url/gurl.h" @@ -2367,7 +2368,12 @@ // Wait for the response to be ready, but never finish it. EXPECT_TRUE(frame_pauser.WaitForResponse()); EXPECT_FALSE(frame_pauser.was_successful()); - waiter.Wait(net::LOAD_STATE_WAITING_FOR_DELEGATE, paused_host); + // Note: the pausing only works for the non-network service path because of + // http://crbug.com/791049. + if (base::FeatureList::IsEnabled(network::features::kNetworkService)) + waiter.Wait(net::LOAD_STATE_IDLE, base::string16()); + else + waiter.Wait(net::LOAD_STATE_WAITING_FOR_DELEGATE, paused_host); load_resource(a_frame, "/a_img"); a_response->WaitForRequest(); @@ -2390,10 +2396,12 @@ waiter.Wait(net::LOAD_STATE_READING_RESPONSE, a_host); a_response->Done(); - // Now the only request in flight should be the delayed frame. - waiter.Wait(net::LOAD_STATE_WAITING_FOR_DELEGATE, paused_host); - frame_pauser.ResumeNavigation(); - waiter.Wait(net::LOAD_STATE_IDLE, base::string16()); + if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) { + // Now the only request in flight should be the delayed frame. + waiter.Wait(net::LOAD_STATE_WAITING_FOR_DELEGATE, paused_host); + frame_pauser.ResumeNavigation(); + waiter.Wait(net::LOAD_STATE_IDLE, base::string16()); + } } IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, NotifyPreferencesChanged) {
diff --git a/content/browser/webauth/authenticator_impl.cc b/content/browser/webauth/authenticator_impl.cc index 32d31e6..e2471d2 100644 --- a/content/browser/webauth/authenticator_impl.cc +++ b/content/browser/webauth/authenticator_impl.cc
@@ -281,7 +281,7 @@ blink::mojom::GetAssertionAuthenticatorResponsePtr CreateGetAssertionResponse( const std::string& client_data_json, device::AuthenticatorGetAssertionResponse response_data, - bool echo_appid_extension) { + base::Optional<bool> echo_appid_extension) { auto response = blink::mojom::GetAssertionAuthenticatorResponse::New(); auto common_info = blink::mojom::CommonCredentialInfo::New(); common_info->client_data_json.assign(client_data_json.begin(), @@ -292,7 +292,10 @@ response->authenticator_data = response_data.auth_data().SerializeToByteArray(); response->signature = response_data.signature(); - response->echo_appid_extension = echo_appid_extension; + if (echo_appid_extension) { + response->echo_appid_extension = true; + response->appid_extension = *echo_appid_extension; + } response_data.user_entity() ? response->user_handle.emplace(response_data.user_entity()->user_id()) : response->user_handle.emplace(); @@ -554,19 +557,14 @@ return; } - base::Optional<std::array<uint8_t, crypto::kSHA256Length>> - alternative_application_parameter; if (options->appid) { - auto appid_hash = ProcessAppIdExtension(*options->appid, caller_origin); - if (!appid_hash) { + alternative_application_parameter_ = + ProcessAppIdExtension(*options->appid, caller_origin); + if (!alternative_application_parameter_) { std::move(callback).Run(blink::mojom::AuthenticatorStatus::INVALID_DOMAIN, nullptr); return; } - - alternative_application_parameter = std::move(appid_hash); - // TODO(agl): needs a test once a suitable, mock U2F device exists. - echo_appid_extension_ = true; } DCHECK(get_assertion_response_callback_.is_null()); @@ -589,9 +587,9 @@ request_ = std::make_unique<device::GetAssertionRequestHandler>( connector_, protocols_, - CreateCtapGetAssertionRequest( - ConstructClientDataHash(client_data_json_), std::move(options), - std::move(alternative_application_parameter)), + CreateCtapGetAssertionRequest(ConstructClientDataHash(client_data_json_), + std::move(options), + alternative_application_parameter_), base::BindOnce(&AuthenticatorImpl::OnSignResponse, weak_factory_.GetWeakPtr()), base::BindOnce(&AuthenticatorImpl::CreatePlatformAuthenticatorIfAvailable, @@ -774,12 +772,17 @@ return; case device::FidoReturnCode::kSuccess: DCHECK(response_data.has_value()); + base::Optional<bool> echo_appid_extension; + if (alternative_application_parameter_) { + echo_appid_extension = (response_data->GetRpIdHash() == + *alternative_application_parameter_); + } InvokeCallbackAndCleanup( std::move(get_assertion_response_callback_), blink::mojom::AuthenticatorStatus::SUCCESS, CreateGetAssertionResponse(std::move(client_data_json_), std::move(*response_data), - echo_appid_extension_)); + echo_appid_extension)); return; } NOTREACHED(); @@ -832,7 +835,7 @@ make_credential_response_callback_.Reset(); get_assertion_response_callback_.Reset(); client_data_json_.clear(); - echo_appid_extension_ = false; + alternative_application_parameter_.reset(); } BrowserContext* AuthenticatorImpl::browser_context() const {
diff --git a/content/browser/webauth/authenticator_impl.h b/content/browser/webauth/authenticator_impl.h index 8aa29ed..c62e1fa 100644 --- a/content/browser/webauth/authenticator_impl.h +++ b/content/browser/webauth/authenticator_impl.h
@@ -16,6 +16,7 @@ #include "base/optional.h" #include "content/common/content_export.h" #include "content/public/browser/web_contents_observer.h" +#include "crypto/sha2.h" #include "device/fido/authenticator_get_assertion_response.h" #include "device/fido/authenticator_make_credential_response.h" #include "device/fido/fido_constants.h" @@ -168,12 +169,11 @@ blink::mojom::AttestationConveyancePreference attestation_preference_; std::string relying_party_id_; std::unique_ptr<base::OneShotTimer> timer_; - - // Whether or not a GetAssertion call should return a PublicKeyCredential - // instance whose getClientExtensionResults() method yields a - // AuthenticationExtensions dictionary that contains the `appid: true` - // extension output. - bool echo_appid_extension_ = false; + // If the "appid" extension is in use then this is the SHA-256 hash of a U2F + // AppID. This is used to detect when an assertion request was successfully + // retried with this value. + base::Optional<std::array<uint8_t, crypto::kSHA256Length>> + alternative_application_parameter_; // Owns pipes to this Authenticator from |render_frame_host_|. mojo::Binding<blink::mojom::Authenticator> binding_;
diff --git a/content/browser/webauth/authenticator_impl_unittest.cc b/content/browser/webauth/authenticator_impl_unittest.cc index 1d154c8d..e872e131 100644 --- a/content/browser/webauth/authenticator_impl_unittest.cc +++ b/content/browser/webauth/authenticator_impl_unittest.cc
@@ -37,6 +37,10 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#if defined(OS_MACOSX) +#include "device/fido/mac/scoped_touch_id_test_environment.h" +#endif + namespace content { using ::testing::_; @@ -385,11 +389,17 @@ return base::ContainsKey(authenticator_impl_->protocols_, protocol); } + void EnableFeature(const base::Feature& feature) { + scoped_feature_list_.emplace(); + scoped_feature_list_->InitAndEnableFeature(feature); + } + protected: std::unique_ptr<AuthenticatorImpl> authenticator_impl_; service_manager::mojom::ConnectorRequest request_; std::unique_ptr<service_manager::Connector> connector_; std::unique_ptr<device::FakeHidManager> fake_hid_manager_; + base::Optional<base::test::ScopedFeatureList> scoped_feature_list_; }; // Verify behavior for various combinations of origins and RP IDs. @@ -714,26 +724,71 @@ // Verify that a credential registered with U2F can be used via webauthn. TEST_F(AuthenticatorImplTest, AppIdExtension) { SimulateNavigation(GURL(kTestOrigin1)); - PublicKeyCredentialRequestOptionsPtr options = - GetTestPublicKeyCredentialRequestOptions(); - TestGetAssertionCallback callback_receiver; auto task_runner = base::MakeRefCounted<base::TestMockTimeTaskRunner>( base::Time::Now(), base::TimeTicks::Now()); auto authenticator = ConstructAuthenticatorWithTimer(task_runner); - device::test::ScopedVirtualFidoDevice virtual_device; - // Inject a registration for the URL (which is a U2F AppID). - ASSERT_TRUE(virtual_device.mutable_state()->InjectRegistration( - options->allow_credentials[0]->id, kTestOrigin1)); + { + // First, test that the appid extension isn't echoed at all when not + // requested. + PublicKeyCredentialRequestOptionsPtr options = + GetTestPublicKeyCredentialRequestOptions(); + device::test::ScopedVirtualFidoDevice virtual_device; + ASSERT_TRUE(virtual_device.mutable_state()->InjectRegistration( + options->allow_credentials[0]->id, kTestRelyingPartyId)); - // Set the same URL as the appid parameter. - options->appid = kTestOrigin1; + TestGetAssertionCallback callback_receiver; + authenticator->GetAssertion(std::move(options), + callback_receiver.callback()); + callback_receiver.WaitForCallback(); + ASSERT_EQ(AuthenticatorStatus::SUCCESS, callback_receiver.status()); - authenticator->GetAssertion(std::move(options), callback_receiver.callback()); + EXPECT_EQ(false, callback_receiver.value()->echo_appid_extension); + } - // Trigger timer. - callback_receiver.WaitForCallback(); - EXPECT_EQ(AuthenticatorStatus::SUCCESS, callback_receiver.status()); + { + // Second, test that the appid extension is echoed, but is false, when appid + // is requested but not used. + PublicKeyCredentialRequestOptionsPtr options = + GetTestPublicKeyCredentialRequestOptions(); + device::test::ScopedVirtualFidoDevice virtual_device; + ASSERT_TRUE(virtual_device.mutable_state()->InjectRegistration( + options->allow_credentials[0]->id, kTestRelyingPartyId)); + + // This AppID won't be used because the RP ID will be tried (successfully) + // first. + options->appid = kTestOrigin1; + + TestGetAssertionCallback callback_receiver; + authenticator->GetAssertion(std::move(options), + callback_receiver.callback()); + callback_receiver.WaitForCallback(); + ASSERT_EQ(AuthenticatorStatus::SUCCESS, callback_receiver.status()); + + EXPECT_EQ(true, callback_receiver.value()->echo_appid_extension); + EXPECT_EQ(false, callback_receiver.value()->appid_extension); + } + + { + // Lastly, when used, the appid extension result should be "true". + PublicKeyCredentialRequestOptionsPtr options = + GetTestPublicKeyCredentialRequestOptions(); + device::test::ScopedVirtualFidoDevice virtual_device; + // Inject a registration for the URL (which is a U2F AppID). + ASSERT_TRUE(virtual_device.mutable_state()->InjectRegistration( + options->allow_credentials[0]->id, kTestOrigin1)); + + options->appid = kTestOrigin1; + + TestGetAssertionCallback callback_receiver; + authenticator->GetAssertion(std::move(options), + callback_receiver.callback()); + callback_receiver.WaitForCallback(); + ASSERT_EQ(AuthenticatorStatus::SUCCESS, callback_receiver.status()); + + EXPECT_EQ(true, callback_receiver.value()->echo_appid_extension); + EXPECT_EQ(true, callback_receiver.value()->appid_extension); + } } TEST_F(AuthenticatorImplTest, TestGetAssertionTimeout) { @@ -797,10 +852,7 @@ TEST_F(AuthenticatorImplTest, TestCableDiscoveryEnabledWithSwitch) { TestServiceManagerContext service_manager_context; - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitWithFeatures( - std::vector<base::Feature>{features::kWebAuthCable}, - std::vector<base::Feature>{}); + EnableFeature(features::kWebAuthCable); SimulateNavigation(GURL(kTestOrigin1)); PublicKeyCredentialRequestOptionsPtr options = @@ -823,8 +875,7 @@ } TEST_F(AuthenticatorImplTest, TestCableDiscoveryDisabledForMakeCredential) { - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeature(features::kWebAuthCable); + EnableFeature(features::kWebAuthCable); SimulateNavigation(GURL(kTestOrigin1)); PublicKeyCredentialCreationOptionsPtr options = @@ -1532,9 +1583,65 @@ } #if defined(OS_MACOSX) -TEST_F(AuthenticatorContentBrowserClientTest, IsUVPAAFalseWithoutTouchId) { - test_client_.supports_touch_id = false; +TEST_F(AuthenticatorContentBrowserClientTest, + IsUVPAAFalseIfEmbedderDoesNotSupportTouchId) { + if (__builtin_available(macOS 10.12.2, *)) { + // Touch ID is hardware-supported, and flag-enabled, but not enabled by the + // embedder. + EnableFeature(device::kWebAuthTouchId); + device::fido::mac::ScopedTouchIdTestEnvironment touch_id_test_environment; + touch_id_test_environment.SetTouchIdAvailable(true); + test_client_.supports_touch_id = false; + NavigateAndCommit(GURL(kTestOrigin1)); + AuthenticatorPtr authenticator = ConnectToAuthenticator(); + + TestIsUvpaaCallback cb; + authenticator->IsUserVerifyingPlatformAuthenticatorAvailable(cb.callback()); + cb.WaitForCallback(); + EXPECT_FALSE(cb.value()); + } +} + +TEST_F(AuthenticatorContentBrowserClientTest, IsUVPAAFalseIfFeatureFlagOff) { + if (__builtin_available(macOS 10.12.2, *)) { + // Touch ID is hardware-supported and embedder-enabled, but the flag is off. + device::fido::mac::ScopedTouchIdTestEnvironment touch_id_test_environment; + touch_id_test_environment.SetTouchIdAvailable(true); + test_client_.supports_touch_id = true; + + NavigateAndCommit(GURL(kTestOrigin1)); + AuthenticatorPtr authenticator = ConnectToAuthenticator(); + + TestIsUvpaaCallback cb; + authenticator->IsUserVerifyingPlatformAuthenticatorAvailable(cb.callback()); + cb.WaitForCallback(); + EXPECT_FALSE(cb.value()); + } +} + +TEST_F(AuthenticatorContentBrowserClientTest, IsUVPAATrueIfTouchIdAvailable) { + if (__builtin_available(macOS 10.12.2, *)) { + // Touch ID is available. + EnableFeature(device::kWebAuthTouchId); + device::fido::mac::ScopedTouchIdTestEnvironment touch_id_test_environment; + touch_id_test_environment.SetTouchIdAvailable(true); + test_client_.supports_touch_id = true; + + NavigateAndCommit(GURL(kTestOrigin1)); + AuthenticatorPtr authenticator = ConnectToAuthenticator(); + + TestIsUvpaaCallback cb; + authenticator->IsUserVerifyingPlatformAuthenticatorAvailable(cb.callback()); + cb.WaitForCallback(); + EXPECT_TRUE(cb.value()); + } +} +#endif // defined(OS_MACOSX) + +#if !defined(OS_MACOSX) +TEST_F(AuthenticatorContentBrowserClientTest, IsUVPAAFalse) { + // No platform authenticator on non-macOS platforms. NavigateAndCommit(GURL(kTestOrigin1)); AuthenticatorPtr authenticator = ConnectToAuthenticator(); @@ -1543,7 +1650,7 @@ cb.WaitForCallback(); EXPECT_FALSE(cb.value()); } -#endif +#endif // !defined(OS_MACOSX) class MockAuthenticatorRequestDelegateObserver : public TestAuthenticatorRequestDelegate {
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc index 4731f21a0..c8a8e238 100644 --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc
@@ -415,6 +415,10 @@ WebRuntimeFeatures::EnableLazyFrameLoading(true); if (base::FeatureList::IsEnabled(features::kLazyFrameVisibleLoadTimeMetrics)) WebRuntimeFeatures::EnableLazyFrameVisibleLoadTimeMetrics(true); + if (base::FeatureList::IsEnabled(features::kLazyImageLoading)) + WebRuntimeFeatures::EnableLazyImageLoading(true); + if (base::FeatureList::IsEnabled(features::kLazyImageVisibleLoadTimeMetrics)) + WebRuntimeFeatures::EnableLazyImageVisibleLoadTimeMetrics(true); WebRuntimeFeatures::EnableV8ContextSnapshot( base::FeatureList::IsEnabled(features::kV8ContextSnapshot));
diff --git a/content/common/background_fetch/background_fetch_struct_traits.h b/content/common/background_fetch/background_fetch_struct_traits.h index 380748db..1bdf42c8 100644 --- a/content/common/background_fetch/background_fetch_struct_traits.h +++ b/content/common/background_fetch/background_fetch_struct_traits.h
@@ -83,9 +83,10 @@ const content::BackgroundFetchSettledFetch& fetch) { return fetch.request; } - static const content::ServiceWorkerResponse& response( + static blink::mojom::FetchAPIResponsePtr response( const content::BackgroundFetchSettledFetch& fetch) { - return fetch.response; + return content::BackgroundFetchSettledFetch::MakeCloneResponse( + fetch.response); } static bool Read(content::mojom::BackgroundFetchSettledFetchDataView data,
diff --git a/content/common/background_fetch/background_fetch_types.cc b/content/common/background_fetch/background_fetch_types.cc index 2d5ba68..a1e3ac23 100644 --- a/content/common/background_fetch/background_fetch_types.cc +++ b/content/common/background_fetch/background_fetch_types.cc
@@ -4,6 +4,20 @@ #include "content/common/background_fetch/background_fetch_types.h" +namespace { + +blink::mojom::SerializedBlobPtr MakeCloneSerializedBlob( + const blink::mojom::SerializedBlobPtr& blob) { + if (!blob) + return nullptr; + blink::mojom::BlobPtr blob_ptr(std::move(blob->blob)); + blob_ptr->Clone(mojo::MakeRequest(&blob->blob)); + return blink::mojom::SerializedBlob::New( + blob->uuid, blob->content_type, blob->size, blob_ptr.PassInterface()); +} + +} // namespace + namespace content { BackgroundFetchOptions::BackgroundFetchOptions() = default; @@ -20,10 +34,33 @@ BackgroundFetchRegistration::~BackgroundFetchRegistration() = default; +// static +blink::mojom::FetchAPIResponsePtr +BackgroundFetchSettledFetch::MakeCloneResponse( + const blink::mojom::FetchAPIResponsePtr& response) { + if (!response) + return nullptr; + return blink::mojom::FetchAPIResponse::New( + response->url_list, response->status_code, response->status_text, + response->response_type, response->headers, + MakeCloneSerializedBlob(response->blob), response->error, + response->response_time, response->cache_storage_cache_name, + response->cors_exposed_header_names, response->is_in_cache_storage, + MakeCloneSerializedBlob(response->side_data_blob)); +} BackgroundFetchSettledFetch::BackgroundFetchSettledFetch() = default; BackgroundFetchSettledFetch::BackgroundFetchSettledFetch( - const BackgroundFetchSettledFetch& other) = default; + const BackgroundFetchSettledFetch& other) { + *this = other; +} + +BackgroundFetchSettledFetch& BackgroundFetchSettledFetch::operator=( + const BackgroundFetchSettledFetch& other) { + request = other.request; + response = MakeCloneResponse(other.response); + return *this; +} BackgroundFetchSettledFetch::~BackgroundFetchSettledFetch() = default;
diff --git a/content/common/background_fetch/background_fetch_types.h b/content/common/background_fetch/background_fetch_types.h index fd77442..193820e 100644 --- a/content/common/background_fetch/background_fetch_types.h +++ b/content/common/background_fetch/background_fetch_types.h
@@ -12,6 +12,7 @@ #include "content/common/content_export.h" #include "content/common/service_worker/service_worker_types.h" #include "third_party/blink/public/common/manifest/manifest.h" +#include "third_party/blink/public/mojom/fetch/fetch_api_response.mojom.h" namespace content { @@ -55,12 +56,16 @@ // Analogous to the following structure in the spec: // http://wicg.github.io/background-fetch/#backgroundfetchsettledfetch struct CONTENT_EXPORT BackgroundFetchSettledFetch { + static blink::mojom::FetchAPIResponsePtr MakeCloneResponse( + const blink::mojom::FetchAPIResponsePtr& response); BackgroundFetchSettledFetch(); BackgroundFetchSettledFetch(const BackgroundFetchSettledFetch& other); + BackgroundFetchSettledFetch& operator=( + const BackgroundFetchSettledFetch& other); ~BackgroundFetchSettledFetch(); ServiceWorkerFetchRequest request; - ServiceWorkerResponse response; + blink::mojom::FetchAPIResponsePtr response; }; } // namespace content
diff --git a/content/common/sandbox_policy_fuchsia.cc b/content/common/sandbox_policy_fuchsia.cc index 9bae2bb..7080c3b 100644 --- a/content/common/sandbox_policy_fuchsia.cc +++ b/content/common/sandbox_policy_fuchsia.cc
@@ -16,6 +16,7 @@ #include "base/fuchsia/filtered_service_directory.h" #include "base/process/launch.h" #include "base/process/process.h" +#include "base/threading/thread_task_runner_handle.h" #include "content/public/common/content_switches.h" #include "services/service_manager/sandbox/switches.h" @@ -25,7 +26,11 @@ fuchsia::fonts::FontProvider::Name_}; SandboxPolicyFuchsia::SandboxPolicyFuchsia() = default; -SandboxPolicyFuchsia::~SandboxPolicyFuchsia() = default; + +SandboxPolicyFuchsia::~SandboxPolicyFuchsia() { + service_directory_task_runner_->DeleteSoon(FROM_HERE, + std::move(service_directory_)); +} void SandboxPolicyFuchsia::Initialize(service_manager::SandboxType type) { DCHECK_NE(type, service_manager::SANDBOX_TYPE_INVALID); @@ -39,6 +44,7 @@ } if (type_ == service_manager::SANDBOX_TYPE_RENDERER) { + service_directory_task_runner_ = base::ThreadTaskRunnerHandle::Get(); // Create FilteredServicesDirectory for the renderer process and export all // services in kRendererServices. ServiceDirectoryProxy must be initialized // on a thread that has async_dispatcher.
diff --git a/content/common/sandbox_policy_fuchsia.h b/content/common/sandbox_policy_fuchsia.h index 0637e35ce..4f2592c 100644 --- a/content/common/sandbox_policy_fuchsia.h +++ b/content/common/sandbox_policy_fuchsia.h
@@ -5,10 +5,12 @@ #ifndef CONTENT_COMMON_SANDBOX_POLICY_FUCHSIA_H_ #define CONTENT_COMMON_SANDBOX_POLICY_FUCHSIA_H_ +#include "base/memory/ref_counted.h" #include "services/service_manager/sandbox/sandbox_type.h" namespace base { struct LaunchOptions; +class SequencedTaskRunner; namespace fuchsia { class FilteredServiceDirectory; @@ -38,6 +40,7 @@ // Services directory used for the /svc namespace of the child process. std::unique_ptr<base::fuchsia::FilteredServiceDirectory> service_directory_; + scoped_refptr<base::SequencedTaskRunner> service_directory_task_runner_; }; } // namespace content
diff --git a/content/common/service_worker/service_worker.mojom b/content/common/service_worker/service_worker.mojom index e696947c..3b4290f 100644 --- a/content/common/service_worker/service_worker.mojom +++ b/content/common/service_worker/service_worker.mojom
@@ -10,6 +10,7 @@ import "third_party/blink/public/platform/modules/fetch/fetch_api_request.mojom"; import "third_party/blink/public/platform/modules/notifications/notification.mojom"; import "third_party/blink/public/platform/modules/payments/payment_app.mojom"; +import "third_party/blink/public/mojom/fetch/fetch_api_response.mojom"; import "third_party/blink/public/mojom/message_port/message_port.mojom"; import "third_party/blink/public/mojom/service_worker/dispatch_fetch_event_params.mojom"; import "third_party/blink/public/mojom/service_worker/service_worker.mojom"; @@ -21,14 +22,10 @@ import "url/mojom/origin.mojom"; import "url/mojom/url.mojom"; -[Native] -struct ServiceWorkerResponse; - -// TODO(peter): Move this to Blink when ServiceWorkerResponse has a Mojo -// counterpart. +// TODO(peter): Move this to Blink. struct BackgroundFetchSettledFetch { blink.mojom.FetchAPIRequest request; - ServiceWorkerResponse response; + blink.mojom.FetchAPIResponse? response; }; enum BackgroundFetchState { @@ -186,6 +183,13 @@ => (blink.mojom.ServiceWorkerEventStatus status, mojo_base.mojom.Time dispatch_event_time); + // TODO(crbug.com/869714): Remove this code for long living service workers + // when Android Messages no longer requires it. + DispatchExtendableMessageEventWithCustomTimeout(ExtendableMessageEvent event, + mojo_base.mojom.TimeDelta timeout) + => (blink.mojom.ServiceWorkerEventStatus status, + mojo_base.mojom.Time dispatch_event_time); + // Pings the service worker to check if it is responsive. If the callback is // not called within a certain period of time, the browser will terminate the // worker.
diff --git a/content/common/service_worker/service_worker.typemap b/content/common/service_worker/service_worker.typemap deleted file mode 100644 index 7accc19..0000000 --- a/content/common/service_worker/service_worker.typemap +++ /dev/null
@@ -1,11 +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. - -mojom = "//content/common/service_worker/service_worker.mojom" -public_headers = [ "//content/common/service_worker/service_worker_types.h" ] -traits_headers = [ "//content/common/service_worker/service_worker_messages.h" ] -type_mappings = [ - "content.mojom.ServiceWorkerFetchRequest=::content::ServiceWorkerFetchRequest", - "content.mojom.ServiceWorkerResponse=::content::ServiceWorkerResponse", -]
diff --git a/content/common/service_worker/service_worker_messages.h b/content/common/service_worker/service_worker_messages.h index 9141f28..f06db99 100644 --- a/content/common/service_worker/service_worker_messages.h +++ b/content/common/service_worker/service_worker_messages.h
@@ -27,9 +27,6 @@ // TODO(leonhsl): Figure out what's the purpose of all these traits then // eliminate this file finally. -IPC_ENUM_TRAITS_MAX_VALUE(blink::mojom::ServiceWorkerResponseError, - blink::mojom::ServiceWorkerResponseError::kMaxValue) - IPC_STRUCT_TRAITS_BEGIN(content::ServiceWorkerFetchRequest) IPC_STRUCT_TRAITS_MEMBER(mode) IPC_STRUCT_TRAITS_MEMBER(is_main_resource_load) @@ -47,23 +44,4 @@ IPC_STRUCT_TRAITS_MEMBER(is_reload) IPC_STRUCT_TRAITS_END() -IPC_STRUCT_TRAITS_BEGIN(content::ServiceWorkerResponse) - IPC_STRUCT_TRAITS_MEMBER(url_list) - IPC_STRUCT_TRAITS_MEMBER(status_code) - IPC_STRUCT_TRAITS_MEMBER(status_text) - IPC_STRUCT_TRAITS_MEMBER(response_type) - IPC_STRUCT_TRAITS_MEMBER(headers) - IPC_STRUCT_TRAITS_MEMBER(blob_uuid) - IPC_STRUCT_TRAITS_MEMBER(blob_size) - IPC_STRUCT_TRAITS_MEMBER(blob) - IPC_STRUCT_TRAITS_MEMBER(error) - IPC_STRUCT_TRAITS_MEMBER(response_time) - IPC_STRUCT_TRAITS_MEMBER(is_in_cache_storage) - IPC_STRUCT_TRAITS_MEMBER(cache_storage_cache_name) - IPC_STRUCT_TRAITS_MEMBER(cors_exposed_header_names) - IPC_STRUCT_TRAITS_MEMBER(side_data_blob_uuid) - IPC_STRUCT_TRAITS_MEMBER(side_data_blob_size) - IPC_STRUCT_TRAITS_MEMBER(side_data_blob) -IPC_STRUCT_TRAITS_END() - #endif // CONTENT_COMMON_SERVICE_WORKER_SERVICE_WORKER_MESSAGES_H_
diff --git a/content/common/throttling_url_loader.cc b/content/common/throttling_url_loader.cc index a4ae95a..d2d5a593 100644 --- a/content/common/throttling_url_loader.cc +++ b/content/common/throttling_url_loader.cc
@@ -196,10 +196,9 @@ DCHECK(!modified_request_headers.has_value()) << "ThrottlingURLLoader doesn't support modified_request_headers for " "synthesized requests."; - auto start_info = std::move(start_info_); - StartNow(start_info->url_loader_factory.get(), start_info->routing_id, - start_info->request_id, start_info->options, - &start_info->url_request, std::move(start_info->task_runner)); + StartNow(start_info_->url_loader_factory.get(), start_info_->routing_id, + start_info_->request_id, start_info_->options, + &start_info_->url_request, start_info_->task_runner); return; } @@ -214,6 +213,19 @@ } } +void ThrottlingURLLoader::FollowRedirectForcingRestart() { + url_loader_.reset(); + client_binding_.Close(); + + for (const std::string& key : to_be_removed_request_headers_) + start_info_->url_request.headers.RemoveHeader(key); + to_be_removed_request_headers_.clear(); + + StartNow(start_info_->url_loader_factory.get(), start_info_->routing_id, + start_info_->request_id, start_info_->options, + &start_info_->url_request, start_info_->task_runner); +} + void ThrottlingURLLoader::SetPriority(net::RequestPriority priority, int32_t intra_priority_value) { if (!url_loader_) { @@ -259,6 +271,10 @@ if (options & network::mojom::kURLLoadOptionSynchronous) is_synchronous_ = true; + start_info_ = + std::make_unique<StartInfo>(factory, routing_id, request_id, options, + url_request, std::move(task_runner)); + DCHECK(deferring_throttles_.empty()); if (!throttles_.empty()) { bool deferred = false; @@ -290,9 +306,6 @@ if (deferred) { deferred_stage_ = DEFERRED_START; - start_info_ = std::make_unique<StartInfo>( - std::move(factory), routing_id, request_id, options, url_request, - std::move(task_runner)); return; } } @@ -441,6 +454,15 @@ } } + // Update the request in case |FollowRedirectForcingRestart()| is called, and + // needs to use the request updated for the redirect. + network::ResourceRequest& request = start_info_->url_request; + request.url = redirect_info.new_url; + request.method = redirect_info.new_method; + request.site_for_cookies = redirect_info.new_site_for_cookies; + request.referrer = GURL(redirect_info.new_referrer); + request.referrer_policy = redirect_info.new_referrer_policy; + // TODO(dhausknecht) at this point we do not actually know if we commit to the // redirect or if it will be cancelled. FollowRedirect would be a more // suitable place to set this URL but there we do not have the data. @@ -526,10 +548,9 @@ deferred_stage_ = DEFERRED_NONE; switch (prev_deferred_stage) { case DEFERRED_START: { - auto start_info = std::move(start_info_); - StartNow(start_info->url_loader_factory.get(), start_info->routing_id, - start_info->request_id, start_info->options, - &start_info->url_request, std::move(start_info->task_runner)); + StartNow(start_info_->url_loader_factory.get(), start_info_->routing_id, + start_info_->request_id, start_info_->options, + &start_info_->url_request, start_info_->task_runner); break; } case DEFERRED_REDIRECT: {
diff --git a/content/common/throttling_url_loader.h b/content/common/throttling_url_loader.h index bc30b8e..0154478 100644 --- a/content/common/throttling_url_loader.h +++ b/content/common/throttling_url_loader.h
@@ -52,6 +52,9 @@ void FollowRedirect( const base::Optional<net::HttpRequestHeaders>& modified_request_headers); + // Follows a redirect, calling CreateLoaderAndStart() on the factory. This + // is useful if the factory uses different loaders for different URLs. + void FollowRedirectForcingRestart(); void SetPriority(net::RequestPriority priority, int32_t intra_priority_value); // Disconnect the forwarding URLLoaderClient and the URLLoader. Returns the
diff --git a/content/common/typemaps.gni b/content/common/typemaps.gni index e278a858d..e78dd1b 100644 --- a/content/common/typemaps.gni +++ b/content/common/typemaps.gni
@@ -15,7 +15,6 @@ "//content/common/notifications/notification_types.typemap", "//content/common/push_messaging.typemap", "//content/common/render_frame_metadata.typemap", - "//content/common/service_worker/service_worker.typemap", "//content/common/service_worker/service_worker_fetch_request.typemap", "//content/common/url_loader_factory_bundle.typemap", "//content/common/web_preferences.typemap",
diff --git a/content/common/url_loader_factory_bundle.cc b/content/common/url_loader_factory_bundle.cc index 28fd78f..8e6726f1 100644 --- a/content/common/url_loader_factory_bundle.cc +++ b/content/common/url_loader_factory_bundle.cc
@@ -14,9 +14,11 @@ URLLoaderFactoryBundleInfo::URLLoaderFactoryBundleInfo( network::mojom::URLLoaderFactoryPtrInfo default_factory_info, std::map<std::string, network::mojom::URLLoaderFactoryPtrInfo> - factories_info) + factories_info, + bool bypass_redirect_checks) : default_factory_info_(std::move(default_factory_info)), - factories_info_(std::move(factories_info)) {} + factories_info_(std::move(factories_info)), + bypass_redirect_checks_(bypass_redirect_checks) {} URLLoaderFactoryBundleInfo::~URLLoaderFactoryBundleInfo() = default; @@ -25,6 +27,7 @@ auto other = std::make_unique<URLLoaderFactoryBundleInfo>(); other->default_factory_info_ = std::move(default_factory_info_); other->factories_info_ = std::move(factories_info_); + other->bypass_redirect_checks_ = bypass_redirect_checks_; return base::MakeRefCounted<URLLoaderFactoryBundle>(std::move(other)); } @@ -97,7 +100,12 @@ } return std::make_unique<URLLoaderFactoryBundleInfo>( - std::move(default_factory_info), std::move(factories_info)); + std::move(default_factory_info), std::move(factories_info), + bypass_redirect_checks_); +} + +bool URLLoaderFactoryBundle::BypassRedirectChecks() const { + return bypass_redirect_checks_; } void URLLoaderFactoryBundle::Update( @@ -106,6 +114,7 @@ default_factory_.Bind(std::move(info->default_factory_info())); for (auto& factory_info : info->factories_info()) factories_[factory_info.first].Bind(std::move(factory_info.second)); + bypass_redirect_checks_ = info->bypass_redirect_checks(); } } // namespace content
diff --git a/content/common/url_loader_factory_bundle.h b/content/common/url_loader_factory_bundle.h index 1883f494..252152a 100644 --- a/content/common/url_loader_factory_bundle.h +++ b/content/common/url_loader_factory_bundle.h
@@ -26,7 +26,8 @@ URLLoaderFactoryBundleInfo( network::mojom::URLLoaderFactoryPtrInfo default_factory_info, std::map<std::string, network::mojom::URLLoaderFactoryPtrInfo> - factories_info); + factories_info, + bool bypass_redirect_checks); ~URLLoaderFactoryBundleInfo() override; network::mojom::URLLoaderFactoryPtrInfo& default_factory_info() { @@ -38,6 +39,11 @@ return factories_info_; } + bool bypass_redirect_checks() const { return bypass_redirect_checks_; } + void set_bypass_redirect_checks(bool bypass_redirect_checks) { + bypass_redirect_checks_ = bypass_redirect_checks; + } + protected: // SharedURLLoaderFactoryInfo implementation. scoped_refptr<network::SharedURLLoaderFactory> CreateFactory() override; @@ -45,6 +51,7 @@ network::mojom::URLLoaderFactoryPtrInfo default_factory_info_; std::map<std::string, network::mojom::URLLoaderFactoryPtrInfo> factories_info_; + bool bypass_redirect_checks_ = false; DISALLOW_COPY_AND_ASSIGN(URLLoaderFactoryBundleInfo); }; @@ -83,6 +90,7 @@ traffic_annotation) override; void Clone(network::mojom::URLLoaderFactoryRequest request) override; std::unique_ptr<network::SharedURLLoaderFactoryInfo> Clone() override; + bool BypassRedirectChecks() const override; // The |info| contains replacement factories for a subset of the existing // bundle. @@ -93,6 +101,7 @@ network::mojom::URLLoaderFactoryPtr default_factory_; std::map<std::string, network::mojom::URLLoaderFactoryPtr> factories_; + bool bypass_redirect_checks_ = false; }; } // namespace content
diff --git a/content/common/url_loader_factory_bundle.mojom b/content/common/url_loader_factory_bundle.mojom index 672bb66..348f891 100644 --- a/content/common/url_loader_factory_bundle.mojom +++ b/content/common/url_loader_factory_bundle.mojom
@@ -13,4 +13,8 @@ // A mapping from URL scheme to factory interface. map<string, network.mojom.URLLoaderFactory> factories; + + // Whether redirect checks should be bypassed, since they are happening in the + // browser. + bool bypass_redirect_checks = false; };
diff --git a/content/common/url_loader_factory_bundle_struct_traits.cc b/content/common/url_loader_factory_bundle_struct_traits.cc index e0627fb..60a4538a 100644 --- a/content/common/url_loader_factory_bundle_struct_traits.cc +++ b/content/common/url_loader_factory_bundle_struct_traits.cc
@@ -23,6 +23,11 @@ } // static +bool Traits::bypass_redirect_checks(BundleInfoType& bundle) { + return bundle->bypass_redirect_checks(); +} + +// static bool Traits::Read(content::mojom::URLLoaderFactoryBundleDataView data, BundleInfoType* out_bundle) { *out_bundle = std::make_unique<content::URLLoaderFactoryBundleInfo>(); @@ -32,6 +37,8 @@ if (!data.ReadFactories(&(*out_bundle)->factories_info())) return false; + (*out_bundle)->set_bypass_redirect_checks(data.bypass_redirect_checks()); + return true; }
diff --git a/content/common/url_loader_factory_bundle_struct_traits.h b/content/common/url_loader_factory_bundle_struct_traits.h index e8d9220..70713c96 100644 --- a/content/common/url_loader_factory_bundle_struct_traits.h +++ b/content/common/url_loader_factory_bundle_struct_traits.h
@@ -26,6 +26,8 @@ static std::map<std::string, network::mojom::URLLoaderFactoryPtrInfo> factories(BundleInfoType& bundle); + static bool bypass_redirect_checks(BundleInfoType& bundle); + static bool Read(content::mojom::URLLoaderFactoryBundleDataView data, BundleInfoType* out_bundle); };
diff --git a/content/common/user_agent.cc b/content/common/user_agent.cc index e4565757..cf3b6df7 100644 --- a/content/common/user_agent.cc +++ b/content/common/user_agent.cc
@@ -6,6 +6,7 @@ #include <stdint.h> +#include "base/feature_list.h" #include "base/logging.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" @@ -21,6 +22,11 @@ namespace content { +#if defined(OS_ANDROID) +const base::Feature kAndroidUserAgentStringContainsBuildId{ + "AndroidUserAgentStringContainsBuildId", base::FEATURE_DISABLED_BY_DEFAULT}; +#endif // defined(OS_ANDROID) + std::string GetWebKitVersion() { return base::StringPrintf("%d.%d (%s)", WEBKIT_VERSION_MAJOR, @@ -32,7 +38,7 @@ return WEBKIT_SVN_REVISION; } -std::string BuildOSCpuInfo() { +std::string BuildOSCpuInfo(bool include_android_build_number) { std::string os_cpu; #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS) ||\ @@ -73,13 +79,17 @@ } // Append the build ID. - std::string android_build_id = base::SysInfo::GetAndroidBuildID(); - if (android_build_id.size() > 0) { - if (!semicolon_inserted) { - android_info_str += ";"; + if (base::FeatureList::IsEnabled(kAndroidUserAgentStringContainsBuildId) || + include_android_build_number) { + std::string android_build_id = base::SysInfo::GetAndroidBuildID(); + if (android_build_id.size() > 0) { + if (!semicolon_inserted) { + android_info_str += ";"; + } + android_info_str += " Build/" + android_build_id; } - android_info_str += " Build/" + android_build_id; } + #elif (defined(OS_POSIX) && !defined(OS_MACOSX)) || defined(OS_FUCHSIA) // Should work on any Posix system. struct utsname unixinfo; @@ -145,26 +155,23 @@ std::string BuildUserAgentFromProduct(const std::string& product) { std::string os_info; - base::StringAppendF( - &os_info, - "%s%s", - getUserAgentPlatform().c_str(), - BuildOSCpuInfo().c_str()); + base::StringAppendF(&os_info, "%s%s", getUserAgentPlatform().c_str(), + BuildOSCpuInfo(false).c_str()); return BuildUserAgentFromOSAndProduct(os_info, product); } +#if defined(OS_ANDROID) std::string BuildUserAgentFromProductAndExtraOSInfo( const std::string& product, - const std::string& extra_os_info) { + const std::string& extra_os_info, + const bool include_android_build_number) { std::string os_info; - base::StringAppendF( - &os_info, - "%s%s%s", - getUserAgentPlatform().c_str(), - BuildOSCpuInfo().c_str(), - extra_os_info.c_str()); + base::StringAppendF(&os_info, "%s%s%s", getUserAgentPlatform().c_str(), + BuildOSCpuInfo(include_android_build_number).c_str(), + extra_os_info.c_str()); return BuildUserAgentFromOSAndProduct(os_info, product); } +#endif std::string BuildUserAgentFromOSAndProduct(const std::string& os_info, const std::string& product) {
diff --git a/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java b/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java index 47c794f..69d72264 100644 --- a/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java
@@ -165,7 +165,7 @@ } /* Called when ongoing fling gesture needs to be reset. */ - public void resetFlingGesture() { + private void resetFlingGesture() { if (mHasActiveFlingScroll) { onFlingEnd(); mHasActiveFlingScroll = false; @@ -324,7 +324,7 @@ return mIsTouchScrollInProgress || mHasActiveFlingScroll; } - void setTouchScrollInProgress(boolean touchScrollInProgress) { + private void setTouchScrollInProgress(boolean touchScrollInProgress) { mIsTouchScrollInProgress = touchScrollInProgress; // Use the active touch scroll signal for hiding. The animation movement @@ -336,7 +336,7 @@ * Reset scroll and fling accounting, notifying listeners as appropriate. * This is useful as a failsafe when the input stream may have been interruped. */ - void resetScrollInProgress() { + private void resetScrollInProgress() { if (!isScrollInProgress()) return; final boolean touchScrollInProgress = mIsTouchScrollInProgress;
diff --git a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java index cf0fdc0..5c46b88e 100644 --- a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java
@@ -618,18 +618,6 @@ } } - /** - * @return The amount of the top controls height if controls are in the state - * of shrinking Blink's view size, otherwise 0. - */ - @VisibleForTesting - public int getTopControlsShrinkBlinkHeightForTesting() { - // TODO(jinsukkim): Let callsites provide with its own top controls height to remove - // the test-only method in content layer. - if (mNativeWebContentsAndroid == 0) return 0; - return nativeGetTopControlsShrinkBlinkHeightPixForTesting(mNativeWebContentsAndroid); - } - @VisibleForTesting @Override public boolean isSelectPopupVisibleForTesting() { @@ -972,8 +960,6 @@ private native int nativeGetWidth(long nativeWebContentsAndroid); private native int nativeGetHeight(long nativeWebContentsAndroid); private native EventForwarder nativeGetOrCreateEventForwarder(long nativeWebContentsAndroid); - private native int nativeGetTopControlsShrinkBlinkHeightPixForTesting( - long nativeWebContentsAndroid); private native void nativeSetViewAndroidDelegate( long nativeWebContentsAndroid, ViewAndroidDelegate viewDelegate); private native void nativeSendOrientationChangeEvent(
diff --git a/content/public/browser/BUILD.gn b/content/public/browser/BUILD.gn index 0be1068..ae850f99 100644 --- a/content/public/browser/BUILD.gn +++ b/content/public/browser/BUILD.gn
@@ -224,7 +224,6 @@ "push_messaging_service.cc", "push_messaging_service.h", "quota_permission_context.h", - "redirect_checker.h", "reload_type.h", "render_frame_host.h", "render_frame_metadata_provider.h",
diff --git a/content/public/browser/appcache_service.h b/content/public/browser/appcache_service.h index a6b83ee..0e140ae 100644 --- a/content/public/browser/appcache_service.h +++ b/content/public/browser/appcache_service.h
@@ -12,7 +12,7 @@ #include "base/memory/ref_counted.h" #include "content/common/content_export.h" #include "content/public/common/appcache_info.h" -#include "net/base/completion_callback.h" +#include "net/base/completion_once_callback.h" #include "url/origin.h" namespace content { @@ -46,7 +46,7 @@ // subresource loads for pages associated with a deleted group // will fail. This method always completes asynchronously. virtual void DeleteAppCacheGroup(const GURL& manifest_url, - const net::CompletionCallback& callback) = 0; + net::CompletionOnceCallback callback) = 0; protected: virtual ~AppCacheService() {}
diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc index 7d23f281..516a5ffd 100644 --- a/content/public/browser/content_browser_client.cc +++ b/content/public/browser/content_browser_client.cc
@@ -661,8 +661,7 @@ BrowserContext* browser_context, RenderFrameHost* frame, bool is_navigation, - network::mojom::URLLoaderFactoryRequest* factory_request, - scoped_refptr<RedirectChecker>* redirect_checker) { + network::mojom::URLLoaderFactoryRequest* factory_request) { return false; }
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h index 1b8456c..db9612af 100644 --- a/content/public/browser/content_browser_client.h +++ b/content/public/browser/content_browser_client.h
@@ -164,7 +164,6 @@ class PlatformNotificationService; class QuotaPermissionContext; class ReceiverPresentationServiceDelegate; -class RedirectChecker; class RenderFrameHost; class RenderProcessHost; class RenderViewHost; @@ -1122,9 +1121,6 @@ // requests for the URLLoaderFactory. Otherwise |*factory_request| is left // unmodified and this must return |false|. // - // If |redirect_checker| is set, it should be called on the IO thread to check - // if a redirect should be allowed. - // // Always called on the UI thread and only when the Network Service is // enabled. // @@ -1135,8 +1131,7 @@ BrowserContext* browser_context, RenderFrameHost* frame, bool is_navigation, - network::mojom::URLLoaderFactoryRequest* factory_request, - scoped_refptr<RedirectChecker>* redirect_checker); + network::mojom::URLLoaderFactoryRequest* factory_request); // Allows the embedder to intercept a WebSocket connection. |*request| // is always valid upon entry and MUST be valid upon return. The embedder
diff --git a/content/public/browser/redirect_checker.h b/content/public/browser/redirect_checker.h deleted file mode 100644 index 82c30a2..0000000 --- a/content/public/browser/redirect_checker.h +++ /dev/null
@@ -1,33 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CONTENT_PUBLIC_BROWSER_REDIRECT_CHECKER_H_ -#define CONTENT_PUBLIC_BROWSER_REDIRECT_CHECKER_H_ - -#include "base/memory/ref_counted.h" - -namespace net { -struct RedirectInfo; -} // namespace net - -namespace content { - -// Checks if a redirect should be allowed. Useful to pass around state related -// to whitelisting certain redirects. -class RedirectChecker : public base::RefCountedThreadSafe<RedirectChecker> { - public: - // Whether a redirect specified by |redirect_info| should be allowed. - virtual bool ShouldAllowRedirect(int32_t request_id, - const net::RedirectInfo& redirect_info) = 0; - - protected: - virtual ~RedirectChecker() {} - - private: - friend base::RefCountedThreadSafe<RedirectChecker>; -}; - -} // namespace content - -#endif // CONTENT_PUBLIC_BROWSER_REDIRECT_CHECKER_H_
diff --git a/content/public/browser/render_frame_host.h b/content/public/browser/render_frame_host.h index 5a85535..eaee051 100644 --- a/content/public/browser/render_frame_host.h +++ b/content/public/browser/render_frame_host.h
@@ -316,7 +316,9 @@ const blink::WebMediaPlayerAction& action) = 0; // Creates a Network Service-backed factory from appropriate |NetworkContext|. - virtual void CreateNetworkServiceDefaultFactory( + // If this returns true, any redirect safety checks should be bypassed in + // downstream loaders. + virtual bool CreateNetworkServiceDefaultFactory( network::mojom::URLLoaderFactoryRequest default_factory_request) = 0; private:
diff --git a/content/public/browser/service_worker_context.h b/content/public/browser/service_worker_context.h index a8c957a..29f847ad 100644 --- a/content/public/browser/service_worker_context.h +++ b/content/public/browser/service_worker_context.h
@@ -173,6 +173,21 @@ StartWorkerCallback info_callback, base::OnceClosure failure_callback) = 0; + // Deprecated: DO NOT USE + // This is a temporary addition only to be used for the Android Messages + // integration with ChromeOS (http://crbug.com/823256). The removal is + // tracked at http://crbug.com/869714. Please ask Service Worker OWNERS + // (content/browser/service_worker/OWNERS) if you have questions. + // + // This method MUST be called on the IO thread. It starts the active worker + // of the registration whose scope is |pattern|, sets its timeout to 999 days, + // and passes in the given |message|. The |result_callback| will be executed + // upon success or failure and pass back the boolean result. + virtual void StartServiceWorkerAndDispatchLongRunningMessage( + const GURL& pattern, + blink::TransferableMessage message, + ResultCallback result_callback) = 0; + // Starts the service worker for |document_url|. Called when a navigation to // that URL is predicted to occur soon. Must be called from the UI thread. The // |callback| will always be called on the UI thread.
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index 6b9dd563..2157f33 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -208,6 +208,10 @@ base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kLazyFrameVisibleLoadTimeMetrics{ "LazyFrameVisibleLoadTimeMetrics", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kLazyImageLoading{"LazyImageLoading", + base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kLazyImageVisibleLoadTimeMetrics{ + "LazyImageVisibleLoadTimeMetrics", base::FEATURE_DISABLED_BY_DEFAULT}; // Enable lazy initialization of the media controls. const base::Feature kLazyInitializeMediaControls{
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h index fbbdce2..a1a40a7 100644 --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h
@@ -57,6 +57,8 @@ CONTENT_EXPORT extern const base::Feature kLayeredAPI; CONTENT_EXPORT extern const base::Feature kLazyFrameLoading; CONTENT_EXPORT extern const base::Feature kLazyFrameVisibleLoadTimeMetrics; +CONTENT_EXPORT extern const base::Feature kLazyImageLoading; +CONTENT_EXPORT extern const base::Feature kLazyImageVisibleLoadTimeMetrics; CONTENT_EXPORT extern const base::Feature kLazyInitializeMediaControls; CONTENT_EXPORT extern const base::Feature kLazyParseCSS; CONTENT_EXPORT extern const base::Feature kLowPriorityIframes;
diff --git a/content/public/common/url_utils.cc b/content/public/common/url_utils.cc index 5c373cde..d4a9284 100644 --- a/content/public/common/url_utils.cc +++ b/content/public/common/url_utils.cc
@@ -4,7 +4,11 @@ #include "content/public/common/url_utils.h" +#include <set> +#include <string> + #include "base/logging.h" +#include "base/no_destructor.h" #include "build/build_config.h" #include "content/common/url_schemes.h" #include "content/public/common/browser_side_navigation_policy.h" @@ -110,4 +114,14 @@ return false; } +bool IsSafeRedirectTarget(const GURL& url) { + static base::NoDestructor<std::set<std::string>> kUnsafeSchemes( + std::set<std::string>({ + url::kAboutScheme, url::kDataScheme, url::kFileScheme, + url::kFileSystemScheme, + })); + return !HasWebUIScheme(url) && + kUnsafeSchemes->find(url.scheme()) == kUnsafeSchemes->end(); +} + } // namespace content
diff --git a/content/public/common/url_utils.h b/content/public/common/url_utils.h index 7161cbd..4cdf6c6 100644 --- a/content/public/common/url_utils.h +++ b/content/public/common/url_utils.h
@@ -39,6 +39,9 @@ // is disabled. bool CONTENT_EXPORT IsURLHandledByNetworkService(const GURL& url); +// Determines whether it is safe to redirect to |url|. +CONTENT_EXPORT bool IsSafeRedirectTarget(const GURL& url); + } // namespace content #endif // CONTENT_PUBLIC_COMMON_URL_UTILS_H_
diff --git a/content/public/common/user_agent.h b/content/public/common/user_agent.h index 8a095a8..fbd7f9f 100644 --- a/content/public/common/user_agent.h +++ b/content/public/common/user_agent.h
@@ -7,6 +7,7 @@ #include <string> +#include "build/build_config.h" #include "content/common/content_export.h" namespace content { @@ -17,18 +18,24 @@ CONTENT_EXPORT std::string GetWebKitRevision(); // Builds a User-agent compatible string that describes the OS and CPU type. -CONTENT_EXPORT std::string BuildOSCpuInfo(); +// On Android, the string will only include the build number if true is passed +// as an argument. +CONTENT_EXPORT std::string BuildOSCpuInfo(bool include_android_build_number); // Helper function to generate a full user agent string from a short // product name. CONTENT_EXPORT std::string BuildUserAgentFromProduct( const std::string& product); +#if defined(OS_ANDROID) // Helper function to generate a full user agent string given a short // product name and some extra text to be added to the OS info. +// This is currently only used for Android Web View. CONTENT_EXPORT std::string BuildUserAgentFromProductAndExtraOSInfo( - const std::string& product, - const std::string& extra_os_info); + const std::string& product, + const std::string& extra_os_info, + const bool include_android_build_number); +#endif // Builds a full user agent string given a string describing the OS and a // product name.
diff --git a/content/public/renderer/content_renderer_client.cc b/content/public/renderer/content_renderer_client.cc index 3107fb5..306dda80 100644 --- a/content/public/renderer/content_renderer_client.cc +++ b/content/public/renderer/content_renderer_client.cc
@@ -279,4 +279,8 @@ return nullptr; } +bool ContentRendererClient::IsSafeRedirectTarget(const GURL& url) { + return true; +} + } // namespace content
diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h index e76cf174..351fb0f6 100644 --- a/content/public/renderer/content_renderer_client.h +++ b/content/public/renderer/content_renderer_client.h
@@ -416,6 +416,9 @@ // from outside of the browsing instance. virtual blink::WebFrame* FindFrame(blink::WebLocalFrame* relative_to_frame, const std::string& name); + + // Returns true if it is safe to redirect to |url|, otherwise returns false. + virtual bool IsSafeRedirectTarget(const GURL& url); }; } // namespace content
diff --git a/content/public/test/android/BUILD.gn b/content/public/test/android/BUILD.gn index 956c87c..baaa804d 100644 --- a/content/public/test/android/BUILD.gn +++ b/content/public/test/android/BUILD.gn
@@ -61,12 +61,14 @@ jni_package = "content/public/test" sources = [ "javatests/src/org/chromium/content/browser/test/InterstitialPageDelegateAndroid.java", + "javatests/src/org/chromium/content/browser/test/util/DOMUtils.java", ] } static_library("content_native_test_support") { testonly = true sources = [ + "dom_utils.cc", "interstitial_page_delegate_android.cc", "interstitial_page_delegate_android.h", ] @@ -76,5 +78,6 @@ "//content/public/browser", "//device/gamepad", "//media/midi", + "//ui/android", ] }
diff --git a/content/public/test/android/dom_utils.cc b/content/public/test/android/dom_utils.cc new file mode 100644 index 0000000..f6b3f75 --- /dev/null +++ b/content/public/test/android/dom_utils.cc
@@ -0,0 +1,32 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/android/jni_android.h" +#include "base/android/scoped_java_ref.h" +#include "content/public/browser/web_contents.h" +#include "content/public/browser/web_contents_delegate.h" +#include "jni/DOMUtils_jni.h" +#include "ui/android/view_android.h" + +using base::android::JavaParamRef; + +namespace content { + +// Returns the amount of the top controls height if controls are in the state +// of shrinking Blink's view size, otherwise 0. +jint JNI_DOMUtils_GetTopControlsShrinkBlinkHeight( + JNIEnv* env, + const JavaParamRef<jclass>& clazz, + const JavaParamRef<jobject>& jweb_contents) { + WebContents* web_contents = WebContents::FromJavaWebContents(jweb_contents); + + // Android obtains the top control size via WebContentsDelegate. + WebContentsDelegate* delegate = web_contents->GetDelegate(); + float scale = web_contents->GetNativeView()->GetDipScale(); + return delegate && delegate->DoBrowserControlsShrinkBlinkSize() + ? delegate->GetTopControlsHeight() * scale + : 0; +} + +} // namespace content
diff --git a/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/DOMUtils.java b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/DOMUtils.java index 9bfe124..13f6e66a 100644 --- a/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/DOMUtils.java +++ b/content/public/test/android/javatests/src/org/chromium/content/browser/test/util/DOMUtils.java
@@ -13,6 +13,7 @@ import org.junit.Assert; import org.chromium.base.ThreadUtils; +import org.chromium.base.annotations.JNINamespace; import org.chromium.content.browser.RenderCoordinatesImpl; import org.chromium.content.browser.webcontents.WebContentsImpl; import org.chromium.content_public.browser.WebContents; @@ -26,8 +27,8 @@ /** * Collection of DOM-based utilities. */ +@JNINamespace("content") public class DOMUtils { - private static final long MEDIA_TIMEOUT_SECONDS = scaleTimeout(10); private static final long MEDIA_TIMEOUT_MILLISECONDS = MEDIA_TIMEOUT_SECONDS * 1000; @@ -506,9 +507,8 @@ private static int getMaybeTopControlsHeight(final WebContents webContents) { try { - return ThreadUtils.runOnUiThreadBlocking(() -> { - return ((WebContentsImpl) webContents).getTopControlsShrinkBlinkHeightForTesting(); - }); + return ThreadUtils.runOnUiThreadBlocking( + () -> nativeGetTopControlsShrinkBlinkHeight(webContents)); } catch (ExecutionException e) { return 0; } @@ -561,4 +561,6 @@ return new Rect(bounds[0], bounds[1], bounds[0] + bounds[2], bounds[1] + bounds[3]); } + + private static native int nativeGetTopControlsShrinkBlinkHeight(WebContents webContents); }
diff --git a/content/public/test/fake_service_worker_context.cc b/content/public/test/fake_service_worker_context.cc index 17a2eacf..b4ad259 100644 --- a/content/public/test/fake_service_worker_context.cc +++ b/content/public/test/fake_service_worker_context.cc
@@ -77,6 +77,14 @@ StartServiceWorkerForNavigationHintCallback callback) { start_service_worker_for_navigation_hint_called_ = true; } + +void FakeServiceWorkerContext::StartServiceWorkerAndDispatchLongRunningMessage( + const GURL& pattern, + blink::TransferableMessage message, + ResultCallback result_callback) { + NOTREACHED(); +} + void FakeServiceWorkerContext::StopAllServiceWorkersForOrigin( const GURL& origin) { NOTREACHED();
diff --git a/content/public/test/fake_service_worker_context.h b/content/public/test/fake_service_worker_context.h index 8e7ff5f..465b667 100644 --- a/content/public/test/fake_service_worker_context.h +++ b/content/public/test/fake_service_worker_context.h
@@ -60,6 +60,11 @@ return start_service_worker_for_navigation_hint_called_; } + void StartServiceWorkerAndDispatchLongRunningMessage( + const GURL& pattern, + blink::TransferableMessage message, + FakeServiceWorkerContext::ResultCallback result_callback) override; + private: bool start_service_worker_for_navigation_hint_called_ = false;
diff --git a/content/public/test/hit_test_region_observer.cc b/content/public/test/hit_test_region_observer.cc index 12c49d5..0e3e3e7 100644 --- a/content/public/test/hit_test_region_observer.cc +++ b/content/public/test/hit_test_region_observer.cc
@@ -185,7 +185,6 @@ void HitTestRegionObserver::OnAggregatedHitTestRegionListUpdated( const viz::FrameSinkId& frame_sink_id, const std::vector<viz::AggregatedHitTestRegion>& hit_test_data) { - hit_test_data_ = hit_test_data; if (!run_loop_) return; @@ -200,7 +199,11 @@ const std::vector<viz::AggregatedHitTestRegion>& HitTestRegionObserver::GetHitTestData() { - return hit_test_data_; + const auto& hit_test_query_map = + GetHostFrameSinkManager()->display_hit_test_query(); + const auto iter = hit_test_query_map.find(frame_sink_id_); + DCHECK(iter != hit_test_query_map.end()); + return iter->second.get()->hit_test_data_; } } // namespace content
diff --git a/content/public/test/hit_test_region_observer.h b/content/public/test/hit_test_region_observer.h index 77aefe9..e9e3c6c 100644 --- a/content/public/test/hit_test_region_observer.h +++ b/content/public/test/hit_test_region_observer.h
@@ -56,7 +56,6 @@ viz::FrameSinkId const frame_sink_id_; std::unique_ptr<base::RunLoop> run_loop_; - std::vector<viz::AggregatedHitTestRegion> hit_test_data_; DISALLOW_COPY_AND_ASSIGN(HitTestRegionObserver); };
diff --git a/content/public/test/url_loader_interceptor.cc b/content/public/test/url_loader_interceptor.cc index c48bb064..6b14511 100644 --- a/content/public/test/url_loader_interceptor.cc +++ b/content/public/test/url_loader_interceptor.cc
@@ -9,6 +9,7 @@ #include "base/path_service.h" #include "base/test/bind_test_util.h" #include "base/threading/thread_restrictions.h" +#include "build/build_config.h" #include "content/browser/frame_host/render_frame_host_impl.h" #include "content/browser/loader/navigation_url_loader_impl.h" #include "content/browser/loader/resource_message_filter.h" @@ -32,11 +33,9 @@ return root_path.AppendASCII(relative_path); } -// Returns the contents of the given filename relative to the root source -// directory. -static std::string ReadFile(const std::string& relative_path) { +static std::string ReadFile(const base::FilePath& path) { std::string contents; - CHECK(base::ReadFileToString(GetDataFilePath(relative_path), &contents)); + CHECK(base::ReadFileToString(path, &contents)); return contents; } @@ -295,24 +294,38 @@ network::mojom::URLLoaderClient* client, const std::string* headers, base::Optional<net::SSLInfo> ssl_info) { + return WriteResponse(GetDataFilePath(relative_path), client, headers, + std::move(ssl_info)); +} + +void URLLoaderInterceptor::WriteResponse( + const base::FilePath& file_path, + network::mojom::URLLoaderClient* client, + const std::string* headers, + base::Optional<net::SSLInfo> ssl_info) { base::ScopedAllowBlockingForTesting allow_io; std::string headers_str; if (headers) { headers_str = *headers; } else { - std::string headers_path = - relative_path + "." + net::test_server::kMockHttpHeadersExtension; - if (base::PathExists(GetDataFilePath(headers_path))) { + base::FilePath::StringPieceType mock_headers_extension; +#if defined(OS_WIN) + base::string16 temp = + base::ASCIIToUTF16(net::test_server::kMockHttpHeadersExtension); + mock_headers_extension = temp; +#else + mock_headers_extension = net::test_server::kMockHttpHeadersExtension; +#endif + + base::FilePath headers_path(file_path.AddExtension(mock_headers_extension)); + if (base::PathExists(headers_path)) { headers_str = ReadFile(headers_path); } else { headers_str = "HTTP/1.0 200 OK\nContent-type: " + - net::test_server::GetContentType( - base::FilePath().AppendASCII(relative_path)) + - "\n\n"; + net::test_server::GetContentType(file_path) + "\n\n"; } } - WriteResponse(headers_str, ReadFile(relative_path), client, - std::move(ssl_info)); + WriteResponse(headers_str, ReadFile(file_path), client, std::move(ssl_info)); } void URLLoaderInterceptor::CreateURLLoaderFactoryForSubresources(
diff --git a/content/public/test/url_loader_interceptor.h b/content/public/test/url_loader_interceptor.h index 2bb6c01a..68294ddb 100644 --- a/content/public/test/url_loader_interceptor.h +++ b/content/public/test/url_loader_interceptor.h
@@ -7,6 +7,7 @@ #include <set> +#include "base/files/file_path.h" #include "base/macros.h" #include "mojo/public/cpp/bindings/binding_set.h" #include "net/traffic_annotation/network_traffic_annotation.h" @@ -94,6 +95,13 @@ const std::string* headers = nullptr, base::Optional<net::SSLInfo> ssl_info = base::nullopt); + // Like above, but uses an absolute file path. + static void WriteResponse( + const base::FilePath& file_path, + network::mojom::URLLoaderClient* client, + const std::string* headers = nullptr, + base::Optional<net::SSLInfo> ssl_info = base::nullopt); + private: class BrowserProcessWrapper; class Interceptor;
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn index fb0670d..c809210 100644 --- a/content/renderer/BUILD.gn +++ b/content/renderer/BUILD.gn
@@ -407,6 +407,8 @@ "media/webrtc/rtc_stats.h", "media/webrtc/rtc_video_decoder.cc", "media/webrtc/rtc_video_decoder.h", + "media/webrtc/rtc_video_decoder_adapter.cc", + "media/webrtc/rtc_video_decoder_adapter.h", "media/webrtc/rtc_video_decoder_factory.cc", "media/webrtc/rtc_video_decoder_factory.h", "media/webrtc/rtc_video_encoder.cc",
diff --git a/content/renderer/in_process_renderer_thread.cc b/content/renderer/in_process_renderer_thread.cc index e6a3a5d..01ffff7b 100644 --- a/content/renderer/in_process_renderer_thread.cc +++ b/content/renderer/in_process_renderer_thread.cc
@@ -8,6 +8,7 @@ #include "content/renderer/render_process.h" #include "content/renderer/render_process_impl.h" #include "content/renderer/render_thread_impl.h" +#include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h" #if defined(OS_ANDROID) #include "base/android/jni_android.h" @@ -46,8 +47,14 @@ // Android. Temporary CHECK() to debug http://crbug.com/514141 CHECK(!render_process_); #endif + std::unique_ptr<blink::scheduler::WebThreadScheduler> main_thread_scheduler = + blink::scheduler::WebThreadScheduler::CreateMainThreadScheduler(); + render_process_ = RenderProcessImpl::Create(); - RenderThreadImpl::Create(params_, message_loop()); + // RenderThreadImpl doesn't currently support a proper shutdown sequence + // and it's okay when we're running in multi-process mode because renderers + // get killed by the OS. In-process mode is used for test and debug only. + new RenderThreadImpl(params_, std::move(main_thread_scheduler)); } void InProcessRendererThread::CleanUp() {
diff --git a/content/renderer/loader/child_url_loader_factory_bundle.cc b/content/renderer/loader/child_url_loader_factory_bundle.cc index 9dd95c39..4e66f65 100644 --- a/content/renderer/loader/child_url_loader_factory_bundle.cc +++ b/content/renderer/loader/child_url_loader_factory_bundle.cc
@@ -96,15 +96,18 @@ ChildURLLoaderFactoryBundleInfo::ChildURLLoaderFactoryBundleInfo( std::unique_ptr<URLLoaderFactoryBundleInfo> base_info) : URLLoaderFactoryBundleInfo(std::move(base_info->default_factory_info()), - std::move(base_info->factories_info())) {} + std::move(base_info->factories_info()), + base_info->bypass_redirect_checks()) {} ChildURLLoaderFactoryBundleInfo::ChildURLLoaderFactoryBundleInfo( network::mojom::URLLoaderFactoryPtrInfo default_factory_info, std::map<std::string, network::mojom::URLLoaderFactoryPtrInfo> factories_info, - PossiblyAssociatedURLLoaderFactoryPtrInfo direct_network_factory_info) + PossiblyAssociatedURLLoaderFactoryPtrInfo direct_network_factory_info, + bool bypass_redirect_checks) : URLLoaderFactoryBundleInfo(std::move(default_factory_info), - std::move(factories_info)), + std::move(factories_info), + bypass_redirect_checks), direct_network_factory_info_(std::move(direct_network_factory_info)) {} ChildURLLoaderFactoryBundleInfo::~ChildURLLoaderFactoryBundleInfo() = default; @@ -115,6 +118,7 @@ other->default_factory_info_ = std::move(default_factory_info_); other->factories_info_ = std::move(factories_info_); other->direct_network_factory_info_ = std::move(direct_network_factory_info_); + other->bypass_redirect_checks_ = bypass_redirect_checks_; return base::MakeRefCounted<ChildURLLoaderFactoryBundle>(std::move(other)); } @@ -250,7 +254,7 @@ return std::make_unique<ChildURLLoaderFactoryBundleInfo>( std::move(default_factory_info), std::move(factories_info), - std::move(direct_network_factory_info)); + std::move(direct_network_factory_info), bypass_redirect_checks_); } std::unique_ptr<ChildURLLoaderFactoryBundleInfo> @@ -274,7 +278,7 @@ return std::make_unique<ChildURLLoaderFactoryBundleInfo>( std::move(default_factory_info), std::move(factories_info), - std::move(direct_network_factory_info)); + std::move(direct_network_factory_info), bypass_redirect_checks_); } } // namespace content
diff --git a/content/renderer/loader/child_url_loader_factory_bundle.h b/content/renderer/loader/child_url_loader_factory_bundle.h index bcf816a0..9a93788d 100644 --- a/content/renderer/loader/child_url_loader_factory_bundle.h +++ b/content/renderer/loader/child_url_loader_factory_bundle.h
@@ -29,7 +29,8 @@ network::mojom::URLLoaderFactoryPtrInfo default_factory_info, std::map<std::string, network::mojom::URLLoaderFactoryPtrInfo> factories_info, - PossiblyAssociatedURLLoaderFactoryPtrInfo direct_network_factory_info); + PossiblyAssociatedURLLoaderFactoryPtrInfo direct_network_factory_info, + bool bypass_redirect_checks); ~ChildURLLoaderFactoryBundleInfo() override; PossiblyAssociatedURLLoaderFactoryPtrInfo& direct_network_factory_info() {
diff --git a/content/renderer/loader/resource_dispatcher.cc b/content/renderer/loader/resource_dispatcher.cc index 37b5473..4dc484ec 100644 --- a/content/renderer/loader/resource_dispatcher.cc +++ b/content/renderer/loader/resource_dispatcher.cc
@@ -29,6 +29,7 @@ #include "content/public/common/browser_side_navigation_policy.h" #include "content/public/common/resource_load_info.mojom.h" #include "content/public/common/resource_type.h" +#include "content/public/common/url_utils.h" #include "content/public/renderer/fixed_received_data.h" #include "content/public/renderer/request_peer.h" #include "content/public/renderer/resource_dispatcher_delegate.h" @@ -224,6 +225,22 @@ return base::RandInt(kMin, kMax); } +// Determines if the loader should be restarted on a redirect using +// ThrottlingURLLoader::FollowRedirectForcingRestart. +bool RedirectRequiresLoaderRestart(const GURL& original_url, + const GURL& redirect_url) { + if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) + return false; + + // Restart is needed if the URL is no longer handled by network service. + if (IsURLHandledByNetworkService(original_url)) + return !IsURLHandledByNetworkService(redirect_url); + + // If URL wasn't originally handled by network service, restart is needed if + // schemes are different. + return original_url.scheme_piece() != redirect_url.scheme_piece(); +} + } // namespace // static @@ -376,6 +393,9 @@ request_info->local_response_start = base::TimeTicks::Now(); request_info->remote_request_start = response_head.load_timing.request_start; + request_info->redirect_requires_loader_restart = + RedirectRequiresLoaderRestart(request_info->response_url, + redirect_info.new_url); network::ResourceResponseInfo renderer_response_info; ToResourceResponseInfo(*request_info, response_head, &renderer_response_info); @@ -416,7 +436,13 @@ request_info->has_pending_redirect = false; // net::URLRequest clears its request_start on redirect, so should we. request_info->local_request_start = base::TimeTicks::Now(); - request_info->url_loader->FollowRedirect(base::nullopt); + // Redirect URL may not be handled by the network service, so force a + // restart in case another URLLoaderFactory should handle the URL. + if (request_info->redirect_requires_loader_restart) { + request_info->url_loader->FollowRedirectForcingRestart(); + } else { + request_info->url_loader->FollowRedirect(base::nullopt); + } } } @@ -702,9 +728,12 @@ request->referrer, std::move(response_override_params)); if (override_url_loader) { + // Redirect checks are handled by NavigationURLLoaderImpl, so it's safe to + // pass true for |bypass_redirect_checks|. pending_requests_[request_id]->url_loader_client = - std::make_unique<URLLoaderClientImpl>(request_id, this, - loading_task_runner); + std::make_unique<URLLoaderClientImpl>( + request_id, this, loading_task_runner, + true /* bypass_redirect_checks */); DCHECK(continue_navigation_function); *continue_navigation_function = @@ -714,7 +743,8 @@ } std::unique_ptr<URLLoaderClientImpl> client( - new URLLoaderClientImpl(request_id, this, loading_task_runner)); + new URLLoaderClientImpl(request_id, this, loading_task_runner, + url_loader_factory->BypassRedirectChecks())); if (pass_response_pipe_to_peer) client->SetPassResponsePipeToDispatcher(true);
diff --git a/content/renderer/loader/resource_dispatcher.h b/content/renderer/loader/resource_dispatcher.h index 3040fbd1..89143458 100644 --- a/content/renderer/loader/resource_dispatcher.h +++ b/content/renderer/loader/resource_dispatcher.h
@@ -215,6 +215,7 @@ navigation_response_override; bool should_follow_redirect = true; bool always_access_network = false; + bool redirect_requires_loader_restart = false; // Network error code the request completed with, or net::ERR_IO_PENDING if // it's not completed. Used both to distinguish completion from // cancellation, and to log histograms.
diff --git a/content/renderer/loader/tracked_child_url_loader_factory_bundle.cc b/content/renderer/loader/tracked_child_url_loader_factory_bundle.cc index 75485fe5..93148de 100644 --- a/content/renderer/loader/tracked_child_url_loader_factory_bundle.cc +++ b/content/renderer/loader/tracked_child_url_loader_factory_bundle.cc
@@ -16,10 +16,12 @@ std::map<std::string, network::mojom::URLLoaderFactoryPtrInfo> factories_info, PossiblyAssociatedURLLoaderFactoryPtrInfo direct_network_factory_info, - std::unique_ptr<HostPtrAndTaskRunner> main_thread_host_bundle) + std::unique_ptr<HostPtrAndTaskRunner> main_thread_host_bundle, + bool bypass_redirect_checks) : ChildURLLoaderFactoryBundleInfo(std::move(default_factory_info), std::move(factories_info), - std::move(direct_network_factory_info)), + std::move(direct_network_factory_info), + bypass_redirect_checks), main_thread_host_bundle_(std::move(main_thread_host_bundle)) {} TrackedChildURLLoaderFactoryBundleInfo:: @@ -32,6 +34,7 @@ other->factories_info_ = std::move(factories_info_); other->direct_network_factory_info_ = std::move(direct_network_factory_info_); other->main_thread_host_bundle_ = std::move(main_thread_host_bundle_); + other->bypass_redirect_checks_ = bypass_redirect_checks_; return base::MakeRefCounted<TrackedChildURLLoaderFactoryBundle>( std::move(other)); @@ -65,7 +68,7 @@ std::move(info->default_factory_info()), std::move(info->factories_info()), std::move(info->direct_network_factory_info()), - std::move(main_thread_host_bundle_clone)); + std::move(main_thread_host_bundle_clone), info->bypass_redirect_checks()); } void TrackedChildURLLoaderFactoryBundle::AddObserverOnMainThread() { @@ -128,7 +131,7 @@ std::move(info->default_factory_info()), std::move(info->factories_info()), std::move(info->direct_network_factory_info()), - std::move(main_thread_host_bundle_clone)); + std::move(main_thread_host_bundle_clone), info->bypass_redirect_checks()); } void HostChildURLLoaderFactoryBundle::UpdateThisAndAllClones(
diff --git a/content/renderer/loader/tracked_child_url_loader_factory_bundle.h b/content/renderer/loader/tracked_child_url_loader_factory_bundle.h index d76f70f..e8017db8 100644 --- a/content/renderer/loader/tracked_child_url_loader_factory_bundle.h +++ b/content/renderer/loader/tracked_child_url_loader_factory_bundle.h
@@ -28,7 +28,8 @@ std::map<std::string, network::mojom::URLLoaderFactoryPtrInfo> factories_info, PossiblyAssociatedURLLoaderFactoryPtrInfo direct_network_factory_info, - std::unique_ptr<HostPtrAndTaskRunner> main_thread_host_bundle); + std::unique_ptr<HostPtrAndTaskRunner> main_thread_host_bundle, + bool bypass_redirect_checks); ~TrackedChildURLLoaderFactoryBundleInfo() override; std::unique_ptr<HostPtrAndTaskRunner>& main_thread_host_bundle() {
diff --git a/content/renderer/loader/url_loader_client_impl.cc b/content/renderer/loader/url_loader_client_impl.cc index 0deb442..bffdb0a 100644 --- a/content/renderer/loader/url_loader_client_impl.cc +++ b/content/renderer/loader/url_loader_client_impl.cc
@@ -7,12 +7,25 @@ #include <iterator> #include "base/callback.h" +#include "base/feature_list.h" #include "base/single_thread_task_runner.h" +#include "content/public/common/url_utils.h" +#include "content/public/renderer/content_renderer_client.h" #include "content/renderer/loader/resource_dispatcher.h" #include "content/renderer/loader/url_response_body_consumer.h" #include "net/url_request/redirect_info.h" +#include "services/network/public/cpp/features.h" namespace content { +namespace { + +// Determines whether it is safe to redirect to |url|. +bool IsRedirectSafe(const GURL& url) { + return IsSafeRedirectTarget(url) && + GetContentClient()->renderer()->IsSafeRedirectTarget(url); +} + +} // namespace class URLLoaderClientImpl::DeferredMessage { public: @@ -113,10 +126,12 @@ URLLoaderClientImpl::URLLoaderClientImpl( int request_id, ResourceDispatcher* resource_dispatcher, - scoped_refptr<base::SingleThreadTaskRunner> task_runner) + scoped_refptr<base::SingleThreadTaskRunner> task_runner, + bool bypass_redirect_checks) : request_id_(request_id), resource_dispatcher_(resource_dispatcher), task_runner_(std::move(task_runner)), + bypass_redirect_checks_(bypass_redirect_checks), url_loader_client_binding_(this), weak_factory_(this) {} @@ -231,6 +246,12 @@ const network::ResourceResponseHead& response_head) { DCHECK(!has_received_response_); DCHECK(!body_consumer_); + if (base::FeatureList::IsEnabled(network::features::kNetworkService) && + !bypass_redirect_checks_ && !IsRedirectSafe(redirect_info.new_url)) { + OnComplete(network::URLLoaderCompletionStatus(net::ERR_UNSAFE_REDIRECT)); + return; + } + if (NeedsStoringMessage()) { StoreAndDispatch(std::make_unique<DeferredOnReceiveRedirect>( redirect_info, response_head, task_runner_));
diff --git a/content/renderer/loader/url_loader_client_impl.h b/content/renderer/loader/url_loader_client_impl.h index 6ede15c5..d4e4186e 100644 --- a/content/renderer/loader/url_loader_client_impl.h +++ b/content/renderer/loader/url_loader_client_impl.h
@@ -37,7 +37,8 @@ public: URLLoaderClientImpl(int request_id, ResourceDispatcher* resource_dispatcher, - scoped_refptr<base::SingleThreadTaskRunner> task_runner); + scoped_refptr<base::SingleThreadTaskRunner> task_runner, + bool bypass_redirect_checks); ~URLLoaderClientImpl() override; // Sets |is_deferred_|. From now, the received messages are not dispatched @@ -103,6 +104,7 @@ int32_t accumulated_transfer_size_diff_during_deferred_ = 0; ResourceDispatcher* const resource_dispatcher_; scoped_refptr<base::SingleThreadTaskRunner> task_runner_; + bool bypass_redirect_checks_ = false; network::mojom::URLLoaderPtr url_loader_; mojo::Binding<network::mojom::URLLoaderClient> url_loader_client_binding_;
diff --git a/content/renderer/media/media_factory.cc b/content/renderer/media/media_factory.cc index fe25c6b..a594229 100644 --- a/content/renderer/media/media_factory.cc +++ b/content/renderer/media/media_factory.cc
@@ -153,6 +153,20 @@ features::IsAshInBrowserProcess(); } +bool MediaFactory::VideoSurfaceLayerEnabledForMS() { + // LayoutTests do not support SurfaceLayer by default at the moment. + // See https://crbug.com/838128 + content::RenderThreadImpl* render_thread = + content::RenderThreadImpl::current(); + if (render_thread && render_thread->layout_test_mode() && + !render_thread->LayoutTestModeUsesDisplayCompositorPixelDump()) { + return false; + } + + return base::FeatureList::IsEnabled(media::kUseSurfaceLayerForVideoMS) && + features::IsAshInBrowserProcess(); +} + MediaFactory::MediaFactory( RenderFrameImpl* render_frame, media::RequestRoutingTokenCallback request_routing_token_cb) @@ -214,7 +228,7 @@ GetWebMediaStreamFromWebMediaPlayerSource(source); if (!web_stream.IsNull()) return CreateWebMediaPlayerForMediaStream(client, sink_id, security_origin, - web_frame); + web_frame, layer_tree_view); // If |source| was not a MediaStream, it must be a URL. // TODO(guidou): Fix this when support for other srcObject types is added. @@ -507,7 +521,8 @@ blink::WebMediaPlayerClient* client, const blink::WebString& sink_id, const blink::WebSecurityOrigin& security_origin, - blink::WebLocalFrame* frame) { + blink::WebLocalFrame* frame, + blink::WebLayerTreeView* layer_tree_view) { RenderThreadImpl* const render_thread = RenderThreadImpl::current(); scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner = @@ -516,6 +531,7 @@ compositor_task_runner = render_frame_->GetTaskRunner(blink::TaskType::kInternalMediaRealTime); + DCHECK(layer_tree_view); return new WebMediaPlayerMS( frame, client, GetWebMediaPlayerDelegate(), std::make_unique<RenderMediaLog>( @@ -524,7 +540,9 @@ CreateMediaStreamRendererFactory(), render_thread->GetIOTaskRunner(), compositor_task_runner, render_thread->GetMediaThreadTaskRunner(), render_thread->GetWorkerTaskRunner(), render_thread->GetGpuFactories(), - sink_id); + sink_id, + base::BindOnce(&blink::WebSurfaceLayerBridge::Create, layer_tree_view), + VideoSurfaceLayerEnabledForMS()); } media::RendererWebMediaPlayerDelegate*
diff --git a/content/renderer/media/media_factory.h b/content/renderer/media/media_factory.h index 7c4ea97..bbb8837e 100644 --- a/content/renderer/media/media_factory.h +++ b/content/renderer/media/media_factory.h
@@ -74,6 +74,10 @@ // Helper function returning whether VideoSurfaceLayer should be enabled. static bool VideoSurfaceLayerEnabled(); + // Helper function returning whether VideoSurfaceLayer should be enabled for + // MediaStreams. + static bool VideoSurfaceLayerEnabledForMS(); + // Create a MediaFactory to assist the |render_frame| with media tasks. // |request_routing_token_cb| bound to |render_frame| IPC functions for // obtaining overlay tokens. @@ -122,7 +126,8 @@ blink::WebMediaPlayerClient* client, const blink::WebString& sink_id, const blink::WebSecurityOrigin& security_origin, - blink::WebLocalFrame* frame); + blink::WebLocalFrame* frame, + blink::WebLayerTreeView* layer_tree_view); // Returns the media delegate for WebMediaPlayer usage. If // |media_player_delegate_| is NULL, one is created.
diff --git a/content/renderer/media/stream/webmediaplayer_ms.cc b/content/renderer/media/stream/webmediaplayer_ms.cc index bf6ffa5..d071c391 100644 --- a/content/renderer/media/stream/webmediaplayer_ms.cc +++ b/content/renderer/media/stream/webmediaplayer_ms.cc
@@ -38,6 +38,7 @@ #include "third_party/blink/public/platform/web_media_player_source.h" #include "third_party/blink/public/platform/web_rect.h" #include "third_party/blink/public/platform/web_size.h" +#include "third_party/blink/public/platform/web_surface_layer_bridge.h" #include "third_party/blink/public/web/web_local_frame.h" namespace { @@ -262,7 +263,9 @@ scoped_refptr<base::SingleThreadTaskRunner> media_task_runner, scoped_refptr<base::TaskRunner> worker_task_runner, media::GpuVideoAcceleratorFactories* gpu_factories, - const blink::WebString& sink_id) + const blink::WebString& sink_id, + CreateSurfaceLayerBridgeCB create_bridge_callback, + bool surface_layer_for_video_enabled) : frame_(frame), network_state_(WebMediaPlayer::kNetworkStateEmpty), ready_state_(WebMediaPlayer::kReadyStateHaveNothing), @@ -282,7 +285,9 @@ initial_audio_output_device_id_(sink_id.Utf8()), volume_(1.0), volume_multiplier_(1.0), - should_play_upon_shown_(false) { + should_play_upon_shown_(false), + create_bridge_callback_(std::move(create_bridge_callback)), + surface_layer_for_video_enabled_(surface_layer_for_video_enabled) { DVLOG(1) << __func__; DCHECK(client); DCHECK(delegate_); @@ -301,8 +306,10 @@ // Destruct compositor resources in the proper order. get_client()->SetCcLayer(nullptr); - if (video_layer_) + if (video_layer_) { + DCHECK(!surface_layer_for_video_enabled_); video_layer_->StopUsingProvider(); + } if (frame_deliverer_) io_task_runner_->DeleteSoon(FROM_HERE, frame_deliverer_.release()); @@ -418,6 +425,27 @@ return blink::WebMediaPlayer::LoadTiming::kImmediate; } +void WebMediaPlayerMS::OnWebLayerUpdated() {} + +void WebMediaPlayerMS::RegisterContentsLayer(cc::Layer* layer) { + DCHECK(thread_checker_.CalledOnValidThread()); + DCHECK(bridge_); + + bridge_->SetContentsOpaque(opaque_); + client_->SetCcLayer(layer); +} + +void WebMediaPlayerMS::UnregisterContentsLayer(cc::Layer* layer) { + DCHECK(thread_checker_.CalledOnValidThread()); + // |client_| will unregister its cc::Layer if given a nullptr. + client_->SetCcLayer(nullptr); +} + +void WebMediaPlayerMS::OnSurfaceIdUpdated(viz::SurfaceId surface_id) { + // TODO(apacible): Add implementation. See http://crbug/746182. + NOTIMPLEMENTED(); +} + void WebMediaPlayerMS::TrackAdded(const blink::WebMediaStreamTrack& track) { Reload(); } @@ -1013,6 +1041,15 @@ bool is_opaque) { DVLOG(1) << __func__; DCHECK(thread_checker_.CalledOnValidThread()); + + if (surface_layer_for_video_enabled_) { + DCHECK(!bridge_); + + bridge_ = std::move(create_bridge_callback_) + .Run(this, compositor_->GetUpdateSubmissionStateCallback()); + bridge_->CreateSurfaceLayer(); + } + SetReadyState(WebMediaPlayer::kReadyStateHaveMetadata); SetReadyState(WebMediaPlayer::kReadyStateHaveEnoughData); @@ -1023,9 +1060,17 @@ DVLOG(1) << __func__; DCHECK(thread_checker_.CalledOnValidThread()); - // Opacity can be changed during the session without resetting - // |video_layer_|. - video_layer_->SetContentsOpaque(is_opaque); + opaque_ = is_opaque; + + if (!bridge_) { + // Opacity can be changed during the session without resetting + // |video_layer_|. + video_layer_->SetContentsOpaque(opaque_); + } else { + DCHECK(bridge_); + + bridge_->SetContentsOpaque(opaque_); + } } void WebMediaPlayerMS::OnRotationChanged(media::VideoRotation video_rotation, @@ -1033,16 +1078,22 @@ DVLOG(1) << __func__; DCHECK(thread_checker_.CalledOnValidThread()); video_rotation_ = video_rotation; + opaque_ = is_opaque; - // Keep the old |video_layer_| alive until SetCcLayer() is called with a new - // pointer, as it may use the pointer from the last call. - auto new_video_layer = - cc::VideoLayer::Create(compositor_.get(), video_rotation); - new_video_layer->SetContentsOpaque(is_opaque); + if (!bridge_) { + // Keep the old |video_layer_| alive until SetCcLayer() is called with a new + // pointer, as it may use the pointer from the last call. + auto new_video_layer = + cc::VideoLayer::Create(compositor_.get(), video_rotation); + new_video_layer->SetContentsOpaque(is_opaque); - get_client()->SetCcLayer(new_video_layer.get()); + get_client()->SetCcLayer(new_video_layer.get()); - video_layer_ = std::move(new_video_layer); + video_layer_ = std::move(new_video_layer); + } else if (bridge_->GetCcLayer()) { + // TODO(lethalantidote): Handle rotation. + bridge_->SetContentsOpaque(opaque_); + } } void WebMediaPlayerMS::RepaintInternal() {
diff --git a/content/renderer/media/stream/webmediaplayer_ms.h b/content/renderer/media/stream/webmediaplayer_ms.h index 8c0b492f..1857e62 100644 --- a/content/renderer/media/stream/webmediaplayer_ms.h +++ b/content/renderer/media/stream/webmediaplayer_ms.h
@@ -21,6 +21,7 @@ #include "media/video/gpu_video_accelerator_factories.h" #include "third_party/blink/public/platform/web_media_player.h" #include "third_party/blink/public/platform/web_media_stream.h" +#include "third_party/blink/public/platform/web_surface_layer_bridge.h" namespace blink { class WebLocalFrame; @@ -44,6 +45,11 @@ } namespace content { +using CreateSurfaceLayerBridgeCB = + base::OnceCallback<std::unique_ptr<blink::WebSurfaceLayerBridge>( + blink::WebSurfaceLayerBridgeObserver*, + cc::UpdateSubmissionStateCB)>; + class MediaStreamAudioRenderer; class MediaStreamRendererFactory; class MediaStreamVideoRenderer; @@ -66,6 +72,7 @@ : public blink::WebMediaStreamObserver, public blink::WebMediaPlayer, public media::WebMediaPlayerDelegate::Observer, + public blink::WebSurfaceLayerBridgeObserver, public base::SupportsWeakPtr<WebMediaPlayerMS> { public: // Construct a WebMediaPlayerMS with reference to the client, and @@ -82,7 +89,9 @@ scoped_refptr<base::SingleThreadTaskRunner> media_task_runner, scoped_refptr<base::TaskRunner> worker_task_runner, media::GpuVideoAcceleratorFactories* gpu_factories, - const blink::WebString& sink_id); + const blink::WebString& sink_id, + CreateSurfaceLayerBridgeCB create_bridge_callback, + bool surface_layer_for_video_enabled_); ~WebMediaPlayerMS() override; @@ -91,6 +100,12 @@ const blink::WebMediaPlayerSource& source, CORSMode cors_mode) override; + // WebSurfaceLayerBridgeObserver implementation. + void OnWebLayerUpdated() override; + void RegisterContentsLayer(cc::Layer* layer) override; + void UnregisterContentsLayer(cc::Layer* layer) override; + void OnSurfaceIdUpdated(viz::SurfaceId surface_id) override; + // Playback controls. void Play() override; void Pause() override; @@ -306,6 +321,18 @@ blink::WebString current_video_track_id_; blink::WebString current_audio_track_id_; + CreateSurfaceLayerBridgeCB create_bridge_callback_; + + // Whether the use of a surface layer instead of a video layer is enabled. + bool surface_layer_for_video_enabled_ = false; + + // Owns the weblayer and obtains/maintains SurfaceIds for + // kUseSurfaceLayerForVideo feature. + std::unique_ptr<blink::WebSurfaceLayerBridge> bridge_; + + // Whether the video is known to be opaque or not. + bool opaque_ = true; + DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerMS); };
diff --git a/content/renderer/media/stream/webmediaplayer_ms_compositor.h b/content/renderer/media/stream/webmediaplayer_ms_compositor.h index 002b4c4..921b0bb 100644 --- a/content/renderer/media/stream/webmediaplayer_ms_compositor.h +++ b/content/renderer/media/stream/webmediaplayer_ms_compositor.h
@@ -16,6 +16,7 @@ #include "base/message_loop/message_loop.h" #include "base/synchronization/lock.h" #include "base/threading/thread_checker.h" +#include "cc/layers/surface_layer.h" #include "cc/layers/video_frame_provider.h" #include "content/common/content_export.h" #include "media/base/media_log.h" @@ -62,6 +63,11 @@ const blink::WebMediaStream& web_stream, const base::WeakPtr<WebMediaPlayerMS>& player); + // Can be called from any thread. + cc::UpdateSubmissionStateCB GetUpdateSubmissionStateCallback() { + return update_submission_state_callback_; + } + void EnqueueFrame(scoped_refptr<media::VideoFrame> frame); // Statistical data @@ -182,6 +188,8 @@ std::map<base::TimeDelta, base::TimeTicks> timestamps_to_clock_times_; + cc::UpdateSubmissionStateCB update_submission_state_callback_; + // |current_frame_lock_| protects |current_frame_|, |rendering_frame_buffer_|, // |dropped_frame_count_|, and |render_started_|. base::Lock current_frame_lock_;
diff --git a/content/renderer/media/stream/webmediaplayer_ms_unittest.cc b/content/renderer/media/stream/webmediaplayer_ms_unittest.cc index 8f01703e..89994de8 100644 --- a/content/renderer/media/stream/webmediaplayer_ms_unittest.cc +++ b/content/renderer/media/stream/webmediaplayer_ms_unittest.cc
@@ -26,6 +26,9 @@ #include "third_party/blink/public/platform/web_media_player_client.h" #include "third_party/blink/public/platform/web_media_player_source.h" +using ::testing::Return; +using ::testing::StrictMock; + namespace content { enum class FrameType { @@ -35,6 +38,16 @@ MIN_TYPE = TEST_BRAKE }; +class MockSurfaceLayerBridge : public blink::WebSurfaceLayerBridge { + public: + MOCK_CONST_METHOD0(GetCcLayer, cc::Layer*()); + MOCK_CONST_METHOD0(GetFrameSinkId, const viz::FrameSinkId&()); + MOCK_CONST_METHOD0(GetSurfaceId, const viz::SurfaceId&()); + MOCK_METHOD1(SetContentsOpaque, void(bool)); + MOCK_METHOD0(CreateSurfaceLayer, void()); + MOCK_METHOD0(ClearSurfaceId, void()); +}; + using TestFrame = std::pair<FrameType, scoped_refptr<media::VideoFrame>>; static const int kOddSizeOffset = 3; @@ -493,26 +506,20 @@ : render_factory_(new MockRenderFactory(message_loop_.task_runner(), &message_loop_controller_)), gpu_factories_(new media::MockGpuVideoAcceleratorFactories(nullptr)), - player_(new WebMediaPlayerMS( - nullptr, - this, - &delegate_, - std::make_unique<media::MediaLog>(), - std::unique_ptr<MediaStreamRendererFactory>(render_factory_), - message_loop_.task_runner(), - message_loop_.task_runner(), - message_loop_.task_runner(), - message_loop_.task_runner(), - gpu_factories_.get(), - blink::WebString())), + surface_layer_bridge_( + std::make_unique<StrictMock<MockSurfaceLayerBridge>>()), layer_set_(false), rendering_(false), - background_rendering_(false) {} + background_rendering_(false) { + surface_layer_bridge_ptr_ = surface_layer_bridge_.get(); + } ~WebMediaPlayerMSTest() override { player_.reset(); base::RunLoop().RunUntilIdle(); } + void InitializeWebMediaPlayerMS(bool enable_surface_layer_for_video); + MockMediaStreamVideoRenderer* LoadAndGetFrameProvider(bool algorithm_enabled); // Implementation of WebMediaPlayerClient @@ -608,6 +615,12 @@ MOCK_METHOD1(CheckSizeChanged, void(gfx::Size)); MOCK_CONST_METHOD0(CouldPlayIfEnoughData, bool()); + std::unique_ptr<blink::WebSurfaceLayerBridge> CreateMockSurfaceLayerBridge( + blink::WebSurfaceLayerBridgeObserver*, + cc::UpdateSubmissionStateCB) { + return std::move(surface_layer_bridge_); + } + base::MessageLoop message_loop_; MockRenderFactory* render_factory_; std::unique_ptr<media::MockGpuVideoAcceleratorFactories> gpu_factories_; @@ -618,6 +631,8 @@ cc::Layer* layer_; bool is_audio_element_ = false; std::vector<base::OnceClosure> frame_ready_cbs_; + std::unique_ptr<StrictMock<MockSurfaceLayerBridge>> surface_layer_bridge_; + StrictMock<MockSurfaceLayerBridge>* surface_layer_bridge_ptr_ = nullptr; private: // Main function trying to ask WebMediaPlayerMS to submit a frame for @@ -629,6 +644,19 @@ bool background_rendering_; }; +void WebMediaPlayerMSTest::InitializeWebMediaPlayerMS( + bool enable_surface_layer_for_video) { + player_ = std::make_unique<WebMediaPlayerMS>( + nullptr, this, &delegate_, std::make_unique<media::MediaLog>(), + std::unique_ptr<MediaStreamRendererFactory>(render_factory_), + message_loop_.task_runner(), message_loop_.task_runner(), + message_loop_.task_runner(), message_loop_.task_runner(), + gpu_factories_.get(), blink::WebString(), + base::BindRepeating(&WebMediaPlayerMSTest::CreateMockSurfaceLayerBridge, + base::Unretained(this)), + enable_surface_layer_for_video); +} + MockMediaStreamVideoRenderer* WebMediaPlayerMSTest::LoadAndGetFrameProvider( bool algorithm_enabled) { EXPECT_FALSE(!!render_factory_->provider()) << "There should not be a " @@ -742,6 +770,7 @@ } TEST_F(WebMediaPlayerMSTest, NoDataDuringLoadForVideo) { + InitializeWebMediaPlayerMS(false); EXPECT_CALL(*this, DoReadyStateChanged( blink::WebMediaPlayer::kReadyStateHaveMetadata)) .Times(0); @@ -759,6 +788,7 @@ } TEST_F(WebMediaPlayerMSTest, NoWaitForFrameForAudio) { + InitializeWebMediaPlayerMS(false); is_audio_element_ = true; scoped_refptr<MediaStreamAudioRenderer> audio_renderer( new MockMediaStreamAudioRenderer()); @@ -785,6 +815,7 @@ } TEST_F(WebMediaPlayerMSTest, NoWaitForFrameForAudioOnly) { + InitializeWebMediaPlayerMS(false); render_factory_->set_support_video_renderer(false); scoped_refptr<MediaStreamAudioRenderer> audio_renderer( new MockMediaStreamAudioRenderer()); @@ -802,6 +833,8 @@ // and verifies that they are produced by WebMediaPlayerMS in appropriate // order. + InitializeWebMediaPlayerMS(false); + MockMediaStreamVideoRenderer* provider = LoadAndGetFrameProvider(true); int tokens[] = {0, 33, 66, 100, 133, 166, 200, 233, 266, 300, @@ -832,6 +865,8 @@ // This tests sends a broken frame to WebMediaPlayerMS, and verifies // OnSourceError function works as expected. + InitializeWebMediaPlayerMS(false); + MockMediaStreamVideoRenderer* provider = LoadAndGetFrameProvider(false); const int kBrokenFrame = static_cast<int>(FrameType::BROKEN_FRAME); @@ -859,6 +894,7 @@ } TEST_P(WebMediaPlayerMSTest, PlayThenPause) { + InitializeWebMediaPlayerMS(false); const bool opaque_frame = testing::get<0>(GetParam()); const bool odd_size_frame = testing::get<1>(GetParam()); // In the middle of this test, WebMediaPlayerMS::pause will be called, and we @@ -900,6 +936,7 @@ } TEST_P(WebMediaPlayerMSTest, PlayThenPauseThenPlay) { + InitializeWebMediaPlayerMS(false); const bool opaque_frame = testing::get<0>(GetParam()); const bool odd_size_frame = testing::get<1>(GetParam()); // Similary to PlayAndPause test above, this one focuses on testing that @@ -959,6 +996,7 @@ // During this test, we check that when we send rotated video frames, it applies // to player's natural size. TEST_F(WebMediaPlayerMSTest, RotationChange) { + InitializeWebMediaPlayerMS(false); MockMediaStreamVideoRenderer* provider = LoadAndGetFrameProvider(true); const int kTestBrake = static_cast<int>(FrameType::TEST_BRAKE); @@ -999,6 +1037,7 @@ // During this test, we check that web layer changes opacity according to the // given frames. TEST_F(WebMediaPlayerMSTest, OpacityChange) { + InitializeWebMediaPlayerMS(false); MockMediaStreamVideoRenderer* provider = LoadAndGetFrameProvider(true); // Push one opaque frame. @@ -1043,6 +1082,7 @@ // WebMediaPlayerMS without an explicit notification. We should expect that // WebMediaPlayerMS can digest old frames, rather than piling frames up and // explode. + InitializeWebMediaPlayerMS(false); MockMediaStreamVideoRenderer* provider = LoadAndGetFrameProvider(true); const int kTestBrake = static_cast<int>(FrameType::TEST_BRAKE); @@ -1091,6 +1131,7 @@ // During this test, the frame size of the input changes. // We need to make sure, when sizeChanged() gets called, new size should be // returned by GetCurrentSize(). + InitializeWebMediaPlayerMS(false); MockMediaStreamVideoRenderer* provider = LoadAndGetFrameProvider(true); int tokens[] = {0, 33, 66, 100, 133, 166, 200, 233, 266, 300, @@ -1119,6 +1160,7 @@ // Tests that GpuMemoryBufferVideoFramePool is called in the expected sequence. // TODO(https://crbug.com/831327): Flaky under load / CPU scheduling delays. TEST_F(WebMediaPlayerMSTest, DISABLED_CreateHardwareFrames) { + InitializeWebMediaPlayerMS(false); MockMediaStreamVideoRenderer* provider = LoadAndGetFrameProvider(true); SetGpuMemoryBufferVideoForTesting(); @@ -1156,6 +1198,7 @@ // TODO(https://crbug.com/831327): Flaky under load / CPU scheduling delays. TEST_F(WebMediaPlayerMSTest, DISABLED_StopsCreatingHardwareFramesWhenHiddenOrClosed) { + InitializeWebMediaPlayerMS(false); MockMediaStreamVideoRenderer* provider = LoadAndGetFrameProvider(true); SetGpuMemoryBufferVideoForTesting(); @@ -1213,6 +1256,7 @@ #if defined(OS_ANDROID) TEST_F(WebMediaPlayerMSTest, HiddenPlayerTests) { + InitializeWebMediaPlayerMS(false); LoadAndGetFrameProvider(true); // Hidden status should not affect playback.
diff --git a/content/renderer/media/webrtc/rtc_video_decoder_adapter.cc b/content/renderer/media/webrtc/rtc_video_decoder_adapter.cc new file mode 100644 index 0000000..e64ad905 --- /dev/null +++ b/content/renderer/media/webrtc/rtc_video_decoder_adapter.cc
@@ -0,0 +1,395 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "content/renderer/media/webrtc/rtc_video_decoder_adapter.h" + +#include <algorithm> + +#include "base/bind.h" +#include "base/command_line.h" +#include "base/location.h" +#include "base/logging.h" +#include "base/memory/ptr_util.h" +#include "base/metrics/histogram_macros.h" +#include "base/sequenced_task_runner.h" +#include "base/single_thread_task_runner.h" +#include "base/synchronization/waitable_event.h" +#include "base/threading/thread_task_runner_handle.h" +#include "build/build_config.h" +#include "content/renderer/media/render_media_log.h" +#include "content/renderer/media/webrtc/webrtc_video_frame_adapter.h" +#include "media/base/media_log.h" +#include "media/base/media_util.h" +#include "media/base/video_types.h" +#include "media/video/gpu_video_accelerator_factories.h" +#include "third_party/webrtc/api/video/video_frame.h" +#include "third_party/webrtc/modules/video_coding/codecs/h264/include/h264.h" +#include "third_party/webrtc/rtc_base/bind.h" +#include "third_party/webrtc/rtc_base/refcount.h" +#include "third_party/webrtc/rtc_base/refcountedobject.h" + +#if defined(OS_WIN) +#include "base/command_line.h" +#include "base/win/windows_version.h" +#include "content/public/common/content_switches.h" +#endif // defined(OS_WIN) + +namespace content { + +namespace { + +// Any reasonable size, will be overridden by the decoder anyway. +// +// TODO(sandersd): DXVA VDA does not compute a visible rect itself; we should +// not enable RTCVideoDecoderAdapter on Windows until that is fixed. +// https://crbug.com/869660. +const gfx::Size kDefaultSize(640, 480); + +// Assumed pixel format of the encoded content. WebRTC doesn't tell us, and in +// practice the decoders ignore it. We're going with generic 4:2:0. +const media::VideoPixelFormat kDefaultPixelFormat = media::PIXEL_FORMAT_I420; + +// Maximum number of buffers that we will queue in |pending_buffers_|. +const int32_t kMaxPendingBuffers = 8; + +// Maximum number of timestamps that will be maintained in |decode_timestamps_|. +// Really only needs to be a bit larger than the maximum reorder distance (which +// is presumably 0 for WebRTC), but being larger doesn't hurt much. +const int32_t kMaxDecodeHistory = 32; + +// Maximum number of consecutive frames that can fail to decode before +// requesting fallback to software decode. +const int32_t kMaxConsecutiveErrors = 5; + +// Map webrtc::VideoCodecType to media::VideoCodec. +media::VideoCodec ToVideoCodec(webrtc::VideoCodecType video_codec_type) { + switch (video_codec_type) { + case webrtc::kVideoCodecVP8: + return media::kCodecVP8; + case webrtc::kVideoCodecVP9: + return media::kCodecVP9; + case webrtc::kVideoCodecH264: + return media::kCodecH264; + default: + return media::kUnknownVideoCodec; + } +} + +// Map webrtc::VideoCodecType to a guess for media::VideoCodecProfile. +media::VideoCodecProfile GuessVideoCodecProfile( + webrtc::VideoCodecType video_codec_type) { + switch (video_codec_type) { + case webrtc::kVideoCodecVP8: + return media::VP8PROFILE_ANY; + case webrtc::kVideoCodecVP9: + return media::VP9PROFILE_PROFILE0; + case webrtc::kVideoCodecH264: + return media::H264PROFILE_BASELINE; + default: + return media::VIDEO_CODEC_PROFILE_UNKNOWN; + } +} + +void FinishWait(base::WaitableEvent* waiter, bool* result_out, bool result) { + DVLOG(3) << __func__ << "(" << result << ")"; + *result_out = result; + waiter->Signal(); +} + +} // namespace + +// static +std::unique_ptr<RTCVideoDecoderAdapter> RTCVideoDecoderAdapter::Create( + webrtc::VideoCodecType video_codec_type, + media::GpuVideoAcceleratorFactories* gpu_factories, + CreateVideoDecoderCB create_video_decoder_cb) { + DVLOG(1) << __func__ << "(" << video_codec_type << ")"; + +#if defined(OS_WIN) + // Do not use hardware decoding for H.264 on Win7, due to high latency. + // See https://crbug.com/webrtc/5717. + if (!base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kEnableWin7WebRtcHWH264Decoding) && + video_codec_type == webrtc::kVideoCodecH264 && + base::win::GetVersion() == base::win::VERSION_WIN7) { + DVLOG(1) << "H.264 HW decoding is not supported on Win7"; + return nullptr; + } +#endif // defined(OS_WIN) + + // Short circuit known-unsupported codecs. + if (ToVideoCodec(video_codec_type) == media::kUnknownVideoCodec) + return nullptr; + + std::unique_ptr<RTCVideoDecoderAdapter> rtc_video_decoder_adapter = + base::WrapUnique(new RTCVideoDecoderAdapter( + gpu_factories->GetTaskRunner(), std::move(create_video_decoder_cb), + video_codec_type)); + + // Synchronously verify that the decoder can be initialized. + if (!rtc_video_decoder_adapter->InitializeSync()) { + DeleteSoonOnMediaThread(std::move(rtc_video_decoder_adapter), + gpu_factories); + return nullptr; + } + + return rtc_video_decoder_adapter; +} + +// static +void RTCVideoDecoderAdapter::DeleteSoonOnMediaThread( + std::unique_ptr<webrtc::VideoDecoder> rtc_video_decoder_adapter, + media::GpuVideoAcceleratorFactories* gpu_factories) { + gpu_factories->GetTaskRunner()->DeleteSoon( + FROM_HERE, std::move(rtc_video_decoder_adapter)); +} + +RTCVideoDecoderAdapter::RTCVideoDecoderAdapter( + scoped_refptr<base::SingleThreadTaskRunner> media_task_runner, + CreateVideoDecoderCB create_video_decoder_cb, + webrtc::VideoCodecType video_codec_type) + : media_task_runner_(std::move(media_task_runner)), + create_video_decoder_cb_(std::move(create_video_decoder_cb)), + video_codec_type_(video_codec_type), + weak_this_factory_(this) { + DVLOG(1) << __func__; + DETACH_FROM_THREAD(decoding_thread_checker_); + weak_this_ = weak_this_factory_.GetWeakPtr(); +} + +RTCVideoDecoderAdapter::~RTCVideoDecoderAdapter() { + DVLOG(1) << __func__; + DCHECK(media_task_runner_->BelongsToCurrentThread()); +} + +bool RTCVideoDecoderAdapter::InitializeSync() { + DVLOG(3) << __func__; + DCHECK_CALLED_ON_VALID_THREAD(worker_thread_checker_); + + bool result = false; + base::WaitableEvent waiter(base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::NOT_SIGNALED); + media::VideoDecoder::InitCB init_cb = + base::BindRepeating(&FinishWait, &waiter, &result); + if (media_task_runner_->PostTask( + FROM_HERE, + base::BindOnce(&RTCVideoDecoderAdapter::InitializeOnMediaThread, + base::Unretained(this), std::move(init_cb)))) { + waiter.Wait(); + } + return result; +} + +int32_t RTCVideoDecoderAdapter::InitDecode( + const webrtc::VideoCodec* codec_settings, + int32_t number_of_cores) { + DVLOG(1) << __func__; + DCHECK_CALLED_ON_VALID_THREAD(decoding_thread_checker_); + DCHECK_EQ(video_codec_type_, codec_settings->codecType); + + base::AutoLock auto_lock(lock_); + UMA_HISTOGRAM_BOOLEAN("Media.RTCVideoDecoderInitDecodeSuccess", !has_error_); + return has_error_ ? WEBRTC_VIDEO_CODEC_UNINITIALIZED : WEBRTC_VIDEO_CODEC_OK; +} + +int32_t RTCVideoDecoderAdapter::Decode( + const webrtc::EncodedImage& input_image, + bool missing_frames, + const webrtc::CodecSpecificInfo* codec_specific_info, + int64_t render_time_ms) { + DVLOG(2) << __func__; + DCHECK_CALLED_ON_VALID_THREAD(decoding_thread_checker_); + +#if defined(OS_WIN) + // Hardware VP9 decoders don't handle more than one spatial layer. Fall back + // to software decoding. See https://crbug.com/webrtc/9304. + if (codec_specific_info && + codec_specific_info->codecType == webrtc::kVideoCodecVP9 && + codec_specific_info->codecSpecific.VP9.ss_data_available && + codec_specific_info->codecSpecific.VP9.num_spatial_layers > 1) { + return WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE; + } +#endif // defined(OS_WIN) + + if (missing_frames || !input_image._completeFrame) { + DVLOG(2) << "Missing or incomplete frames"; + // We probably can't handle broken frames. Request a key frame. + return WEBRTC_VIDEO_CODEC_ERROR; + } + + // Convert to media::DecoderBuffer. + // TODO(sandersd): What is |render_time_ms|? + scoped_refptr<media::DecoderBuffer> buffer = + media::DecoderBuffer::CopyFrom(input_image._buffer, input_image._length); + buffer->set_timestamp( + base::TimeDelta::FromMicroseconds(input_image._timeStamp)); + + // Queue for decoding. + { + base::AutoLock auto_lock(lock_); + if (has_error_) + return WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE; + if (pending_buffers_.size() >= kMaxPendingBuffers) { + // We are severely behind. Drop pending buffers and request a keyframe to + // catch up as quickly as possible. + DVLOG(2) << "Pending buffers overflow"; + if (++consecutive_error_count_ > kMaxConsecutiveErrors) { + pending_buffers_.clear(); + decode_timestamps_.clear(); + return WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE; + } + pending_buffers_.clear(); + return WEBRTC_VIDEO_CODEC_ERROR; + } + pending_buffers_.push_back(std::move(buffer)); + } + media_task_runner_->PostTask( + FROM_HERE, + base::BindOnce(&RTCVideoDecoderAdapter::DecodeOnMediaThread, weak_this_)); + + return WEBRTC_VIDEO_CODEC_OK; +} + +int32_t RTCVideoDecoderAdapter::RegisterDecodeCompleteCallback( + webrtc::DecodedImageCallback* callback) { + DVLOG(2) << __func__; + DCHECK_CALLED_ON_VALID_THREAD(decoding_thread_checker_); + DCHECK(callback); + + base::AutoLock auto_lock(lock_); + decode_complete_callback_ = callback; + return has_error_ ? WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE + : WEBRTC_VIDEO_CODEC_OK; +} + +int32_t RTCVideoDecoderAdapter::Release() { + DVLOG(1) << __func__; + DCHECK_CALLED_ON_VALID_THREAD(worker_thread_checker_); + + base::AutoLock auto_lock(lock_); + pending_buffers_.clear(); + decode_timestamps_.clear(); + return has_error_ ? WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE + : WEBRTC_VIDEO_CODEC_OK; +} + +const char* RTCVideoDecoderAdapter::ImplementationName() const { + return "ExternalDecoder"; +} + +void RTCVideoDecoderAdapter::InitializeOnMediaThread( + media::VideoDecoder::InitCB init_cb) { + DVLOG(3) << __func__; + DCHECK(media_task_runner_->BelongsToCurrentThread()); + + // TODO(sandersd): Plumb a real log sink here so that we can contribute to the + // media-internals UI. The current log just discards all messages. + media_log_ = std::make_unique<media::MediaLog>(); + + video_decoder_ = create_video_decoder_cb_.Run(media_log_.get()); + if (!video_decoder_) { + media_task_runner_->PostTask(FROM_HERE, + base::BindRepeating(init_cb, false)); + return; + } + + // We don't know much about the media that is coming. + media::VideoDecoderConfig config( + ToVideoCodec(video_codec_type_), + GuessVideoCodecProfile(video_codec_type_), kDefaultPixelFormat, + media::COLOR_SPACE_UNSPECIFIED, media::VIDEO_ROTATION_0, kDefaultSize, + gfx::Rect(kDefaultSize), kDefaultSize, media::EmptyExtraData(), + media::Unencrypted()); + + // In practice this is ignored by hardware decoders. + bool low_delay = true; + + // Encryption is not supported. + media::CdmContext* cdm_context = nullptr; + media::VideoDecoder::WaitingForDecryptionKeyCB waiting_cb; + + media::VideoDecoder::OutputCB output_cb = + base::BindRepeating(&RTCVideoDecoderAdapter::OnOutput, weak_this_); + + video_decoder_->Initialize(config, low_delay, cdm_context, std::move(init_cb), + std::move(output_cb), std::move(waiting_cb)); +} + +void RTCVideoDecoderAdapter::DecodeOnMediaThread() { + DVLOG(4) << __func__; + DCHECK(media_task_runner_->BelongsToCurrentThread()); + + int max_decode_requests = video_decoder_->GetMaxDecodeRequests(); + while (outstanding_decode_requests_ < max_decode_requests) { + scoped_refptr<media::DecoderBuffer> buffer; + { + base::AutoLock auto_lock(lock_); + + // Take the first pending buffer. + if (pending_buffers_.empty()) + return; + buffer = pending_buffers_.front(); + pending_buffers_.pop_front(); + + // Record the timestamp. + while (decode_timestamps_.size() >= kMaxDecodeHistory) + decode_timestamps_.pop_front(); + decode_timestamps_.push_back(buffer->timestamp()); + } + + // Submit for decoding. + outstanding_decode_requests_++; + video_decoder_->Decode( + std::move(buffer), + base::BindRepeating(&RTCVideoDecoderAdapter::OnDecodeDone, weak_this_)); + } +} + +void RTCVideoDecoderAdapter::OnDecodeDone(media::DecodeStatus status) { + DVLOG(3) << __func__ << "(" << status << ")"; + DCHECK(media_task_runner_->BelongsToCurrentThread()); + + outstanding_decode_requests_--; + + if (status == media::DecodeStatus::DECODE_ERROR) { + DVLOG(2) << "Entering permanent error state"; + UMA_HISTOGRAM_ENUMERATION("Media.RTCVideoDecoderError", + media::VideoDecodeAccelerator::PLATFORM_FAILURE, + media::VideoDecodeAccelerator::ERROR_MAX + 1); + + base::AutoLock auto_lock(lock_); + has_error_ = true; + pending_buffers_.clear(); + decode_timestamps_.clear(); + return; + } + + DecodeOnMediaThread(); +} + +void RTCVideoDecoderAdapter::OnOutput( + const scoped_refptr<media::VideoFrame>& frame) { + DVLOG(3) << __func__; + DCHECK(media_task_runner_->BelongsToCurrentThread()); + + webrtc::VideoFrame rtc_frame( + new rtc::RefCountedObject<WebRtcVideoFrameAdapter>(frame), + frame->timestamp().InMicroseconds(), 0, webrtc::kVideoRotation_0); + + base::AutoLock auto_lock(lock_); + + if (std::find(decode_timestamps_.begin(), decode_timestamps_.end(), + frame->timestamp()) == decode_timestamps_.end()) { + DVLOG(2) << "Discarding frame with timestamp " << frame->timestamp(); + return; + } + + // Assumes that Decoded() can be safely called with the lock held, which + // apparently it can be because RTCVideoDecoder does the same. + DCHECK(decode_complete_callback_); + decode_complete_callback_->Decoded(rtc_frame); + consecutive_error_count_ = 0; +} + +} // namespace content
diff --git a/content/renderer/media/webrtc/rtc_video_decoder_adapter.h b/content/renderer/media/webrtc/rtc_video_decoder_adapter.h new file mode 100644 index 0000000..e7c6c8c --- /dev/null +++ b/content/renderer/media/webrtc/rtc_video_decoder_adapter.h
@@ -0,0 +1,137 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_RENDERER_MEDIA_WEBRTC_RTC_VIDEO_DECODER_ADAPTER_H_ +#define CONTENT_RENDERER_MEDIA_WEBRTC_RTC_VIDEO_DECODER_ADAPTER_H_ + +#include <memory> + +#include "base/callback_forward.h" +#include "base/containers/circular_deque.h" +#include "base/macros.h" +#include "base/memory/scoped_refptr.h" +#include "base/memory/weak_ptr.h" +#include "base/synchronization/lock.h" +#include "base/threading/thread_checker.h" +#include "content/common/content_export.h" +#include "media/base/decode_status.h" +#include "media/base/video_codecs.h" +#include "media/base/video_decoder.h" +#include "third_party/webrtc/modules/video_coding/include/video_codec_interface.h" +#include "ui/gfx/geometry/size.h" + +namespace base { +class SingleThreadTaskRunner; +} // namespace base + +namespace media { +class DecoderBuffer; +class GpuVideoAcceleratorFactories; +class MediaLog; +class VideoFrame; +} // namespace media + +namespace content { + +// This class decodes video for WebRTC using a media::VideoDecoder. In +// particular, either GpuVideoDecoder or MojoVideoDecoder are used to provide +// access to hardware decoding in the GPU process. +// +// Lifecycle methods are called on the WebRTC worker thread. Decoding happens on +// a WebRTC DecodingThread, which is an rtc::PlatformThread owend by WebRTC; it +// does not have a TaskRunner. +// +// To stop decoding, WebRTC stops the DecodingThread and then calls Release() on +// the worker. Calling the DecodedImageCallback after the DecodingThread is +// stopped is illegal but, because we decode on the media thread, there is no +// way to synchronize this correctly. +class CONTENT_EXPORT RTCVideoDecoderAdapter : public webrtc::VideoDecoder { + public: + using CreateVideoDecoderCB = + base::RepeatingCallback<std::unique_ptr<media::VideoDecoder>( + media::MediaLog*)>; + + // Creates and initializes an RTCVideoDecoderAdapter. Returns nullptr if + // |video_codec_type| cannot be supported. + // Called on the worker thread. + static std::unique_ptr<RTCVideoDecoderAdapter> Create( + webrtc::VideoCodecType video_codec_type, + media::GpuVideoAcceleratorFactories* gpu_factories, + CreateVideoDecoderCB create_video_decoder_cb); + + // Called on the worker thread. + static void DeleteSoonOnMediaThread( + std::unique_ptr<webrtc::VideoDecoder> rtc_video_decoder_adapter, + media::GpuVideoAcceleratorFactories* gpu_factories); + + // Called on |media_task_runner_|. + ~RTCVideoDecoderAdapter() override; + + // webrtc::VideoDecoder implementation. + // Called on the DecodingThread. + int32_t InitDecode(const webrtc::VideoCodec* codec_settings, + int32_t number_of_cores) override; + // Called on the DecodingThread. + int32_t RegisterDecodeCompleteCallback( + webrtc::DecodedImageCallback* callback) override; + // Called on the DecodingThread. + int32_t Decode(const webrtc::EncodedImage& input_image, + bool missing_frames, + const webrtc::CodecSpecificInfo* codec_specific_info, + int64_t render_time_ms) override; + // Called on the worker thread. + int32_t Release() override; + // Called on the worker thread and on the DecodingThread. + const char* ImplementationName() const override; + + private: + // |create_video_decoder_cb| will always be called on |media_task_runner|. + // Called on the worker thread. + RTCVideoDecoderAdapter( + scoped_refptr<base::SingleThreadTaskRunner> media_task_runner, + CreateVideoDecoderCB create_video_decoder_cb, + webrtc::VideoCodecType video_codec_type); + + bool InitializeSync(); + void InitializeOnMediaThread(media::VideoDecoder::InitCB init_cb); + void DecodeOnMediaThread(); + void OnDecodeDone(media::DecodeStatus status); + void OnOutput(const scoped_refptr<media::VideoFrame>& frame); + + // Construction parameters. + scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_; + CreateVideoDecoderCB create_video_decoder_cb_; + webrtc::VideoCodecType video_codec_type_; + + // Media thread members. + // |media_log_| must outlive |video_decoder_| because it is passed as a raw + // pointer. + std::unique_ptr<media::MediaLog> media_log_; + std::unique_ptr<media::VideoDecoder> video_decoder_; + int32_t outstanding_decode_requests_ = 0; + + // Shared members. + base::Lock lock_; + int32_t consecutive_error_count_ = 0; + bool has_error_ = false; + webrtc::DecodedImageCallback* decode_complete_callback_ = nullptr; + // Requests that have not been submitted to the decoder yet. + base::circular_deque<scoped_refptr<media::DecoderBuffer>> pending_buffers_; + // Record of timestamps that have been sent to be decoded. Removing a + // timestamp will cause the frame to be dropped when it is output. + base::circular_deque<base::TimeDelta> decode_timestamps_; + + // Thread management. + THREAD_CHECKER(worker_thread_checker_); + THREAD_CHECKER(decoding_thread_checker_); + + base::WeakPtr<RTCVideoDecoderAdapter> weak_this_; + base::WeakPtrFactory<RTCVideoDecoderAdapter> weak_this_factory_; + + DISALLOW_COPY_AND_ASSIGN(RTCVideoDecoderAdapter); +}; + +} // namespace content + +#endif // CONTENT_RENDERER_MEDIA_WEBRTC_RTC_VIDEO_DECODER_ADAPTER_H_
diff --git a/content/renderer/media/webrtc/rtc_video_decoder_adapter_unittest.cc b/content/renderer/media/webrtc/rtc_video_decoder_adapter_unittest.cc new file mode 100644 index 0000000..1b0c4e1 --- /dev/null +++ b/content/renderer/media/webrtc/rtc_video_decoder_adapter_unittest.cc
@@ -0,0 +1,276 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <memory> +#include <vector> + +#include <stdint.h> + +#include "base/callback_forward.h" +#include "base/logging.h" +#include "base/macros.h" +#include "base/memory/ptr_util.h" +#include "base/memory/scoped_refptr.h" +#include "base/test/mock_callback.h" +#include "base/test/scoped_task_environment.h" +#include "base/threading/thread.h" +#include "base/time/time.h" +#include "content/renderer/media/webrtc/rtc_video_decoder_adapter.h" +#include "gpu/command_buffer/common/mailbox.h" +#include "media/base/decode_status.h" +#include "media/base/gmock_callback_support.h" +#include "media/base/media_util.h" +#include "media/base/video_decoder.h" +#include "media/base/video_decoder_config.h" +#include "media/base/video_frame.h" +#include "media/base/video_types.h" +#include "media/video/mock_gpu_video_accelerator_factories.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/gfx/geometry/rect.h" +#include "ui/gfx/geometry/size.h" + +using ::testing::_; +using ::testing::AtLeast; +using ::testing::DoAll; +using ::testing::Mock; +using ::testing::Return; +using ::testing::SaveArg; +using ::testing::StrictMock; + +namespace content { + +namespace { + +class MockVideoDecoder : public media::VideoDecoder { + public: + std::string GetDisplayName() const override { return "MockVideoDecoder"; } + MOCK_METHOD6( + Initialize, + void(const media::VideoDecoderConfig& config, + bool low_delay, + media::CdmContext* cdm_context, + const InitCB& init_cb, + const OutputCB& output_cb, + const WaitingForDecryptionKeyCB& waiting_for_decryption_key_cb)); + MOCK_METHOD2(Decode, + void(scoped_refptr<media::DecoderBuffer> buffer, + const DecodeCB&)); + MOCK_METHOD1(Reset, void(const base::RepeatingClosure&)); + bool NeedsBitstreamConversion() const override { return false; } + bool CanReadWithoutStalling() const override { return true; } + int GetMaxDecodeRequests() const override { return 1; } +}; + +// Wraps a callback as a webrtc::DecodedImageCallback. +class DecodedImageCallback : public webrtc::DecodedImageCallback { + public: + DecodedImageCallback( + base::RepeatingCallback<void(const webrtc::VideoFrame&)> callback) + : callback_(callback) {} + + int32_t Decoded(webrtc::VideoFrame& decodedImage) override { + callback_.Run(decodedImage); + // TODO(sandersd): Does the return value matter? RTCVideoDecoder + // ignores it. + return 0; + } + + private: + base::RepeatingCallback<void(const webrtc::VideoFrame&)> callback_; + + DISALLOW_COPY_AND_ASSIGN(DecodedImageCallback); +}; + +} // namespace + +class RTCVideoDecoderAdapterTest : public ::testing::Test { + public: + RTCVideoDecoderAdapterTest() + : media_thread_("Media Thread"), + gpu_factories_(nullptr), + decoded_image_callback_(decoded_cb_.Get()) { + media_thread_.Start(); + ON_CALL(gpu_factories_, GetTaskRunner()) + .WillByDefault(Return(media_thread_.task_runner())); + EXPECT_CALL(gpu_factories_, GetTaskRunner()).Times(AtLeast(0)); + owned_video_decoder_ = std::make_unique<StrictMock<MockVideoDecoder>>(); + video_decoder_ = owned_video_decoder_.get(); + } + + ~RTCVideoDecoderAdapterTest() { + if (!rtc_video_decoder_adapter_) + return; + + RTCVideoDecoderAdapter::DeleteSoonOnMediaThread( + std::move(rtc_video_decoder_adapter_), &gpu_factories_); + media_thread_.FlushForTesting(); + } + + protected: + std::unique_ptr<media::VideoDecoder> CreateVideoDecoder( + media::MediaLog* media_log) { + DCHECK(owned_video_decoder_); + return std::move(owned_video_decoder_); + } + + bool BasicSetup() { + if (!CreateAndInitialize()) + return false; + if (InitDecode() != WEBRTC_VIDEO_CODEC_OK) + return false; + if (RegisterDecodeCompleteCallback() != WEBRTC_VIDEO_CODEC_OK) + return false; + return true; + } + + bool BasicTeardown() { + if (Release() != WEBRTC_VIDEO_CODEC_OK) + return false; + return true; + } + + bool CreateAndInitialize(bool init_cb_result = true) { + EXPECT_CALL(*video_decoder_, Initialize(_, _, _, _, _, _)) + .WillOnce(DoAll(SaveArg<4>(&output_cb_), + media::RunCallback<3>(init_cb_result))); + rtc_video_decoder_adapter_ = RTCVideoDecoderAdapter::Create( + webrtc::kVideoCodecVP9, &gpu_factories_, + base::BindRepeating(&RTCVideoDecoderAdapterTest::CreateVideoDecoder, + base::Unretained(this))); + return !!rtc_video_decoder_adapter_; + } + + int32_t InitDecode() { + webrtc::VideoCodec codec_settings; + codec_settings.codecType = webrtc::kVideoCodecVP9; + return rtc_video_decoder_adapter_->InitDecode(&codec_settings, 1); + } + + int32_t RegisterDecodeCompleteCallback() { + return rtc_video_decoder_adapter_->RegisterDecodeCompleteCallback( + &decoded_image_callback_); + } + + int32_t Decode(uint32_t timestamp) { + uint8_t buf[] = {0}; + webrtc::EncodedImage input_image(&buf[0], 1, 1); + input_image._completeFrame = true; + input_image._timeStamp = timestamp; + return rtc_video_decoder_adapter_->Decode(input_image, false, nullptr, 0); + } + + void FinishDecode(uint32_t timestamp) { + media_thread_.task_runner()->PostTask( + FROM_HERE, + base::BindOnce(&RTCVideoDecoderAdapterTest::FinishDecodeOnMediaThread, + base::Unretained(this), timestamp)); + } + + void FinishDecodeOnMediaThread(uint32_t timestamp) { + DCHECK(media_thread_.task_runner()->BelongsToCurrentThread()); + gpu::MailboxHolder mailbox_holders[media::VideoFrame::kMaxPlanes]; + mailbox_holders[0].mailbox = gpu::Mailbox::Generate(); + scoped_refptr<media::VideoFrame> frame = + media::VideoFrame::WrapNativeTextures( + media::PIXEL_FORMAT_ARGB, mailbox_holders, + media::VideoFrame::ReleaseMailboxCB(), gfx::Size(640, 360), + gfx::Rect(640, 360), gfx::Size(640, 360), + base::TimeDelta::FromMicroseconds(timestamp)); + output_cb_.Run(std::move(frame)); + } + + int32_t Release() { return rtc_video_decoder_adapter_->Release(); } + + base::test::ScopedTaskEnvironment scoped_task_environment_; + base::Thread media_thread_; + + // Owned by |rtc_video_decoder_adapter_|. + StrictMock<MockVideoDecoder>* video_decoder_ = nullptr; + + StrictMock<base::MockCallback< + base::RepeatingCallback<void(const webrtc::VideoFrame&)>>> + decoded_cb_; + + private: + StrictMock<media::MockGpuVideoAcceleratorFactories> gpu_factories_; + std::unique_ptr<RTCVideoDecoderAdapter> rtc_video_decoder_adapter_; + std::unique_ptr<StrictMock<MockVideoDecoder>> owned_video_decoder_; + DecodedImageCallback decoded_image_callback_; + media::VideoDecoder::OutputCB output_cb_; + + DISALLOW_COPY_AND_ASSIGN(RTCVideoDecoderAdapterTest); +}; + +TEST_F(RTCVideoDecoderAdapterTest, Lifecycle) { + ASSERT_TRUE(BasicSetup()); + ASSERT_TRUE(BasicTeardown()); +} + +TEST_F(RTCVideoDecoderAdapterTest, InitializationFailure) { + ASSERT_FALSE(CreateAndInitialize(false)); +} + +TEST_F(RTCVideoDecoderAdapterTest, Decode) { + ASSERT_TRUE(BasicSetup()); + + EXPECT_CALL(*video_decoder_, Decode(_, _)) + .WillOnce(media::RunCallback<1>(media::DecodeStatus::OK)); + + ASSERT_EQ(Decode(0), WEBRTC_VIDEO_CODEC_OK); + + EXPECT_CALL(decoded_cb_, Run(_)); + FinishDecode(0); + media_thread_.FlushForTesting(); +} + +TEST_F(RTCVideoDecoderAdapterTest, Decode_Error) { + ASSERT_TRUE(BasicSetup()); + + EXPECT_CALL(*video_decoder_, Decode(_, _)) + .WillOnce(media::RunCallback<1>(media::DecodeStatus::DECODE_ERROR)); + + ASSERT_EQ(Decode(0), WEBRTC_VIDEO_CODEC_OK); + media_thread_.FlushForTesting(); + + ASSERT_EQ(Decode(1), WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE); +} + +TEST_F(RTCVideoDecoderAdapterTest, Decode_Hang_Short) { + ASSERT_TRUE(BasicSetup()); + + // Ignore Decode() calls. + EXPECT_CALL(*video_decoder_, Decode(_, _)).Times(AtLeast(1)); + + for (int counter = 0; counter < 10; counter++) { + int32_t result = Decode(counter); + if (result == WEBRTC_VIDEO_CODEC_ERROR) { + ASSERT_GT(counter, 2); + return; + } + media_thread_.FlushForTesting(); + } + + FAIL(); +} + +TEST_F(RTCVideoDecoderAdapterTest, Decode_Hang_Long) { + ASSERT_TRUE(BasicSetup()); + + // Ignore Decode() calls. + EXPECT_CALL(*video_decoder_, Decode(_, _)).Times(AtLeast(1)); + + for (int counter = 0; counter < 100; counter++) { + int32_t result = Decode(counter); + if (result == WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE) { + ASSERT_GT(counter, 10); + return; + } + media_thread_.FlushForTesting(); + } + + FAIL(); +} + +} // namespace content
diff --git a/content/renderer/mus/renderer_window_tree_client.cc b/content/renderer/mus/renderer_window_tree_client.cc index bfc4c8c1..516c37f6b 100644 --- a/content/renderer/mus/renderer_window_tree_client.cc +++ b/content/renderer/mus/renderer_window_tree_client.cc
@@ -371,6 +371,9 @@ void RendererWindowTreeClient::OnDragDropDone() {} +void RendererWindowTreeClient::OnTopmostWindowChanged( + const std::vector<ui::Id>& topmost_ids) {} + void RendererWindowTreeClient::OnChangeCompleted(uint32_t change_id, bool success) { // Don't DCHECK success, as it's possible we'll try to do some operations
diff --git a/content/renderer/mus/renderer_window_tree_client.h b/content/renderer/mus/renderer_window_tree_client.h index 2f7bc6ff..bbc8c14 100644 --- a/content/renderer/mus/renderer_window_tree_client.h +++ b/content/renderer/mus/renderer_window_tree_client.h
@@ -199,6 +199,7 @@ bool success, uint32_t action_taken) override; void OnDragDropDone() override; + void OnTopmostWindowChanged(const std::vector<ui::Id>& topmost_ids) override; void OnChangeCompleted(uint32_t change_id, bool success) override; void RequestClose(ui::Id window_id) override; void GetScreenProviderObserver(
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc index 9e3d77e..2330eed 100644 --- a/content/renderer/pepper/pepper_plugin_instance_impl.cc +++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc
@@ -125,6 +125,7 @@ #include "third_party/khronos/GLES2/gl2.h" #include "ui/events/blink/blink_event_util.h" #include "ui/events/blink/web_input_event.h" +#include "ui/events/keycodes/dom/dom_code.h" #include "ui/gfx/geometry/rect_conversions.h" #include "ui/gfx/image/image_skia.h" #include "ui/gfx/image/image_skia_rep.h" @@ -1548,7 +1549,8 @@ static const ui::EventFlags kPlatformModifier = ui::EF_CONTROL_DOWN; // Synthesize a ctrl + a key event to send to the plugin and let it sort out // the event. See also https://crbug.com/739529. - ui::KeyEvent char_event(L'A', ui::VKEY_A, kPlatformModifier); + ui::KeyEvent char_event(L'A', ui::VKEY_A, ui::DomCode::NONE, + kPlatformModifier); // Also synthesize a key up event to look more like a real key press. // Otherwise the plugin will not do all the required work to keep the renderer
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc index edc6d8e..cd5ff66 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc
@@ -19,7 +19,6 @@ #include "base/memory/discardable_memory_allocator.h" #include "base/memory/memory_coordinator_client_registry.h" #include "base/memory/shared_memory.h" -#include "base/message_loop/message_loop.h" #include "base/metrics/field_trial.h" #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" @@ -638,28 +637,6 @@ } // static -RenderThreadImpl* RenderThreadImpl::Create( - const InProcessChildThreadParams& params, - base::MessageLoop* unowned_message_loop) { - TRACE_EVENT0("startup", "RenderThreadImpl::Create"); - std::unique_ptr<blink::scheduler::WebThreadScheduler> main_thread_scheduler = - blink::scheduler::WebThreadScheduler::CreateMainThreadScheduler(); - scoped_refptr<base::SingleThreadTaskRunner> test_task_counter; - return new RenderThreadImpl(params, std::move(main_thread_scheduler), - test_task_counter, unowned_message_loop); -} - -// static -RenderThreadImpl* RenderThreadImpl::Create( - std::unique_ptr<base::MessageLoop> main_message_loop, - std::unique_ptr<blink::scheduler::WebThreadScheduler> - main_thread_scheduler) { - TRACE_EVENT0("startup", "RenderThreadImpl::Create"); - return new RenderThreadImpl(std::move(main_message_loop), - std::move(main_thread_scheduler)); -} - -// static RenderThreadImpl* RenderThreadImpl::current() { return lazy_tls.Pointer()->Get(); } @@ -703,62 +680,49 @@ // the browser RenderThreadImpl::RenderThreadImpl( const InProcessChildThreadParams& params, - std::unique_ptr<blink::scheduler::WebThreadScheduler> scheduler, - const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue, - base::MessageLoop* unowned_message_loop) - : ChildThreadImpl( - Options::Builder() - .InBrowserProcess(params) - .AutoStartServiceManagerConnection(false) - .ConnectToBrowser(true) - .IPCTaskRunner(scheduler ? scheduler->IPCTaskRunner() : nullptr) - .Build()), + std::unique_ptr<blink::scheduler::WebThreadScheduler> scheduler) + : ChildThreadImpl(Options::Builder() + .InBrowserProcess(params) + .AutoStartServiceManagerConnection(false) + .ConnectToBrowser(true) + .IPCTaskRunner(scheduler->IPCTaskRunner()) + .Build()), main_thread_scheduler_(std::move(scheduler)), - main_message_loop_(unowned_message_loop), categorized_worker_pool_(new CategorizedWorkerPool()), renderer_binding_(this), client_id_(1), compositing_mode_watcher_binding_(this), weak_factory_(this) { - Init(resource_task_queue); + TRACE_EVENT0("startup", "RenderThreadImpl::Create"); + Init(); } -// When we run plugins in process, we actually run them on the render thread, -// which means that we need to make the render thread pump UI events. +// Multi-process mode. RenderThreadImpl::RenderThreadImpl( - std::unique_ptr<base::MessageLoop> owned_message_loop, std::unique_ptr<blink::scheduler::WebThreadScheduler> scheduler) - : ChildThreadImpl( - Options::Builder() - .AutoStartServiceManagerConnection(false) - .ConnectToBrowser(true) - .IPCTaskRunner(scheduler ? scheduler->IPCTaskRunner() : nullptr) - .Build()), + : ChildThreadImpl(Options::Builder() + .AutoStartServiceManagerConnection(false) + .ConnectToBrowser(true) + .IPCTaskRunner(scheduler->IPCTaskRunner()) + .Build()), main_thread_scheduler_(std::move(scheduler)), - owned_message_loop_(std::move(owned_message_loop)), - main_message_loop_(owned_message_loop_.get()), categorized_worker_pool_(new CategorizedWorkerPool()), is_scroll_animator_enabled_(false), renderer_binding_(this), compositing_mode_watcher_binding_(this), weak_factory_(this) { - scoped_refptr<base::SingleThreadTaskRunner> test_task_counter; + TRACE_EVENT0("startup", "RenderThreadImpl::Create"); DCHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kRendererClientId)); base::StringToInt(base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( switches::kRendererClientId), &client_id_); - Init(test_task_counter); + Init(); } -void RenderThreadImpl::Init( - const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) { +void RenderThreadImpl::Init() { TRACE_EVENT0("startup", "RenderThreadImpl::Init"); - // Whether owned or unowned, |main_message_loop_| needs to be initialized in - // all constructors. - DCHECK(main_message_loop_); - GetContentClient()->renderer()->PostIOThreadCreated(GetIOTaskRunner().get()); base::trace_event::TraceLog::GetInstance()->SetThreadSortIndex( @@ -771,7 +735,7 @@ #endif lazy_tls.Pointer()->Set(this); - g_main_task_runner.Get() = main_message_loop_->task_runner(); + g_main_task_runner.Get() = base::ThreadTaskRunnerHandle::Get(); // Register this object as the main thread. ChildProcess::current()->set_main_thread(this); @@ -792,7 +756,7 @@ URLLoaderThrottleProviderType::kFrame); auto registry = std::make_unique<service_manager::BinderRegistry>(); - InitializeWebKit(resource_task_queue, registry.get()); + InitializeWebKit(registry.get()); // In single process the single process is all there is. webkit_shared_timer_suspended_ = false; @@ -1230,7 +1194,6 @@ } void RenderThreadImpl::InitializeWebKit( - const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue, service_manager::BinderRegistry* registry) { DCHECK(!blink_platform_impl_);
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h index f69aed6..61f528d0 100644 --- a/content/renderer/render_thread_impl.h +++ b/content/renderer/render_thread_impl.h
@@ -170,12 +170,6 @@ public viz::mojom::CompositingModeWatcher, public CompositorDependencies { public: - static RenderThreadImpl* Create(const InProcessChildThreadParams& params, - base::MessageLoop* unowned_message_loop); - static RenderThreadImpl* Create( - std::unique_ptr<base::MessageLoop> main_message_loop, - std::unique_ptr<blink::scheduler::WebThreadScheduler> - main_thread_scheduler); static RenderThreadImpl* current(); static mojom::RenderMessageFilter* current_render_message_filter(); static RendererBlinkPlatformImpl* current_blink_platform_impl(); @@ -189,6 +183,11 @@ static scoped_refptr<base::SingleThreadTaskRunner> DeprecatedGetMainTaskRunner(); + explicit RenderThreadImpl( + std::unique_ptr<blink::scheduler::WebThreadScheduler> scheduler); + RenderThreadImpl( + const InProcessChildThreadParams& params, + std::unique_ptr<blink::scheduler::WebThreadScheduler> scheduler); ~RenderThreadImpl() override; void Shutdown() override; bool ShouldBeDestroyed() override; @@ -515,16 +514,6 @@ // Sets the current pipeline rendering color space. void SetRenderingColorSpace(const gfx::ColorSpace& color_space); - protected: - RenderThreadImpl( - const InProcessChildThreadParams& params, - std::unique_ptr<blink::scheduler::WebThreadScheduler> scheduler, - const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue, - base::MessageLoop* unowned_message_loop); - RenderThreadImpl( - std::unique_ptr<base::MessageLoop> main_message_loop, - std::unique_ptr<blink::scheduler::WebThreadScheduler> scheduler); - private: void OnProcessFinalRelease() override; // IPC::Listener @@ -543,14 +532,9 @@ void RecordPurgeMemory(RendererMemoryMetrics before); - void Init( - const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue); - + void Init(); void InitializeCompositorThread(); - - void InitializeWebKit( - const scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue, - service_manager::BinderRegistry* registry); + void InitializeWebKit(service_manager::BinderRegistry* registry); void OnTransferBitmap(const SkBitmap& bitmap, int resource_id); void OnGetAccessibilityTree(); @@ -683,15 +667,6 @@ // software-based. bool is_gpu_compositing_disabled_ = false; - // The message loop of the renderer main thread. - // This message loop should be destructed before the RenderThreadImpl - // shuts down Blink. - // Some test users (e.g. InProcessRenderThread) own the MessageLoop used by - // their RenderThreadImpls. |main_message_loop_| is always non-nulll, - // |owned_message_loop_| is non-null if handed in at creation. - const std::unique_ptr<base::MessageLoop> owned_message_loop_; - base::MessageLoop* const main_message_loop_; - // May be null if overridden by ContentRendererClient. std::unique_ptr<blink::scheduler::WebThreadBase> compositor_thread_;
diff --git a/content/renderer/render_thread_impl_browsertest.cc b/content/renderer/render_thread_impl_browsertest.cc index a815b25..0ccefa81 100644 --- a/content/renderer/render_thread_impl_browsertest.cc +++ b/content/renderer/render_thread_impl_browsertest.cc
@@ -122,31 +122,6 @@ int count_; }; -#if defined(COMPILER_MSVC) -// See explanation for other RenderViewHostImpl which is the same issue. -#pragma warning(push) -#pragma warning(disable: 4250) -#endif - -class RenderThreadImplForTest : public RenderThreadImpl { - public: - RenderThreadImplForTest( - const InProcessChildThreadParams& params, - std::unique_ptr<blink::scheduler::WebThreadScheduler> scheduler, - scoped_refptr<base::SingleThreadTaskRunner>& test_task_counter, - base::MessageLoop* unowned_message_loop) - : RenderThreadImpl(params, - std::move(scheduler), - test_task_counter, - unowned_message_loop) {} - - ~RenderThreadImplForTest() override {} -}; - -#if defined(COMPILER_MSVC) -#pragma warning(pop) -#endif - class QuitOnTestMsgFilter : public IPC::MessageFilter { public: explicit QuitOnTestMsgFilter(base::OnceClosure quit_closure) @@ -256,11 +231,10 @@ base::FieldTrialList::CreateTrialsFromCommandLine( *cmd, switches::kFieldTrialHandle, -1); - thread_ = new RenderThreadImplForTest( + thread_ = new RenderThreadImpl( InProcessChildThreadParams(io_task_runner, &invitation, child_connection_->service_token()), - std::move(main_thread_scheduler), test_task_counter, - main_message_loop_.get()); + std::move(main_thread_scheduler)); cmd->InitFromArgv(old_argv); run_loop_ = std::make_unique<base::RunLoop>(); @@ -297,7 +271,11 @@ std::unique_ptr<MockRenderProcess> mock_process_; scoped_refptr<QuitOnTestMsgFilter> test_msg_filter_; - RenderThreadImplForTest* thread_; // Owned by mock_process_. + + // RenderThreadImpl doesn't currently support a proper shutdown sequence + // and it's okay when we're running in multi-process mode because renderers + // get killed by the OS. Memory leaks aren't nice but it's test-only. + RenderThreadImpl* thread_; base::FieldTrialList field_trial_list_;
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc index 89fd620..489a86f 100644 --- a/content/renderer/render_view_browsertest.cc +++ b/content/renderer/render_view_browsertest.cc
@@ -91,6 +91,7 @@ #include "ui/accessibility/ax_modes.h" #include "ui/events/base_event_utils.h" #include "ui/events/event.h" +#include "ui/events/keycodes/dom/dom_code.h" #include "ui/events/keycodes/keyboard_codes.h" #include "ui/gfx/codec/jpeg_codec.h" #include "ui/gfx/range/range.h" @@ -388,7 +389,7 @@ ui::KeyEvent char_event(keydown_event.GetCharacter(), static_cast<ui::KeyboardCode>(key_code), - flags); + ui::DomCode::NONE, flags); NativeWebKeyboardEvent char_web_event(char_event); SendNativeKeyEvent(char_web_event);
diff --git a/content/renderer/renderer_main.cc b/content/renderer/renderer_main.cc index 0b722923..ceccfe0 100644 --- a/content/renderer/renderer_main.cc +++ b/content/renderer/renderer_main.cc
@@ -182,9 +182,10 @@ } #endif - auto render_process = RenderProcessImpl::Create(); - RenderThreadImpl::Create(std::move(main_message_loop), - std::move(main_thread_scheduler)); + std::unique_ptr<RenderProcess> render_process = RenderProcessImpl::Create(); + // It's not a memory leak since RenderThread has the same lifetime + // as a renderer process. + new RenderThreadImpl(std::move(main_thread_scheduler)); if (need_sandbox) run_loop = platform.EnableSandbox();
diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc index daf3ed4..512edba 100644 --- a/content/renderer/service_worker/service_worker_context_client.cc +++ b/content/renderer/service_worker/service_worker_context_client.cc
@@ -282,40 +282,43 @@ } // Converts |response| to its equivalent type in the Blink API. -// TODO(peter): Remove this when the Mojo FetchAPIResponse type exists. -void ToWebServiceWorkerResponse(const ServiceWorkerResponse& response, +// TODO(leonhsl): Remove this when we propagate +// blink::mojom::FetchAPIResponsePtr into Blink instead of +// WebServiceWorkerResponse. +void ToWebServiceWorkerResponse(blink::mojom::FetchAPIResponse* response, blink::WebServiceWorkerResponse* web_response) { DCHECK(web_response); std::vector<blink::WebURL> url_list; - for (const GURL& url : response.url_list) + for (const GURL& url : response->url_list) url_list.push_back(blink::WebURL(url)); web_response->SetURLList(blink::WebVector<blink::WebURL>(url_list)); - web_response->SetStatus(static_cast<unsigned short>(response.status_code)); - web_response->SetStatusText(blink::WebString::FromUTF8(response.status_text)); - web_response->SetResponseType(response.response_type); - for (const auto& pair : response.headers) { + web_response->SetStatus(static_cast<unsigned short>(response->status_code)); + web_response->SetStatusText( + blink::WebString::FromUTF8(response->status_text)); + web_response->SetResponseType(response->response_type); + for (const auto& pair : response->headers) { web_response->SetHeader(blink::WebString::FromUTF8(pair.first), blink::WebString::FromUTF8(pair.second)); } - if (!response.blob_uuid.empty()) { - DCHECK(response.blob); - mojo::ScopedMessagePipeHandle blob_pipe; - if (response.blob) - blob_pipe = response.blob->Clone().PassInterface().PassHandle(); - web_response->SetBlob(blink::WebString::FromASCII(response.blob_uuid), - response.blob_size, std::move(blob_pipe)); + if (response->blob) { + DCHECK(!response->blob->uuid.empty()); + DCHECK(response->blob->blob.is_valid()); + web_response->SetBlob(blink::WebString::FromASCII(response->blob->uuid), + response->blob->size, + response->blob->blob.PassHandle()); } - web_response->SetError(response.error); - web_response->SetResponseTime(response.response_time); - if (response.is_in_cache_storage) { - web_response->SetCacheStorageCacheName( - blink::WebString::FromUTF8(response.cache_storage_cache_name)); + web_response->SetError(response->error); + web_response->SetResponseTime(response->response_time); + if (response->is_in_cache_storage) { + web_response->SetCacheStorageCacheName(blink::WebString::FromUTF8( + response->cache_storage_cache_name ? *response->cache_storage_cache_name + : "")); } std::vector<blink::WebString> cors_exposed_header_names; - for (const auto& name : response.cors_exposed_header_names) + for (const auto& name : response->cors_exposed_header_names) cors_exposed_header_names.push_back(blink::WebString::FromUTF8(name)); web_response->SetCorsExposedHeaderNames( @@ -1595,7 +1598,8 @@ fetches.size()); for (size_t i = 0; i < fetches.size(); ++i) { ToWebServiceWorkerRequest(fetches[i].request, &web_fetches[i].request); - ToWebServiceWorkerResponse(fetches[i].response, &web_fetches[i].response); + ToWebServiceWorkerResponse(fetches[i].response.get(), + &web_fetches[i].response); } proxy_->DispatchBackgroundFetchAbortEvent( @@ -1646,7 +1650,8 @@ fetches.size()); for (size_t i = 0; i < fetches.size(); ++i) { ToWebServiceWorkerRequest(fetches[i].request, &web_fetches[i].request); - ToWebServiceWorkerResponse(fetches[i].response, &web_fetches[i].response); + ToWebServiceWorkerResponse(fetches[i].response.get(), + &web_fetches[i].response); } proxy_->DispatchBackgroundFetchFailEvent( @@ -1674,7 +1679,8 @@ fetches.size()); for (size_t i = 0; i < fetches.size(); ++i) { ToWebServiceWorkerRequest(fetches[i].request, &web_fetches[i].request); - ToWebServiceWorkerResponse(fetches[i].response, &web_fetches[i].response); + ToWebServiceWorkerResponse(fetches[i].response.get(), + &web_fetches[i].response); } proxy_->DispatchBackgroundFetchedEvent( @@ -1746,6 +1752,38 @@ WebServiceWorkerImpl::CreateHandle(worker)); } +void ServiceWorkerContextClient:: + DispatchExtendableMessageEventWithCustomTimeout( + mojom::ExtendableMessageEventPtr event, + base::TimeDelta timeout, + DispatchExtendableMessageEventCallback callback) { + int request_id = context_->timeout_timer->StartEventWithCustomTimeout( + CreateAbortCallback(&context_->message_event_callbacks), timeout); + + context_->message_event_callbacks.emplace(request_id, std::move(callback)); + TRACE_EVENT1("ServiceWorker", + "ServiceWorkerContextClient::" + "DispatchExtendableMessageEventWithCustomTimeout", + "request_id", request_id); + + if (event->source_info_for_client) { + blink::WebServiceWorkerClientInfo web_client = + ToWebServiceWorkerClientInfo(std::move(event->source_info_for_client)); + proxy_->DispatchExtendableMessageEvent(request_id, + std::move(event->message), + event->source_origin, web_client); + return; + } + + DCHECK_NE(event->source_info_for_service_worker->version_id, + blink::mojom::kInvalidServiceWorkerVersionId); + scoped_refptr<WebServiceWorkerImpl> worker = GetOrCreateServiceWorkerObject( + std::move(event->source_info_for_service_worker)); + proxy_->DispatchExtendableMessageEvent( + request_id, std::move(event->message), event->source_origin, + WebServiceWorkerImpl::CreateHandle(worker)); +} + // S13nServiceWorker void ServiceWorkerContextClient::DispatchFetchEvent( blink::mojom::DispatchFetchEventParamsPtr params,
diff --git a/content/renderer/service_worker/service_worker_context_client.h b/content/renderer/service_worker/service_worker_context_client.h index 6888a37..01a7b80 100644 --- a/content/renderer/service_worker/service_worker_context_client.h +++ b/content/renderer/service_worker/service_worker_context_client.h
@@ -303,6 +303,10 @@ void DispatchExtendableMessageEvent( mojom::ExtendableMessageEventPtr event, DispatchExtendableMessageEventCallback callback) override; + void DispatchExtendableMessageEventWithCustomTimeout( + mojom::ExtendableMessageEventPtr event, + base::TimeDelta timeout, + DispatchExtendableMessageEventCallback callback) override; void DispatchFetchEvent( blink::mojom::DispatchFetchEventParamsPtr params, blink::mojom::ServiceWorkerFetchResponseCallbackPtr response_callback,
diff --git a/content/renderer/service_worker/service_worker_provider_context_unittest.cc b/content/renderer/service_worker/service_worker_provider_context_unittest.cc index 36901d77..39dad20 100644 --- a/content/renderer/service_worker/service_worker_provider_context_unittest.cc +++ b/content/renderer/service_worker/service_worker_provider_context_unittest.cc
@@ -499,9 +499,6 @@ // S13nServiceWorker: Test that SetController correctly sets (or resets) // the controller service worker for clients. TEST_F(ServiceWorkerProviderContextTest, SetControllerServiceWorker) { - // This test has temporary LOG(ERROR) logging to debug - // https://crbug.com/862294. - EnableS13nServiceWorker(); const int kProviderId = 10; @@ -515,7 +512,6 @@ mojo::MakeRequestAssociatedWithDedicatedPipe(&container_ptr); // (1) Test if setting the controller via the CTOR works. - LOG(ERROR) << "1 test ctor"; // Make the object host for .controller. auto object_host1 = @@ -552,15 +548,12 @@ base::RunLoop loop1; fake_controller1.set_fetch_callback(loop1.QuitClosure()); StartRequest(subresource_loader_factory1, kURL1); - LOG(ERROR) << "1 loop1.Run()"; loop1.Run(); - LOG(ERROR) << "1 loop1.Run() finished"; EXPECT_EQ(kURL1, fake_controller1.fetch_event_request().url); EXPECT_EQ(1, fake_controller1.fetch_event_count()); // (2) Test if resetting the controller to a new one via SetController // works. - LOG(ERROR) << "2 reset controller to new one"; // Setup the new controller. auto object_host2 = @@ -584,12 +577,8 @@ object_host1->RunOnConnectionError(drop_binding_loop.QuitClosure()); container_ptr->SetController(std::move(controller_info2), std::vector<blink::mojom::WebFeature>(), true); - LOG(ERROR) << "2 FlushForTesting()"; container_ptr.FlushForTesting(); - LOG(ERROR) << "2 FlushForTesting() finished"; - LOG(ERROR) << "2 drop_binding_loop.Run()"; drop_binding_loop.Run(); - LOG(ERROR) << "2 drop_binding_loop.Run() finished"; EXPECT_EQ(0, object_host1->GetBindingCount()); // Subresource loader factory must be available, and should be the same @@ -602,25 +591,20 @@ // The SetController() call results in another Mojo call to // ControllerServiceWorkerConnector.UpdateController(). Flush that interface // pointer to ensure the message was received. - LOG(ERROR) << "2 FlushControllerConnector()"; FlushControllerConnector(provider_context.get()); - LOG(ERROR) << "2 FlushControllerConnector() finished"; // Performing a request should reach the new controller. const GURL kURL2("https://www.example.com/foo2.png"); base::RunLoop loop2; fake_controller2.set_fetch_callback(loop2.QuitClosure()); StartRequest(subresource_loader_factory2, kURL2); - LOG(ERROR) << "2 loop2.Run()"; loop2.Run(); - LOG(ERROR) << "2 loop2.Run() finished"; EXPECT_EQ(kURL2, fake_controller2.fetch_event_request().url); EXPECT_EQ(1, fake_controller2.fetch_event_count()); // The request should not go to the previous controller. EXPECT_EQ(1, fake_controller1.fetch_event_count()); // (3) Test if resetting the controller to nullptr works. - LOG(ERROR) << "3 reset controller to null"; base::RunLoop drop_binding_loop2; object_host2->RunOnConnectionError(drop_binding_loop2.QuitClosure()); container_ptr->SetController(mojom::ControllerServiceWorkerInfo::New(), @@ -628,12 +612,8 @@ // The controller is reset. References to the old controller must be // released. - LOG(ERROR) << "3 FlushForTesting()"; container_ptr.FlushForTesting(); - LOG(ERROR) << "3 FlushForTesting() finished"; - LOG(ERROR) << "3 drop_binding_loop2.Run()"; drop_binding_loop2.Run(); - LOG(ERROR) << "3 drop_binding_loop2.Run() finished"; EXPECT_EQ(0, object_host2->GetBindingCount()); // Subresource loader factory must not be available. @@ -642,9 +622,7 @@ // The SetController() call results in another Mojo call to // ControllerServiceWorkerConnector.UpdateController(). Flush that interface // pointer to ensure the message was received. - LOG(ERROR) << "3 FlushControllerConnector()"; FlushControllerConnector(provider_context.get()); - LOG(ERROR) << "3 FlushControllerConnector() finished"; // Performing a request using the subresource factory obtained before // falls back to the network. @@ -653,9 +631,7 @@ fake_loader_factory_.set_start_loader_callback(loop3.QuitClosure()); EXPECT_EQ(0UL, fake_loader_factory_.clients_count()); StartRequest(subresource_loader_factory2, kURL3); - LOG(ERROR) << "3 loop3.Run()"; loop3.Run(); - LOG(ERROR) << "3 loop3.Run() finished"; EXPECT_EQ(kURL3, fake_loader_factory_.last_request_url()); EXPECT_EQ(1UL, fake_loader_factory_.clients_count()); @@ -665,7 +641,6 @@ // (4) Test if resetting the controller to yet another one via SetController // works. - LOG(ERROR) << "4 reset controller yet another one"; auto object_host4 = std::make_unique<MockServiceWorkerObjectHost>(202 /* version_id */); ASSERT_EQ(0, object_host4->GetBindingCount()); @@ -682,9 +657,7 @@ controller_info4->endpoint = controller_ptr4.PassInterface(); container_ptr->SetController(std::move(controller_info4), std::vector<blink::mojom::WebFeature>(), true); - LOG(ERROR) << "4 FlushForTesting()"; container_ptr.FlushForTesting(); - LOG(ERROR) << "4 FlushForTesting() finished"; // Subresource loader factory must be available. auto* subresource_loader_factory4 = @@ -694,18 +667,14 @@ // The SetController() call results in another Mojo call to // ControllerServiceWorkerConnector.UpdateController(). Flush that interface // pointer to ensure the message was received. - LOG(ERROR) << "4 FlushControllerConnector()"; FlushControllerConnector(provider_context.get()); - LOG(ERROR) << "4 FlushControllerConnector() finished"; // Performing a request should reach the new controller. const GURL kURL4("https://www.example.com/foo4.png"); base::RunLoop loop4; fake_controller4.set_fetch_callback(loop4.QuitClosure()); StartRequest(subresource_loader_factory4, kURL4); - LOG(ERROR) << "4 loop4.Run()"; loop4.Run(); - LOG(ERROR) << "4 loop4.Run() finished"; EXPECT_EQ(kURL4, fake_controller4.fetch_event_request().url); EXPECT_EQ(1, fake_controller4.fetch_event_count()); @@ -719,9 +688,7 @@ // The outcome is not deterministic but should not crash. StartRequest(subresource_loader_factory4, kURL4); fake_controller4.Disconnect(); - LOG(ERROR) << "4 RunUntilIdle() again"; base::RunLoop().RunUntilIdle(); - LOG(ERROR) << "4 RunUntilIdle() finished"; } TEST_F(ServiceWorkerProviderContextTest, ControllerWithoutFetchHandler) {
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 1e9ee94..f351bf0c 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -829,6 +829,7 @@ "../browser/renderer_host/render_widget_host_view_mac_browsertest.mm", "../browser/resource_loading_browsertest.cc", "../browser/scheduler/responsiveness/native_event_observer_browsertest.mm", + "../browser/scheduler/responsiveness/native_event_observer_browsertest_win.cc", "../browser/screen_orientation/screen_orientation_browsertest.cc", "../browser/security_exploit_browsertest.cc", "../browser/service_manager/service_manager_context_browsertest.cc", @@ -1724,6 +1725,7 @@ "../renderer/media/webrtc/rtc_rtp_sender_unittest.cc", "../renderer/media/webrtc/rtc_rtp_transceiver_unittest.cc", "../renderer/media/webrtc/rtc_stats_unittest.cc", + "../renderer/media/webrtc/rtc_video_decoder_adapter_unittest.cc", "../renderer/media/webrtc/rtc_video_decoder_unittest.cc", "../renderer/media/webrtc/rtc_video_encoder_unittest.cc", "../renderer/media/webrtc/stun_field_trial_unittest.cc",
diff --git a/content/test/data/accessibility/aria/aria-blockquote-expected-android.txt b/content/test/data/accessibility/aria/aria-blockquote-expected-android.txt new file mode 100644 index 0000000..5fe6dcd --- /dev/null +++ b/content/test/data/accessibility/aria/aria-blockquote-expected-android.txt
@@ -0,0 +1,2 @@ +android.webkit.WebView focusable focused scrollable +++android.view.View role_description='blockquote' name='Blockquote'
diff --git a/content/test/data/accessibility/aria/aria-blockquote-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-blockquote-expected-auralinux.txt new file mode 100644 index 0000000..1b90db26 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-blockquote-expected-auralinux.txt
@@ -0,0 +1,3 @@ +[document web] enabled focusable focused sensitive showing visible<newline> +++[block quote] enabled sensitive showing visible<newline> +++++[text] name='Blockquote' enabled sensitive showing visible<newline>
diff --git a/content/test/data/accessibility/aria/aria-blockquote-expected-mac.txt b/content/test/data/accessibility/aria/aria-blockquote-expected-mac.txt new file mode 100644 index 0000000..59f316a --- /dev/null +++ b/content/test/data/accessibility/aria/aria-blockquote-expected-mac.txt
@@ -0,0 +1,3 @@ +AXWebArea AXRoleDescription='HTML content' +++AXGroup AXRoleDescription='group' +++++AXStaticText AXRoleDescription='text' AXValue='Blockquote'
diff --git a/content/test/data/accessibility/aria/aria-blockquote-expected-win.txt b/content/test/data/accessibility/aria/aria-blockquote-expected-win.txt new file mode 100644 index 0000000..b536f61 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-blockquote-expected-win.txt
@@ -0,0 +1,3 @@ +ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE +++IA2_ROLE_SECTION xml-roles:blockquote +++++ROLE_SYSTEM_STATICTEXT name='Blockquote'
diff --git a/content/test/data/accessibility/aria/aria-blockquote.html b/content/test/data/accessibility/aria/aria-blockquote.html new file mode 100644 index 0000000..895bbfa --- /dev/null +++ b/content/test/data/accessibility/aria/aria-blockquote.html
@@ -0,0 +1,10 @@ +<!-- +@MAC-ALLOW:AXRole* +@WIN-ALLOW:xml-roles* +--> +<!DOCTYPE html> +<html> +<body> + <div role="blockquote">Blockquote</div> +</body> +</html>
diff --git a/content/test/data/accessibility/aria/aria-caption-expected-android.txt b/content/test/data/accessibility/aria/aria-caption-expected-android.txt new file mode 100644 index 0000000..cda70e96 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-caption-expected-android.txt
@@ -0,0 +1,2 @@ +android.webkit.WebView focusable focused scrollable +++android.view.View name='Caption'
diff --git a/content/test/data/accessibility/aria/aria-caption-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-caption-expected-auralinux.txt new file mode 100644 index 0000000..a652cae --- /dev/null +++ b/content/test/data/accessibility/aria/aria-caption-expected-auralinux.txt
@@ -0,0 +1,3 @@ +[document web] enabled focusable focused sensitive showing visible<newline> +++[caption] enabled sensitive showing visible<newline> +++++[text] name='Caption' enabled sensitive showing visible<newline>
diff --git a/content/test/data/accessibility/aria/aria-caption-expected-mac.txt b/content/test/data/accessibility/aria/aria-caption-expected-mac.txt new file mode 100644 index 0000000..d2b5ff50 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-caption-expected-mac.txt
@@ -0,0 +1,3 @@ +AXWebArea AXRoleDescription='HTML content' +++AXGroup AXRoleDescription='group' +++++AXStaticText AXRoleDescription='text' AXValue='Caption'
diff --git a/content/test/data/accessibility/aria/aria-caption-expected-win.txt b/content/test/data/accessibility/aria/aria-caption-expected-win.txt new file mode 100644 index 0000000..9eedb67 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-caption-expected-win.txt
@@ -0,0 +1,3 @@ +ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE +++IA2_ROLE_CAPTION xml-roles:caption +++++ROLE_SYSTEM_STATICTEXT name='Caption'
diff --git a/content/test/data/accessibility/aria/aria-caption.html b/content/test/data/accessibility/aria/aria-caption.html new file mode 100644 index 0000000..c353764 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-caption.html
@@ -0,0 +1,10 @@ +<!-- +@MAC-ALLOW:AXRole* +@WIN-ALLOW:xml-roles* +--> +<!DOCTYPE html> +<html> +<body> + <div role="caption">Caption</div> +</body> +</html>
diff --git a/content/test/data/accessibility/aria/aria-paragraph-expected-android.txt b/content/test/data/accessibility/aria/aria-paragraph-expected-android.txt new file mode 100644 index 0000000..24f093e9 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-paragraph-expected-android.txt
@@ -0,0 +1,2 @@ +android.webkit.WebView focusable focused scrollable +++android.view.View name='Paragraph'
diff --git a/content/test/data/accessibility/aria/aria-paragraph-expected-auralinux.txt b/content/test/data/accessibility/aria/aria-paragraph-expected-auralinux.txt new file mode 100644 index 0000000..b1fe1873 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-paragraph-expected-auralinux.txt
@@ -0,0 +1,3 @@ +[document web] enabled focusable focused sensitive showing visible<newline> +++[paragraph] enabled sensitive showing visible<newline> +++++[text] name='Paragraph' enabled sensitive showing visible<newline>
diff --git a/content/test/data/accessibility/aria/aria-paragraph-expected-mac.txt b/content/test/data/accessibility/aria/aria-paragraph-expected-mac.txt new file mode 100644 index 0000000..dfad0fd0 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-paragraph-expected-mac.txt
@@ -0,0 +1,3 @@ +AXWebArea AXRoleDescription='HTML content' +++AXGroup AXRoleDescription='group' +++++AXStaticText AXRoleDescription='text' AXValue='Paragraph'
diff --git a/content/test/data/accessibility/aria/aria-paragraph-expected-win.txt b/content/test/data/accessibility/aria/aria-paragraph-expected-win.txt new file mode 100644 index 0000000..1a05d1e --- /dev/null +++ b/content/test/data/accessibility/aria/aria-paragraph-expected-win.txt
@@ -0,0 +1,3 @@ +ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE +++IA2_ROLE_PARAGRAPH xml-roles:paragraph +++++ROLE_SYSTEM_STATICTEXT name='Paragraph'
diff --git a/content/test/data/accessibility/aria/aria-paragraph.html b/content/test/data/accessibility/aria/aria-paragraph.html new file mode 100644 index 0000000..ca5a12b --- /dev/null +++ b/content/test/data/accessibility/aria/aria-paragraph.html
@@ -0,0 +1,10 @@ +<!-- +@MAC-ALLOW:AXRole* +@WIN-ALLOW:xml-roles* +--> +<!DOCTYPE html> +<html> +<body> + <div role="paragraph">Paragraph</div> +</body> +</html>
diff --git a/content/test/data/accessibility/html/blockquote-expected-auralinux.txt b/content/test/data/accessibility/html/blockquote-expected-auralinux.txt new file mode 100644 index 0000000..2b0a264 --- /dev/null +++ b/content/test/data/accessibility/html/blockquote-expected-auralinux.txt
@@ -0,0 +1,6 @@ +[document web] enabled focusable focused sensitive showing visible<newline> +++[block quote] enabled sensitive showing visible<newline> +++++[paragraph] enabled sensitive showing visible<newline> +++++++[text] name='First blockquote has a child element.' enabled sensitive showing visible<newline> +++[block quote] enabled sensitive showing visible<newline> +++++[text] name='Second blockquote has no child.' enabled sensitive showing visible<newline>
diff --git a/content/test/data/accessibility/html/caption-expected-auralinux.txt b/content/test/data/accessibility/html/caption-expected-auralinux.txt new file mode 100644 index 0000000..7f46e58 --- /dev/null +++ b/content/test/data/accessibility/html/caption-expected-auralinux.txt
@@ -0,0 +1,19 @@ +[document web] enabled focusable focused sensitive showing visible<newline> +++[table] name='Browser and Engine' enabled sensitive showing visible<newline> +++++[caption] enabled sensitive showing visible<newline> +++++++[text] name='Browser and Engine' enabled sensitive showing visible<newline> +++++[table row] enabled sensitive showing visible<newline> +++++++[column header] name='Browser' enabled sensitive showing visible<newline> +++++++++[text] name='Browser' enabled sensitive showing visible<newline> +++++++[column header] name='Engine' enabled sensitive showing visible<newline> +++++++++[text] name='Engine' enabled sensitive showing visible<newline> +++++[table row] enabled sensitive showing visible<newline> +++++++[table cell] name='Chrome' enabled sensitive showing visible<newline> +++++++++[text] name='Chrome' enabled sensitive showing visible<newline> +++++++[table cell] name='Blink' enabled sensitive showing visible<newline> +++++++++[text] name='Blink' enabled sensitive showing visible<newline> +++++[table row] enabled sensitive showing visible<newline> +++++++[table cell] name='Safari' enabled sensitive showing visible<newline> +++++++++[text] name='Safari' enabled sensitive showing visible<newline> +++++++[table cell] name='WebKit' enabled sensitive showing visible<newline> +++++++++[text] name='WebKit' enabled sensitive showing visible<newline>
diff --git a/content/test/data/accessibility/html/p-expected-auralinux.txt b/content/test/data/accessibility/html/p-expected-auralinux.txt new file mode 100644 index 0000000..86b022b --- /dev/null +++ b/content/test/data/accessibility/html/p-expected-auralinux.txt
@@ -0,0 +1,6 @@ +[document web] enabled focusable focused sensitive showing visible<newline> +++[text] name='Before' enabled sensitive showing visible<newline> +++[paragraph] enabled sensitive showing visible<newline> +++++[text] name='Paragraph' enabled sensitive showing visible<newline> +++[text] name='After' enabled sensitive showing visible<newline> +
diff --git a/content/test/gpu/gpu_tests/pixel_expectations.py b/content/test/gpu/gpu_tests/pixel_expectations.py index fdbfdcf8..465c2a4 100644 --- a/content/test/gpu/gpu_tests/pixel_expectations.py +++ b/content/test/gpu/gpu_tests/pixel_expectations.py
@@ -55,8 +55,9 @@ self.Fail('Pixel_CSSFilterEffects', ['mac', ('nvidia', 0xfe9)], bug=690277) - # Became flaky on 10.13.6. - self.Flaky('Pixel_CSSFilterEffects', ['highsierra', 'amd'], bug=872423) + # Became flaky on 10.13.6. When it flakes, it flakes 3 times, so + # mark failing, unfortunately. + self.Fail('Pixel_CSSFilterEffects', ['highsierra', 'amd'], bug=872423) # TODO(kbr): flakily timing out on this configuration. self.Flaky('*', ['linux', 'intel', 'debug'], bug=648369)
diff --git a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py index 5146b36..24b66c92 100644 --- a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py +++ b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
@@ -649,12 +649,16 @@ # self.Fail('conformance2/rendering/texture-switch-performance.html', # ['mac', 'amd'], bug=735483) - # The following two flaky failures are regressions in 10.13.6 + # The following failure is a regression in the Mac AMD OpenGL + # driver on 10.13.6 specifically. Unfortunately when the test + # fails, it fails three times in a row, so we must mark it failing + # rather than flaky. + self.Fail('conformance2/textures/misc/tex-mipmap-levels.html', + ['highsierra', 'amd'], bug=870856) + # The following flaky failure is also a regression on 10.13.6 # specifically. - self.Flaky('conformance2/textures/misc/tex-mipmap-levels.html', - ['mac', 'amd'], bug=870856) self.Flaky('conformance2/textures/misc/tex-base-level-bug.html', - ['mac', 'amd'], bug=870856) + ['highsierra', 'amd'], bug=870856) self.Fail('deqp/functional/gles3/shaderoperator/common_functions.html', ['mac', 'amd'], bug=820225) self.Fail('deqp/functional/gles3/transformfeedback/' +
diff --git a/dbus/end_to_end_async_unittest.cc b/dbus/end_to_end_async_unittest.cc index 73e11c4..11faf80 100644 --- a/dbus/end_to_end_async_unittest.cc +++ b/dbus/end_to_end_async_unittest.cc
@@ -55,7 +55,7 @@ options.dbus_task_runner = dbus_thread_->task_runner(); test_service_.reset(new TestService(options)); ASSERT_TRUE(test_service_->StartService()); - ASSERT_TRUE(test_service_->WaitUntilServiceIsStarted()); + test_service_->WaitUntilServiceIsStarted(); ASSERT_TRUE(test_service_->HasDBusThread()); // Create the client, using the D-Bus thread.
diff --git a/dbus/end_to_end_sync_unittest.cc b/dbus/end_to_end_sync_unittest.cc index 0bc146f..84c0d7e 100644 --- a/dbus/end_to_end_sync_unittest.cc +++ b/dbus/end_to_end_sync_unittest.cc
@@ -26,7 +26,7 @@ TestService::Options options; test_service_.reset(new TestService(options)); ASSERT_TRUE(test_service_->StartService()); - ASSERT_TRUE(test_service_->WaitUntilServiceIsStarted()); + test_service_->WaitUntilServiceIsStarted(); ASSERT_FALSE(test_service_->HasDBusThread()); // Create the client.
diff --git a/dbus/object_manager_unittest.cc b/dbus/object_manager_unittest.cc index 0fb74ad..b69ac78 100644 --- a/dbus/object_manager_unittest.cc +++ b/dbus/object_manager_unittest.cc
@@ -76,7 +76,7 @@ options.dbus_task_runner = dbus_thread_->task_runner(); test_service_.reset(new TestService(options)); ASSERT_TRUE(test_service_->StartService()); - ASSERT_TRUE(test_service_->WaitUntilServiceIsStarted()); + test_service_->WaitUntilServiceIsStarted(); ASSERT_TRUE(test_service_->HasDBusThread()); // Create the client, using the D-Bus thread.
diff --git a/dbus/object_proxy_unittest.cc b/dbus/object_proxy_unittest.cc index 1f5746f..904e0d76 100644 --- a/dbus/object_proxy_unittest.cc +++ b/dbus/object_proxy_unittest.cc
@@ -68,7 +68,7 @@ // Start the service. The callback should be called asynchronously. ASSERT_TRUE(test_service.StartService()); - ASSERT_TRUE(test_service.WaitUntilServiceIsStarted()); + test_service.WaitUntilServiceIsStarted(); ASSERT_TRUE(test_service.has_ownership()); num_calls = 0; base::RunLoop().RunUntilIdle(); @@ -96,7 +96,7 @@ test_service.service_name(), ObjectPath("/org/chromium/TestObject")); ASSERT_TRUE(test_service.StartService()); - ASSERT_TRUE(test_service.WaitUntilServiceIsStarted()); + test_service.WaitUntilServiceIsStarted(); ASSERT_TRUE(test_service.has_ownership()); // Since the service is already running, the callback should be invoked @@ -132,7 +132,7 @@ // Start the service and confirm that both callbacks are invoked. ASSERT_TRUE(test_service.StartService()); - ASSERT_TRUE(test_service.WaitUntilServiceIsStarted()); + test_service.WaitUntilServiceIsStarted(); ASSERT_TRUE(test_service.has_ownership()); num_calls_1 = 0; num_calls_2 = 0;
diff --git a/dbus/property_unittest.cc b/dbus/property_unittest.cc index 5b26edd..2368fa0 100644 --- a/dbus/property_unittest.cc +++ b/dbus/property_unittest.cc
@@ -68,7 +68,7 @@ options.dbus_task_runner = dbus_thread_->task_runner(); test_service_.reset(new TestService(options)); ASSERT_TRUE(test_service_->StartService()); - ASSERT_TRUE(test_service_->WaitUntilServiceIsStarted()); + test_service_->WaitUntilServiceIsStarted(); ASSERT_TRUE(test_service_->HasDBusThread()); // Create the client, using the D-Bus thread.
diff --git a/dbus/signal_sender_verification_unittest.cc b/dbus/signal_sender_verification_unittest.cc index 3cc22f9..adf3994 100644 --- a/dbus/signal_sender_verification_unittest.cc +++ b/dbus/signal_sender_verification_unittest.cc
@@ -75,7 +75,7 @@ // Start the test service. ASSERT_TRUE(test_service_->StartService()); - ASSERT_TRUE(test_service_->WaitUntilServiceIsStarted()); + test_service_->WaitUntilServiceIsStarted(); ASSERT_TRUE(test_service_->HasDBusThread()); ASSERT_TRUE(test_service_->has_ownership()); @@ -84,7 +84,7 @@ options.service_name = test_service_->service_name(); test_service2_.reset(new TestService(options)); ASSERT_TRUE(test_service2_->StartService()); - ASSERT_TRUE(test_service2_->WaitUntilServiceIsStarted()); + test_service2_->WaitUntilServiceIsStarted(); ASSERT_TRUE(test_service2_->HasDBusThread()); ASSERT_FALSE(test_service2_->has_ownership()); @@ -275,7 +275,7 @@ options.service_name = test_service_->service_name(); TestService stealable_test_service(options); ASSERT_TRUE(stealable_test_service.StartService()); - ASSERT_TRUE(stealable_test_service.WaitUntilServiceIsStarted()); + stealable_test_service.WaitUntilServiceIsStarted(); ASSERT_TRUE(stealable_test_service.HasDBusThread()); ASSERT_TRUE(stealable_test_service.has_ownership());
diff --git a/dbus/test_server.cc b/dbus/test_server.cc index d8cb0d5..a20cf56 100644 --- a/dbus/test_server.cc +++ b/dbus/test_server.cc
@@ -23,6 +23,6 @@ options.dbus_task_runner = dbus_thread.task_runner(); dbus::TestService* test_service = new dbus::TestService(options); CHECK(test_service->StartService()); - CHECK(test_service->WaitUntilServiceIsStarted()); + test_service->WaitUntilServiceIsStarted(); CHECK(test_service->HasDBusThread()); }
diff --git a/dbus/test_service.cc b/dbus/test_service.cc index e4a236c6..06f8b9a 100644 --- a/dbus/test_service.cc +++ b/dbus/test_service.cc
@@ -63,10 +63,9 @@ return StartWithOptions(thread_options); } -bool TestService::WaitUntilServiceIsStarted() { - const base::TimeDelta timeout(TestTimeouts::action_max_timeout()); +void TestService::WaitUntilServiceIsStarted() { // Wait until the ownership of the service name is obtained. - return on_name_obtained_.TimedWait(timeout); + on_name_obtained_.Wait(); } void TestService::ShutdownAndBlock() {
diff --git a/dbus/test_service.h b/dbus/test_service.h index b151b9b..b77b665 100644 --- a/dbus/test_service.h +++ b/dbus/test_service.h
@@ -56,8 +56,7 @@ bool StartService(); // Waits until the service is started (i.e. all methods are exported). - // Returns true on success. - bool WaitUntilServiceIsStarted() WARN_UNUSED_RESULT; + void WaitUntilServiceIsStarted(); // Shuts down the service and blocks until it's done. void ShutdownAndBlock();
diff --git a/device/fido/BUILD.gn b/device/fido/BUILD.gn index 1fee10f..cc4989d4 100644 --- a/device/fido/BUILD.gn +++ b/device/fido/BUILD.gn
@@ -280,4 +280,15 @@ "hid/fake_hid_impl_for_testing.h", ] } + + if (is_mac) { + sources += [ + "mac/fake_keychain.h", + "mac/fake_keychain.mm", + "mac/fake_touch_id_context.h", + "mac/fake_touch_id_context.mm", + "mac/scoped_touch_id_test_environment.h", + "mac/scoped_touch_id_test_environment.mm", + ] + } }
diff --git a/device/fido/mac/authenticator.mm b/device/fido/mac/authenticator.mm index 6a65d51..11d3757 100644 --- a/device/fido/mac/authenticator.mm +++ b/device/fido/mac/authenticator.mm
@@ -28,10 +28,7 @@ bool TouchIdAuthenticator::IsAvailable() { if (base::FeatureList::IsEnabled(device::kWebAuthTouchId)) { if (__builtin_available(macOS 10.12.2, *)) { - base::scoped_nsobject<LAContext> context([[LAContext alloc] init]); - return [context - canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics - error:nil]; + return TouchIdContext::TouchIdAvailable(); } } return false;
diff --git a/device/fido/mac/fake_keychain.h b/device/fido/mac/fake_keychain.h new file mode 100644 index 0000000..97f275aa --- /dev/null +++ b/device/fido/mac/fake_keychain.h
@@ -0,0 +1,57 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef DEVICE_FIDO_MAC_FAKE_KEYCHAIN_H_ +#define DEVICE_FIDO_MAC_FAKE_KEYCHAIN_H_ + +#include <string> +#include <vector> + +#include "base/mac/scoped_cftyperef.h" +#include "base/macros.h" +#include "device/fido/mac/keychain.h" + +namespace device { +namespace fido { +namespace mac { + +class API_AVAILABLE(macos(10.12.2)) FakeKeychain : public Keychain { + public: + struct Item { + Item(); + Item(Item&&); + Item& operator=(Item&&); + ~Item(); + + std::string label; + std::string application_label; + std::string application_tag; + base::ScopedCFTypeRef<SecKeyRef> private_key; + + private: + DISALLOW_COPY_AND_ASSIGN(Item); + }; + + FakeKeychain(); + ~FakeKeychain() override; + + protected: + // Keychain: + base::ScopedCFTypeRef<SecKeyRef> KeyCreateRandomKey( + CFDictionaryRef params, + CFErrorRef* error) override; + OSStatus ItemCopyMatching(CFDictionaryRef query, CFTypeRef* result) override; + OSStatus ItemDelete(CFDictionaryRef query) override; + + private: + std::vector<Item> items_; + + DISALLOW_COPY_AND_ASSIGN(FakeKeychain); +}; + +} // namespace mac +} // namespace fido +} // namespace device + +#endif // DEVICE_FIDO_MAC_FAKE_KEYCHAIN_H_
diff --git a/device/fido/mac/fake_keychain.mm b/device/fido/mac/fake_keychain.mm new file mode 100644 index 0000000..1230468 --- /dev/null +++ b/device/fido/mac/fake_keychain.mm
@@ -0,0 +1,46 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import <Security/Security.h> + +#include "device/fido/mac/fake_keychain.h" + +#include "device/fido/mac/keychain.h" + +namespace device { +namespace fido { +namespace mac { + +FakeKeychain::FakeKeychain() = default; +FakeKeychain::~FakeKeychain() = default; + +FakeKeychain::Item::Item() = default; +FakeKeychain::Item::Item(Item&&) = default; +FakeKeychain::Item& FakeKeychain::Item::operator=(Item&&) = default; +FakeKeychain::Item::~Item() = default; + +base::ScopedCFTypeRef<SecKeyRef> FakeKeychain::KeyCreateRandomKey( + CFDictionaryRef parameters, + CFErrorRef* error) { + // TODO(martinkr): Implement. + NOTREACHED(); + return base::ScopedCFTypeRef<SecKeyRef>(); +} + +OSStatus FakeKeychain::ItemCopyMatching(CFDictionaryRef query, + CFTypeRef* result) { + // TODO(martinkr): Implement. + NOTREACHED(); + return errSecItemNotFound; +} + +OSStatus FakeKeychain::ItemDelete(CFDictionaryRef query) { + // TODO(martinkr): Implement. + NOTREACHED(); + return errSecItemNotFound; +} + +} // namespace mac +} // namespace fido +} // namespace device
diff --git a/device/fido/mac/fake_touch_id_context.h b/device/fido/mac/fake_touch_id_context.h new file mode 100644 index 0000000..97c59171 --- /dev/null +++ b/device/fido/mac/fake_touch_id_context.h
@@ -0,0 +1,42 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef DEVICE_FIDO_MAC_FAKE_TOUCH_ID_CONTEXT_H_ +#define DEVICE_FIDO_MAC_FAKE_TOUCH_ID_CONTEXT_H_ + +#include "base/component_export.h" +#include "base/macros.h" +#include "device/fido/mac/touch_id_context.h" + +namespace device { +namespace fido { +namespace mac { + +class API_AVAILABLE(macosx(10.12.2)) FakeTouchIdContext + : public TouchIdContext { + public: + ~FakeTouchIdContext() override; + + // TouchIdContext: + void PromptTouchId(std::string reason, Callback callback) override; + + void set_callback_result(bool callback_result) { + callback_result_ = callback_result; + } + + private: + friend class ScopedTouchIdTestEnvironment; + + FakeTouchIdContext(); + + bool callback_result_ = true; + + DISALLOW_COPY_AND_ASSIGN(FakeTouchIdContext); +}; + +} // namespace mac +} // namespace fido +} // namespace device + +#endif // DEVICE_FIDO_MAC_FAKE_TOUCH_ID_CONTEXT_H_
diff --git a/device/fido/mac/fake_touch_id_context.mm b/device/fido/mac/fake_touch_id_context.mm new file mode 100644 index 0000000..a858ef4 --- /dev/null +++ b/device/fido/mac/fake_touch_id_context.mm
@@ -0,0 +1,23 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "device/fido/mac/fake_touch_id_context.h" + +#include "base/bind.h" +#include "base/memory/ptr_util.h" + +namespace device { +namespace fido { +namespace mac { + +FakeTouchIdContext::FakeTouchIdContext() = default; +FakeTouchIdContext::~FakeTouchIdContext() = default; + +void FakeTouchIdContext::PromptTouchId(std::string reason, Callback callback) { + std::move(callback).Run(callback_result_); +} + +} // namespace mac +} // namespace fido +} // namespace device
diff --git a/device/fido/mac/get_assertion_operation.h b/device/fido/mac/get_assertion_operation.h index 3146c8f..4ade5c6 100644 --- a/device/fido/mac/get_assertion_operation.h +++ b/device/fido/mac/get_assertion_operation.h
@@ -10,6 +10,7 @@ #include "base/macros.h" #include "device/fido/authenticator_get_assertion_response.h" #include "device/fido/ctap_get_assertion_request.h" +#include "device/fido/mac/keychain.h" #include "device/fido/mac/operation_base.h" namespace device { @@ -42,6 +43,8 @@ const std::string& RpId() const override; void PromptTouchIdDone(bool success) override; + base::Optional<Credential> credential_; + DISALLOW_COPY_AND_ASSIGN(GetAssertionOperation); };
diff --git a/device/fido/mac/get_assertion_operation.mm b/device/fido/mac/get_assertion_operation.mm index 4f1bec16..5085e07 100644 --- a/device/fido/mac/get_assertion_operation.mm +++ b/device/fido/mac/get_assertion_operation.mm
@@ -47,20 +47,8 @@ return; } - // Prompt the user for consent. - // TODO(martinkr): Localize reason strings. - PromptTouchId("sign in to " + RpId()); -} - -void GetAssertionOperation::PromptTouchIdDone(bool success) { - if (!success) { - std::move(callback()) - .Run(CtapDeviceResponseCode::kCtap2ErrOperationDenied, base::nullopt); - return; - } - // Collect the credential ids from allowList. If allowList is absent, we will - // just pick the first available credential for the RP below. + // pick the first available credential for the RP. std::set<std::vector<uint8_t>> allowed_credential_ids; if (request().allow_list()) { for (const PublicKeyCredentialDescriptor& desc : *request().allow_list()) { @@ -72,64 +60,37 @@ } // Fetch credentials for RP from the request and current user profile. - ScopedCFTypeRef<CFArrayRef> keychain_items; - base::ScopedCFTypeRef<CFMutableDictionaryRef> query = DefaultKeychainQuery(); - CFDictionarySetValue(query, kSecUseAuthenticationContext, - authentication_context()); - CFDictionarySetValue(query, kSecReturnRef, @YES); - CFDictionarySetValue(query, kSecReturnAttributes, @YES); - CFDictionarySetValue(query, kSecMatchLimit, kSecMatchLimitAll); + credential_ = FindCredentialInKeychain( + keychain_access_group(), metadata_secret(), RpId(), + allowed_credential_ids, authentication_context()); + if (!credential_) { + // For now, don't show a Touch ID prompt if no credential exists. + // TODO(martinkr): Prompt for the fingerprint anyway, once dispatch to this + // authenticator is moved behind user interaction with the authenticator + // selection UI. + std::move(callback()) + .Run(CtapDeviceResponseCode::kCtap2ErrNoCredentials, base::nullopt); + return; + } - OSStatus status = Keychain::GetInstance().ItemCopyMatching( - query, reinterpret_cast<CFTypeRef*>(keychain_items.InitializeInto())); - if (status == errSecItemNotFound) { - DVLOG(1) << "no credentials found for RP"; + // Prompt the user for consent. + // TODO(martinkr): Localize reason strings. + PromptTouchId("sign in to " + RpId()); +} + +void GetAssertionOperation::PromptTouchIdDone(bool success) { + DCHECK(credential_); + + if (!success) { std::move(callback()) - .Run(CtapDeviceResponseCode::kCtap2ErrNoCredentials, base::nullopt); - return; - } - if (status != errSecSuccess) { - OSSTATUS_DLOG(ERROR, status) << "SecItemCopyMatching failed"; - std::move(callback()) - .Run(CtapDeviceResponseCode::kCtap2ErrOther, base::nullopt); - return; - } - SecKeyRef private_key = nil; // Owned by |keychain_items|. - std::vector<uint8_t> credential_id; - for (CFIndex i = 0; i < CFArrayGetCount(keychain_items); ++i) { - CFDictionaryRef attributes = base::mac::CFCast<CFDictionaryRef>( - CFArrayGetValueAtIndex(keychain_items, i)); - CFDataRef application_label = base::mac::GetValueFromDictionary<CFDataRef>( - attributes, kSecAttrApplicationLabel); - SecKeyRef key = - base::mac::GetValueFromDictionary<SecKeyRef>(attributes, kSecValueRef); - if (!application_label || !key) { - // Corrupted keychain? - DLOG(ERROR) << "could not find application label or key ref: " - << attributes; - continue; - } - std::vector<uint8_t> cid(CFDataGetBytePtr(application_label), - CFDataGetBytePtr(application_label) + - CFDataGetLength(application_label)); - if (allowed_credential_ids.empty() || - allowed_credential_ids.find(cid) != allowed_credential_ids.end()) { - private_key = key; - credential_id = std::move(cid); - break; - } - } - if (!private_key) { - DVLOG(1) << "no allowed credential found"; - std::move(callback()) - .Run(CtapDeviceResponseCode::kCtap2ErrNoCredentials, base::nullopt); + .Run(CtapDeviceResponseCode::kCtap2ErrOperationDenied, base::nullopt); return; } // Decrypt the user entity from the credential ID. base::Optional<CredentialMetadata::UserEntity> credential_user = CredentialMetadata::UnsealCredentialId(metadata_secret(), RpId(), - credential_id); + credential_->credential_id); if (!credential_user) { // The keychain query already filtered for the RP ID encoded under this // operation's metadata secret, so the credential id really should have @@ -141,25 +102,27 @@ } base::ScopedCFTypeRef<SecKeyRef> public_key( - Keychain::GetInstance().KeyCopyPublicKey(private_key)); + Keychain::GetInstance().KeyCopyPublicKey(credential_->private_key)); if (!public_key) { DLOG(ERROR) << "failed to get public key for credential id " - << base::HexEncode(credential_id.data(), credential_id.size()); + << base::HexEncode(credential_->credential_id.data(), + credential_->credential_id.size()); std::move(callback()) .Run(CtapDeviceResponseCode::kCtap2ErrOther, base::nullopt); return; } base::Optional<AuthenticatorData> authenticator_data = MakeAuthenticatorData( - RpId(), credential_id, SecKeyRefToECPublicKey(public_key)); + RpId(), credential_->credential_id, SecKeyRefToECPublicKey(public_key)); if (!authenticator_data) { DLOG(ERROR) << "MakeAuthenticatorData failed"; std::move(callback()) .Run(CtapDeviceResponseCode::kCtap2ErrOther, base::nullopt); return; } - base::Optional<std::vector<uint8_t>> signature = GenerateSignature( - *authenticator_data, request().client_data_hash(), private_key); + base::Optional<std::vector<uint8_t>> signature = + GenerateSignature(*authenticator_data, request().client_data_hash(), + credential_->private_key); if (!signature) { DLOG(ERROR) << "GenerateSignature failed"; std::move(callback()) @@ -169,7 +132,7 @@ auto response = AuthenticatorGetAssertionResponse( std::move(*authenticator_data), std::move(*signature)); response.SetCredential(PublicKeyCredentialDescriptor( - CredentialType::kPublicKey, std::move(credential_id))); + CredentialType::kPublicKey, std::move(credential_->credential_id))); response.SetUserEntity(credential_user->ToPublicKeyCredentialUserEntity()); std::move(callback())
diff --git a/device/fido/mac/keychain.h b/device/fido/mac/keychain.h index 8772cea8..d4e7558 100644 --- a/device/fido/mac/keychain.h +++ b/device/fido/mac/keychain.h
@@ -5,13 +5,20 @@ #ifndef DEVICE_FIDO_MAC_KEYCHAIN_H_ #define DEVICE_FIDO_MAC_KEYCHAIN_H_ +#include <stdint.h> +#include <set> +#include <string> +#include <vector> + #import <Foundation/Foundation.h> +#import <LocalAuthentication/LocalAuthentication.h> #import <Security/Security.h> #include "base/component_export.h" #include "base/mac/scoped_cftyperef.h" #include "base/macros.h" #include "base/no_destructor.h" +#include "base/optional.h" namespace device { namespace fido { @@ -25,37 +32,86 @@ // keychain-access-group entitlements, and therefore requires code signing with // a real Apple developer ID. We therefore group these function here, so they // can be mocked out in testing. -class COMPONENT_EXPORT(DEVICE_FIDO) API_AVAILABLE(macosx(10.12.2)) Keychain { +class COMPONENT_EXPORT(DEVICE_FIDO) API_AVAILABLE(macos(10.12.2)) Keychain { public: - static const Keychain& GetInstance(); + static Keychain& GetInstance(); // KeyCreateRandomKey wraps the |SecKeyCreateRandomKey| function. virtual base::ScopedCFTypeRef<SecKeyRef> KeyCreateRandomKey( CFDictionaryRef params, - CFErrorRef* error) const; + CFErrorRef* error); // KeyCreateSignature wraps the |SecKeyCreateSignature| function. virtual base::ScopedCFTypeRef<CFDataRef> KeyCreateSignature( SecKeyRef key, SecKeyAlgorithm algorithm, CFDataRef data, - CFErrorRef* error) const; + CFErrorRef* error); // KeyCopyPublicKey wraps the |SecKeyCopyPublicKey| function. - virtual base::ScopedCFTypeRef<SecKeyRef> KeyCopyPublicKey( - SecKeyRef key) const; + virtual base::ScopedCFTypeRef<SecKeyRef> KeyCopyPublicKey(SecKeyRef key); // ItemCopyMatching wraps the |SecItemCopyMatching| function. - virtual OSStatus ItemCopyMatching(CFDictionaryRef query, - CFTypeRef* result) const; + virtual OSStatus ItemCopyMatching(CFDictionaryRef query, CFTypeRef* result); // ItemDelete wraps the |SecItemDelete| function. - virtual OSStatus ItemDelete(CFDictionaryRef query) const; + virtual OSStatus ItemDelete(CFDictionaryRef query); + + protected: + Keychain(); + virtual ~Keychain(); private: friend class base::NoDestructor<Keychain>; - Keychain(); + friend class ScopedTouchIdTestEnvironment; + + // Set an override to the singleton instance returned by |GetInstance|. The + // caller keeps ownership of the injected keychain and must remove the + // override by calling |ClearInstanceOverride| before deleting it. + static void SetInstanceOverride(Keychain* keychain); + static void ClearInstanceOverride(); DISALLOW_COPY_AND_ASSIGN(Keychain); }; +// Credential represents a WebAuthn credential from the keychain. +struct COMPONENT_EXPORT(FIDO) Credential { + Credential(base::ScopedCFTypeRef<SecKeyRef> private_key, + std::vector<uint8_t> credential_id); + ~Credential(); + Credential(Credential&& other); + Credential& operator=(Credential&& other); + + // An opaque reference to the private key that can be used for signing. + base::ScopedCFTypeRef<SecKeyRef> private_key; + + // The credential ID is a handle to the key that gets passed to the RP. This + // ID is opaque to the RP, but is obtained by encrypting the credential + // metadata with a profile-specific metadata secret. See |CredentialMetadata| + // for more information. + std::vector<uint8_t> credential_id; + + private: + DISALLOW_COPY_AND_ASSIGN(Credential); +}; + +// Tries to find a credential for the given |rp_id| in the keychain. +// |credential_id_filter| may be used to select credentials by ID. If it is +// empty, any credential for the RP matches. If multiple credentials are found, +// only one is returned. +// +// An LAContext that has been successfully evaluated using |TouchIdContext| may +// be passed in |authenticaton_context|, in order to authorize the credential's +// private key for signing. The authentication may also be null if the caller +// only wants to check for existence of a key, but does not intend to create a +// signature from it. (I.e., the credential's SecKeyRef should not be passed to +// |KeyCreateSignature| if no authentication context was provided, since that +// would trigger a Touch ID prompt dialog). +COMPONENT_EXPORT(FIDO) +base::Optional<Credential> FindCredentialInKeychain( + const std::string& keychain_access_group, + const std::string& metadata_secret, + const std::string& rp_id, + const std::set<std::vector<uint8_t>>& credential_id_filter, + LAContext* authentication_context) API_AVAILABLE(macosx(10.12.2)); + } // namespace mac } // namespace fido } // namespace device
diff --git a/device/fido/mac/keychain.mm b/device/fido/mac/keychain.mm index 692b7c8..33f542b 100644 --- a/device/fido/mac/keychain.mm +++ b/device/fido/mac/keychain.mm
@@ -4,21 +4,47 @@ #include "device/fido/mac/keychain.h" +#import <Foundation/Foundation.h> + +#include "base/mac/foundation_util.h" +#include "base/mac/mac_logging.h" +#include "base/strings/sys_string_conversions.h" +#include "device/fido/mac/credential_metadata.h" + namespace device { namespace fido { namespace mac { +static API_AVAILABLE(macos(10.12.2)) Keychain* g_keychain_instance_override = + nullptr; + // static -const Keychain& Keychain::GetInstance() { - static const base::NoDestructor<Keychain> k; +Keychain& Keychain::GetInstance() { + if (g_keychain_instance_override) { + return *g_keychain_instance_override; + } + static base::NoDestructor<Keychain> k; return *k; } +// static +void Keychain::SetInstanceOverride(Keychain* keychain) { + CHECK(!g_keychain_instance_override); + g_keychain_instance_override = keychain; +} + +// static +void Keychain::ClearInstanceOverride() { + CHECK(g_keychain_instance_override); + g_keychain_instance_override = nullptr; +} + Keychain::Keychain() = default; +Keychain::~Keychain() = default; base::ScopedCFTypeRef<SecKeyRef> Keychain::KeyCreateRandomKey( CFDictionaryRef params, - CFErrorRef* error) const { + CFErrorRef* error) { return base::ScopedCFTypeRef<SecKeyRef>(SecKeyCreateRandomKey(params, error)); } @@ -26,25 +52,102 @@ SecKeyRef key, SecKeyAlgorithm algorithm, CFDataRef data, - CFErrorRef* error) const { + CFErrorRef* error) { return base::ScopedCFTypeRef<CFDataRef>( SecKeyCreateSignature(key, algorithm, data, error)); } -base::ScopedCFTypeRef<SecKeyRef> Keychain::KeyCopyPublicKey( - SecKeyRef key) const { +base::ScopedCFTypeRef<SecKeyRef> Keychain::KeyCopyPublicKey(SecKeyRef key) { return base::ScopedCFTypeRef<SecKeyRef>(SecKeyCopyPublicKey(key)); } -OSStatus Keychain::ItemCopyMatching(CFDictionaryRef query, - CFTypeRef* result) const { +OSStatus Keychain::ItemCopyMatching(CFDictionaryRef query, CFTypeRef* result) { return SecItemCopyMatching(query, result); } -OSStatus Keychain::ItemDelete(CFDictionaryRef query) const { +OSStatus Keychain::ItemDelete(CFDictionaryRef query) { return SecItemDelete(query); } +Credential::Credential(base::ScopedCFTypeRef<SecKeyRef> private_key_, + std::vector<uint8_t> credential_id_) + : private_key(std::move(private_key_)), + credential_id(std::move(credential_id_)) {} +Credential::~Credential() = default; +Credential::Credential(Credential&& other) = default; +Credential& Credential::operator=(Credential&& other) = default; + +base::Optional<Credential> FindCredentialInKeychain( + const std::string& keychain_access_group, + const std::string& metadata_secret, + const std::string& rp_id, + const std::set<std::vector<uint8_t>>& credential_id_filter, + LAContext* authentication_context) { + base::Optional<std::string> encoded_rp_id = + CredentialMetadata::EncodeRpId(metadata_secret, rp_id); + if (!encoded_rp_id) + return base::nullopt; + + base::ScopedCFTypeRef<CFMutableDictionaryRef> query( + CFDictionaryCreateMutable(kCFAllocatorDefault, 0, nullptr, nullptr)); + CFDictionarySetValue(query, kSecClass, kSecClassKey); + CFDictionarySetValue(query, kSecAttrAccessGroup, + base::SysUTF8ToNSString(keychain_access_group)); + CFDictionarySetValue(query, kSecAttrLabel, + base::SysUTF8ToNSString(*encoded_rp_id)); + if (authentication_context) { + CFDictionarySetValue(query, kSecUseAuthenticationContext, + authentication_context); + } + CFDictionarySetValue(query, kSecReturnRef, @YES); + CFDictionarySetValue(query, kSecReturnAttributes, @YES); + CFDictionarySetValue(query, kSecMatchLimit, kSecMatchLimitAll); + + base::ScopedCFTypeRef<CFArrayRef> keychain_items; + OSStatus status = Keychain::GetInstance().ItemCopyMatching( + query, reinterpret_cast<CFTypeRef*>(keychain_items.InitializeInto())); + if (status == errSecItemNotFound) { + // No credentials for the RP. + return base::nullopt; + } + if (status != errSecSuccess) { + OSSTATUS_DLOG(ERROR, status) << "SecItemCopyMatching failed"; + return base::nullopt; + } + + // Credentials for the RP exist. Find a match. + std::vector<uint8_t> credential_id; + base::ScopedCFTypeRef<SecKeyRef> private_key(nil); + for (CFIndex i = 0; i < CFArrayGetCount(keychain_items); ++i) { + CFDictionaryRef attributes = base::mac::CFCast<CFDictionaryRef>( + CFArrayGetValueAtIndex(keychain_items, i)); + CFDataRef application_label = base::mac::GetValueFromDictionary<CFDataRef>( + attributes, kSecAttrApplicationLabel); + SecKeyRef key = + base::mac::GetValueFromDictionary<SecKeyRef>(attributes, kSecValueRef); + if (!application_label || !key) { + // Corrupted keychain? + DLOG(ERROR) << "could not find application label or key ref: " + << attributes; + continue; + } + std::vector<uint8_t> cid(CFDataGetBytePtr(application_label), + CFDataGetBytePtr(application_label) + + CFDataGetLength(application_label)); + if (credential_id_filter.empty() || + credential_id_filter.find(cid) != credential_id_filter.end()) { + private_key.reset(key, base::scoped_policy::RETAIN); + credential_id = std::move(cid); + break; + } + } + if (private_key == nil) { + DVLOG(1) << "no allowed credential found"; + return base::nullopt; + } + return Credential(std::move(private_key), std::move(credential_id)); +} + } // namespace mac } // namespace fido } // namespace device
diff --git a/device/fido/mac/operation_base.h b/device/fido/mac/operation_base.h index 5452520..3e26efac 100644 --- a/device/fido/mac/operation_base.h +++ b/device/fido/mac/operation_base.h
@@ -37,7 +37,7 @@ metadata_secret_(std::move(metadata_secret)), keychain_access_group_(std::move(keychain_access_group)), callback_(std::move(callback)), - touch_id_context_(std::make_unique<TouchIdContext>()) {} + touch_id_context_(TouchIdContext::Create()) {} ~OperationBase() override = default; @@ -96,7 +96,9 @@ } const std::string& metadata_secret() const { return metadata_secret_; } - + const std::string& keychain_access_group() const { + return keychain_access_group_; + } const Request& request() const { return request_; } Callback& callback() { return callback_; }
diff --git a/device/fido/mac/scoped_touch_id_test_environment.h b/device/fido/mac/scoped_touch_id_test_environment.h new file mode 100644 index 0000000..8e6e112 --- /dev/null +++ b/device/fido/mac/scoped_touch_id_test_environment.h
@@ -0,0 +1,70 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef DEVICE_FIDO_MAC_SCOPED_TOUCH_ID_TEST_ENVIRONMENT_H_ +#define DEVICE_FIDO_MAC_SCOPED_TOUCH_ID_TEST_ENVIRONMENT_H_ + +#include <memory> + +#include "base/component_export.h" +#include "base/mac/availability.h" +#include "base/macros.h" + +namespace device { +namespace fido { +namespace mac { + +class FakeKeychain; +class FakeTouchIdContext; +class TouchIdContext; + +// ScopedTouchIdTestEnvironment overrides behavior of the Touch ID +// authenticator in testing. While in scope, it +// - installs a fake Keychain to avoid writing to the macOS keychain, which +// requires a valid code signature and keychain-access-group entitlement; +// - allows faking TouchIdContext instances returned by TouchIdContext to stub +// out Touch ID fingerprint prompts. +// Overrides are reset when the instance is destroyed. +class COMPONENT_EXPORT(DEVICE_FIDO) + API_AVAILABLE(macosx(10.12.2)) ScopedTouchIdTestEnvironment { + public: + ScopedTouchIdTestEnvironment(); + ~ScopedTouchIdTestEnvironment(); + + // ForgeNextTouchIdContext sets up the FakeTouchIdContext returned by the + // next call to TouchIdContext::Create. The fake will invoke the callback + // passed to TouchIdContext::PromptTouchId with the given result. + // + // It is a fatal error to call TouchIdContext::Create without invoking this + // method first while the test environment is in scope. + void ForgeNextTouchIdContext(bool simulate_prompt_success); + + // Sets the value returned by TouchIdContext::TouchIdAvailable. The default on + // instantiation of the test environment is true. + bool SetTouchIdAvailable(bool available); + + private: + static std::unique_ptr<TouchIdContext> ForwardCreate(); + static bool ForwardTouchIdAvailable(); + + std::unique_ptr<TouchIdContext> CreateTouchIdContext(); + bool TouchIdAvailable(); + + using CreateFuncPtr = decltype(&ForwardCreate); + CreateFuncPtr touch_id_context_create_ptr_; + using TouchIdAvailableFuncPtr = decltype(&ForwardTouchIdAvailable); + TouchIdAvailableFuncPtr touch_id_context_touch_id_available_ptr_; + + std::unique_ptr<FakeTouchIdContext> next_touch_id_context_; + std::unique_ptr<FakeKeychain> keychain_; + bool touch_id_available_ = true; + + DISALLOW_COPY_AND_ASSIGN(ScopedTouchIdTestEnvironment); +}; + +} // namespace mac +} // namespace fido +} // namespace device + +#endif // DEVICE_FIDO_MAC_SCOPED_TOUCH_ID_TEST_ENVIRONMENT_H_
diff --git a/device/fido/mac/scoped_touch_id_test_environment.mm b/device/fido/mac/scoped_touch_id_test_environment.mm new file mode 100644 index 0000000..01aa6f2 --- /dev/null +++ b/device/fido/mac/scoped_touch_id_test_environment.mm
@@ -0,0 +1,82 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "device/fido/mac/scoped_touch_id_test_environment.h" + +#import <Security/Security.h> + +#include "base/logging.h" +#include "base/memory/ptr_util.h" +#include "device/fido/mac/fake_keychain.h" +#include "device/fido/mac/fake_touch_id_context.h" + +namespace device { +namespace fido { +namespace mac { + +static API_AVAILABLE(macosx(10.12.2)) + ScopedTouchIdTestEnvironment* g_current_environment = nullptr; + +ScopedTouchIdTestEnvironment::ScopedTouchIdTestEnvironment() + : keychain_(std::make_unique<FakeKeychain>()) { + DCHECK(!g_current_environment); + g_current_environment = this; + + // Override TouchIdContext::Create and TouchIdContext::IsAvailable. + touch_id_context_create_ptr_ = TouchIdContext::g_create_; + TouchIdContext::g_create_ = &ForwardCreate; + + touch_id_context_touch_id_available_ptr_ = + TouchIdContext::g_touch_id_available_; + TouchIdContext::g_touch_id_available_ = &ForwardTouchIdAvailable; + + Keychain::SetInstanceOverride(static_cast<Keychain*>(keychain_.get())); +} + +ScopedTouchIdTestEnvironment::~ScopedTouchIdTestEnvironment() { + DCHECK(touch_id_context_create_ptr_); + TouchIdContext::g_create_ = touch_id_context_create_ptr_; + + DCHECK(touch_id_context_touch_id_available_ptr_); + TouchIdContext::g_touch_id_available_ = + touch_id_context_touch_id_available_ptr_; + + Keychain::ClearInstanceOverride(); +} + +// static +std::unique_ptr<TouchIdContext> ScopedTouchIdTestEnvironment::ForwardCreate() { + return g_current_environment->CreateTouchIdContext(); +} + +// static +bool ScopedTouchIdTestEnvironment::ForwardTouchIdAvailable() { + return g_current_environment->TouchIdAvailable(); +} + +bool ScopedTouchIdTestEnvironment::SetTouchIdAvailable(bool available) { + return touch_id_available_ = available; +} + +bool ScopedTouchIdTestEnvironment::TouchIdAvailable() { + return touch_id_available_; +} + +void ScopedTouchIdTestEnvironment::ForgeNextTouchIdContext( + bool simulate_prompt_success) { + CHECK(!next_touch_id_context_); + next_touch_id_context_ = base::WrapUnique(new FakeTouchIdContext); + next_touch_id_context_->set_callback_result(simulate_prompt_success); +} + +std::unique_ptr<TouchIdContext> +ScopedTouchIdTestEnvironment::CreateTouchIdContext() { + CHECK(next_touch_id_context_) << "Call ForgeNextTouchIdContext() for every " + "context created in the test environment."; + return std::move(next_touch_id_context_); +} + +} // namespace mac +} // namespace fido +} // namespace device
diff --git a/device/fido/mac/touch_id_context.h b/device/fido/mac/touch_id_context.h index e54f64d..9106e718 100644 --- a/device/fido/mac/touch_id_context.h +++ b/device/fido/mac/touch_id_context.h
@@ -9,6 +9,7 @@ #import <Security/Security.h> #include "base/callback.h" +#include "base/component_export.h" #include "base/mac/scoped_cftyperef.h" #include "base/mac/scoped_nsobject.h" #include "base/macros.h" @@ -19,21 +20,36 @@ namespace mac { // TouchIdContext wraps a macOS Touch ID consent prompt for signing with a -// secure enclave key. -class API_AVAILABLE(macosx(10.12.2)) TouchIdContext { +// secure enclave key. It is a essentially a simpler facade for the LAContext +// class from the macOS LocalAuthentication framework (c.f. +// https://developer.apple.com/documentation/localauthentication/lacontext?language=objc). +// +// Use |Create| to instantiate a new context. Multiple instances can be created +// at the same time. However, calling |PromptTouchId| on one instance will +// cancel any other pending evaluations with an error. Deleting an instance +// will invalidate any pending evaluation prompts (i.e. the dialog will +// disappear and evaluation will fail with an error). +class COMPONENT_EXPORT(DEVICE_FIDO) + API_AVAILABLE(macosx(10.12.2)) TouchIdContext { public: // The callback is invoked when the Touch ID prompt completes. It receives a // boolean indicating whether obtaining the fingerprint was successful. using Callback = base::OnceCallback<void(bool)>; - TouchIdContext(); - ~TouchIdContext(); + // Factory method for instantiating a TouchIdContext. + static std::unique_ptr<TouchIdContext> Create(); + + // Returns whether Touch ID is supported on the current hardware and set up to + // be used. + static bool TouchIdAvailable(); + + virtual ~TouchIdContext(); // PromptTouchId displays a Touch ID consent prompt with the provided reason // string to the user. On completion or error, the provided callback is // invoked, unless the TouchIdContext instance has been destroyed in the // meantime (in which case nothing happens). - void PromptTouchId(std::string reason, Callback callback); + virtual void PromptTouchId(std::string reason, Callback callback); // authentication_context returns the LAContext used for the Touch ID prompt. LAContext* authentication_context() const { return context_; } @@ -42,7 +58,19 @@ // evaluated/authorized in the Touch ID prompt. SecAccessControlRef access_control() const { return access_control_; } + protected: + TouchIdContext(); + private: + using CreateFuncPtr = decltype(&Create); + using TouchIdAvailableFuncPtr = decltype(&TouchIdAvailable); + + static CreateFuncPtr g_create_; + static TouchIdAvailableFuncPtr g_touch_id_available_; + + static std::unique_ptr<TouchIdContext> CreateImpl(); + static bool TouchIdAvailableImpl(); + void RunCallback(bool success); base::scoped_nsobject<LAContext> context_; @@ -50,6 +78,7 @@ Callback callback_; base::WeakPtrFactory<TouchIdContext> weak_ptr_factory_; + friend class ScopedTouchIdTestEnvironment; DISALLOW_COPY_AND_ASSIGN(TouchIdContext); };
diff --git a/device/fido/mac/touch_id_context.mm b/device/fido/mac/touch_id_context.mm index d196ea5..d1d61f77 100644 --- a/device/fido/mac/touch_id_context.mm +++ b/device/fido/mac/touch_id_context.mm
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/logging.h" #include "base/mac/foundation_util.h" +#include "base/memory/ptr_util.h" #include "base/sequenced_task_runner.h" #include "base/strings/sys_string_conversions.h" #include "base/threading/sequenced_task_runner_handle.h" @@ -20,6 +21,8 @@ namespace { API_AVAILABLE(macosx(10.12.2)) base::ScopedCFTypeRef<SecAccessControlRef> DefaultAccessControl() { + // The default access control policy used for WebAuthn credentials stored by + // the Touch ID platform authenticator. return base::ScopedCFTypeRef<SecAccessControlRef>( SecAccessControlCreateWithFlags( kCFAllocatorDefault, kSecAttrAccessibleWhenUnlockedThisDeviceOnly, @@ -28,6 +31,39 @@ } } // namespace +// static +std::unique_ptr<TouchIdContext> TouchIdContext::CreateImpl() { + return base::WrapUnique(new TouchIdContext()); +} + +// static +TouchIdContext::CreateFuncPtr TouchIdContext::g_create_ = + &TouchIdContext::CreateImpl; + +// static +std::unique_ptr<TouchIdContext> TouchIdContext::Create() { + // Testing seam to allow faking Touch ID in tests. + return (*g_create_)(); +} + +// static +bool TouchIdContext::TouchIdAvailableImpl() { + base::scoped_nsobject<LAContext> context([[LAContext alloc] init]); + return + [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics + error:nil]; +} + +// static +TouchIdContext::TouchIdAvailableFuncPtr TouchIdContext::g_touch_id_available_ = + &TouchIdContext::TouchIdAvailableImpl; + +// static +bool TouchIdContext::TouchIdAvailable() { + // Testing seam to allow faking Touch ID in tests. + return (*g_touch_id_available_)(); +} + TouchIdContext::TouchIdContext() : context_([[LAContext alloc] init]), access_control_(DefaultAccessControl()),
diff --git a/device/vr/openvr/openvr_gamepad_helper.cc b/device/vr/openvr/openvr_gamepad_helper.cc index 351bf7b..2dd4d2f 100644 --- a/device/vr/openvr/openvr_gamepad_helper.cc +++ b/device/vr/openvr/openvr_gamepad_helper.cc
@@ -93,15 +93,15 @@ } } break; case vr::k_eControllerAxis_Trigger: { - gamepad->axes.push_back(controller_state.rAxis[j].x); + auto button = mojom::XRGamepadButton::New(); + button->value = controller_state.rAxis[j].x; uint64_t button_mask = vr::ButtonMaskFromId( static_cast<vr::EVRButtonId>(vr::k_EButton_Axis0 + j)); if ((supported_buttons & button_mask) != 0) { - auto button = mojom::XRGamepadButton::New(); button->pressed = (controller_state.ulButtonPressed & button_mask) != 0; - gamepad->buttons.push_back(std::move(button)); } + gamepad->buttons.push_back(std::move(button)); } break; } }
diff --git a/docs/accessibility/chromevox_on_desktop_linux.md b/docs/accessibility/chromevox_on_desktop_linux.md index 7d0927e2..3849b52b5e 100644 --- a/docs/accessibility/chromevox_on_desktop_linux.md +++ b/docs/accessibility/chromevox_on_desktop_linux.md
@@ -43,7 +43,7 @@ Now build Chrome as usual, e.g.: ``` -ninja -C out/cros chrome +autoninja -C out/cros chrome ``` And run it as usual to see a mostly-complete Chrome OS desktop inside
diff --git a/docs/accessibility/tests.md b/docs/accessibility/tests.md index 25f10f80..1775def 100644 --- a/docs/accessibility/tests.md +++ b/docs/accessibility/tests.md
@@ -32,13 +32,13 @@ To run all accessibility LayoutTests: ``` -ninja -C out/release blink_tests +autoninja -C out/release blink_tests third_party/blink/tools/run_web_tests.py --build-directory=out --target=release accessibility/ ``` To run just one test by itself without the script: ``` -ninja -C out/release blink_tests +autoninja -C out/release blink_tests out/release/content_shell --run-web-tests third_party/WebKit/LayoutTests/accessibility/name-calc-inputs.html ``` @@ -64,7 +64,7 @@ To run all tests: ``` -ninja -C out/release content_browsertests +autoninja -C out/release content_browsertests out/release/content_browsertests --gtest_filter="DumpAccessibilityTree*" ``` @@ -77,7 +77,7 @@ To run all tests: ``` -ninja -C out/release content_browsertests +autoninja -C out/release content_browsertests out/release/content_browsertests --gtest_filter="*ccessib*" ``` @@ -93,7 +93,7 @@ To run all tests: ``` -ninja -C out/release accessibility_unittests +autoninja -C out/release accessibility_unittests out/release/accessibility_unittests ``` @@ -103,14 +103,14 @@ To run all tests: ``` -ninja -C out/release chromevox_tests +autoninja -C out/release chromevox_tests out/release/chromevox_tests --test-launcher-jobs=10 ``` ### Select-To-Speak tests ``` -ninja -C out/release unit_tests +autoninja -C out/release unit_tests out/release/unit_tests --gtest_filter="*SelectToSpeak*" ```
diff --git a/docs/android_build_instructions.md b/docs/android_build_instructions.md index 71eee04..a089e9f 100644 --- a/docs/android_build_instructions.md +++ b/docs/android_build_instructions.md
@@ -144,9 +144,13 @@ Build Chromium with Ninja using the command: ```shell -ninja -C out/Default chrome_public_apk +autoninja -C out/Default chrome_public_apk ``` +`autoninja` is a wrapper that automatically provides optimal values for the +arguments passed to `ninja`. + + You can get a list of all of the other build targets from GN by running `gn ls out/Default` from the command line. To compile one, pass the GN label to Ninja with no preceding "//" (so, for `//chrome/test:unit_tests` use `ninja -C @@ -244,7 +248,7 @@ ### Build the full browser ```shell -ninja -C out/Default chrome_public_apk +autoninja -C out/Default chrome_public_apk ``` And deploy it to your Android device: @@ -262,7 +266,7 @@ for details on the content module and content shell. ```shell -ninja -C out/Default content_shell_apk +autoninja -C out/Default content_shell_apk out/Default/bin/content_shell_apk install ``` @@ -333,7 +337,7 @@ Here's an example: ```shell -ninja -C out/Default chrome_public_apk_incremental +autoninja -C out/Default chrome_public_apk_incremental out/Default/bin/chrome_public_apk install --incremental --verbose ``` @@ -341,14 +345,14 @@ `--fast-local-dev` when calling `test_runner.py`): ```shell -ninja -C out/Default base_unittests_incremental +autoninja -C out/Default base_unittests_incremental out/Default/bin/run_base_unittests_incremental ``` For instrumentation tests: ```shell -ninja -C out/Default chrome_public_test_apk_incremental +autoninja -C out/Default chrome_public_test_apk_incremental out/Default/bin/run_chrome_public_test_apk_incremental ```
diff --git a/docs/code_coverage.md b/docs/code_coverage.md index 4dceab25..45458fc1 100644 --- a/docs/code_coverage.md +++ b/docs/code_coverage.md
@@ -94,7 +94,7 @@ $ gn gen out/coverage \ --args='use_clang_coverage=true is_component_build=false' $ gclient runhooks -$ ninja -C out/coverage crypto_unittests url_unittests +$ autoninja -C out/coverage crypto_unittests url_unittests ``` ### Step 2 Create Raw Profiles
diff --git a/docs/fuchsia_build_instructions.md b/docs/fuchsia_build_instructions.md index aa5af391..a08dc86 100644 --- a/docs/fuchsia_build_instructions.md +++ b/docs/fuchsia_build_instructions.md
@@ -104,9 +104,12 @@ example: ```shell -$ ninja -C out/fuchsia base_unittests +$ autoninja -C out/fuchsia base_unittests ``` +`autoninja` is a wrapper that automatically provides optimal values for the +arguments passed to `ninja`. + ## Run Once it is built, you can run by:
diff --git a/docs/how_to_add_your_feature_flag.md b/docs/how_to_add_your_feature_flag.md index c46d165..8642fd3f 100644 --- a/docs/how_to_add_your_feature_flag.md +++ b/docs/how_to_add_your_feature_flag.md
@@ -44,7 +44,7 @@ ```bash # Build unit_tests -ninja -C out/Default unit_tests +autoninja -C out/Default unit_tests # Run AboutFlagsHistogramTest.CheckHistograms ./out/Default/unit_tests --gtest_filter=AboutFlagsHistogramTest.CheckHistograms ```
diff --git a/docs/linux_build_instructions.md b/docs/linux_build_instructions.md index 3fbfa37..f120568 100644 --- a/docs/linux_build_instructions.md +++ b/docs/linux_build_instructions.md
@@ -239,12 +239,15 @@ Build Chromium (the "chrome" target) with Ninja using the command: ```shell -$ ninja -C out/Default chrome +$ autoninja -C out/Default chrome ``` +`autoninja` is a wrapper that automatically provides optimal values for the +arguments passed to `ninja`. + You can get a list of all of the other build targets from GN by running `gn ls out/Default` from the command line. To compile one, pass the GN label to Ninja -with no preceding "//" (so, for `//chrome/test:unit_tests` use `ninja -C +with no preceding "//" (so, for `//chrome/test:unit_tests` use `autoninja -C out/Default chrome/test:unit_tests`). ## Run Chromium
diff --git a/docs/mac_build_instructions.md b/docs/mac_build_instructions.md index f4dd826b..1f612d2 100644 --- a/docs/mac_build_instructions.md +++ b/docs/mac_build_instructions.md
@@ -157,12 +157,15 @@ Build Chromium (the "chrome" target) with Ninja using the command: ```shell -$ ninja -C out/Default chrome +$ autoninja -C out/Default chrome ``` +`autoninja` is a wrapper that automatically provides optimal values for the +arguments passed to `ninja`. + You can get a list of all of the other build targets from GN by running `gn ls out/Default` from the command line. To compile one, pass the GN label to Ninja -with no preceding "//" (so, for `//chrome/test:unit_tests` use `ninja -C +with no preceding "//" (so, for `//chrome/test:unit_tests` use `autoninja -C out/Default chrome/test:unit_tests`). ## Run Chromium
diff --git a/docs/speed/perf_trybots.md b/docs/speed/perf_trybots.md index dc8b5f47..5d92382 100644 --- a/docs/speed/perf_trybots.md +++ b/docs/speed/perf_trybots.md
@@ -14,7 +14,6 @@ continuous integration suite. * The devices have the "maintenance mutex" enabled, reducing noise from background processes. -* The devices are instrumented with BattOrs for power measurements. * Some regressions take multiple repeats to reproduce, and Pinpoint automatically runs multiple times and aggregates the results. * Some regressions reproduce on some devices but not others, and Pinpoint will
diff --git a/docs/testing/layout_tests.md b/docs/testing/layout_tests.md index 5b434a1..60aa9c4 100644 --- a/docs/testing/layout_tests.md +++ b/docs/testing/layout_tests.md
@@ -23,7 +23,7 @@ to get `content_shell` and all of the other needed binaries. ```bash -ninja -C out/Release blink_tests +autoninja -C out/Release blink_tests ``` On **Android** (layout test support @@ -32,7 +32,7 @@ [Android Build Instructions](../android_build_instructions.md). ```bash -ninja -C out/Default content_shell_apk +autoninja -C out/Default content_shell_apk adb install -r out/Default/apks/ContentShell.apk ``` @@ -408,7 +408,7 @@ ### Debugging DevTools Tests -* Add `debug_devtools=true` to args.gn and compile: `ninja -C out/Default devtools_frontend_resources` +* Add `debug_devtools=true` to args.gn and compile: `autoninja -C out/Default devtools_frontend_resources` > Debug DevTools lets you avoid having to recompile after every change to the DevTools front-end. * Do one of the following: * Option A) Run from the chromium/src folder: @@ -454,7 +454,7 @@ # Exit code 125 tells git bisect to skip the revision. gclient sync || exit 125 -ninja -C out/Debug -j100 blink_tests || exit 125 +autoninja -C out/Debug -j100 blink_tests || exit 125 third_party/blink/tools/run_web_tests.py -t Debug \ --no-show-results --no-retry-failures \
diff --git a/docs/windows_build_instructions.md b/docs/windows_build_instructions.md index b4d1c4e..b6cf310 100644 --- a/docs/windows_build_instructions.md +++ b/docs/windows_build_instructions.md
@@ -333,13 +333,15 @@ ## Build Chromium -Build Chromium (the "chrome" target) with Ninja (or autoninja) using the -command: +Build Chromium (the "chrome" target) with Ninja using the command: ```shell -$ ninja -C out\Default chrome +$ autoninja -C out\Default chrome ``` +`autoninja` is a wrapper that automatically provides optimal values for the +arguments passed to `ninja`. + You can get a list of all of the other build targets from GN by running `gn ls out/Default` from the command line. To compile one, pass to Ninja the GN label with no preceding "//" (so for `//chrome/test:unit_tests`
diff --git a/extensions/browser/api/web_request/web_request_api.cc b/extensions/browser/api/web_request/web_request_api.cc index 6a5d8d6..f9ba58e 100644 --- a/extensions/browser/api/web_request/web_request_api.cc +++ b/extensions/browser/api/web_request/web_request_api.cc
@@ -370,11 +370,11 @@ WebRequestPermissions::HideRequest(extension_info_map, request)); } -// Returns true if we're in a Public Session. -bool IsPublicSession() { +// Returns true if we're in a Public Session and restrictions are enabled. +bool ArePublicSessionRestrictionsEnabled() { #if defined(OS_CHROMEOS) if (chromeos::LoginState::IsInitialized()) { - return chromeos::LoginState::Get()->IsPublicSessionUser(); + return chromeos::LoginState::Get()->ArePublicSessionRestrictionsEnabled(); } #endif return false; @@ -573,8 +573,7 @@ bool WebRequestAPI::MaybeProxyURLLoaderFactory( content::RenderFrameHost* frame, bool is_navigation, - network::mojom::URLLoaderFactoryRequest* factory_request, - scoped_refptr<content::RedirectChecker>* redirect_checker) { + network::mojom::URLLoaderFactoryRequest* factory_request) { DCHECK_CURRENTLY_ON(BrowserThread::UI); if (!MayHaveProxies()) return false; @@ -604,10 +603,6 @@ ExtensionsBrowserClient::Get()->GetOriginalContext(browser_context) == browser_context_)); const bool is_for_browser_initiated_requests = is_navigation || !frame; - auto allow_unsafe_redirect_checker = base::MakeRefCounted< - WebRequestProxyingURLLoaderFactory::AllowUnsafeRedirectChecker>(); - if (redirect_checker) - *redirect_checker = allow_unsafe_redirect_checker; BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::BindOnce( @@ -618,8 +613,7 @@ is_for_browser_initiated_requests ? -1 : frame->GetProcess()->GetID(), request_id_generator_, std::move(navigation_ui_data), base::Unretained(info_map_), std::move(proxied_request), - std::move(target_factory_info), proxies_, - std::move(allow_unsafe_redirect_checker))); + std::move(target_factory_info), proxies_)); return true; } @@ -1406,7 +1400,7 @@ // which are force-installed by policy. Whitelisted extensions are exempt // from this filtering. WebRequestEventDetails* custom_event_details = event_details.get(); - if (IsPublicSession() && + if (ArePublicSessionRestrictionsEnabled() && !extensions::IsWhitelistedForPublicSession(listener->id.extension_id)) { if (!event_details_filtered_copy) { event_details_filtered_copy = @@ -2352,9 +2346,9 @@ // http://www.example.com/bar/*. // For this reason we do only a coarse check here to warn the extension // developer if they do something obviously wrong. - // When we are in a Public Session, allow all URLs for webRequests initiated - // by a regular extension. - if (!(IsPublicSession() && extension->is_extension()) && + // When restrictions are enabled in Public Session, allow all URLs for + // webRequests initiated by a regular extension. + if (!(ArePublicSessionRestrictionsEnabled() && extension->is_extension()) && extension->permissions_data() ->GetEffectiveHostPermissions() .is_empty() && @@ -2419,9 +2413,9 @@ extension_id_safe(), install_time)); } - // In Public Session we only want to allow "cancel" (except for whitelisted - // extensions which have no such restrictions). - if (IsPublicSession() && + // In Public Session we restrict everything but "cancel" (except for + // whitelisted extensions which have no such restrictions). + if (ArePublicSessionRestrictionsEnabled() && !extensions::IsWhitelistedForPublicSession(extension_id_safe()) && (value->HasKey("redirectUrl") || value->HasKey(keys::kAuthCredentialsKey) ||
diff --git a/extensions/browser/api/web_request/web_request_api.h b/extensions/browser/api/web_request/web_request_api.h index 8deba9cb..3bf05a3 100644 --- a/extensions/browser/api/web_request/web_request_api.h +++ b/extensions/browser/api/web_request/web_request_api.h
@@ -50,7 +50,6 @@ namespace content { class BrowserContext; -class RedirectChecker; class RenderFrameHost; } @@ -210,8 +209,7 @@ bool MaybeProxyURLLoaderFactory( content::RenderFrameHost* frame, bool is_navigation, - network::mojom::URLLoaderFactoryRequest* factory_request, - scoped_refptr<content::RedirectChecker>* redirect_checker); + network::mojom::URLLoaderFactoryRequest* factory_request); // Any request which requires authentication to complete will be bounced // through this method iff Network Service is enabled.
diff --git a/extensions/browser/api/web_request/web_request_permissions.cc b/extensions/browser/api/web_request/web_request_permissions.cc index 5ad2cb0..083d171d 100644 --- a/extensions/browser/api/web_request/web_request_permissions.cc +++ b/extensions/browser/api/web_request/web_request_permissions.cc
@@ -8,7 +8,6 @@ #include "base/strings/string_piece.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" -#include "chromeos/login/login_state.h" #include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/resource_request_info.h" #include "extensions/browser/api/extensions_api_client.h" @@ -114,11 +113,12 @@ extension->permissions_data()->IsPolicyBlockedHost(initiator->GetURL())) return PermissionsData::PageAccess::kDenied; -// When we are in a Public Session, allow all URLs for webRequests initiated -// by a regular extension (but don't allow chrome:// URLs). +// When restrictions are enabled in Public Session, allow all URLs for +// webRequests initiated by a regular extension (but don't allow chrome:// +// URLs). #if defined(OS_CHROMEOS) if (chromeos::LoginState::IsInitialized() && - chromeos::LoginState::Get()->IsPublicSessionUser() && + chromeos::LoginState::Get()->ArePublicSessionRestrictionsEnabled() && extension->is_extension() && !url.SchemeIs("chrome")) { // Make sure that the extension is truly installed by policy (the assumption // in Public Session is that all extensions are installed by policy).
diff --git a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc index 3cec0911..bff1462 100644 --- a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc +++ b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.cc
@@ -9,36 +9,14 @@ #include "base/strings/stringprintf.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/global_request_id.h" +#include "content/public/common/url_utils.h" #include "extensions/browser/extension_navigation_ui_data.h" +#include "extensions/common/manifest_handlers/web_accessible_resources_info.h" #include "net/http/http_util.h" #include "third_party/blink/public/platform/resource_request_blocked_reason.h" namespace extensions { -WebRequestProxyingURLLoaderFactory::AllowUnsafeRedirectChecker:: - AllowUnsafeRedirectChecker() {} - -WebRequestProxyingURLLoaderFactory::AllowUnsafeRedirectChecker:: - ~AllowUnsafeRedirectChecker() {} - -bool WebRequestProxyingURLLoaderFactory::AllowUnsafeRedirectChecker:: - ShouldAllowRedirect(int32_t request_id, - const net::RedirectInfo& redirect_info) { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - if (!proxy_.get()) - return false; - - auto it = proxy_->network_request_id_to_web_request_id_.find(request_id); - if (it == proxy_->network_request_id_to_web_request_id_.end()) - return false; - - auto request_it = proxy_->requests_.find(it->second); - if (request_it == proxy_->requests_.end()) - return false; - - return request_it->second->redirect_url() == redirect_info.new_url; -} - WebRequestProxyingURLLoaderFactory::InProgressRequest::InProgressRequest( WebRequestProxyingURLLoaderFactory* factory, uint64_t request_id, @@ -188,6 +166,13 @@ void WebRequestProxyingURLLoaderFactory::InProgressRequest::OnReceiveRedirect( const net::RedirectInfo& redirect_info, const network::ResourceResponseHead& head) { + if (redirect_url_ != redirect_info.new_url && + !IsRedirectSafe(redirect_info.new_url)) { + OnRequestError( + network::URLLoaderCompletionStatus(net::ERR_UNSAFE_REDIRECT)); + return; + } + current_response_ = head; HandleResponseOrRedirectHeaders( base::BindRepeating(&InProgressRequest::ContinueToBeforeRedirect, @@ -544,6 +529,20 @@ factory_->RemoveRequest(network_service_request_id_, request_id_); } +// Determines whether it is safe to redirect to |url|. +bool WebRequestProxyingURLLoaderFactory::InProgressRequest::IsRedirectSafe( + const GURL& url) { + if (url.SchemeIs(extensions::kExtensionScheme)) { + const Extension* extension = + factory_->info_map_->extensions().GetByID(url.host()); + if (!extension) + return false; + return WebAccessibleResourcesInfo::IsResourceWebAccessible(extension, + url.path()); + } + return content::IsSafeRedirectTarget(url); +} + WebRequestProxyingURLLoaderFactory::WebRequestProxyingURLLoaderFactory( void* browser_context, content::ResourceContext* resource_context, @@ -553,8 +552,7 @@ InfoMap* info_map, network::mojom::URLLoaderFactoryRequest loader_request, network::mojom::URLLoaderFactoryPtrInfo target_factory_info, - WebRequestAPI::ProxySet* proxies, - scoped_refptr<AllowUnsafeRedirectChecker> redirect_checker) + WebRequestAPI::ProxySet* proxies) : browser_context_(browser_context), resource_context_(resource_context), render_process_id_(render_process_id), @@ -562,7 +560,6 @@ navigation_ui_data_(std::move(navigation_ui_data)), info_map_(info_map), proxies_(proxies), - redirect_checker_(std::move(redirect_checker)), weak_factory_(this) { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); target_factory_.Bind(std::move(target_factory_info)); @@ -573,7 +570,6 @@ proxy_bindings_.set_connection_error_handler(base::BindRepeating( &WebRequestProxyingURLLoaderFactory::OnProxyBindingError, base::Unretained(this))); - redirect_checker_->set_proxy(weak_factory_.GetWeakPtr()); } void WebRequestProxyingURLLoaderFactory::StartProxying( @@ -585,8 +581,7 @@ InfoMap* info_map, network::mojom::URLLoaderFactoryRequest loader_request, network::mojom::URLLoaderFactoryPtrInfo target_factory_info, - scoped_refptr<WebRequestAPI::ProxySet> proxies, - scoped_refptr<AllowUnsafeRedirectChecker> redirect_checker) { + scoped_refptr<WebRequestAPI::ProxySet> proxies) { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); if (proxies->is_shutdown()) return; @@ -594,8 +589,7 @@ auto proxy = std::make_unique<WebRequestProxyingURLLoaderFactory>( browser_context, resource_context, render_process_id, std::move(request_id_generator), std::move(navigation_ui_data), info_map, - std::move(loader_request), std::move(target_factory_info), proxies.get(), - std::move(redirect_checker)); + std::move(loader_request), std::move(target_factory_info), proxies.get()); proxies->AddProxy(std::move(proxy)); }
diff --git a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h index d8c3fee..12b402b 100644 --- a/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h +++ b/extensions/browser/api/web_request/web_request_proxying_url_loader_factory.h
@@ -14,7 +14,6 @@ #include "base/memory/ref_counted_delete_on_sequence.h" #include "base/memory/weak_ptr.h" #include "base/optional.h" -#include "content/public/browser/redirect_checker.h" #include "extensions/browser/api/web_request/web_request_api.h" #include "extensions/browser/api/web_request/web_request_info.h" #include "mojo/public/cpp/bindings/binding.h" @@ -47,26 +46,6 @@ : public WebRequestAPI::Proxy, public network::mojom::URLLoaderFactory { public: - // Class to allow redirects from the web request API. - class AllowUnsafeRedirectChecker : public content::RedirectChecker { - public: - AllowUnsafeRedirectChecker(); - - // content::RedirectChecker implementation: - bool ShouldAllowRedirect(int32_t request_id, - const net::RedirectInfo& redirect_info) override; - - void set_proxy(base::WeakPtr<WebRequestProxyingURLLoaderFactory> proxy) { - proxy_ = std::move(proxy); - } - - protected: - ~AllowUnsafeRedirectChecker() override; - - private: - base::WeakPtr<WebRequestProxyingURLLoaderFactory> proxy_; - }; - class InProgressRequest : public network::mojom::URLLoader, public network::mojom::URLLoaderClient { public: @@ -114,8 +93,6 @@ scoped_refptr<net::HttpResponseHeaders> response_headers, WebRequestAPI::AuthRequestCallback callback); - const GURL& redirect_url() const { return redirect_url_; } - private: void ContinueToBeforeSendHeaders(int error_code); void ContinueToSendHeaders(int error_code); @@ -131,6 +108,7 @@ void HandleResponseOrRedirectHeaders( const net::CompletionCallback& continuation); void OnRequestError(const network::URLLoaderCompletionStatus& status); + bool IsRedirectSafe(const GURL& url); WebRequestProxyingURLLoaderFactory* const factory_; network::ResourceRequest request_; @@ -179,8 +157,7 @@ InfoMap* info_map, network::mojom::URLLoaderFactoryRequest loader_request, network::mojom::URLLoaderFactoryPtrInfo target_factory_info, - WebRequestAPI::ProxySet* proxies, - scoped_refptr<AllowUnsafeRedirectChecker> redirect_checker); + WebRequestAPI::ProxySet* proxies); ~WebRequestProxyingURLLoaderFactory() override; @@ -193,8 +170,7 @@ InfoMap* info_map, network::mojom::URLLoaderFactoryRequest loader_request, network::mojom::URLLoaderFactoryPtrInfo target_factory_info, - scoped_refptr<WebRequestAPI::ProxySet> proxies, - scoped_refptr<AllowUnsafeRedirectChecker> redirect_checker); + scoped_refptr<WebRequestAPI::ProxySet> proxies); // network::mojom::URLLoaderFactory: void CreateLoaderAndStart(network::mojom::URLLoaderRequest loader_request, @@ -238,11 +214,6 @@ // internally generated request ID for the same request. std::map<int32_t, uint64_t> network_request_id_to_web_request_id_; - // Class used to check if a redirect came from the web request API and should - // be considered safe. A reference to this should be passed to the target - // URLLoader, so it can skip redirect safety checks if necessary. - scoped_refptr<AllowUnsafeRedirectChecker> redirect_checker_; - base::WeakPtrFactory<WebRequestProxyingURLLoaderFactory> weak_factory_; DISALLOW_COPY_AND_ASSIGN(WebRequestProxyingURLLoaderFactory);
diff --git a/extensions/renderer/BUILD.gn b/extensions/renderer/BUILD.gn index cff75540..34a14e63 100644 --- a/extensions/renderer/BUILD.gn +++ b/extensions/renderer/BUILD.gn
@@ -139,6 +139,8 @@ "guest_view/guest_view_internal_custom_bindings.h", "guest_view/mime_handler_view/mime_handler_view_container.cc", "guest_view/mime_handler_view/mime_handler_view_container.h", + "guest_view/mime_handler_view/mime_handler_view_container_base.cc", + "guest_view/mime_handler_view/mime_handler_view_container_base.h", "i18n_custom_bindings.cc", "i18n_custom_bindings.h", "i18n_hooks_delegate.cc",
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.cc b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.cc index 8a70c64..901c9ab1 100644 --- a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.cc +++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.cc
@@ -7,32 +7,12 @@ #include <map> #include <set> -#include "base/guid.h" -#include "base/lazy_instance.h" -#include "base/macros.h" #include "components/guest_view/common/guest_view_constants.h" #include "components/guest_view/common/guest_view_messages.h" -#include "content/public/common/url_loader_throttle.h" -#include "content/public/common/webplugininfo.h" #include "content/public/renderer/render_frame.h" -#include "content/public/renderer/render_thread.h" #include "content/public/renderer/render_view.h" -#include "content/public/renderer/v8_value_converter.h" #include "extensions/common/extension_messages.h" #include "extensions/common/guest_view/extensions_guest_view_messages.h" -#include "extensions/common/mojo/guest_view.mojom.h" -#include "extensions/renderer/extension_frame_helper.h" -#include "gin/arguments.h" -#include "gin/dictionary.h" -#include "gin/handle.h" -#include "gin/interceptor.h" -#include "gin/object_template_builder.h" -#include "gin/wrappable.h" -#include "ipc/ipc_sync_channel.h" -#include "services/network/public/cpp/features.h" -#include "third_party/blink/public/platform/web_url_request.h" -#include "third_party/blink/public/web/web_associated_url_loader.h" -#include "third_party/blink/public/web/web_associated_url_loader_options.h" #include "third_party/blink/public/web/web_document.h" #include "third_party/blink/public/web/web_local_frame.h" #include "third_party/blink/public/web/web_plugin_document.h" @@ -41,198 +21,25 @@ namespace extensions { -namespace { - -const char kPostMessageName[] = "postMessage"; - -base::LazyInstance<mojom::GuestViewAssociatedPtr>::Leaky g_guest_view; - -mojom::GuestView* GetGuestView() { - if (!g_guest_view.Get()) { - content::RenderThread::Get()->GetChannel()->GetRemoteAssociatedInterface( - &g_guest_view.Get()); - } - - return g_guest_view.Get().get(); -} - -// The gin-backed scriptable object which is exposed by the BrowserPlugin for -// MimeHandlerViewContainer. This currently only implements "postMessage". -class ScriptableObject : public gin::Wrappable<ScriptableObject>, - public gin::NamedPropertyInterceptor { - public: - static gin::WrapperInfo kWrapperInfo; - - static v8::Local<v8::Object> Create( - v8::Isolate* isolate, - base::WeakPtr<MimeHandlerViewContainer> container) { - ScriptableObject* scriptable_object = - new ScriptableObject(isolate, container); - return gin::CreateHandle(isolate, scriptable_object) - .ToV8() - .As<v8::Object>(); - } - - // gin::NamedPropertyInterceptor - v8::Local<v8::Value> GetNamedProperty( - v8::Isolate* isolate, - const std::string& identifier) override { - if (identifier == kPostMessageName) { - if (post_message_function_template_.IsEmpty()) { - post_message_function_template_.Reset( - isolate, - gin::CreateFunctionTemplate( - isolate, - base::Bind(&MimeHandlerViewContainer::PostJavaScriptMessage, - container_, isolate))); - } - v8::Local<v8::FunctionTemplate> function_template = - v8::Local<v8::FunctionTemplate>::New(isolate, - post_message_function_template_); - v8::Local<v8::Function> function; - if (function_template->GetFunction(isolate->GetCurrentContext()) - .ToLocal(&function)) - return function; - } - return v8::Local<v8::Value>(); - } - - private: - ScriptableObject(v8::Isolate* isolate, - base::WeakPtr<MimeHandlerViewContainer> container) - : gin::NamedPropertyInterceptor(isolate, this), - container_(container) {} - - // gin::Wrappable - gin::ObjectTemplateBuilder GetObjectTemplateBuilder( - v8::Isolate* isolate) override { - return gin::Wrappable<ScriptableObject>::GetObjectTemplateBuilder(isolate) - .AddNamedPropertyInterceptor(); - } - - base::WeakPtr<MimeHandlerViewContainer> container_; - v8::Persistent<v8::FunctionTemplate> post_message_function_template_; -}; - -// static -gin::WrapperInfo ScriptableObject::kWrapperInfo = { gin::kEmbedderNativeGin }; - -// Maps from content::RenderFrame to the set of MimeHandlerViewContainers within -// it. -base::LazyInstance< - std::map<content::RenderFrame*, std::set<MimeHandlerViewContainer*>>>:: - DestructorAtExit g_mime_handler_view_container_map = - LAZY_INSTANCE_INITIALIZER; - -} // namespace - -// Stores a raw pointer to MimeHandlerViewContainer since this throttle's -// lifetime is shorter (it matches |container|'s loader_). -class MimeHandlerViewContainer::PluginResourceThrottle - : public content::URLLoaderThrottle { - public: - explicit PluginResourceThrottle(MimeHandlerViewContainer* container) - : container_(container) {} - ~PluginResourceThrottle() override {} - - private: - // content::URLLoaderThrottle overrides; - void WillProcessResponse(const GURL& response_url, - network::ResourceResponseHead* response_head, - bool* defer) override { - network::mojom::URLLoaderPtr dummy_new_loader; - mojo::MakeRequest(&dummy_new_loader); - network::mojom::URLLoaderClientPtr new_client; - network::mojom::URLLoaderClientRequest new_client_request = - mojo::MakeRequest(&new_client); - - network::mojom::URLLoaderPtr original_loader; - network::mojom::URLLoaderClientRequest original_client; - delegate_->InterceptResponse(std::move(dummy_new_loader), - std::move(new_client_request), - &original_loader, &original_client); - - auto transferrable_loader = content::mojom::TransferrableURLLoader::New(); - transferrable_loader->url_loader = original_loader.PassInterface(); - transferrable_loader->url_loader_client = std::move(original_client); - - // Make a deep copy of ResourceResponseHead before passing it cross-thread. - auto resource_response = base::MakeRefCounted<network::ResourceResponse>(); - resource_response->head = *response_head; - auto deep_copied_response = resource_response->DeepCopy(); - transferrable_loader->head = std::move(deep_copied_response->head); - container_->SetEmbeddedLoader(std::move(transferrable_loader)); - } - - MimeHandlerViewContainer* container_; - - DISALLOW_COPY_AND_ASSIGN(PluginResourceThrottle); -}; - MimeHandlerViewContainer::MimeHandlerViewContainer( content::RenderFrame* render_frame, const content::WebPluginInfo& info, const std::string& mime_type, const GURL& original_url) : GuestViewContainer(render_frame), - plugin_path_(info.path.MaybeAsASCII()), - mime_type_(mime_type), - original_url_(original_url), - guest_proxy_routing_id_(-1), - guest_loaded_(false), - before_unload_control_binding_(this), - weak_factory_(this) { - DCHECK(!mime_type_.empty()); + MimeHandlerViewContainerBase(render_frame, info, mime_type, original_url), + guest_proxy_routing_id_(-1) { is_embedded_ = !render_frame->GetWebFrame()->GetDocument().IsPluginDocument(); - g_mime_handler_view_container_map.Get()[render_frame].insert(this); } MimeHandlerViewContainer::~MimeHandlerViewContainer() { - if (loader_) { - DCHECK(is_embedded_); - loader_->Cancel(); - } - - if (render_frame()) { - g_mime_handler_view_container_map.Get()[render_frame()].erase(this); - if (g_mime_handler_view_container_map.Get()[render_frame()].empty()) - g_mime_handler_view_container_map.Get().erase(render_frame()); - } -} - -// static -std::vector<MimeHandlerViewContainer*> -MimeHandlerViewContainer::FromRenderFrame(content::RenderFrame* render_frame) { - auto it = g_mime_handler_view_container_map.Get().find(render_frame); - if (it == g_mime_handler_view_container_map.Get().end()) - return std::vector<MimeHandlerViewContainer*>(); - - return std::vector<MimeHandlerViewContainer*>(it->second.begin(), - it->second.end()); } void MimeHandlerViewContainer::OnReady() { if (!render_frame() || !is_embedded_) return; - blink::WebLocalFrame* frame = render_frame()->GetWebFrame(); - - blink::WebAssociatedURLLoaderOptions options; - DCHECK(!loader_); - loader_.reset(frame->CreateAssociatedURLLoader(options)); - - // The embedded plugin is allowed to be cross-origin and we should always - // send credentials/cookies with the request. So, use the default mode - // "no-cors" and credentials mode "include". - blink::WebURLRequest request(original_url_); - request.SetRequestContext(blink::WebURLRequest::kRequestContextObject); - // The plugin resource request should skip service workers since "plug-ins - // may get their security origins from their own urls". - // https://w3c.github.io/ServiceWorker/#implementer-concerns - request.SetSkipServiceWorker(true); - - waiting_to_create_throttle_ = true; - loader_->LoadAsynchronously(request, this); + SendResourceRequest(); } bool MimeHandlerViewContainer::OnMessage(const IPC::Message& message) { @@ -255,7 +62,7 @@ } void MimeHandlerViewContainer::OnRenderFrameDestroyed() { - g_mime_handler_view_container_map.Get().erase(render_frame()); + EmbedderRenderFrameWillBeGone(); } void MimeHandlerViewContainer::PluginDidReceiveData(const char* data, @@ -272,7 +79,7 @@ // Don't try to resize a guest that hasn't been created yet. It is enough to // initialise |element_size_| here and then we'll send that to the browser // during guest creation. - if (!guest_created_) + if (!guest_created()) return; render_frame()->Send(new ExtensionsGuestViewHostMsg_ResizeGuest( @@ -281,12 +88,7 @@ v8::Local<v8::Object> MimeHandlerViewContainer::V8ScriptableObject( v8::Isolate* isolate) { - if (scriptable_object_.IsEmpty()) { - v8::Local<v8::Object> object = - ScriptableObject::Create(isolate, weak_factory_.GetWeakPtr()); - scriptable_object_.Reset(isolate, object); - } - return v8::Local<v8::Object>::New(isolate, scriptable_object_); + return GetScriptableObject(isolate); } void MimeHandlerViewContainer::DidReceiveData(const char* data, @@ -299,65 +101,6 @@ CreateMimeHandlerViewGuestIfNecessary(); } -void MimeHandlerViewContainer::PostJavaScriptMessage( - v8::Isolate* isolate, - v8::Local<v8::Value> message) { - if (!guest_loaded_) { - pending_messages_.push_back(v8::Global<v8::Value>(isolate, message)); - return; - } - - content::RenderView* guest_proxy_render_view = - content::RenderView::FromRoutingID(guest_proxy_routing_id_); - if (!guest_proxy_render_view) - return; - blink::WebFrame* guest_proxy_frame = - guest_proxy_render_view->GetWebView()->MainFrame(); - if (!guest_proxy_frame) - return; - - v8::Context::Scope context_scope( - render_frame()->GetWebFrame()->MainWorldScriptContext()); - - v8::Local<v8::Object> guest_proxy_window = guest_proxy_frame->GlobalProxy(); - gin::Dictionary window_object(isolate, guest_proxy_window); - v8::Local<v8::Function> post_message; - if (!window_object.Get(std::string(kPostMessageName), &post_message)) - return; - - v8::Local<v8::Value> args[] = { - message, - // Post the message to any domain inside the browser plugin. The embedder - // should already know what is embedded. - gin::StringToV8(isolate, "*")}; - render_frame()->GetWebFrame()->CallFunctionEvenIfScriptDisabled( - post_message.As<v8::Function>(), guest_proxy_window, arraysize(args), - args); -} - -void MimeHandlerViewContainer::PostMessageFromValue( - const base::Value& message) { - blink::WebLocalFrame* frame = render_frame()->GetWebFrame(); - if (!frame) - return; - - v8::Isolate* isolate = v8::Isolate::GetCurrent(); - v8::HandleScope handle_scope(isolate); - v8::Context::Scope context_scope(frame->MainWorldScriptContext()); - PostJavaScriptMessage(isolate, - content::V8ValueConverter::Create()->ToV8Value( - &message, frame->MainWorldScriptContext())); -} - -std::unique_ptr<content::URLLoaderThrottle> -MimeHandlerViewContainer::MaybeCreatePluginThrottle(const GURL& url) { - if (!waiting_to_create_throttle_ || url != original_url_) - return nullptr; - - waiting_to_create_throttle_ = false; - return std::make_unique<PluginResourceThrottle>(this); -} - void MimeHandlerViewContainer::OnCreateMimeHandlerViewGuestACK( int element_instance_id) { DCHECK_NE(this->element_instance_id(), guest_view::kInstanceIDNone); @@ -378,81 +121,33 @@ void MimeHandlerViewContainer::OnMimeHandlerViewGuestOnLoadCompleted( int /* unused */) { - if (!render_frame()) - return; - - guest_loaded_ = true; - if (pending_messages_.empty()) - return; - - // Now that the guest has loaded, flush any unsent messages. - blink::WebLocalFrame* frame = render_frame()->GetWebFrame(); - if (!frame) - return; - - v8::Isolate* isolate = v8::Isolate::GetCurrent(); - v8::HandleScope handle_scope(isolate); - v8::Context::Scope context_scope(frame->MainWorldScriptContext()); - for (const auto& pending_message : pending_messages_) - PostJavaScriptMessage(isolate, - v8::Local<v8::Value>::New(isolate, pending_message)); - - pending_messages_.clear(); + DidCompleteLoad(); } -void MimeHandlerViewContainer::SetEmbeddedLoader( - content::mojom::TransferrableURLLoaderPtr transferrable_url_loader) { - transferrable_url_loader_ = std::move(transferrable_url_loader); - transferrable_url_loader_->url = GURL(plugin_path_ + base::GenerateGUID()); - CreateMimeHandlerViewGuestIfNecessary(); +content::RenderFrame* MimeHandlerViewContainer::GetEmbedderRenderFrame() const { + return render_frame(); } void MimeHandlerViewContainer::CreateMimeHandlerViewGuestIfNecessary() { - if (guest_created_ || !element_size_.has_value()) + if (!element_size_.has_value()) return; + MimeHandlerViewContainerBase::CreateMimeHandlerViewGuestIfNecessary(); +} - // When the network service is enabled, subresource requests like plugins are - // made directly from the renderer to the network service. So we need to - // intercept the URLLoader and send it to the browser so that it can forward - // it to the plugin. - if (base::FeatureList::IsEnabled(network::features::kNetworkService) && - is_embedded_) { - if (transferrable_url_loader_.is_null()) - return; +blink::WebFrame* MimeHandlerViewContainer::GetGuestProxyFrame() const { + content::RenderView* guest_proxy_render_view = + content::RenderView::FromRoutingID(guest_proxy_routing_id_); + if (!guest_proxy_render_view) + return nullptr; + return guest_proxy_render_view->GetWebView()->MainFrame(); +} - GetGuestView()->CreateEmbeddedMimeHandlerViewGuest( - render_frame()->GetRoutingID(), - ExtensionFrameHelper::Get(render_frame())->tab_id(), original_url_, - element_instance_id(), *element_size_, - std::move(transferrable_url_loader_)); - guest_created_ = true; - return; - } +int32_t MimeHandlerViewContainer::GetInstanceId() const { + return element_instance_id(); +} - if (view_id_.empty()) - return; - - // The loader has completed loading |view_id_| so we can dispose it. - if (loader_) { - DCHECK(is_embedded_); - loader_.reset(); - } - - DCHECK_NE(element_instance_id(), guest_view::kInstanceIDNone); - - if (!render_frame()) - return; - - mime_handler::BeforeUnloadControlPtr before_unload_control; - if (!is_embedded_) { - before_unload_control_binding_.Bind( - mojo::MakeRequest(&before_unload_control)); - } - GetGuestView()->CreateMimeHandlerViewGuest( - render_frame()->GetRoutingID(), view_id_, element_instance_id(), - *element_size_, std::move(before_unload_control)); - - guest_created_ = true; +gfx::Size MimeHandlerViewContainer::GetElementSize() const { + return *element_size_; } void MimeHandlerViewContainer::SetShowBeforeUnloadDialog(
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h index 8f711d0f..986dcacc 100644 --- a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h +++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h
@@ -10,28 +10,12 @@ #include <string> #include <vector> -#include "base/macros.h" -#include "base/memory/weak_ptr.h" #include "base/optional.h" #include "components/guest_view/renderer/guest_view_container.h" -#include "content/public/common/transferrable_url_loader.mojom.h" -#include "extensions/common/api/mime_handler.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" -#include "services/network/public/mojom/url_loader.mojom.h" -#include "third_party/blink/public/web/web_associated_url_loader_client.h" -#include "ui/gfx/geometry/size.h" +#include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h" #include "url/gurl.h" #include "v8/include/v8.h" -namespace blink { -class WebAssociatedURLLoader; -} // namespace blink - -namespace content { -class URLLoaderThrottle; -struct WebPluginInfo; -} // namespace content - namespace extensions { // A container for loading up an extension inside a BrowserPlugin to handle a @@ -51,17 +35,13 @@ // |didFinishLoading| (from WebAssociatedURLLoaderClient) when data is // received and when it has finished being received. class MimeHandlerViewContainer : public guest_view::GuestViewContainer, - public blink::WebAssociatedURLLoaderClient, - public mime_handler::BeforeUnloadControl { + public MimeHandlerViewContainerBase { public: MimeHandlerViewContainer(content::RenderFrame* render_frame, const content::WebPluginInfo& info, const std::string& mime_type, const GURL& original_url); - static std::vector<MimeHandlerViewContainer*> FromRenderFrame( - content::RenderFrame* render_frame); - // GuestViewContainer implementation. bool OnMessage(const IPC::Message& message) override; void OnReady() override; @@ -79,30 +59,21 @@ // GuestViewContainer overrides. void OnRenderFrameDestroyed() override; - // Post a JavaScript message to the guest. - void PostJavaScriptMessage(v8::Isolate* isolate, - v8::Local<v8::Value> message); - - // Post |message| to the guest. - void PostMessageFromValue(const base::Value& message); - - // If the URL matches the same URL that this object has created and it hasn't - // added a throttle yet, it will return a new one for the purpose of - // intercepting it. - std::unique_ptr<content::URLLoaderThrottle> MaybeCreatePluginThrottle( - const GURL& url); - protected: ~MimeHandlerViewContainer() override; private: - class PluginResourceThrottle; + // MimeHandlerViewContainerBase override. + content::RenderFrame* GetEmbedderRenderFrame() const final; + void CreateMimeHandlerViewGuestIfNecessary() final; + blink::WebFrame* GetGuestProxyFrame() const final; + int32_t GetInstanceId() const final; + gfx::Size GetElementSize() const final; - // Called for embedded plugins when network service is enabled. This is called - // by the URLLoaderThrottle which intercepts the resource load, which is then - // sent to the browser to be handed off to the plugin. - void SetEmbeddedLoader( - content::mojom::TransferrableURLLoaderPtr transferrable_url_loader); + // mime_handler::BeforeUnloadControl implementation. + void SetShowBeforeUnloadDialog( + bool show_dialog, + SetShowBeforeUnloadDialogCallback callback) override; // Message handlers. void OnCreateMimeHandlerViewGuestACK(int element_instance_id); @@ -110,65 +81,12 @@ int guest_proxy_routing_id); void OnMimeHandlerViewGuestOnLoadCompleted(int element_instance_id); - // Creates a guest when a geometry and the URL of the extension to navigate - // to are available. - void CreateMimeHandlerViewGuestIfNecessary(); - - // mime_handler::BeforeUnloadControl implementation. - void SetShowBeforeUnloadDialog( - bool show_dialog, - SetShowBeforeUnloadDialogCallback callback) override; - - // Path of the plugin. - const std::string plugin_path_; - - // The MIME type of the plugin. - const std::string mime_type_; - - // The URL of the extension to navigate to. - std::string view_id_; - - // Whether the plugin is embedded or not. - bool is_embedded_; - - // The original URL of the plugin. - GURL original_url_; - // The RenderView routing ID of the guest. int guest_proxy_routing_id_; - // Used when network service is enabled: - bool waiting_to_create_throttle_ = false; - content::mojom::TransferrableURLLoaderPtr transferrable_url_loader_; - - // Used when network service is disabled: - // A URL loader to load the |original_url_| when the plugin is embedded. In - // the embedded case, no URL request is made automatically. - std::unique_ptr<blink::WebAssociatedURLLoader> loader_; - - // The scriptable object that backs the plugin. - v8::Global<v8::Object> scriptable_object_; - - // Pending postMessage messages that need to be sent to the guest. These are - // queued while the guest is loading and once it is fully loaded they are - // delivered so that messages aren't lost. - std::vector<v8::Global<v8::Value>> pending_messages_; - - // True if a guest process has been requested. - bool guest_created_ = false; - - // True if the guest page has fully loaded and its JavaScript onload function - // has been called. - bool guest_loaded_; - // The size of the element. base::Optional<gfx::Size> element_size_; - mojo::Binding<mime_handler::BeforeUnloadControl> - before_unload_control_binding_; - - base::WeakPtrFactory<MimeHandlerViewContainer> weak_factory_; - DISALLOW_COPY_AND_ASSIGN(MimeHandlerViewContainer); };
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.cc b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.cc new file mode 100644 index 0000000..26b2fa0 --- /dev/null +++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.cc
@@ -0,0 +1,372 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h" + +#include "base/guid.h" +#include "base/lazy_instance.h" +#include "base/memory/weak_ptr.h" +#include "base/stl_util.h" +#include "components/guest_view/common/guest_view_constants.h" +#include "content/public/common/url_loader_throttle.h" +#include "content/public/common/webplugininfo.h" +#include "content/public/renderer/render_frame.h" +#include "content/public/renderer/render_thread.h" +#include "content/public/renderer/v8_value_converter.h" +#include "extensions/common/mojo/guest_view.mojom.h" +#include "extensions/renderer/extension_frame_helper.h" +#include "gin/arguments.h" +#include "gin/dictionary.h" +#include "gin/handle.h" +#include "gin/interceptor.h" +#include "gin/object_template_builder.h" +#include "gin/wrappable.h" +#include "ipc/ipc_sync_channel.h" +#include "services/network/public/cpp/features.h" +#include "third_party/blink/public/platform/web_url_request.h" +#include "third_party/blink/public/web/web_associated_url_loader.h" +#include "third_party/blink/public/web/web_associated_url_loader_options.h" +#include "third_party/blink/public/web/web_frame.h" +#include "third_party/blink/public/web/web_local_frame.h" + +namespace extensions { +namespace { + +const char kPostMessageName[] = "postMessage"; + +base::LazyInstance<mojom::GuestViewAssociatedPtr>::Leaky g_guest_view; + +mojom::GuestView* GetGuestView() { + if (!g_guest_view.Get()) { + content::RenderThread::Get()->GetChannel()->GetRemoteAssociatedInterface( + &g_guest_view.Get()); + } + + return g_guest_view.Get().get(); +} + +// The gin-backed scriptable object which is exposed by the BrowserPlugin for +// MimeHandlerViewContainerBase. This currently only implements "postMessage". +class ScriptableObject : public gin::Wrappable<ScriptableObject>, + public gin::NamedPropertyInterceptor { + public: + static gin::WrapperInfo kWrapperInfo; + + static v8::Local<v8::Object> Create( + v8::Isolate* isolate, + base::WeakPtr<MimeHandlerViewContainerBase> container) { + ScriptableObject* scriptable_object = + new ScriptableObject(isolate, container); + return gin::CreateHandle(isolate, scriptable_object) + .ToV8() + .As<v8::Object>(); + } + + // gin::NamedPropertyInterceptor + v8::Local<v8::Value> GetNamedProperty( + v8::Isolate* isolate, + const std::string& identifier) override { + if (identifier == kPostMessageName) { + if (post_message_function_template_.IsEmpty()) { + post_message_function_template_.Reset( + isolate, + gin::CreateFunctionTemplate( + isolate, + base::BindRepeating( + &MimeHandlerViewContainerBase::PostJavaScriptMessage, + container_, isolate))); + } + v8::Local<v8::FunctionTemplate> function_template = + v8::Local<v8::FunctionTemplate>::New(isolate, + post_message_function_template_); + v8::Local<v8::Function> function; + if (function_template->GetFunction(isolate->GetCurrentContext()) + .ToLocal(&function)) + return function; + } + return v8::Local<v8::Value>(); + } + + private: + ScriptableObject(v8::Isolate* isolate, + base::WeakPtr<MimeHandlerViewContainerBase> container) + : gin::NamedPropertyInterceptor(isolate, this), container_(container) {} + + // gin::Wrappable + gin::ObjectTemplateBuilder GetObjectTemplateBuilder( + v8::Isolate* isolate) override { + return gin::Wrappable<ScriptableObject>::GetObjectTemplateBuilder(isolate) + .AddNamedPropertyInterceptor(); + } + + base::WeakPtr<MimeHandlerViewContainerBase> container_; + v8::Persistent<v8::FunctionTemplate> post_message_function_template_; +}; + +// static +gin::WrapperInfo ScriptableObject::kWrapperInfo = {gin::kEmbedderNativeGin}; + +// Maps from content::RenderFrame to the set of MimeHandlerViewContainerBases +// within it. +base::LazyInstance< + std::map<content::RenderFrame*, std::set<MimeHandlerViewContainerBase*>>>:: + DestructorAtExit g_mime_handler_view_container_base_map = + LAZY_INSTANCE_INITIALIZER; + +} // namespace + +// Stores a raw pointer to MimeHandlerViewContainerBase since this throttle's +// lifetime is shorter (it matches |container|'s loader_). +class MimeHandlerViewContainerBase::PluginResourceThrottle + : public content::URLLoaderThrottle { + public: + explicit PluginResourceThrottle(MimeHandlerViewContainerBase* container) + : container_(container) {} + ~PluginResourceThrottle() override {} + + private: + // content::URLLoaderThrottle overrides; + void WillProcessResponse(const GURL& response_url, + network::ResourceResponseHead* response_head, + bool* defer) override { + network::mojom::URLLoaderPtr dummy_new_loader; + mojo::MakeRequest(&dummy_new_loader); + network::mojom::URLLoaderClientPtr new_client; + network::mojom::URLLoaderClientRequest new_client_request = + mojo::MakeRequest(&new_client); + + network::mojom::URLLoaderPtr original_loader; + network::mojom::URLLoaderClientRequest original_client; + delegate_->InterceptResponse(std::move(dummy_new_loader), + std::move(new_client_request), + &original_loader, &original_client); + + auto transferrable_loader = content::mojom::TransferrableURLLoader::New(); + transferrable_loader->url_loader = original_loader.PassInterface(); + transferrable_loader->url_loader_client = std::move(original_client); + + // Make a deep copy of ResourceResponseHead before passing it cross-thread. + auto resource_response = base::MakeRefCounted<network::ResourceResponse>(); + resource_response->head = *response_head; + auto deep_copied_response = resource_response->DeepCopy(); + transferrable_loader->head = std::move(deep_copied_response->head); + container_->SetEmbeddedLoader(std::move(transferrable_loader)); + } + + MimeHandlerViewContainerBase* container_; + + DISALLOW_COPY_AND_ASSIGN(PluginResourceThrottle); +}; + +MimeHandlerViewContainerBase::MimeHandlerViewContainerBase( + content::RenderFrame* embedder_render_frame, + const content::WebPluginInfo& info, + const std::string& mime_type, + const GURL& original_url) + : plugin_path_(info.path.MaybeAsASCII()), + mime_type_(mime_type), + original_url_(original_url), + before_unload_control_binding_(this), + weak_factory_(this) { + DCHECK(!mime_type_.empty()); + g_mime_handler_view_container_base_map.Get()[embedder_render_frame].insert( + this); +} + +MimeHandlerViewContainerBase::~MimeHandlerViewContainerBase() { + if (loader_) { + DCHECK(is_embedded_); + loader_->Cancel(); + } + + if (auto* rf = GetEmbedderRenderFrame()) { + g_mime_handler_view_container_base_map.Get()[rf].erase(this); + if (g_mime_handler_view_container_base_map.Get()[rf].empty()) + g_mime_handler_view_container_base_map.Get().erase(rf); + } +} + +// static +std::vector<MimeHandlerViewContainerBase*> +MimeHandlerViewContainerBase::FromRenderFrame( + content::RenderFrame* render_frame) { + auto it = g_mime_handler_view_container_base_map.Get().find(render_frame); + if (it == g_mime_handler_view_container_base_map.Get().end()) + return std::vector<MimeHandlerViewContainerBase*>(); + + return std::vector<MimeHandlerViewContainerBase*>(it->second.begin(), + it->second.end()); +} + +std::unique_ptr<content::URLLoaderThrottle> +MimeHandlerViewContainerBase::MaybeCreatePluginThrottle(const GURL& url) { + if (!waiting_to_create_throttle_ || url != original_url_) + return nullptr; + + waiting_to_create_throttle_ = false; + return std::make_unique<PluginResourceThrottle>(this); +} + +void MimeHandlerViewContainerBase::PostJavaScriptMessage( + v8::Isolate* isolate, + v8::Local<v8::Value> message) { + if (!guest_loaded_) { + pending_messages_.push_back(v8::Global<v8::Value>(isolate, message)); + return; + } + + auto* guest_proxy_frame = GetGuestProxyFrame(); + + v8::Context::Scope context_scope( + GetEmbedderRenderFrame()->GetWebFrame()->MainWorldScriptContext()); + + v8::Local<v8::Object> guest_proxy_window = guest_proxy_frame->GlobalProxy(); + gin::Dictionary window_object(isolate, guest_proxy_window); + v8::Local<v8::Function> post_message; + if (!window_object.Get(std::string(kPostMessageName), &post_message)) + return; + + v8::Local<v8::Value> args[] = { + message, + // Post the message to any domain inside the browser plugin. The embedder + // should already know what is embedded. + gin::StringToV8(isolate, "*")}; + GetEmbedderRenderFrame()->GetWebFrame()->CallFunctionEvenIfScriptDisabled( + post_message.As<v8::Function>(), guest_proxy_window, base::size(args), + args); +} + +void MimeHandlerViewContainerBase::PostMessageFromValue( + const base::Value& message) { + blink::WebLocalFrame* frame = GetEmbedderRenderFrame()->GetWebFrame(); + if (!frame) + return; + + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handle_scope(isolate); + v8::Context::Scope context_scope(frame->MainWorldScriptContext()); + PostJavaScriptMessage(isolate, + content::V8ValueConverter::Create()->ToV8Value( + &message, frame->MainWorldScriptContext())); +} + +content::RenderFrame* MimeHandlerViewContainerBase::GetEmbedderRenderFrame() + const { + return nullptr; +} + +void MimeHandlerViewContainerBase::CreateMimeHandlerViewGuestIfNecessary() { + if (guest_created_) + return; + + // When the network service is enabled, subresource requests like plugins are + // made directly from the renderer to the network service. So we need to + // intercept the URLLoader and send it to the browser so that it can forward + // it to the plugin. + if (base::FeatureList::IsEnabled(network::features::kNetworkService) && + is_embedded_) { + if (transferrable_url_loader_.is_null()) + return; + + GetGuestView()->CreateEmbeddedMimeHandlerViewGuest( + GetEmbedderRenderFrame()->GetRoutingID(), + ExtensionFrameHelper::Get(GetEmbedderRenderFrame())->tab_id(), + original_url_, GetInstanceId(), GetElementSize(), + std::move(transferrable_url_loader_)); + guest_created_ = true; + return; + } + + if (view_id_.empty()) + return; + + // The loader has completed loading |view_id_| so we can dispose it. + if (loader_) { + DCHECK(is_embedded_); + loader_.reset(); + } + + DCHECK_NE(GetInstanceId(), guest_view::kInstanceIDNone); + + if (!GetEmbedderRenderFrame()) + return; + + mime_handler::BeforeUnloadControlPtr before_unload_control; + if (!is_embedded_) { + before_unload_control_binding_.Bind( + mojo::MakeRequest(&before_unload_control)); + } + GetGuestView()->CreateMimeHandlerViewGuest( + GetEmbedderRenderFrame()->GetRoutingID(), view_id_, GetInstanceId(), + GetElementSize(), std::move(before_unload_control)); + + guest_created_ = true; +} + +void MimeHandlerViewContainerBase::DidCompleteLoad() { + if (!GetEmbedderRenderFrame()) + return; + + guest_loaded_ = true; + if (pending_messages_.empty()) + return; + + // Now that the guest has loaded, flush any unsent messages. + blink::WebLocalFrame* frame = GetEmbedderRenderFrame()->GetWebFrame(); + if (!frame) + return; + + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::HandleScope handle_scope(isolate); + v8::Context::Scope context_scope(frame->MainWorldScriptContext()); + for (const auto& pending_message : pending_messages_) + PostJavaScriptMessage(isolate, + v8::Local<v8::Value>::New(isolate, pending_message)); + + pending_messages_.clear(); +} + +void MimeHandlerViewContainerBase::SendResourceRequest() { + blink::WebLocalFrame* frame = GetEmbedderRenderFrame()->GetWebFrame(); + + blink::WebAssociatedURLLoaderOptions options; + DCHECK(!loader_); + loader_.reset(frame->CreateAssociatedURLLoader(options)); + + // The embedded plugin is allowed to be cross-origin and we should always + // send credentials/cookies with the request. So, use the default mode + // "no-cors" and credentials mode "include". + blink::WebURLRequest request(original_url_); + request.SetRequestContext(blink::WebURLRequest::kRequestContextObject); + // The plugin resource request should skip service workers since "plug-ins + // may get their security origins from their own urls". + // https://w3c.github.io/ServiceWorker/#implementer-concerns + request.SetSkipServiceWorker(true); + + waiting_to_create_throttle_ = true; + loader_->LoadAsynchronously(request, this); +} + +void MimeHandlerViewContainerBase::EmbedderRenderFrameWillBeGone() { + g_mime_handler_view_container_base_map.Get().erase(GetEmbedderRenderFrame()); +} + +void MimeHandlerViewContainerBase::SetEmbeddedLoader( + content::mojom::TransferrableURLLoaderPtr transferrable_url_loader) { + transferrable_url_loader_ = std::move(transferrable_url_loader); + transferrable_url_loader_->url = GURL(plugin_path_ + base::GenerateGUID()); + CreateMimeHandlerViewGuestIfNecessary(); +} + +v8::Local<v8::Object> MimeHandlerViewContainerBase::GetScriptableObject( + v8::Isolate* isolate) { + if (scriptable_object_.IsEmpty()) { + v8::Local<v8::Object> object = + ScriptableObject::Create(isolate, weak_factory_.GetWeakPtr()); + scriptable_object_.Reset(isolate, object); + } + return v8::Local<v8::Object>::New(isolate, scriptable_object_); +} + +} // namespace extensions
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h new file mode 100644 index 0000000..8f3def7b --- /dev/null +++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h
@@ -0,0 +1,134 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef EXTENSIONS_RENDERER_GUEST_VIEW_MIME_HANDLER_VIEW_MIME_HANDLER_VIEW_CONTAINER_BASE_H_ +#define EXTENSIONS_RENDERER_GUEST_VIEW_MIME_HANDLER_VIEW_MIME_HANDLER_VIEW_CONTAINER_BASE_H_ + +#include <vector> + +#include "base/macros.h" +#include "content/public/common/transferrable_url_loader.mojom.h" +#include "extensions/common/api/mime_handler.mojom.h" +#include "mojo/public/cpp/bindings/binding.h" +#include "services/network/public/mojom/url_loader.mojom.h" +#include "third_party/blink/public/web/web_associated_url_loader_client.h" +#include "ui/gfx/geometry/size.h" +#include "url/gurl.h" +#include "v8/include/v8.h" + +namespace blink { +class WebAssociatedURLLoader; +class WebFrame; +} // namespace blink + +namespace content { +class RenderFrame; +class URLLoaderThrottle; +struct WebPluginInfo; +} // namespace content + +namespace extensions { +// A base class for MimeHandlerViewContainer which provides a way of reusing the +// common logic between the BrowserPlugin-based and frame-based container. +class MimeHandlerViewContainerBase : public blink::WebAssociatedURLLoaderClient, + public mime_handler::BeforeUnloadControl { + public: + MimeHandlerViewContainerBase(content::RenderFrame* embedder_render_frame, + const content::WebPluginInfo& info, + const std::string& mime_type, + const GURL& original_url); + + ~MimeHandlerViewContainerBase() override; + + static std::vector<MimeHandlerViewContainerBase*> FromRenderFrame( + content::RenderFrame* render_frame); + + // If the URL matches the same URL that this object has created and it hasn't + // added a throttle yet, it will return a new one for the purpose of + // intercepting it. + std::unique_ptr<content::URLLoaderThrottle> MaybeCreatePluginThrottle( + const GURL& url); + + // Post a JavaScript message to the guest. + void PostJavaScriptMessage(v8::Isolate* isolate, + v8::Local<v8::Value> message); + + // Post |message| to the guest. + void PostMessageFromValue(const base::Value& message); + + protected: + // Returns the frame which is embedding the corresponding plugin element. + virtual content::RenderFrame* GetEmbedderRenderFrame() const; + virtual void CreateMimeHandlerViewGuestIfNecessary() = 0; + virtual blink::WebFrame* GetGuestProxyFrame() const = 0; + virtual int32_t GetInstanceId() const = 0; + virtual gfx::Size GetElementSize() const = 0; + + void DidCompleteLoad(); + void SendResourceRequest(); + void EmbedderRenderFrameWillBeGone(); + v8::Local<v8::Object> GetScriptableObject(v8::Isolate* isolate); + + bool guest_created() const { return guest_created_; } + + // Used when network service is enabled: + bool waiting_to_create_throttle_ = false; + + // The URL of the extension to navigate to. + std::string view_id_; + + // Whether the plugin is embedded or not. + bool is_embedded_; + + private: + class PluginResourceThrottle; + + // Called for embedded plugins when network service is enabled. This is called + // by the URLLoaderThrottle which intercepts the resource load, which is then + // sent to the browser to be handed off to the plugin. + void SetEmbeddedLoader( + content::mojom::TransferrableURLLoaderPtr transferrable_url_loader); + + // Path of the plugin. + const std::string plugin_path_; + + // The MIME type of the plugin. + const std::string mime_type_; + + // The original URL of the plugin. + const GURL original_url_; + + // Used when network service is enabled: + content::mojom::TransferrableURLLoaderPtr transferrable_url_loader_; + + // Used when network service is disabled: + // A URL loader to load the |original_url_| when the plugin is embedded. In + // the embedded case, no URL request is made automatically. + std::unique_ptr<blink::WebAssociatedURLLoader> loader_; + + // The scriptable object that backs the plugin. + v8::Global<v8::Object> scriptable_object_; + + // Pending postMessage messages that need to be sent to the guest. These are + // queued while the guest is loading and once it is fully loaded they are + // delivered so that messages aren't lost. + std::vector<v8::Global<v8::Value>> pending_messages_; + + // True if a guest process has been requested. + bool guest_created_ = false; + + // True if the guest page has fully loaded and its JavaScript onload function + // has been called. + bool guest_loaded_ = false; + + mojo::Binding<mime_handler::BeforeUnloadControl> + before_unload_control_binding_; + + base::WeakPtrFactory<MimeHandlerViewContainerBase> weak_factory_; + + DISALLOW_COPY_AND_ASSIGN(MimeHandlerViewContainerBase); +}; + +} // namespace extensions +#endif // EXTENSIONS_RENDERER_GUEST_VIEW_MIME_HANDLER_VIEW_MIME_HANDLER_VIEW_CONTAINER_BASE_H_
diff --git a/extensions/renderer/resources/guest_view/guest_view_container.js b/extensions/renderer/resources/guest_view/guest_view_container.js index d985c0df..2d550413 100644 --- a/extensions/renderer/resources/guest_view/guest_view_container.js +++ b/extensions/renderer/resources/guest_view/guest_view_container.js
@@ -24,7 +24,6 @@ this.setupAttributes(); privates(this).internalElement = this.createInternalElement$(); - this.setupFocusPropagation(); var shadowRoot = this.element.createShadowRoot(); shadowRoot.appendChild(privates(this).internalElement); @@ -102,16 +101,6 @@ GuestViewContainer.prototype.prepareForReattach_ = function() {}; -GuestViewContainer.prototype.setupFocusPropagation = function() { - if (!this.element.hasAttribute('tabIndex')) { - // GuestViewContainer needs a tabIndex in order to be focusable. - // TODO(fsamuel): It would be nice to avoid exposing a tabIndex attribute - // to allow GuestViewContainer to be focusable. - // See http://crbug.com/231664. - this.element.setAttribute('tabIndex', -1); - } -}; - GuestViewContainer.prototype.focus = function() { // Focus the internal element when focus() is called on the GuestView element. privates(this).internalElement.focus();
diff --git a/extensions/shell/browser/shell_content_browser_client.cc b/extensions/shell/browser/shell_content_browser_client.cc index 20551a5c..abc5f4b 100644 --- a/extensions/shell/browser/shell_content_browser_client.cc +++ b/extensions/shell/browser/shell_content_browser_client.cc
@@ -290,13 +290,12 @@ content::BrowserContext* browser_context, content::RenderFrameHost* frame, bool is_navigation, - network::mojom::URLLoaderFactoryRequest* factory_request, - scoped_refptr<content::RedirectChecker>* redirect_checker) { + network::mojom::URLLoaderFactoryRequest* factory_request) { auto* web_request_api = extensions::BrowserContextKeyedAPIFactory<extensions::WebRequestAPI>::Get( browser_context); - return web_request_api->MaybeProxyURLLoaderFactory( - frame, is_navigation, factory_request, redirect_checker); + return web_request_api->MaybeProxyURLLoaderFactory(frame, is_navigation, + factory_request); } bool ShellContentBrowserClient::HandleExternalProtocol(
diff --git a/extensions/shell/browser/shell_content_browser_client.h b/extensions/shell/browser/shell_content_browser_client.h index b9aca8e..3be19c9 100644 --- a/extensions/shell/browser/shell_content_browser_client.h +++ b/extensions/shell/browser/shell_content_browser_client.h
@@ -77,8 +77,7 @@ content::BrowserContext* browser_context, content::RenderFrameHost* frame_host, bool is_navigation, - network::mojom::URLLoaderFactoryRequest* factory_request, - scoped_refptr<content::RedirectChecker>* redirect_checker) override; + network::mojom::URLLoaderFactoryRequest* factory_request) override; bool HandleExternalProtocol( const GURL& url, content::ResourceRequestInfo::WebContentsGetter web_contents_getter,
diff --git a/extensions/shell/browser/shell_desktop_controller_aura_unittest.cc b/extensions/shell/browser/shell_desktop_controller_aura_unittest.cc index 66e8af7e..d60e4020 100644 --- a/extensions/shell/browser/shell_desktop_controller_aura_unittest.cc +++ b/extensions/shell/browser/shell_desktop_controller_aura_unittest.cc
@@ -31,6 +31,7 @@ #include "ui/display/screen_base.h" #include "ui/events/event.h" #include "ui/events/event_dispatcher.h" +#include "ui/events/keycodes/dom/dom_code.h" #include "ui/events/keycodes/keyboard_codes.h" #include "ui/gfx/geometry/rect.h" @@ -137,7 +138,8 @@ EXPECT_EQ(0, client.insert_char_count()); // Dispatch a keypress on the window tree host to verify it is processed. - ui::KeyEvent key_press(base::char16(97), ui::VKEY_A, ui::EF_NONE); + ui::KeyEvent key_press(base::char16(97), ui::VKEY_A, ui::DomCode::NONE, + ui::EF_NONE); ui::EventDispatchDetails details = controller_->GetPrimaryHost()->dispatcher()->DispatchEvent( controller_->GetPrimaryHost()->window(), &key_press);
diff --git a/google_apis/gaia/OWNERS b/google_apis/gaia/OWNERS index 3708c42..0c702f34 100644 --- a/google_apis/gaia/OWNERS +++ b/google_apis/gaia/OWNERS
@@ -1,3 +1,4 @@ +droger@chromium.org msarda@chromium.org rogerta@chromium.org zelidrag@chromium.org
diff --git a/google_apis/gcm/BUILD.gn b/google_apis/gcm/BUILD.gn index 97642da9..bc2bef948 100644 --- a/google_apis/gcm/BUILD.gn +++ b/google_apis/gcm/BUILD.gn
@@ -66,9 +66,10 @@ deps = [ "//base", "//base/third_party/dynamic_annotations", + "//mojo/public/cpp/system:system", "//net", - "//services/network:network_service", "//services/network/public/cpp", + "//services/network/public/mojom", "//third_party/leveldatabase", "//url", ] @@ -107,6 +108,7 @@ ] deps = [ "//base", + "//mojo/public/cpp/system:system", "//net", "//net:test_support", "//testing/gtest", @@ -164,8 +166,10 @@ "//base", "//base/test:test_support", "//mojo/core/embedder", + "//mojo/public/cpp/system:system", "//net", "//net:test_support", + "//services/network:network_service", "//services/network:test_support", "//testing/gtest", "//third_party/protobuf:protobuf_lite",
diff --git a/google_apis/gcm/DEPS b/google_apis/gcm/DEPS index a044cbe8..ad4f5f8 100644 --- a/google_apis/gcm/DEPS +++ b/google_apis/gcm/DEPS
@@ -11,4 +11,5 @@ "+net", "+third_party/leveldatabase", "+services/network", + "+mojo/public/cpp", ]
diff --git a/google_apis/gcm/base/socket_stream.cc b/google_apis/gcm/base/socket_stream.cc index 6674d9c..964005c 100644 --- a/google_apis/gcm/base/socket_stream.cc +++ b/google_apis/gcm/base/socket_stream.cc
@@ -21,15 +21,22 @@ } // namespace -SocketInputStream::SocketInputStream(net::StreamSocket* socket) - : socket_(socket), +SocketInputStream::SocketInputStream(mojo::ScopedDataPipeConsumerHandle stream) + : stream_(std::move(stream)), + stream_watcher_(FROM_HERE, mojo::SimpleWatcher::ArmingPolicy::MANUAL), + read_size_(0), io_buffer_(new net::IOBuffer(kDefaultBufferSize)), - read_buffer_(new net::DrainableIOBuffer(io_buffer_.get(), - kDefaultBufferSize)), + read_buffer_( + new net::DrainableIOBuffer(io_buffer_.get(), kDefaultBufferSize)), next_pos_(0), last_error_(net::OK), weak_ptr_factory_(this) { - DCHECK(socket->IsConnected()); + stream_watcher_.Watch( + stream_.get(), + MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, + MOJO_TRIGGER_CONDITION_SIGNALS_SATISFIED, + base::BindRepeating(&SocketInputStream::ReadMore, + base::Unretained(this))); } SocketInputStream::~SocketInputStream() { @@ -85,39 +92,74 @@ return read_buffer_->BytesConsumed() - next_pos_; } -net::Error SocketInputStream::Refresh(const base::Closure& callback, +net::Error SocketInputStream::Refresh(base::OnceClosure callback, int byte_limit) { + DCHECK(!read_callback_); DCHECK_NE(GetState(), CLOSED); DCHECK_NE(GetState(), READING); DCHECK_GT(byte_limit, 0); if (byte_limit > read_buffer_->BytesRemaining()) { LOG(ERROR) << "Out of buffer space, closing input stream."; - CloseStream(net::ERR_FILE_TOO_BIG, base::Closure()); + CloseStream(net::ERR_FILE_TOO_BIG); return net::OK; } - if (!socket_->IsConnected()) { - LOG(ERROR) << "Socket was disconnected, closing input stream"; - CloseStream(net::ERR_CONNECTION_CLOSED, base::Closure()); - return net::OK; + read_size_ = byte_limit; + read_callback_ = std::move(callback); + stream_watcher_.ArmOrNotify(); + last_error_ = net::ERR_IO_PENDING; + return net::ERR_IO_PENDING; +} + +void SocketInputStream::ReadMore( + MojoResult result, + const mojo::HandleSignalsState& /* ignored */) { + DCHECK(read_callback_); + DCHECK_NE(0u, read_size_); + + uint32_t num_bytes = read_size_; + if (result == MOJO_RESULT_OK) { + DVLOG(1) << "Refreshing input stream, limit of " << num_bytes << " bytes."; + result = stream_->ReadData(read_buffer_->data(), &num_bytes, + MOJO_READ_DATA_FLAG_NONE); + DVLOG(1) << "Read returned mojo result" << result; } - DVLOG(1) << "Refreshing input stream, limit of " << byte_limit << " bytes."; - int result = - socket_->Read(read_buffer_.get(), - byte_limit, - base::Bind(&SocketInputStream::RefreshCompletionCallback, - weak_ptr_factory_.GetWeakPtr(), - callback)); - DVLOG(1) << "Read returned " << result; - if (result == net::ERR_IO_PENDING) { - last_error_ = net::ERR_IO_PENDING; - return net::ERR_IO_PENDING; + if (result == MOJO_RESULT_SHOULD_WAIT) { + stream_watcher_.ArmOrNotify(); + return; } - RefreshCompletionCallback(base::Closure(), result); - return net::OK; + read_size_ = 0; + if (result != MOJO_RESULT_OK) { + CloseStream(net::ERR_FAILED); + std::move(read_callback_).Run(); + return; + } + + // If an EOF has been received, close the stream. + if (result == MOJO_RESULT_OK && num_bytes == 0) { + CloseStream(net::ERR_CONNECTION_CLOSED); + std::move(read_callback_).Run(); + return; + } + + // If an error occurred before the completion callback could complete, ignore + // the result. + if (GetState() == CLOSED) + return; + + last_error_ = net::OK; + read_buffer_->DidConsume(num_bytes); + // TODO(zea): investigating crbug.com/409985 + CHECK_GT(UnreadByteCount(), 0); + + DVLOG(1) << "Refresh complete with " << num_bytes << " new bytes. " + << "Current position " << next_pos_ << " of " + << read_buffer_->BytesConsumed() << "."; + + std::move(read_callback_).Run(); } void SocketInputStream::RebuildBuffer() { @@ -162,39 +204,6 @@ return READY; } -void SocketInputStream::RefreshCompletionCallback( - const base::Closure& callback, int result) { - // If an error occurred before the completion callback could complete, ignore - // the result. - if (GetState() == CLOSED) - return; - - // Result == 0 implies EOF, which is treated as an error. - if (result == 0) - result = net::ERR_CONNECTION_CLOSED; - - DCHECK_NE(result, net::ERR_IO_PENDING); - - if (result < net::OK) { - DVLOG(1) << "Failed to refresh socket: " << result; - CloseStream(static_cast<net::Error>(result), callback); - return; - } - - DCHECK_GT(result, 0); - last_error_ = net::OK; - read_buffer_->DidConsume(result); - // TODO(zea): investigating crbug.com/409985 - CHECK_GT(UnreadByteCount(), 0); - - DVLOG(1) << "Refresh complete with " << result << " new bytes. " - << "Current position " << next_pos_ - << " of " << read_buffer_->BytesConsumed() << "."; - - if (!callback.is_null()) - callback.Run(); -} - void SocketInputStream::ResetInternal() { read_buffer_->SetOffset(0); next_pos_ = 0; @@ -202,26 +211,27 @@ weak_ptr_factory_.InvalidateWeakPtrs(); // Invalidate any callbacks. } -void SocketInputStream::CloseStream(net::Error error, - const base::Closure& callback) { +void SocketInputStream::CloseStream(net::Error error) { DCHECK_LT(error, net::ERR_IO_PENDING); ResetInternal(); last_error_ = error; LOG(ERROR) << "Closing stream with result " << error; - if (!callback.is_null()) - callback.Run(); } SocketOutputStream::SocketOutputStream( - net::StreamSocket* socket, - const net::NetworkTrafficAnnotationTag& traffic_annotation) - : socket_(socket), + mojo::ScopedDataPipeProducerHandle stream) + : stream_(std::move(stream)), + stream_watcher_(FROM_HERE, mojo::SimpleWatcher::ArmingPolicy::MANUAL), io_buffer_(new net::IOBufferWithSize(kDefaultBufferSize)), next_pos_(0), last_error_(net::OK), - traffic_annotation_(traffic_annotation), weak_ptr_factory_(this) { - DCHECK(socket->IsConnected()); + stream_watcher_.Watch( + stream_.get(), + MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, + MOJO_TRIGGER_CONDITION_SIGNALS_SATISFIED, + base::BindRepeating(&SocketOutputStream::WriteMore, + base::Unretained(this))); } SocketOutputStream::~SocketOutputStream() { @@ -254,7 +264,8 @@ return next_pos_; } -net::Error SocketOutputStream::Flush(const base::Closure& callback) { +net::Error SocketOutputStream::Flush(base::OnceClosure callback) { + DCHECK(!write_callback_); DCHECK_EQ(GetState(), READY); if (!write_buffer_) { @@ -262,27 +273,52 @@ io_buffer_.get(), next_pos_); } - if (!socket_->IsConnected()) { - LOG(ERROR) << "Socket was disconnected, closing output stream"; - last_error_ = net::ERR_CONNECTION_CLOSED; - return net::OK; - } + last_error_ = net::ERR_IO_PENDING; + stream_watcher_.ArmOrNotify(); + write_callback_ = std::move(callback); + return net::ERR_IO_PENDING; +} - DVLOG(1) << "Flushing " << write_buffer_->BytesRemaining() - << " bytes into socket."; - int result = - socket_->Write(write_buffer_.get(), write_buffer_->BytesRemaining(), - base::Bind(&SocketOutputStream::FlushCompletionCallback, - weak_ptr_factory_.GetWeakPtr(), callback), - traffic_annotation_); - DVLOG(1) << "Write returned " << result; - if (result == net::ERR_IO_PENDING) { - last_error_ = net::ERR_IO_PENDING; - return net::ERR_IO_PENDING; - } +void SocketOutputStream::WriteMore(MojoResult result, + const mojo::HandleSignalsState& state) { + DCHECK(write_callback_); + DCHECK(write_buffer_); - FlushCompletionCallback(base::Closure(), result); - return net::OK; + uint32_t num_bytes = write_buffer_->BytesRemaining(); + DVLOG(1) << "Flushing " << num_bytes << " bytes into socket."; + if (result == MOJO_RESULT_OK) { + result = stream_->WriteData(write_buffer_->data(), &num_bytes, + MOJO_WRITE_DATA_FLAG_NONE); + } + if (result == MOJO_RESULT_SHOULD_WAIT) { + stream_watcher_.ArmOrNotify(); + return; + } + if (result != MOJO_RESULT_OK) { + LOG(ERROR) << "Failed to flush socket."; + last_error_ = net::ERR_FAILED; + std::move(write_callback_).Run(); + return; + } + DVLOG(1) << "Wrote " << num_bytes; + // If an error occurred before the completion callback could complete, ignore + // the result. + if (GetState() == CLOSED) + return; + + DCHECK_GE(num_bytes, 0u); + last_error_ = net::OK; + write_buffer_->DidConsume(num_bytes); + if (write_buffer_->BytesRemaining() > 0) { + DVLOG(1) << "Partial flush complete. Retrying."; + // Only a partial write was completed. Flush again to finish the write. + Flush(std::move(write_callback_)); + return; + } + DVLOG(1) << "Socket flush complete."; + write_buffer_ = nullptr; + next_pos_ = 0; + std::move(write_callback_).Run(); } SocketOutputStream::State SocketOutputStream::GetState() const{ @@ -303,43 +339,4 @@ return last_error_; } -void SocketOutputStream::FlushCompletionCallback( - const base::Closure& callback, int result) { - // If an error occurred before the completion callback could complete, ignore - // the result. - if (GetState() == CLOSED) - return; - - // Result == 0 implies EOF, which is treated as an error. - if (result == 0) - result = net::ERR_CONNECTION_CLOSED; - - DCHECK_NE(result, net::ERR_IO_PENDING); - - if (result < net::OK) { - LOG(ERROR) << "Failed to flush socket."; - last_error_ = static_cast<net::Error>(result); - if (!callback.is_null()) - callback.Run(); - return; - } - - DCHECK_GT(result, net::OK); - last_error_ = net::OK; - write_buffer_->DidConsume(result); - - if (write_buffer_->BytesRemaining() > 0) { - DVLOG(1) << "Partial flush complete. Retrying."; - // Only a partial write was completed. Flush again to finish the write. - Flush(callback); - return; - } - - DVLOG(1) << "Socket flush complete."; - write_buffer_ = nullptr; - next_pos_ = 0; - if (!callback.is_null()) - callback.Run(); -} - } // namespace gcm
diff --git a/google_apis/gcm/base/socket_stream.h b/google_apis/gcm/base/socket_stream.h index c68acd00..63556b2 100644 --- a/google_apis/gcm/base/socket_stream.h +++ b/google_apis/gcm/base/socket_stream.h
@@ -2,14 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Protobuf ZeroCopy[Input/Output]Stream implementations capable of using a -// net::StreamSocket. Built to work with Protobuf CodedStreams. +// Protobuf ZeroCopy[Input/Output]Stream implementations capable of using +// mojo data pipes. Built to work with Protobuf CodedStreams. #ifndef GOOGLE_APIS_GCM_BASE_SOCKET_STREAM_H_ #define GOOGLE_APIS_GCM_BASE_SOCKET_STREAM_H_ #include <stdint.h> +#include "base/callback.h" #include "base/callback_forward.h" #include "base/compiler_specific.h" #include "base/macros.h" @@ -17,24 +18,21 @@ #include "base/memory/weak_ptr.h" #include "google/protobuf/io/zero_copy_stream.h" #include "google_apis/gcm/base/gcm_export.h" +#include "mojo/public/cpp/system/data_pipe.h" +#include "mojo/public/cpp/system/simple_watcher.h" #include "net/base/net_errors.h" -#include "net/traffic_annotation/network_traffic_annotation.h" namespace net { class DrainableIOBuffer; class IOBuffer; class IOBufferWithSize; -class StreamSocket; } // namespace net namespace gcm { -// A helper class for interacting with a net::StreamSocket that is receiving -// protobuf encoded messages. A SocketInputStream does not take ownership of -// the socket itself, and it is expected that the life of the input stream -// should match the life of the socket itself (while the socket remains -// connected). If an error is encounters, the input stream will store the error -// in |last_error_|, and GetState() will be set to CLOSED. +// A helper class for interacting with a mojo consumer pipe that is receiving +// protobuf encoded messages. If an error is encounters, the input stream will +// store the error in |last_error_|, and GetState() will be set to CLOSED. // Typical usage: // 1. Check the GetState() of the input stream before using it. If CLOSED, the // input stream must be rebuilt (and the socket likely needs to be @@ -66,7 +64,7 @@ }; // |socket| should already be connected. - explicit SocketInputStream(net::StreamSocket* socket); + explicit SocketInputStream(mojo::ScopedDataPipeConsumerHandle stream); ~SocketInputStream() override; // ZeroCopyInputStream implementation. @@ -85,7 +83,7 @@ // net::OK without invoking callback. // Note: GetState() (and possibly last_error()) should be checked upon // completion to determine whether the Refresh encountered an error. - net::Error Refresh(const base::Closure& callback, int byte_limit); + net::Error Refresh(base::OnceClosure callback, int byte_limit); // Rebuilds the buffer state by copying over any unread data to the beginning // of the buffer and resetting the buffer read/write positions. @@ -94,7 +92,9 @@ void RebuildBuffer(); // Returns the last fatal error encountered. Only valid if GetState() == - // CLOSED. + // CLOSED. Note that all network read errors will be reported as + // net::ERR_FAILED, because mojo data pipe doesn't allow surfacing a more + // specific error code. net::Error last_error() const; // Returns the current state. @@ -104,15 +104,17 @@ // Clears the local state. void ResetInternal(); - // Callback for Socket::Read calls. - void RefreshCompletionCallback(const base::Closure& callback, int result); + void ReadMore(MojoResult result, const mojo::HandleSignalsState& state); // Permanently closes the stream. - void CloseStream(net::Error error, const base::Closure& callback); + void CloseStream(net::Error error); // Internal net components. - net::StreamSocket* const socket_; + mojo::ScopedDataPipeConsumerHandle stream_; + mojo::SimpleWatcher stream_watcher_; + uint32_t read_size_; const scoped_refptr<net::IOBuffer> io_buffer_; + base::OnceClosure read_callback_; // IOBuffer implementation that wraps the data within |io_buffer_| that hasn't // been written to yet by Socket::Read calls. const scoped_refptr<net::DrainableIOBuffer> read_buffer_; @@ -131,19 +133,16 @@ DISALLOW_COPY_AND_ASSIGN(SocketInputStream); }; -// A helper class for writing to a SocketStream with protobuf encoded data. -// A SocketOutputStream does not take ownership of the socket itself, and it is -// expected that the life of the output stream should match the life of the -// socket itself (while the socket remains connected). -// Typical usage: +// A helper class for writing to a mojo producer handle with protobuf encoded +// data. Typical usage: // 1. Check the GetState() of the output stream before using it. If CLOSED, the // output stream must be rebuilt (and the socket likely needs to be // reconnected, as an error was encountered). // 2. If EMPTY, the output stream can be written via a CodedOutputStream using // the ZeroCopyOutputStream interface. // 3. Once done writing, GetState() should be READY, so call Flush(..) to write -// the buffer into the StreamSocket. Wait for the callback to be invoked -// (it's invalid to write to an output stream while it's flushing). +// the buffer into the mojo producer handle. Wait for the callback to be +// invoked (it's invalid to write to an output stream while it's flushing). // 4. Check the GetState() again to ensure the Flush was successful. GetState() // should be EMPTY again. // 5. Repeat. @@ -161,10 +160,7 @@ CLOSED, }; - // |socket| should already be connected. - SocketOutputStream( - net::StreamSocket* socket, - const net::NetworkTrafficAnnotationTag& traffic_annotation); + explicit SocketOutputStream(mojo::ScopedDataPipeProducerHandle stream); ~SocketOutputStream() override; // ZeroCopyOutputStream implementation. @@ -173,20 +169,24 @@ int64_t ByteCount() const override; // Writes the buffer into the Socket. - net::Error Flush(const base::Closure& callback); + net::Error Flush(base::OnceClosure callback); // Returns the last fatal error encountered. Only valid if GetState() == - // CLOSED. + // CLOSED. Note that All network read errors will be reported as + // net::ERR_FAILED, because mojo data pipe doesn't allow surfacing a more + // specific error code. net::Error last_error() const; // Returns the current state. State GetState() const; private: - void FlushCompletionCallback(const base::Closure& callback, int result); + void WriteMore(MojoResult result, const mojo::HandleSignalsState& state); // Internal net components. - net::StreamSocket* const socket_; + mojo::ScopedDataPipeProducerHandle stream_; + mojo::SimpleWatcher stream_watcher_; + base::OnceClosure write_callback_; const scoped_refptr<net::IOBufferWithSize> io_buffer_; // IOBuffer implementation that wraps the data within |io_buffer_| that hasn't // been written to the socket yet. @@ -201,11 +201,6 @@ // Note: last_error_ == net::ERR_IO_PENDING implies GetState() == FLUSHING. net::Error last_error_; - // Network traffic annotation for downstream socket write. SocketOutputStream - // is not reused, hence annotation can be added in constructor and used in all - // subsequent writes. - const net::NetworkTrafficAnnotationTag traffic_annotation_; - base::WeakPtrFactory<SocketOutputStream> weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(SocketOutputStream);
diff --git a/google_apis/gcm/base/socket_stream_unittest.cc b/google_apis/gcm/base/socket_stream_unittest.cc index 7da26d1..b386443 100644 --- a/google_apis/gcm/base/socket_stream_unittest.cc +++ b/google_apis/gcm/base/socket_stream_unittest.cc
@@ -16,10 +16,16 @@ #include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "base/strings/string_piece.h" +#include "base/test/bind_test_util.h" +#include "base/test/scoped_task_environment.h" #include "net/base/ip_address.h" #include "net/log/net_log_source.h" #include "net/socket/socket_test_util.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" +#include "net/url_request/url_request_test_util.h" +#include "services/network/network_context.h" +#include "services/network/network_service.h" +#include "services/network/public/mojom/proxy_resolving_socket.mojom.h" #include "testing/gtest/include/gtest/gtest.h" namespace gcm { @@ -35,77 +41,6 @@ const char kWriteData[] = "write_data"; const int kWriteDataSize = arraysize(kWriteData) - 1; -// A net::StreamSocket that returns a partial write only for the first time. -class FirstWritePartialSocket : public net::StreamSocket { - public: - FirstWritePartialSocket() {} - ~FirstWritePartialSocket() override {} - - // Returns the data that is actually written to the socket. - const std::string& actual_data_written() { return actual_data_written_; } - - // net::Socket implementation. - int Write( - net::IOBuffer* buf, - int buf_len, - net::CompletionOnceCallback callback, - const net::NetworkTrafficAnnotationTag& traffic_annotation) override { - // Make the first write as a partial write. - if (!write_invoked_) { - write_invoked_ = true; - actual_data_written_.append(buf->data(), buf_len / 2); - return buf_len / 2; - } - // For subsequent writes, write everything that caller has passed to us. - actual_data_written_.append(buf->data(), buf_len); - return buf_len; - } - int Read(net::IOBuffer* buf, - int buf_len, - net::CompletionOnceCallback callback) override { - return net::ERR_IO_PENDING; - } - int ReadIfReady(net::IOBuffer* buf, - int buf_len, - net::CompletionOnceCallback callback) override { - return net::ERR_IO_PENDING; - } - int CancelReadIfReady() override { return net::OK; } - int SetReceiveBufferSize(int32_t size) override { return net::OK; } - int SetSendBufferSize(int32_t size) override { return net::OK; } - - // net::StreamSocket implementation. - int Connect(net::CompletionOnceCallback callback) override { return net::OK; } - void Disconnect() override {} - bool IsConnected() const override { return true; } - bool IsConnectedAndIdle() const override { return true; }; - int GetPeerAddress(net::IPEndPoint* address) const override { - return net::OK; - } - int GetLocalAddress(net::IPEndPoint* address) const override { - return net::OK; - } - const net::NetLogWithSource& NetLog() const override { return net_log_; } - bool WasEverUsed() const override { return true; } - bool WasAlpnNegotiated() const override { return false; } - net::NextProto GetNegotiatedProtocol() const override { - return net::kProtoUnknown; - } - bool GetSSLInfo(net::SSLInfo* ssl_info) override { return false; } - void GetConnectionAttempts(net::ConnectionAttempts* out) const override {} - void ClearConnectionAttempts() override {} - void AddConnectionAttempts(const net::ConnectionAttempts& attempts) override { - } - int64_t GetTotalReceivedBytes() const override { return 0; } - void ApplySocketTag(const net::SocketTag& tag) override {} - - private: - net::NetLogWithSource net_log_; - std::string actual_data_written_; - // Whether Write() has been invoked before. - bool write_invoked_ = false; -}; - class GCMSocketStreamTest : public testing::Test { public: GCMSocketStreamTest(); @@ -119,19 +54,21 @@ // Simulates a google::protobuf::io::CodedInputStream read. base::StringPiece DoInputStreamRead(int bytes); + // Simulates a google::protobuf::io::CodedOutputStream write. int DoOutputStreamWrite(const base::StringPiece& write_src); + // Simulates a google::protobuf::io::CodedOutputStream write, but do not call + // flush. + int DoOutputStreamWriteWithoutFlush(const base::StringPiece& write_src); + // Synchronous Refresh wrapper. void WaitForData(int msg_size); - base::MessageLoop* message_loop() { return &message_loop_; }; - net::StaticSocketDataProvider* data_provider() { - return data_provider_.get(); - } SocketInputStream* input_stream() { return socket_input_stream_.get(); } SocketOutputStream* output_stream() { return socket_output_stream_.get(); } - net::StreamSocket* socket() { return socket_.get(); } + + network::mojom::ProxyResolvingSocketPtr mojo_socket_ptr_; void set_socket_output_stream(std::unique_ptr<SocketOutputStream> stream) { socket_output_stream_ = std::move(stream); @@ -142,26 +79,42 @@ void ResetInputStream(); void ResetOutputStream(); - void ConnectCallback(int result); + base::test::ScopedTaskEnvironment scoped_task_environment_; // SocketStreams and their data providers. ReadList mock_reads_; WriteList mock_writes_; std::unique_ptr<net::StaticSocketDataProvider> data_provider_; + std::unique_ptr<net::SSLSocketDataProvider> ssl_data_provider_; std::unique_ptr<SocketInputStream> socket_input_stream_; std::unique_ptr<SocketOutputStream> socket_output_stream_; // net:: components. - std::unique_ptr<net::StreamSocket> socket_; - net::MockClientSocketFactory socket_factory_; net::AddressList address_list_; - - base::MessageLoopForIO message_loop_; + std::unique_ptr<network::NetworkService> network_service_; + network::mojom::NetworkContextPtr network_context_ptr_; + net::MockClientSocketFactory socket_factory_; + net::TestURLRequestContext url_request_context_; + std::unique_ptr<network::NetworkContext> network_context_; + network::mojom::ProxyResolvingSocketFactoryPtr mojo_socket_factory_ptr_; + mojo::ScopedDataPipeConsumerHandle receive_pipe_handle_; + mojo::ScopedDataPipeProducerHandle send_pipe_handle_; }; -GCMSocketStreamTest::GCMSocketStreamTest() { +GCMSocketStreamTest::GCMSocketStreamTest() + : scoped_task_environment_( + base::test::ScopedTaskEnvironment::MainThreadType::IO), + network_service_(network::NetworkService::CreateForTesting()), + url_request_context_(true /* delay_initialization */) { address_list_ = net::AddressList::CreateFromIPAddress( net::IPAddress::IPv4Localhost(), 5228); + socket_factory_.set_enable_read_if_ready(true); + url_request_context_.set_client_socket_factory(&socket_factory_); + url_request_context_.Init(); + + network_context_ = std::make_unique<network::NetworkContext>( + network_service_.get(), mojo::MakeRequest(&network_context_ptr_), + &url_request_context_); } GCMSocketStreamTest::~GCMSocketStreamTest() {} @@ -170,9 +123,12 @@ const WriteList& write_list) { mock_reads_ = read_list; mock_writes_ = write_list; - data_provider_.reset( - new net::StaticSocketDataProvider(mock_reads_, mock_writes_)); + data_provider_ = std::make_unique<net::StaticSocketDataProvider>( + mock_reads_, mock_writes_); + ssl_data_provider_ = + std::make_unique<net::SSLSocketDataProvider>(net::SYNCHRONOUS, net::OK); socket_factory_.AddSocketDataProvider(data_provider_.get()); + socket_factory_.AddSSLSocketDataProvider(ssl_data_provider_.get()); OpenConnection(); ResetInputStream(); ResetOutputStream(); @@ -214,11 +170,23 @@ int GCMSocketStreamTest::DoOutputStreamWrite( const base::StringPiece& write_src) { + int total_bytes_written = DoOutputStreamWriteWithoutFlush(write_src); + base::RunLoop run_loop; + if (socket_output_stream_->Flush(run_loop.QuitClosure()) == + net::ERR_IO_PENDING) { + run_loop.Run(); + } + + return total_bytes_written; +} + +int GCMSocketStreamTest::DoOutputStreamWriteWithoutFlush( + const base::StringPiece& write_src) { DCHECK_EQ(socket_output_stream_->GetState(), SocketOutputStream::EMPTY); int total_bytes_written = 0; - void* buffer = NULL; + void* buffer = nullptr; int size = 0; - int bytes = write_src.size(); + const int bytes = write_src.size(); do { if (!socket_output_stream_->Next(&buffer, &size)) @@ -232,12 +200,6 @@ total_bytes_written += bytes_to_write; } while (total_bytes_written < bytes); - base::RunLoop run_loop; - if (socket_output_stream_->Flush(run_loop.QuitClosure()) == - net::ERR_IO_PENDING) { - run_loop.Run(); - } - return total_bytes_written; } @@ -255,33 +217,49 @@ } void GCMSocketStreamTest::OpenConnection() { - socket_ = socket_factory_.CreateTransportClientSocket( - address_list_, NULL, NULL, net::NetLogSource()); - socket_->Connect( - base::Bind(&GCMSocketStreamTest::ConnectCallback, - base::Unretained(this))); + network_context_->CreateProxyResolvingSocketFactory( + mojo::MakeRequest(&mojo_socket_factory_ptr_)); + base::RunLoop run_loop; + int net_error = net::ERR_FAILED; + const GURL kDestination("https://example.com"); + mojo_socket_factory_ptr_->CreateProxyResolvingSocket( + kDestination, true /* use_tls */, + net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS), + mojo::MakeRequest(&mojo_socket_ptr_), + base::BindLambdaForTesting( + [&](int result, const base::Optional<net::IPEndPoint>& local_addr, + const base::Optional<net::IPEndPoint>& peer_addr, + mojo::ScopedDataPipeConsumerHandle receive_pipe_handle, + mojo::ScopedDataPipeProducerHandle send_pipe_handle) { + net_error = result; + receive_pipe_handle_ = std::move(receive_pipe_handle); + send_pipe_handle_ = std::move(send_pipe_handle); + run_loop.Quit(); + })); + run_loop.Run(); + PumpLoop(); } -void GCMSocketStreamTest::ConnectCallback(int result) {} - void GCMSocketStreamTest::ResetInputStream() { - DCHECK(socket_.get()); - socket_input_stream_.reset(new SocketInputStream(socket_.get())); + DCHECK(mojo_socket_ptr_); + socket_input_stream_ = + std::make_unique<SocketInputStream>(std::move(receive_pipe_handle_)); } void GCMSocketStreamTest::ResetOutputStream() { - DCHECK(socket_.get()); - socket_output_stream_.reset( - new SocketOutputStream(socket_.get(), TRAFFIC_ANNOTATION_FOR_TESTS)); + DCHECK(mojo_socket_ptr_); + socket_output_stream_ = + std::make_unique<SocketOutputStream>(std::move(send_pipe_handle_)); } // A read where all data is already available. TEST_F(GCMSocketStreamTest, ReadDataSync) { - BuildSocket(ReadList(1, net::MockRead(net::SYNCHRONOUS, - kReadData, - kReadDataSize)), - WriteList()); + ReadList read_list; + read_list.push_back( + net::MockRead(net::SYNCHRONOUS, kReadData, kReadDataSize)); + read_list.push_back(net::MockRead(net::ASYNC, net::OK) /* EOF */); + BuildSocket(read_list, WriteList()); WaitForData(kReadDataSize); ASSERT_EQ(std::string(kReadData, kReadDataSize), @@ -301,6 +279,9 @@ net::MockRead(net::SYNCHRONOUS, &kReadData[first_read_len], second_read_len)); + // Add an EOF. + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK)); + BuildSocket(read_list, WriteList()); WaitForData(kReadDataSize); @@ -317,6 +298,7 @@ net::MockRead(net::ASYNC, kReadData, first_read_len)); read_list.push_back( net::MockRead(net::ASYNC, &kReadData[first_read_len], second_read_len)); + read_list.push_back(net::MockRead(net::ASYNC, net::OK) /* EOF */); BuildSocket(read_list, WriteList()); WaitForData(kReadDataSize); ASSERT_EQ(std::string(kReadData, kReadDataSize), @@ -327,10 +309,13 @@ TEST_F(GCMSocketStreamTest, TwoReadsAtOnce) { std::string long_data = std::string(kReadData, kReadDataSize) + std::string(kReadData2, kReadData2Size); - BuildSocket(ReadList(1, net::MockRead(net::SYNCHRONOUS, - long_data.c_str(), - long_data.size())), - WriteList()); + ReadList read_list; + read_list.push_back( + net::MockRead(net::SYNCHRONOUS, long_data.c_str(), long_data.size())); + // Add an EOF. + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK)); + + BuildSocket(read_list, WriteList()); WaitForData(kReadDataSize); ASSERT_EQ(std::string(kReadData, kReadDataSize), @@ -346,10 +331,14 @@ TEST_F(GCMSocketStreamTest, TwoReadsAtOnceWithRebuild) { std::string long_data = std::string(kReadData, kReadDataSize) + std::string(kReadData2, kReadData2Size); - BuildSocket(ReadList(1, net::MockRead(net::SYNCHRONOUS, - long_data.c_str(), - long_data.size())), - WriteList()); + ReadList read_list; + + read_list.push_back( + net::MockRead(net::SYNCHRONOUS, long_data.c_str(), long_data.size())); + // Add an EOF. + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK)); + + BuildSocket(read_list, WriteList()); WaitForData(kReadDataSize); ASSERT_EQ(std::string(kReadData, kReadDataSize), @@ -369,23 +358,23 @@ WaitForData(kReadDataSize); ASSERT_EQ(SocketInputStream::CLOSED, input_stream()->GetState()); - ASSERT_EQ(result, input_stream()->last_error()); + ASSERT_EQ(net::ERR_FAILED, input_stream()->last_error()); } // Simulate a read after the connection is closed. TEST_F(GCMSocketStreamTest, ReadDisconnected) { - BuildSocket(ReadList(), WriteList()); - socket()->Disconnect(); + BuildSocket(ReadList(1, net::MockRead(net::SYNCHRONOUS, net::ERR_IO_PENDING)), + WriteList()); + mojo_socket_ptr_.reset(); WaitForData(kReadDataSize); ASSERT_EQ(SocketInputStream::CLOSED, input_stream()->GetState()); - ASSERT_EQ(net::ERR_CONNECTION_CLOSED, input_stream()->last_error()); + ASSERT_EQ(net::ERR_FAILED, input_stream()->last_error()); } // Write a full message in one go. TEST_F(GCMSocketStreamTest, WriteFull) { - BuildSocket(ReadList(), - WriteList(1, net::MockWrite(net::SYNCHRONOUS, - kWriteData, + BuildSocket(ReadList(1, net::MockRead(net::SYNCHRONOUS, net::ERR_IO_PENDING)), + WriteList(1, net::MockWrite(net::SYNCHRONOUS, kWriteData, kWriteDataSize))); ASSERT_EQ(kWriteDataSize, DoOutputStreamWrite(base::StringPiece(kWriteData, @@ -401,7 +390,8 @@ write_list.push_back(net::MockWrite(net::SYNCHRONOUS, kWriteData + kWriteDataSize / 2, kWriteDataSize / 2)); - BuildSocket(ReadList(), write_list); + BuildSocket(ReadList(1, net::MockRead(net::SYNCHRONOUS, net::ERR_IO_PENDING)), + write_list); ASSERT_EQ(kWriteDataSize, DoOutputStreamWrite(base::StringPiece(kWriteData, kWriteDataSize))); @@ -409,13 +399,75 @@ // Regression test for crbug.com/866635. TEST_F(GCMSocketStreamTest, WritePartialWithLengthChecking) { - auto socket = std::make_unique<FirstWritePartialSocket>(); - auto socket_output_stream = std::make_unique<SocketOutputStream>( - socket.get(), TRAFFIC_ANNOTATION_FOR_TESTS); + // Add a prefix data in front of kWriteData. + std::string prefix_data("xxxxx"); + const size_t kPrefixDataSize = 5; + // |pipe| has a capacity that is one byte smaller than |prefix_data.size()| + + // |kWriteDataSize|. This is so that the first write is a partial write + // of |prefix_data|, and the second write is a complete write of kWriteData. + // The 1 byte shortage is to simulate the partial write. + mojo::DataPipe pipe(kWriteDataSize + prefix_data.size() - 1 /* size */); + mojo::ScopedDataPipeConsumerHandle consumer_handle = + std::move(pipe.consumer_handle); + mojo::ScopedDataPipeProducerHandle producer_handle = + std::move(pipe.producer_handle); + + // Prepopulate |producer_handle| of |prefix_data|, now the pipe's capacity is + // less than |kWriteDataSize|. + uint32_t num_bytes = prefix_data.size(); + MojoResult r = producer_handle->WriteData(prefix_data.data(), &num_bytes, + MOJO_WRITE_DATA_FLAG_NONE); + ASSERT_EQ(MOJO_RESULT_OK, r); + ASSERT_EQ(prefix_data.size(), num_bytes); + + // Create a SocketOutputStream from the producer pipe. + auto socket_output_stream = + std::make_unique<SocketOutputStream>(std::move(producer_handle)); set_socket_output_stream(std::move(socket_output_stream)); - ASSERT_EQ(kWriteDataSize, - DoOutputStreamWrite(base::StringPiece(kWriteData, kWriteDataSize))); - EXPECT_EQ(kWriteData, socket->actual_data_written()); + + // Write but do not flush. + EXPECT_EQ(kWriteDataSize, DoOutputStreamWriteWithoutFlush(kWriteData)); + + base::RunLoop run_loop; + output_stream()->Flush(run_loop.QuitClosure()); + // Flush should be able to flush exactly 5 bytes, because of the data pipe + // capacity. + base::RunLoop().RunUntilIdle(); + + std::string contents; + // Read prefix. + char buffer[kPrefixDataSize]; + uint32_t read_size = sizeof(buffer); + ASSERT_EQ(MOJO_RESULT_OK, consumer_handle->ReadData( + buffer, &read_size, MOJO_READ_DATA_FLAG_NONE)); + ASSERT_EQ(kPrefixDataSize, read_size); + contents += std::string(buffer, read_size); + + base::RunLoop().RunUntilIdle(); + // Flush now should complete. + run_loop.Run(); + + // Closes |producer_handle|. + set_socket_output_stream(nullptr); + + // Read everything in |consumer_handle| now that |producer_handle| is closed + // to make sure data is as what we expected, and there is no trailing garbage + // data. + while (true) { + char buffer[5]; + uint32_t read_size = sizeof(buffer); + MojoResult r = + consumer_handle->ReadData(buffer, &read_size, MOJO_READ_DATA_FLAG_NONE); + if (r == MOJO_RESULT_SHOULD_WAIT) + continue; + if (r != MOJO_RESULT_OK) + break; + ASSERT_EQ(MOJO_RESULT_OK, r); + contents += std::string(buffer, read_size); + } + std::string expected(prefix_data); + expected.append(kWriteData); + EXPECT_EQ(expected, contents); } // Write a message completely asynchronously (returns IO_PENDING before @@ -428,7 +480,8 @@ write_list.push_back(net::MockWrite(net::SYNCHRONOUS, kWriteData + kWriteDataSize / 2, kWriteDataSize / 2)); - BuildSocket(ReadList(), write_list); + BuildSocket(ReadList(1, net::MockRead(net::SYNCHRONOUS, net::ERR_IO_PENDING)), + write_list); ASSERT_EQ(kWriteDataSize, DoOutputStreamWrite(base::StringPiece(kWriteData, kWriteDataSize))); @@ -436,11 +489,14 @@ // Write a message then read a message. TEST_F(GCMSocketStreamTest, WriteThenRead) { - BuildSocket(ReadList(1, net::MockRead(net::SYNCHRONOUS, - kReadData, - kReadDataSize)), - WriteList(1, net::MockWrite(net::SYNCHRONOUS, - kWriteData, + ReadList read_list; + read_list.push_back( + net::MockRead(net::SYNCHRONOUS, kReadData, kReadDataSize)); + // Add an EOF. + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK)); + + BuildSocket(read_list, + WriteList(1, net::MockWrite(net::SYNCHRONOUS, kWriteData, kWriteDataSize))); ASSERT_EQ(kWriteDataSize, @@ -454,11 +510,14 @@ // Read a message then write a message. TEST_F(GCMSocketStreamTest, ReadThenWrite) { - BuildSocket(ReadList(1, net::MockRead(net::SYNCHRONOUS, - kReadData, - kReadDataSize)), - WriteList(1, net::MockWrite(net::SYNCHRONOUS, - kWriteData, + ReadList read_list; + read_list.push_back( + net::MockRead(net::SYNCHRONOUS, kReadData, kReadDataSize)); + // Add an EOF. + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK)); + + BuildSocket(read_list, + WriteList(1, net::MockWrite(net::SYNCHRONOUS, kWriteData, kWriteDataSize))); WaitForData(kReadDataSize); @@ -473,20 +532,25 @@ // Simulate a write that gets aborted. TEST_F(GCMSocketStreamTest, WriteError) { int result = net::ERR_ABORTED; - BuildSocket(ReadList(), + BuildSocket(ReadList(1, net::MockRead(net::SYNCHRONOUS, net::ERR_IO_PENDING)), WriteList(1, net::MockWrite(net::SYNCHRONOUS, result))); - DoOutputStreamWrite(base::StringPiece(kWriteData, kWriteDataSize)); + // Mojo data pipe buffers data, so there is a delay before write error is + // observed.Continue writing if error is not observed. + while (output_stream()->GetState() != SocketOutputStream::CLOSED) { + DoOutputStreamWrite(base::StringPiece(kWriteData, kWriteDataSize)); + } ASSERT_EQ(SocketOutputStream::CLOSED, output_stream()->GetState()); - ASSERT_EQ(result, output_stream()->last_error()); + ASSERT_EQ(net::ERR_FAILED, output_stream()->last_error()); } // Simulate a write after the connection is closed. TEST_F(GCMSocketStreamTest, WriteDisconnected) { - BuildSocket(ReadList(), WriteList()); - socket()->Disconnect(); + BuildSocket(ReadList(1, net::MockRead(net::SYNCHRONOUS, net::ERR_IO_PENDING)), + WriteList()); + mojo_socket_ptr_.reset(); DoOutputStreamWrite(base::StringPiece(kWriteData, kWriteDataSize)); ASSERT_EQ(SocketOutputStream::CLOSED, output_stream()->GetState()); - ASSERT_EQ(net::ERR_CONNECTION_CLOSED, output_stream()->last_error()); + ASSERT_EQ(net::ERR_FAILED, output_stream()->last_error()); } } // namespace
diff --git a/google_apis/gcm/engine/connection_factory.h b/google_apis/gcm/engine/connection_factory.h index c837814..fad6843 100644 --- a/google_apis/gcm/engine/connection_factory.h +++ b/google_apis/gcm/engine/connection_factory.h
@@ -7,9 +7,11 @@ #include <string> +#include "base/callback_forward.h" #include "base/time/time.h" #include "google_apis/gcm/base/gcm_export.h" #include "google_apis/gcm/engine/connection_handler.h" +#include "services/network/public/mojom/proxy_resolving_socket.mojom.h" class GURL; @@ -23,6 +25,9 @@ namespace gcm { +using GetProxyResolvingFactoryCallback = base::RepeatingCallback<void( + network::mojom::ProxyResolvingSocketFactoryRequest)>; + // Factory for creating a ConnectionHandler and maintaining its connection. // The factory retains ownership of the ConnectionHandler and will enforce // backoff policies when attempting connections.
diff --git a/google_apis/gcm/engine/connection_factory_impl.cc b/google_apis/gcm/engine/connection_factory_impl.cc index cde535e5..8ebea56e 100644 --- a/google_apis/gcm/engine/connection_factory_impl.cc +++ b/google_apis/gcm/engine/connection_factory_impl.cc
@@ -23,8 +23,7 @@ #include "net/socket/client_socket_handle.h" #include "net/socket/client_socket_pool_manager.h" #include "net/ssl/ssl_config_service.h" -#include "services/network/proxy_resolving_client_socket.h" -#include "services/network/proxy_resolving_client_socket_factory.h" +#include "net/traffic_annotation/network_traffic_annotation.h" namespace gcm { @@ -52,15 +51,13 @@ ConnectionFactoryImpl::ConnectionFactoryImpl( const std::vector<GURL>& mcs_endpoints, const net::BackoffEntry::Policy& backoff_policy, - net::URLRequestContext* url_request_context, + GetProxyResolvingFactoryCallback get_socket_factory_callback, GCMStatsRecorder* recorder) : mcs_endpoints_(mcs_endpoints), next_endpoint_(0), last_successful_endpoint_(0), backoff_policy_(backoff_policy), - socket_factory_( - std::make_unique<network::ProxyResolvingClientSocketFactory>( - url_request_context)), + get_socket_factory_callback_(get_socket_factory_callback), connecting_(false), waiting_for_backoff_(false), waiting_for_network_online_(false), @@ -288,18 +285,6 @@ return mcs_endpoints_[next_endpoint_]; } -net::IPEndPoint ConnectionFactoryImpl::GetPeerIP() { - if (!socket_) - return net::IPEndPoint(); - - net::IPEndPoint ip_endpoint; - int result = socket_->GetPeerAddress(&ip_endpoint); - if (result != net::OK) - return net::IPEndPoint(); - - return ip_endpoint; -} - void ConnectionFactoryImpl::ConnectImpl() { event_tracker_.StartConnectionAttempt(); StartConnection(); @@ -316,21 +301,8 @@ connecting_ = true; GURL current_endpoint = GetCurrentEndpoint(); recorder_->RecordConnectionInitiated(current_endpoint.host()); - socket_ = socket_factory_->CreateSocket(current_endpoint, true /*use_tls*/); - int status = socket_->Connect(base::BindRepeating( - &ConnectionFactoryImpl::OnConnectDone, weak_ptr_factory_.GetWeakPtr())); - if (status != net::ERR_IO_PENDING) - OnConnectDone(status); -} -void ConnectionFactoryImpl::InitHandler() { - // May be null in tests. - mcs_proto::LoginRequest login_request; - if (!request_builder_.is_null()) { - request_builder_.Run(&login_request); - DCHECK(login_request.IsInitialized()); - event_tracker_.WriteToLoginRequest(&login_request); - } + get_socket_factory_callback_.Run(mojo::MakeRequest(&socket_factory_)); net::NetworkTrafficAnnotationTag traffic_annotation = net::DefineNetworkTrafficAnnotation("gcm_connection_factory", R"( @@ -368,7 +340,27 @@ "but does not have any effect on other Google Cloud messages." )"); - connection_handler_->Init(login_request, traffic_annotation, socket_.get()); + socket_factory_->CreateProxyResolvingSocket( + current_endpoint, true /* use_tls */, + net::MutableNetworkTrafficAnnotationTag(traffic_annotation), + mojo::MakeRequest(&socket_), + base::BindOnce(&ConnectionFactoryImpl::OnConnectDone, + base::Unretained(this))); +} + +void ConnectionFactoryImpl::InitHandler( + mojo::ScopedDataPipeConsumerHandle receive_stream, + mojo::ScopedDataPipeProducerHandle send_stream) { + mcs_proto::LoginRequest login_request; + // May be null in tests. + if (!request_builder_.is_null()) { + request_builder_.Run(&login_request); + DCHECK(login_request.IsInitialized()); + event_tracker_.WriteToLoginRequest(&login_request); + } + + connection_handler_->Init(login_request, std::move(receive_stream), + std::move(send_stream)); } std::unique_ptr<net::BackoffEntry> ConnectionFactoryImpl::CreateBackoffEntry( @@ -390,8 +382,20 @@ return base::TimeTicks::Now(); } -void ConnectionFactoryImpl::OnConnectDone(int result) { +void ConnectionFactoryImpl::OnConnectDone( + int result, + const base::Optional<net::IPEndPoint>& local_addr, + const base::Optional<net::IPEndPoint>& peer_addr, + mojo::ScopedDataPipeConsumerHandle receive_stream, + mojo::ScopedDataPipeProducerHandle send_stream) { DCHECK_NE(net::ERR_IO_PENDING, result); + if (!connection_handler_) { + // If CloseSocket() is called while a connect is pending, this callback will + // be called with net::ERR_ABORTED. Checking |connection_handler_| serves as + // a proxy to checking whether CloseSocket() is called. + DCHECK_EQ(net::ERR_ABORTED, result); + return; + } if (result != net::OK) { LOG(ERROR) << "Failed to connect to MCS endpoint with error " << result; UMA_HISTOGRAM_BOOLEAN("GCM.ConnectionSuccessRate", false); @@ -426,7 +430,11 @@ connecting_ = false; handshake_in_progress_ = true; DVLOG(1) << "MCS endpoint socket connection success, starting login."; - InitHandler(); + // |peer_addr| is only non-null if result == net::OK and the connection is not + // through a proxy. + if (peer_addr) + peer_addr_ = peer_addr.value(); + InitHandler(std::move(receive_stream), std::move(send_stream)); } void ConnectionFactoryImpl::ConnectionHandlerCallback(int result) { @@ -451,7 +459,7 @@ event_tracker_.ConnectionAttemptSucceeded(); if (listener_) - listener_->OnConnected(GetCurrentEndpoint(), GetPeerIP()); + listener_->OnConnected(GetCurrentEndpoint(), peer_addr_); } void ConnectionFactoryImpl::CloseSocket() { @@ -460,9 +468,8 @@ if (connection_handler_) connection_handler_->Reset(); - if (socket_) - socket_->Disconnect(); - socket_ = nullptr; + socket_.reset(); + peer_addr_ = net::IPEndPoint(); } } // namespace gcm
diff --git a/google_apis/gcm/engine/connection_factory_impl.h b/google_apis/gcm/engine/connection_factory_impl.h index 67c5412..4bd944c 100644 --- a/google_apis/gcm/engine/connection_factory_impl.h +++ b/google_apis/gcm/engine/connection_factory_impl.h
@@ -9,26 +9,20 @@ #include <stddef.h> +#include "base/callback.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/time/time.h" #include "google_apis/gcm/engine/connection_event_tracker.h" #include "google_apis/gcm/engine/connection_handler.h" #include "google_apis/gcm/protocol/mcs.pb.h" +#include "mojo/public/cpp/system/data_pipe.h" #include "net/base/backoff_entry.h" #include "net/base/network_change_notifier.h" #include "net/log/net_log_with_source.h" +#include "services/network/public/mojom/proxy_resolving_socket.mojom.h" #include "url/gurl.h" -namespace network { -class ProxyResolvingClientSocket; -class ProxyResolvingClientSocketFactory; -} - -namespace net { -class URLRequestContext; -} - namespace gcm { class GCMStatsRecorder; @@ -37,12 +31,12 @@ public ConnectionFactory, public net::NetworkChangeNotifier::NetworkChangeObserver { public: - // The caller is responsible for making sure the ConnectionFactoryImpl is - // destroyed before the |url_request_context|. - ConnectionFactoryImpl(const std::vector<GURL>& mcs_endpoints, - const net::BackoffEntry::Policy& backoff_policy, - net::URLRequestContext* url_request_context, - GCMStatsRecorder* recorder); + ConnectionFactoryImpl( + const std::vector<GURL>& mcs_endpoints, + const net::BackoffEntry::Policy& backoff_policy, + GetProxyResolvingFactoryCallback get_socket_factory_callback, + // need task runner here. + GCMStatsRecorder* recorder); ~ConnectionFactoryImpl() override; // ConnectionFactory implementation. @@ -67,10 +61,6 @@ // attempt will be made. GURL GetCurrentEndpoint() const; - // Returns the IPEndpoint to which the factory is currently connected. If no - // connection is active, returns an empty IPEndpoint. - net::IPEndPoint GetPeerIP(); - protected: // Initiate the connection to the GCM server. // Virtual for testing. @@ -78,7 +68,8 @@ // Helper method for initalizing the connection hander. // Virtual for testing. - virtual void InitHandler(); + virtual void InitHandler(mojo::ScopedDataPipeConsumerHandle receive_stream, + mojo::ScopedDataPipeProducerHandle send_stream); // Helper method for creating a backoff entry. // Virtual for testing. @@ -97,8 +88,12 @@ // Virtual for testing. virtual base::TimeTicks NowTicks(); - // Callback for Socket connection completion. - void OnConnectDone(int result); + // Callback for Socket connection completion. This is public for testing. + void OnConnectDone(int result, + const base::Optional<net::IPEndPoint>& local_addr, + const base::Optional<net::IPEndPoint>& peer_addr, + mojo::ScopedDataPipeConsumerHandle receive_stream, + mojo::ScopedDataPipeProducerHandle send_stream); // ConnectionHandler callback for connection issues. void ConnectionHandlerCallback(int result); @@ -138,11 +133,15 @@ // The backoff policy to use. const net::BackoffEntry::Policy backoff_policy_; - // ---- net:: components for establishing connections. ---- + // ---- network:: components for establishing connections. ---- // Socket factory for creating new GCM connections. - std::unique_ptr<network::ProxyResolvingClientSocketFactory> socket_factory_; + GetProxyResolvingFactoryCallback get_socket_factory_callback_; + network::mojom::ProxyResolvingSocketFactoryPtr socket_factory_; // The handle to the socket for the current connection, if one exists. - std::unique_ptr<network::ProxyResolvingClientSocket> socket_; + network::mojom::ProxyResolvingSocketPtr socket_; + // Peer address of |socket_|. + net::IPEndPoint peer_addr_; + // Current backoff entry. std::unique_ptr<net::BackoffEntry> backoff_entry_; // Backoff entry from previous connection attempt. Updated on each login
diff --git a/google_apis/gcm/engine/connection_factory_impl_unittest.cc b/google_apis/gcm/engine/connection_factory_impl_unittest.cc index a707f908..8440d03 100644 --- a/google_apis/gcm/engine/connection_factory_impl_unittest.cc +++ b/google_apis/gcm/engine/connection_factory_impl_unittest.cc
@@ -9,7 +9,9 @@ #include <utility> #include "base/message_loop/message_loop.h" +#include "base/optional.h" #include "base/run_loop.h" +#include "base/test/scoped_task_environment.h" #include "base/test/simple_test_tick_clock.h" #include "base/threading/thread_task_runner_handle.h" #include "google_apis/gcm/base/mcs_util.h" @@ -18,6 +20,9 @@ #include "net/base/backoff_entry.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "net/url_request/url_request_test_util.h" +#include "services/network/network_context.h" +#include "services/network/network_service.h" +#include "services/network/public/mojom/proxy_resolving_socket.mojom.h" #include "testing/gtest/include/gtest/gtest.h" class Policy; @@ -86,15 +91,17 @@ // backoff policy. class TestConnectionFactoryImpl : public ConnectionFactoryImpl { public: - TestConnectionFactoryImpl(net::URLRequestContext* request_context, - const base::Closure& finished_callback); + TestConnectionFactoryImpl( + GetProxyResolvingFactoryCallback get_socket_factory_callback, + const base::Closure& finished_callback); ~TestConnectionFactoryImpl() override; void InitializeFactory(); // Overridden stubs. void StartConnection() override; - void InitHandler() override; + void InitHandler(mojo::ScopedDataPipeConsumerHandle receive_stream, + mojo::ScopedDataPipeProducerHandle send_stream) override; std::unique_ptr<net::BackoffEntry> CreateBackoffEntry( const net::BackoffEntry::Policy* const policy) override; std::unique_ptr<ConnectionHandler> CreateConnectionHandler( @@ -139,14 +146,17 @@ FakeConnectionHandler* fake_handler_; // Dummy GCM Stats recorder. FakeGCMStatsRecorder dummy_recorder_; + // Dummy mojo pipes. + mojo::DataPipe receive_pipe_; + mojo::DataPipe send_pipe_; }; TestConnectionFactoryImpl::TestConnectionFactoryImpl( - net::URLRequestContext* request_context, + GetProxyResolvingFactoryCallback get_socket_factory_callback, const base::Closure& finished_callback) : ConnectionFactoryImpl(BuildEndpoints(), net::BackoffEntry::Policy(), - request_context, + get_socket_factory_callback, &dummy_recorder_), connect_result_(net::ERR_UNEXPECTED), num_expected_attempts_(0), @@ -169,8 +179,12 @@ ASSERT_GT(num_expected_attempts_, 0); ASSERT_FALSE(GetConnectionHandler()->CanSendMessage()); std::unique_ptr<mcs_proto::LoginRequest> request(BuildLoginRequest(0, 0, "")); - GetConnectionHandler()->Init(*request, TRAFFIC_ANNOTATION_FOR_TESTS, NULL); - OnConnectDone(connect_result_); + GetConnectionHandler()->Init(*request, + std::move(receive_pipe_.consumer_handle), + std::move(send_pipe_.producer_handle)); + OnConnectDone(connect_result_, net::IPEndPoint(), net::IPEndPoint(), + mojo::ScopedDataPipeConsumerHandle(), + mojo::ScopedDataPipeProducerHandle()); if (!NextRetryAttempt().is_null()) { // Advance the time to the next retry time. base::TimeDelta time_till_retry = @@ -185,7 +199,9 @@ } } -void TestConnectionFactoryImpl::InitHandler() { +void TestConnectionFactoryImpl::InitHandler( + mojo::ScopedDataPipeConsumerHandle receive_stream, + mojo::ScopedDataPipeProducerHandle send_stream) { EXPECT_NE(connect_result_, net::ERR_UNEXPECTED); if (!delay_login_) ConnectionHandlerCallback(net::OK); @@ -272,31 +288,44 @@ } private: + void GetProxyResolvingSocketFactory( + network::mojom::ProxyResolvingSocketFactoryRequest request) { + network_context_->CreateProxyResolvingSocketFactory(std::move(request)); + } void ConnectionsComplete(); - base::MessageLoop message_loop_; - - // Dummy request context that is not used to make network requests, and is - // added to make ProxyResolvingClientSocketFactory to not DCHECK on a null - // context. - net::TestURLRequestContext request_context_; - + base::test::ScopedTaskEnvironment scoped_task_environment_; TestConnectionFactoryImpl factory_; std::unique_ptr<base::RunLoop> run_loop_; GURL connected_server_; + std::unique_ptr<network::NetworkService> network_service_; + network::mojom::NetworkContextPtr network_context_ptr_; + std::unique_ptr<network::NetworkContext> network_context_; }; ConnectionFactoryImplTest::ConnectionFactoryImplTest() - : factory_(&request_context_, + : scoped_task_environment_( + base::test::ScopedTaskEnvironment::MainThreadType::IO), + factory_(base::BindRepeating( + &ConnectionFactoryImplTest::GetProxyResolvingSocketFactory, + base::Unretained(this)), base::Bind(&ConnectionFactoryImplTest::ConnectionsComplete, base::Unretained(this))), - run_loop_(new base::RunLoop()) { + run_loop_(new base::RunLoop()), + network_service_(network::NetworkService::CreateForTesting()) { + network::mojom::NetworkContextParamsPtr params = + network::mojom::NetworkContextParams::New(); + // Use a fixed proxy config, to avoid dependencies on local network + // configuration. + params->initial_proxy_config = net::ProxyConfigWithAnnotation::CreateDirect(); + network_context_ = std::make_unique<network::NetworkContext>( + network_service_.get(), mojo::MakeRequest(&network_context_ptr_), + std::move(params)); factory()->SetConnectionListener(this); - factory()->Initialize( - ConnectionFactory::BuildLoginRequestCallback(), - ConnectionHandler::ProtoReceivedCallback(), - ConnectionHandler::ProtoSentCallback()); + factory()->Initialize(ConnectionFactory::BuildLoginRequestCallback(), + ConnectionHandler::ProtoReceivedCallback(), + ConnectionHandler::ProtoSentCallback()); } ConnectionFactoryImplTest::~ConnectionFactoryImplTest() {}
diff --git a/google_apis/gcm/engine/connection_handler.h b/google_apis/gcm/engine/connection_handler.h index ee110c11..857e657 100644 --- a/google_apis/gcm/engine/connection_handler.h +++ b/google_apis/gcm/engine/connection_handler.h
@@ -9,7 +9,7 @@ #include "base/callback.h" #include "google_apis/gcm/base/gcm_export.h" -#include "net/traffic_annotation/network_traffic_annotation.h" +#include "mojo/public/cpp/system/data_pipe.h" namespace net{ class StreamSocket; @@ -48,8 +48,8 @@ // Note: It is correct and expected to call Init more than once, as connection // issues are encountered and new connections must be made. virtual void Init(const mcs_proto::LoginRequest& login_request, - const net::NetworkTrafficAnnotationTag& traffic_annotation, - net::StreamSocket* socket) = 0; + mojo::ScopedDataPipeConsumerHandle receive_stream, + mojo::ScopedDataPipeProducerHandle send_stream) = 0; // Resets the handler and any internal state. Should be called any time // a connection reset happens externally to the handler.
diff --git a/google_apis/gcm/engine/connection_handler_impl.cc b/google_apis/gcm/engine/connection_handler_impl.cc index 887a4bea..f6812988 100644 --- a/google_apis/gcm/engine/connection_handler_impl.cc +++ b/google_apis/gcm/engine/connection_handler_impl.cc
@@ -50,7 +50,6 @@ const ProtoSentCallback& write_callback, const ConnectionChangedCallback& connection_callback) : read_timeout_(read_timeout), - socket_(NULL), handshake_complete_(false), message_tag_(0), message_size_(0), @@ -66,8 +65,8 @@ void ConnectionHandlerImpl::Init( const mcs_proto::LoginRequest& login_request, - const net::NetworkTrafficAnnotationTag& traffic_annotation, - net::StreamSocket* socket) { + mojo::ScopedDataPipeConsumerHandle receive_stream, + mojo::ScopedDataPipeProducerHandle send_stream) { DCHECK(!read_callback_.is_null()); DCHECK(!write_callback_.is_null()); DCHECK(!connection_callback_.is_null()); @@ -78,9 +77,8 @@ handshake_complete_ = false; message_tag_ = 0; message_size_ = 0; - socket_ = socket; - input_stream_.reset(new SocketInputStream(socket_)); - output_stream_.reset(new SocketOutputStream(socket_, traffic_annotation)); + input_stream_.reset(new SocketInputStream(std::move(receive_stream))); + output_stream_.reset(new SocketOutputStream(std::move(send_stream))); Login(login_request); } @@ -481,9 +479,6 @@ void ConnectionHandlerImpl::CloseConnection() { DVLOG(1) << "Closing connection."; read_timeout_timer_.Stop(); - if (socket_) - socket_->Disconnect(); - socket_ = NULL; handshake_complete_ = false; message_tag_ = 0; message_size_ = 0;
diff --git a/google_apis/gcm/engine/connection_handler_impl.h b/google_apis/gcm/engine/connection_handler_impl.h index 5cd1749..e88749cc 100644 --- a/google_apis/gcm/engine/connection_handler_impl.h +++ b/google_apis/gcm/engine/connection_handler_impl.h
@@ -43,8 +43,8 @@ // ConnectionHandler implementation. void Init(const mcs_proto::LoginRequest& login_request, - const net::NetworkTrafficAnnotationTag& traffic_annotation, - net::StreamSocket* socket) override; + mojo::ScopedDataPipeConsumerHandle receive_stream, + mojo::ScopedDataPipeProducerHandle send_stream) override; void Reset() override; bool CanSendMessage() const override; void SendMessage(const google::protobuf::MessageLite& message) override; @@ -103,8 +103,7 @@ const base::TimeDelta read_timeout_; base::OneShotTimer read_timeout_timer_; - // This connection's socket and the input/output streams attached to it. - net::StreamSocket* socket_; + // This connection's input/output streams. std::unique_ptr<SocketInputStream> input_stream_; std::unique_ptr<SocketOutputStream> output_stream_;
diff --git a/google_apis/gcm/engine/connection_handler_impl_unittest.cc b/google_apis/gcm/engine/connection_handler_impl_unittest.cc index ff7393a..cde76454 100644 --- a/google_apis/gcm/engine/connection_handler_impl_unittest.cc +++ b/google_apis/gcm/engine/connection_handler_impl_unittest.cc
@@ -14,6 +14,8 @@ #include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" +#include "base/test/bind_test_util.h" +#include "base/test/scoped_task_environment.h" #include "base/test/test_timeouts.h" #include "google/protobuf/io/coded_stream.h" #include "google/protobuf/io/zero_copy_stream_impl_lite.h" @@ -28,6 +30,10 @@ #include "net/socket/stream_socket.h" #include "net/test/gtest_util.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" +#include "net/url_request/url_request_test_util.h" +#include "services/network/network_context.h" +#include "services/network/network_service.h" +#include "services/network/public/mojom/proxy_resolving_socket.mojom.h" #include "testing/gtest/include/gtest/gtest.h" namespace gcm { @@ -147,19 +153,14 @@ GCMConnectionHandlerImplTest(); ~GCMConnectionHandlerImplTest() override; - net::StreamSocket* BuildSocket(const ReadList& read_list, - const WriteList& write_list); + void BuildSocket(const ReadList& read_list, const WriteList& write_list); - // Pump |message_loop_|, resetting |run_loop_| after completion. + // Pump |run_loop_|, and reset |run_loop_| after completion. void PumpLoop(); ConnectionHandlerImpl* connection_handler() { return connection_handler_.get(); } - base::MessageLoop* message_loop() { return &message_loop_; } - net::StaticSocketDataProvider* data_provider() { - return data_provider_.get(); - } int last_error() const { return last_error_; } // Initialize the connection handler, setting |dst_proto| as the destination @@ -169,15 +170,16 @@ // Runs the message loop until a message is received. void WaitForMessage(); + network::mojom::ProxyResolvingSocketPtr mojo_socket_ptr_; + private: void ReadContinuation(ScopedMessage* dst_proto, ScopedMessage new_proto); void WriteContinuation(); void ConnectionContinuation(int error); // SocketStreams and their data provider. - ReadList mock_reads_; - WriteList mock_writes_; - std::unique_ptr<net::StaticSocketDataProvider> data_provider_; + std::vector<std::unique_ptr<net::StaticSocketDataProvider>> data_providers_; + std::vector<std::unique_ptr<net::SSLSocketDataProvider>> ssl_data_providers_; // The connection handler being tested. std::unique_ptr<ConnectionHandlerImpl> connection_handler_; @@ -185,45 +187,71 @@ // The last connection error received. int last_error_; - // net:: components. - std::unique_ptr<net::StreamSocket> socket_; - net::MockClientSocketFactory socket_factory_; net::AddressList address_list_; - - base::MessageLoopForIO message_loop_; + base::test::ScopedTaskEnvironment scoped_task_environment_; std::unique_ptr<base::RunLoop> run_loop_; + std::unique_ptr<network::NetworkService> network_service_; + network::mojom::NetworkContextPtr network_context_ptr_; + net::MockClientSocketFactory socket_factory_; + net::TestURLRequestContext url_request_context_; + std::unique_ptr<network::NetworkContext> network_context_; + network::mojom::ProxyResolvingSocketFactoryPtr mojo_socket_factory_ptr_; + mojo::ScopedDataPipeConsumerHandle receive_pipe_handle_; + mojo::ScopedDataPipeProducerHandle send_pipe_handle_; }; GCMConnectionHandlerImplTest::GCMConnectionHandlerImplTest() - : last_error_(0) { + : last_error_(0), + scoped_task_environment_( + base::test::ScopedTaskEnvironment::MainThreadType::IO), + network_service_(network::NetworkService::CreateForTesting()), + url_request_context_(true /* delay_initialization */) { address_list_ = net::AddressList::CreateFromIPAddress( net::IPAddress::IPv4Localhost(), kMCSPort); + socket_factory_.set_enable_read_if_ready(true); + url_request_context_.set_client_socket_factory(&socket_factory_); + url_request_context_.Init(); + + network_context_ = std::make_unique<network::NetworkContext>( + network_service_.get(), mojo::MakeRequest(&network_context_ptr_), + &url_request_context_); } GCMConnectionHandlerImplTest::~GCMConnectionHandlerImplTest() { } -net::StreamSocket* GCMConnectionHandlerImplTest::BuildSocket( - const ReadList& read_list, - const WriteList& write_list) { - mock_reads_ = read_list; - mock_writes_ = write_list; - data_provider_ = std::make_unique<net::StaticSocketDataProvider>( - mock_reads_, mock_writes_); - socket_factory_.AddSocketDataProvider(data_provider_.get()); +void GCMConnectionHandlerImplTest::BuildSocket(const ReadList& read_list, + const WriteList& write_list) { + data_providers_.push_back( + std::make_unique<net::StaticSocketDataProvider>(read_list, write_list)); + socket_factory_.AddSocketDataProvider(data_providers_.back().get()); + ssl_data_providers_.push_back( + std::make_unique<net::SSLSocketDataProvider>(net::SYNCHRONOUS, net::OK)); + socket_factory_.AddSSLSocketDataProvider(ssl_data_providers_.back().get()); + run_loop_ = std::make_unique<base::RunLoop>(); - socket_ = socket_factory_.CreateTransportClientSocket( - address_list_, NULL, NULL, net::NetLogSource()); - net::TestCompletionCallback callback; - int rv = socket_->Connect(callback.callback()); - EXPECT_THAT(rv, net::test::IsError(net::ERR_IO_PENDING)); - - rv = callback.WaitForResult(); - EXPECT_THAT(rv, net::test::IsOk()); - - EXPECT_TRUE(socket_->IsConnected()); - return socket_.get(); + network_context_->CreateProxyResolvingSocketFactory( + mojo::MakeRequest(&mojo_socket_factory_ptr_)); + base::RunLoop run_loop; + int net_error = net::ERR_FAILED; + const GURL kDestination("https://example.com"); + mojo_socket_factory_ptr_->CreateProxyResolvingSocket( + kDestination, true /* use_tls */, + net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS), + mojo::MakeRequest(&mojo_socket_ptr_), + base::BindLambdaForTesting( + [&](int result, const base::Optional<net::IPEndPoint>& local_addr, + const base::Optional<net::IPEndPoint>& peer_addr, + mojo::ScopedDataPipeConsumerHandle receive_pipe_handle, + mojo::ScopedDataPipeProducerHandle send_pipe_handle) { + net_error = result; + receive_pipe_handle_ = std::move(receive_pipe_handle); + send_pipe_handle_ = std::move(send_pipe_handle); + run_loop.Quit(); + })); + run_loop.Run(); + ASSERT_EQ(net::OK, net_error); } void GCMConnectionHandlerImplTest::PumpLoop() { @@ -243,7 +271,8 @@ base::Unretained(this))); EXPECT_FALSE(connection_handler()->CanSendMessage()); connection_handler_->Init(*BuildLoginRequest(kAuthId, kAuthToken, ""), - TRAFFIC_ANNOTATION_FOR_TESTS, socket_.get()); + std::move(receive_pipe_handle_), + std::move(send_pipe_handle_)); } void GCMConnectionHandlerImplTest::ReadContinuation( @@ -277,9 +306,10 @@ handshake_request.c_str(), handshake_request.size())); std::string handshake_response = EncodeHandshakeResponse(); - ReadList read_list(1, net::MockRead(net::ASYNC, - handshake_response.c_str(), - handshake_response.size())); + ReadList read_list; + read_list.push_back(net::MockRead(net::ASYNC, handshake_response.c_str(), + handshake_response.size())); + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK) /* EOF */); BuildSocket(read_list, write_list); ScopedMessage received_message; @@ -302,9 +332,10 @@ std::string handshake_response = EncodeHandshakeResponse(); // Overwrite the version byte. handshake_response[0] = 37; - ReadList read_list(1, net::MockRead(net::ASYNC, - handshake_response.c_str(), - handshake_response.size())); + ReadList read_list; + read_list.push_back(net::MockRead(net::ASYNC, handshake_response.c_str(), + handshake_response.size())); + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK) /* EOF */); BuildSocket(read_list, write_list); ScopedMessage received_message; @@ -381,10 +412,13 @@ // Build a new socket and reconnect, successfully this time. std::string handshake_response = EncodeHandshakeResponse(); - read_list[0] = net::MockRead(net::ASYNC, - handshake_response.c_str(), - handshake_response.size()); - BuildSocket(read_list, write_list); + WriteList write_list2(1, net::MockWrite(net::ASYNC, handshake_request.c_str(), + handshake_request.size())); + ReadList read_list2; + read_list2.push_back(net::MockRead(net::ASYNC, handshake_response.c_str(), + handshake_response.size())); + read_list2.push_back(net::MockRead(net::SYNCHRONOUS, net::OK) /* EOF */); + BuildSocket(read_list2, write_list2); Connect(&received_message); EXPECT_FALSE(connection_handler()->CanSendMessage()); WaitForMessage(); // The login send. @@ -413,6 +447,7 @@ read_list.push_back(net::MockRead(net::ASYNC, data_message_pkt.c_str(), data_message_pkt.size())); + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK) /* EOF */); BuildSocket(read_list, write_list); ScopedMessage received_message; @@ -447,6 +482,7 @@ read_list.push_back(net::MockRead(net::SYNCHRONOUS, data_message_pkt.c_str(), data_message_pkt.size())); + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK) /* EOF */); BuildSocket(read_list, write_list); ScopedMessage received_message; @@ -483,6 +519,7 @@ read_list.push_back(net::MockRead(net::ASYNC, data_message_pkt.c_str(), data_message_pkt.size())); + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK) /* EOF */); BuildSocket(read_list, write_list); ScopedMessage received_message; @@ -522,6 +559,7 @@ bytes_in_first_message, data_message_pkt.size() - bytes_in_first_message)); + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK) /* EOF */); BuildSocket(read_list, write_list); ScopedMessage received_message; @@ -557,6 +595,7 @@ read_list.push_back(net::MockRead(net::SYNCHRONOUS, data_message_pkt.c_str(), data_message_pkt.size())); + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK) /* EOF */); BuildSocket(read_list, write_list); ScopedMessage received_message; @@ -631,6 +670,7 @@ read_list.push_back(net::MockRead(net::ASYNC, data_message_pkt.c_str(), data_message_pkt.size())); + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK) /* EOF */); BuildSocket(read_list, write_list); ScopedMessage received_message; @@ -692,14 +732,14 @@ handshake_response.c_str(), handshake_response.size())); read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::ERR_IO_PENDING)); - net::StreamSocket* socket = BuildSocket(read_list, write_list); + BuildSocket(read_list, write_list); ScopedMessage received_message; Connect(&received_message); WaitForMessage(); // The login send. WaitForMessage(); // The login response. EXPECT_TRUE(connection_handler()->CanSendMessage()); - socket->Disconnect(); + mojo_socket_ptr_.reset(); mcs_proto::DataMessageStanza data_message; data_message.set_from(kDataMsgFrom); data_message.set_category(kDataMsgCategory); @@ -707,7 +747,7 @@ EXPECT_FALSE(connection_handler()->CanSendMessage()); WaitForMessage(); // The message send. Should result in an error EXPECT_FALSE(connection_handler()->CanSendMessage()); - EXPECT_EQ(net::ERR_CONNECTION_CLOSED, last_error()); + EXPECT_EQ(net::ERR_FAILED, last_error()); } // Receive a message with a custom data packet that is larger than the @@ -732,6 +772,7 @@ read_list.push_back(net::MockRead(net::ASYNC, data_message_pkt.c_str(), data_message_pkt.size())); + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK) /* EOF */); BuildSocket(read_list, write_list); ScopedMessage received_message; @@ -769,6 +810,7 @@ read_list.push_back(net::MockRead(net::SYNCHRONOUS, data_message_pkt.c_str(), data_message_pkt.size())); + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK) /* EOF */); BuildSocket(read_list, write_list); ScopedMessage received_message; @@ -805,6 +847,7 @@ read_list.push_back(net::MockRead(net::ASYNC, invalid_message_pkt.c_str(), invalid_message_pkt.size())); + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK) /* EOF */); BuildSocket(read_list, write_list); ScopedMessage received_message; @@ -842,6 +885,7 @@ read_list.push_back(net::MockRead(net::ASYNC, data_message_pkt.c_str() + 2, data_message_pkt.size() - 2)); + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK) /* EOF */); BuildSocket(read_list, write_list); ScopedMessage received_message; @@ -870,6 +914,7 @@ handshake_response.size())); read_list.push_back(net::MockRead(net::ASYNC, invalid_message_pkt.c_str(), invalid_message_pkt.size())); + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK) /* EOF */); BuildSocket(read_list, write_list); ScopedMessage received_message; @@ -900,6 +945,7 @@ handshake_response.size())); read_list.push_back(net::MockRead(net::ASYNC, invalid_message_pkt.c_str(), invalid_message_pkt.size())); + read_list.push_back(net::MockRead(net::SYNCHRONOUS, net::OK) /* EOF */); BuildSocket(read_list, write_list); ScopedMessage received_message;
diff --git a/google_apis/gcm/engine/fake_connection_factory.cc b/google_apis/gcm/engine/fake_connection_factory.cc index 4631e573..ee6df98 100644 --- a/google_apis/gcm/engine/fake_connection_factory.cc +++ b/google_apis/gcm/engine/fake_connection_factory.cc
@@ -6,6 +6,7 @@ #include "google_apis/gcm/engine/fake_connection_handler.h" #include "google_apis/gcm/protocol/mcs.pb.h" +#include "mojo/public/cpp/system/data_pipe.h" #include "net/socket/stream_socket.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" @@ -36,7 +37,8 @@ void FakeConnectionFactory::Connect() { mcs_proto::LoginRequest login_request; request_builder_.Run(&login_request); - connection_handler_->Init(login_request, TRAFFIC_ANNOTATION_FOR_TESTS, NULL); + connection_handler_->Init(login_request, mojo::ScopedDataPipeConsumerHandle(), + mojo::ScopedDataPipeProducerHandle()); } bool FakeConnectionFactory::IsEndpointReachable() const {
diff --git a/google_apis/gcm/engine/fake_connection_handler.cc b/google_apis/gcm/engine/fake_connection_handler.cc index 34da9b1..4797f11 100644 --- a/google_apis/gcm/engine/fake_connection_handler.cc +++ b/google_apis/gcm/engine/fake_connection_handler.cc
@@ -44,8 +44,8 @@ void FakeConnectionHandler::Init( const mcs_proto::LoginRequest& login_request, - const net::NetworkTrafficAnnotationTag& traffic_annotation, - net::StreamSocket* socket) { + mojo::ScopedDataPipeConsumerHandle receive_stream, + mojo::ScopedDataPipeProducerHandle send_stream) { ASSERT_GE(expected_outgoing_messages_.size(), 1U); EXPECT_EQ(expected_outgoing_messages_.front().SerializeAsString(), login_request.SerializeAsString());
diff --git a/google_apis/gcm/engine/fake_connection_handler.h b/google_apis/gcm/engine/fake_connection_handler.h index 9afee54..70afb649 100644 --- a/google_apis/gcm/engine/fake_connection_handler.h +++ b/google_apis/gcm/engine/fake_connection_handler.h
@@ -10,7 +10,7 @@ #include "base/macros.h" #include "google_apis/gcm/base/mcs_message.h" #include "google_apis/gcm/engine/connection_handler.h" -#include "net/traffic_annotation/network_traffic_annotation.h" +#include "mojo/public/cpp/system/data_pipe.h" namespace gcm { @@ -25,8 +25,8 @@ // ConnectionHandler implementation. void Init(const mcs_proto::LoginRequest& login_request, - const net::NetworkTrafficAnnotationTag& traffic_annotation, - net::StreamSocket* socket) override; + mojo::ScopedDataPipeConsumerHandle receive_stream, + mojo::ScopedDataPipeProducerHandle send_stream) override; void Reset() override; bool CanSendMessage() const override; void SendMessage(const google::protobuf::MessageLite& message) override;
diff --git a/google_apis/gcm/tools/mcs_probe.cc b/google_apis/gcm/tools/mcs_probe.cc index 00f56eea..26800cf 100644 --- a/google_apis/gcm/tools/mcs_probe.cc +++ b/google_apis/gcm/tools/mcs_probe.cc
@@ -41,25 +41,19 @@ #include "google_apis/gcm/monitoring/fake_gcm_stats_recorder.h" #include "mojo/core/embedder/embedder.h" #include "net/cert/cert_verifier.h" -#include "net/cert/ct_policy_enforcer.h" -#include "net/cert/multi_log_ct_verifier.h" #include "net/dns/host_resolver.h" #include "net/http/http_auth_handler_factory.h" #include "net/http/http_auth_preferences.h" #include "net/http/http_auth_scheme.h" -#include "net/http/http_network_session.h" -#include "net/http/http_server_properties_impl.h" -#include "net/http/transport_security_state.h" #include "net/log/file_net_log_observer.h" -#include "net/socket/client_socket_factory.h" -#include "net/socket/ssl_client_socket.h" -#include "net/ssl/channel_id_service.h" -#include "net/ssl/default_channel_id_store.h" +#include "net/proxy_resolution/proxy_resolution_service.h" +#include "net/url_request/url_request_context.h" +#include "net/url_request/url_request_context_builder.h" #include "net/url_request/url_request_test_util.h" #include "services/network/network_context.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" -#include "services/network/public/mojom/network_context.mojom.h" +#include "services/network/public/mojom/proxy_resolving_socket.mojom.h" #include "services/network/public/mojom/url_loader_factory.mojom.h" #if defined(OS_MACOSX) @@ -144,40 +138,6 @@ << " Message send status: " << status; } -// Needed to use a real host resolver. -class MyTestURLRequestContext : public net::TestURLRequestContext { - public: - MyTestURLRequestContext() : TestURLRequestContext(true) { - context_storage_.set_host_resolver( - net::HostResolver::CreateDefaultResolver(NULL)); - context_storage_.set_transport_security_state( - std::make_unique<net::TransportSecurityState>()); - Init(); - } - - ~MyTestURLRequestContext() override {} -}; - -class MyTestURLRequestContextGetter : public net::TestURLRequestContextGetter { - public: - explicit MyTestURLRequestContextGetter( - const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner) - : TestURLRequestContextGetter(io_task_runner) {} - - net::TestURLRequestContext* GetURLRequestContext() override { - // Construct |context_| lazily so it gets constructed on the right - // thread (the IO thread). - if (!context_) - context_.reset(new MyTestURLRequestContext()); - return context_.get(); - } - - private: - ~MyTestURLRequestContextGetter() override {} - - std::unique_ptr<MyTestURLRequestContext> context_; -}; - // A cert verifier that access all certificates. class MyTestCertVerifier : public net::CertVerifier { public: @@ -209,9 +169,7 @@ class MCSProbe { public: - MCSProbe( - const base::CommandLine& command_line, - scoped_refptr<net::URLRequestContextGetter> url_request_context_getter); + explicit MCSProbe(const base::CommandLine& command_line); ~MCSProbe(); void Start(); @@ -220,6 +178,8 @@ uint64_t secret() const { return secret_; } private: + void RequestProxyResolvingSocketFactory( + network::mojom::ProxyResolvingSocketFactoryRequest request); void CheckIn(); void InitializeNetworkState(); @@ -242,20 +202,12 @@ int server_port_; // Network state. - scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_; + std::unique_ptr<net::URLRequestContext> url_request_context_; net::NetLog net_log_; std::unique_ptr<net::FileNetLogObserver> logger_; std::unique_ptr<net::HostResolver> host_resolver_; - std::unique_ptr<net::CertVerifier> cert_verifier_; - std::unique_ptr<net::ChannelIDService> system_channel_id_service_; - std::unique_ptr<net::TransportSecurityState> transport_security_state_; - std::unique_ptr<net::CTVerifier> cert_transparency_verifier_; - std::unique_ptr<net::CTPolicyEnforcer> ct_policy_enforcer_; MCSProbeAuthPreferences http_auth_preferences_; std::unique_ptr<net::HttpAuthHandlerFactory> http_auth_handler_factory_; - std::unique_ptr<net::HttpServerPropertiesImpl> http_server_properties_; - std::unique_ptr<net::HttpNetworkSession> network_session_; - std::unique_ptr<net::ProxyResolutionService> proxy_resolution_service_; FakeGCMStatsRecorder recorder_; std::unique_ptr<GCMStore> gcm_store_; @@ -274,15 +226,12 @@ std::unique_ptr<base::RunLoop> run_loop_; }; -MCSProbe::MCSProbe( - const base::CommandLine& command_line, - scoped_refptr<net::URLRequestContextGetter> url_request_context_getter) +MCSProbe::MCSProbe(const base::CommandLine& command_line) : command_line_(command_line), gcm_store_path_(base::FilePath(FILE_PATH_LITERAL("gcm_store"))), android_id_(0), secret_(0), server_port_(0), - url_request_context_getter_(url_request_context_getter), file_thread_("FileThread") { if (command_line.HasSwitch(kRMQFileName)) { gcm_store_path_ = command_line.GetSwitchValuePath(kRMQFileName); @@ -321,7 +270,9 @@ connection_factory_ = std::make_unique<ConnectionFactoryImpl>( endpoints, kDefaultBackoffPolicy, - url_request_context_getter_->GetURLRequestContext(), &recorder_); + base::BindRepeating(&MCSProbe::RequestProxyResolvingSocketFactory, + base::Unretained(this)), + &recorder_); gcm_store_ = std::make_unique<GCMStoreImpl>( gcm_store_path_, file_thread_.task_runner(), std::make_unique<FakeEncryptor>()); @@ -378,29 +329,27 @@ } host_resolver_ = net::HostResolver::CreateDefaultResolver(&net_log_); - - if (command_line_.HasSwitch(kIgnoreCertSwitch)) { - cert_verifier_ = std::make_unique<MyTestCertVerifier>(); - } else { - cert_verifier_ = net::CertVerifier::CreateDefault(); - } - system_channel_id_service_ = std::make_unique<net::ChannelIDService>( - new net::DefaultChannelIDStore(nullptr)); - - transport_security_state_ = std::make_unique<net::TransportSecurityState>(); - cert_transparency_verifier_ = std::make_unique<net::MultiLogCTVerifier>(); - ct_policy_enforcer_ = std::make_unique<net::DefaultCTPolicyEnforcer>(); http_auth_handler_factory_ = net::HttpAuthHandlerRegistryFactory::Create( host_resolver_.get(), &http_auth_preferences_, std::vector<std::string>{net::kBasicAuthScheme}); - http_server_properties_ = std::make_unique<net::HttpServerPropertiesImpl>(); - proxy_resolution_service_ = - net::ProxyResolutionService::CreateDirectWithNetLog(&net_log_); + + net::URLRequestContextBuilder builder; + builder.set_net_log(&net_log_); + builder.set_shared_host_resolver(host_resolver_.get()); + builder.set_shared_http_auth_handler_factory( + http_auth_handler_factory_.get()); + builder.set_proxy_resolution_service( + net::ProxyResolutionService::CreateDirect()); + + if (command_line_.HasSwitch(kIgnoreCertSwitch)) + builder.SetCertVerifier(std::make_unique<MyTestCertVerifier>()); + + url_request_context_ = builder.Build(); // Wrap it up with network service APIs. network_context_ = std::make_unique<network::NetworkContext>( nullptr /* network_service */, mojo::MakeRequest(&network_context_pipe_), - url_request_context_getter_->GetURLRequestContext()); + url_request_context_.get()); auto url_loader_factory_params = network::mojom::URLLoaderFactoryParams::New(); url_loader_factory_params->process_id = network::mojom::kBrowserProcessId; @@ -417,6 +366,12 @@ LOG(INFO) << "MCS error happened"; } +void MCSProbe::RequestProxyResolvingSocketFactory( + network::mojom::ProxyResolvingSocketFactoryRequest request) { + return network_context_->CreateProxyResolvingSocketFactory( + std::move(request)); +} + void MCSProbe::CheckIn() { LOG(INFO) << "Check-in request initiated."; checkin_proto::ChromeBuildProto chrome_build_proto; @@ -481,14 +436,10 @@ base::MessageLoopForIO message_loop; base::TaskScheduler::CreateAndStartWithDefaultParams("MCSProbe"); - // For check-in and creating registration ids. - const scoped_refptr<MyTestURLRequestContextGetter> context_getter = - new MyTestURLRequestContextGetter(base::ThreadTaskRunnerHandle::Get()); - const base::CommandLine& command_line = *base::CommandLine::ForCurrentProcess(); - MCSProbe mcs_probe(command_line, context_getter); + MCSProbe mcs_probe(command_line); mcs_probe.Start(); base::RunLoop run_loop;
diff --git a/gpu/command_buffer/client/BUILD.gn b/gpu/command_buffer/client/BUILD.gn index c96f9d8..00be50c 100644 --- a/gpu/command_buffer/client/BUILD.gn +++ b/gpu/command_buffer/client/BUILD.gn
@@ -62,6 +62,7 @@ "mapped_memory.h", "ring_buffer.cc", "ring_buffer.h", + "shared_image_interface.h", "transfer_buffer.cc", "transfer_buffer.h", ] @@ -72,6 +73,7 @@ public_deps = [ "//base", + "//components/viz/common:resource_format", ] deps = [ "//gpu/command_buffer/common:common_sources", @@ -209,7 +211,7 @@ ":raster_interface", "//base", "//cc/paint", - "//components/viz/common:resource_format", + "//components/viz/common:resource_format_utils", "//gpu/command_buffer/common", "//gpu/command_buffer/common:gles2", "//gpu/command_buffer/common:gles2_utils",
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc index cd23a01..e9e5634 100644 --- a/gpu/command_buffer/client/gles2_implementation.cc +++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -5688,13 +5688,12 @@ if (target == GL_READBACK_SHADOW_COPIES_UPDATED_CHROMIUM) { DCHECK(capabilities_.chromium_nonblocking_readback); DCHECK(query); - GLuint query_id = query->id(); auto serial = readback_buffer_shadow_tracker_->buffer_shadow_serial(); readback_buffer_shadow_tracker_->IncrementSerial(); auto buffers = readback_buffer_shadow_tracker_->TakeUnfencedBufferList(); - SignalQuery(query_id, base::BindOnce( - &GLES2Implementation::BufferShadowWrittenCallback, - std::move(buffers), serial)); + query->SetCompletedCallback( + base::BindOnce(&GLES2Implementation::BufferShadowWrittenCallback, + std::move(buffers), serial)); } }
diff --git a/gpu/command_buffer/client/query_tracker.cc b/gpu/command_buffer/client/query_tracker.cc index c5994f6..3cd9915 100644 --- a/gpu/command_buffer/client/query_tracker.cc +++ b/gpu/command_buffer/client/query_tracker.cc
@@ -149,6 +149,8 @@ client_begin_time_us_(0), result_(0) {} +QueryTracker::Query::~Query() {} + void QueryTracker::Query::Begin(QueryTrackerClient* client) { // init memory, inc count MarkAsActive(); @@ -232,6 +234,9 @@ result_ = info_.sync->result; break; } + if (on_completed_callback_) { + std::move(on_completed_callback_.value()).Run(); + } state_ = kComplete; } else { if ((helper->flush_generation() - flush_count_ - 1) >= 0x80000000) { @@ -250,6 +255,12 @@ return result_; } +void QueryTracker::Query::SetCompletedCallback(base::OnceClosure callback) { + DCHECK(!on_completed_callback_); + DCHECK(state_ == kPending); + on_completed_callback_ = std::move(callback); +} + QueryTracker::QueryTracker(MappedMemoryManager* manager) : query_sync_manager_(manager), mapped_memory_(manager),
diff --git a/gpu/command_buffer/client/query_tracker.h b/gpu/command_buffer/client/query_tracker.h index dd0ba6f..5c12fb6d 100644 --- a/gpu/command_buffer/client/query_tracker.h +++ b/gpu/command_buffer/client/query_tracker.h
@@ -121,6 +121,7 @@ }; Query(GLuint id, GLenum target, const QuerySyncManager::QueryInfo& info); + ~Query(); GLenum target() const { return target_; @@ -173,6 +174,8 @@ uint64_t GetResult() const; + void SetCompletedCallback(base::OnceClosure callback); + private: friend class QueryTracker; friend class QueryTrackerTest; @@ -189,6 +192,8 @@ uint32_t flush_count_; uint64_t client_begin_time_us_; // Only used for latency query target. uint64_t result_; + + base::Optional<base::OnceClosure> on_completed_callback_; }; explicit QueryTracker(MappedMemoryManager* manager);
diff --git a/gpu/command_buffer/client/shared_image_interface.h b/gpu/command_buffer/client/shared_image_interface.h new file mode 100644 index 0000000..df5d499 --- /dev/null +++ b/gpu/command_buffer/client/shared_image_interface.h
@@ -0,0 +1,58 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef GPU_COMMAND_BUFFER_CLIENT_SHARED_IMAGE_INTERFACE_H_ +#define GPU_COMMAND_BUFFER_CLIENT_SHARED_IMAGE_INTERFACE_H_ + +#include "base/compiler_specific.h" +#include "components/viz/common/resources/resource_format.h" +#include "gpu/command_buffer/common/mailbox.h" +#include "gpu/command_buffer/common/sync_token.h" + +namespace gfx { +class Size; +class ColorSpace; +} // namespace gfx + +namespace gpu { + +// An interface to create shared images that can be imported into other APIs. +// This interface is thread-safe and (essentially) stateless. It is asynchronous +// in the same sense as GLES2Interface or RasterInterface in that commands are +// executed asynchronously on the service side, but can be synchronized using +// SyncTokens. See //docs/design/gpu_synchronization.md. +class SharedImageInterface { + public: + virtual ~SharedImageInterface() {} + + // Creates a shared image of requested |format|, |size| and |color_space|. + // |usage| is a combination of |SharedImageUsage| bits that describes which + // API(s) the image will be used with. + // Returns a mailbox that can be imported into said APIs using their + // corresponding mailbox functions (e.g. + // RasterInterface::CreateAndConsumeTexture or + // GLES2Interface::CreateAndConsumeTextureCHROMIUM). + // The |SharedImageInterface| keeps ownership of the image until + // |DestroySharedImage| is called or the interface itself is destroyed (e.g. + // the GPU channel is lost). + virtual Mailbox CreateSharedImage(viz::ResourceFormat format, + const gfx::Size& size, + const gfx::ColorSpace& color_space, + uint32_t usage) = 0; + + // Destroys the shared image, unregistering its mailbox, after |sync_token| + // has been released. After this call, the mailbox can't be used to reference + // the image any more, however if the image was imported into other APIs, + // those may keep a reference to the underlying data. + virtual void DestroySharedImage(const SyncToken& sync_token, + const Mailbox& mailbox) = 0; + + // Generates an unverified SyncToken that is released after all previous + // commands on this interface have executed on the service side. + virtual SyncToken GenUnverifiedSyncToken() = 0; +}; + +} // namespace gpu + +#endif // GPU_COMMAND_BUFFER_CLIENT_SHARED_IMAGE_INTERFACE_H_
diff --git a/gpu/command_buffer/common/command_buffer.h b/gpu/command_buffer/common/command_buffer.h index a99e0ba..a91610b4 100644 --- a/gpu/command_buffer/common/command_buffer.h +++ b/gpu/command_buffer/common/command_buffer.h
@@ -114,6 +114,8 @@ int32_t* id) = 0; // Destroy a transfer buffer. The ID must be positive. + // An ordering barrier must be placed after any commands that use the buffer + // before it is safe to call this function to destroy it. virtual void DestroyTransferBuffer(int32_t id) = 0; private:
diff --git a/gpu/command_buffer/service/BUILD.gn b/gpu/command_buffer/service/BUILD.gn index 360417b..7470876c 100644 --- a/gpu/command_buffer/service/BUILD.gn +++ b/gpu/command_buffer/service/BUILD.gn
@@ -253,6 +253,7 @@ "//base", "//base/third_party/dynamic_annotations", "//cc/paint", + "//components/viz/common:resource_format_utils", "//gpu/command_buffer/client", "//gpu/command_buffer/common:gles2_utils", "//gpu/config",
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 73122ce..7c46d69 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -24,6 +24,7 @@ #include "base/containers/queue.h" #include "base/containers/span.h" #include "base/debug/alias.h" +#include "base/debug/dump_without_crashing.h" #include "base/logging.h" #include "base/metrics/histogram_macros.h" #include "base/numerics/ranges.h" @@ -19838,6 +19839,8 @@ GLuint texture_id = c.texture_id; if (!GetContextGroup()->discardable_manager()->LockTexture( texture_id, group_->texture_manager())) { + // Temporarily log a crash dump for debugging crbug.com/870317. + base::debug::DumpWithoutCrashing(); LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glLockDiscardableTextureCHROMIUM", "Texture ID not initialized"); }
diff --git a/gpu/command_buffer/service/raster_decoder_context_state.cc b/gpu/command_buffer/service/raster_decoder_context_state.cc index 5d532ba..ef4ada86 100644 --- a/gpu/command_buffer/service/raster_decoder_context_state.cc +++ b/gpu/command_buffer/service/raster_decoder_context_state.cc
@@ -78,6 +78,7 @@ &max_resource_cache_bytes, &glyph_cache_max_texture_bytes); options.fGlyphCacheTextureMaximumBytes = glyph_cache_max_texture_bytes; options.fPersistentCache = cache; + options.fAvoidStencilBuffers = workarounds.avoid_stencil_buffers; gr_context = GrContext::MakeGL(std::move(interface), options); if (!gr_context) { LOG(ERROR) << "OOP raster support disabled: GrContext creation "
diff --git a/gpu/config/nvml_info.cc b/gpu/config/nvml_info.cc index 521aa5b..cf3198a 100644 --- a/gpu/config/nvml_info.cc +++ b/gpu/config/nvml_info.cc
@@ -13,7 +13,8 @@ namespace { -const unsigned int kDriverVersionCapacity = 80u; +// TODO(crbug.com/873095): diagnose crashes inside nvml.dll +// const unsigned int kDriverVersionCapacity = 80u; } // anonymous namespace @@ -35,6 +36,9 @@ *major_cuda_compute_capability = 0; *minor_cuda_compute_capability = 0; + // TODO(crbug.com/873095): diagnose crashes inside nvml.dll + return false; +#if 0 base::FilePath dll_path; if (!base::PathService::Get(base::DIR_PROGRAM_FILES6432, &dll_path)) { return false; @@ -123,4 +127,5 @@ return false; } return true; +#endif }
diff --git a/gpu/ipc/DEPS b/gpu/ipc/DEPS new file mode 100644 index 0000000..62e28091 --- /dev/null +++ b/gpu/ipc/DEPS
@@ -0,0 +1,4 @@ +include_rules = [ + "+components/viz/common/resources/resource_format.h", +] +
diff --git a/gpu/ipc/client/BUILD.gn b/gpu/ipc/client/BUILD.gn index a4b4c9b..f48fafa7 100644 --- a/gpu/ipc/client/BUILD.gn +++ b/gpu/ipc/client/BUILD.gn
@@ -22,6 +22,8 @@ "command_buffer_proxy_impl.h", "gpu_channel_host.cc", "gpu_channel_host.h", + "shared_image_interface_proxy.cc", + "shared_image_interface_proxy.h", ] configs += [ "//build/config/compiler:no_size_t_to_int_warning",
diff --git a/gpu/ipc/client/command_buffer_proxy_impl.cc b/gpu/ipc/client/command_buffer_proxy_impl.cc index 3b4bf75..70e38ed 100644 --- a/gpu/ipc/client/command_buffer_proxy_impl.cc +++ b/gpu/ipc/client/command_buffer_proxy_impl.cc
@@ -26,6 +26,7 @@ #include "gpu/command_buffer/common/gpu_memory_buffer_support.h" #include "gpu/command_buffer/common/sync_token.h" #include "gpu/ipc/client/gpu_channel_host.h" +#include "gpu/ipc/common/command_buffer_id.h" #include "gpu/ipc/common/gpu_messages.h" #include "gpu/ipc/common/gpu_param_traits.h" #include "mojo/public/cpp/system/buffer.h" @@ -36,19 +37,6 @@ namespace gpu { -namespace { - -gpu::CommandBufferId CommandBufferProxyID(int channel_id, int32_t route_id) { - return gpu::CommandBufferId::FromUnsafeValue( - (static_cast<uint64_t>(channel_id) << 32) | route_id); -} - -int GetChannelID(gpu::CommandBufferId command_buffer_id) { - return static_cast<int>(command_buffer_id.GetUnsafeValue() >> 32); -} - -} // namespace - CommandBufferProxyImpl::CommandBufferProxyImpl( scoped_refptr<GpuChannelHost> channel, GpuMemoryBufferManager* gpu_memory_buffer_manager, @@ -59,7 +47,8 @@ channel_id_(channel_->channel_id()), route_id_(channel_->GenerateRouteID()), stream_id_(stream_id), - command_buffer_id_(CommandBufferProxyID(channel_id_, route_id_)), + command_buffer_id_( + CommandBufferIdFromChannelAndRoute(channel_id_, route_id_)), callback_thread_(std::move(task_runner)), weak_ptr_factory_(this) { DCHECK(route_id_); @@ -408,7 +397,8 @@ if (last_state_.error != gpu::error::kNoError) return; - last_flush_id_ = channel_->DestroyTransferBuffer(route_id_, id); + last_flush_id_ = channel_->EnqueueDeferredMessage( + GpuCommandBufferMsg_DestroyTransferBuffer(route_id_, id)); } void CommandBufferProxyImpl::SetGpuControlClient(GpuControlClient* client) { @@ -570,7 +560,8 @@ bool CommandBufferProxyImpl::CanWaitUnverifiedSyncToken( const gpu::SyncToken& sync_token) { // Can only wait on an unverified sync token if it is from the same channel. - int sync_token_channel_id = GetChannelID(sync_token.command_buffer_id()); + int sync_token_channel_id = + ChannelIdFromCommandBufferId(sync_token.command_buffer_id()); if (sync_token.namespace_id() != gpu::CommandBufferNamespace::GPU_IO || sync_token_channel_id != channel_id_) { return false;
diff --git a/gpu/ipc/client/command_buffer_proxy_impl_unittest.cc b/gpu/ipc/client/command_buffer_proxy_impl_unittest.cc index 14b9f50..9a0854dc 100644 --- a/gpu/ipc/client/command_buffer_proxy_impl_unittest.cc +++ b/gpu/ipc/client/command_buffer_proxy_impl_unittest.cc
@@ -66,6 +66,16 @@ return proxy; } + void ExpectOrderingBarrier(const GpuDeferredMessage& params, + int32_t route_id, + int32_t put_offset) { + EXPECT_EQ(params.message.routing_id(), route_id); + GpuCommandBufferMsg_AsyncFlush::Param async_flush; + ASSERT_TRUE( + GpuCommandBufferMsg_AsyncFlush::Read(¶ms.message, &async_flush)); + EXPECT_EQ(std::get<0>(async_flush), put_offset); + } + protected: IPC::TestSink sink_; scoped_refptr<base::TestSimpleTaskRunner> task_runner_; @@ -85,18 +95,16 @@ EXPECT_EQ(1u, sink_.message_count()); const IPC::Message* msg = - sink_.GetFirstMessageMatching(GpuChannelMsg_FlushCommandBuffers::ID); + sink_.GetFirstMessageMatching(GpuChannelMsg_FlushDeferredMessages::ID); ASSERT_TRUE(msg); - GpuChannelMsg_FlushCommandBuffers::Param params; - ASSERT_TRUE(GpuChannelMsg_FlushCommandBuffers::Read(msg, ¶ms)); - std::vector<FlushParams> flush_list = std::get<0>(std::move(params)); - EXPECT_EQ(3u, flush_list.size()); - EXPECT_EQ(proxy1->route_id(), flush_list[0].route_id); - EXPECT_EQ(10, flush_list[0].put_offset); - EXPECT_EQ(proxy2->route_id(), flush_list[1].route_id); - EXPECT_EQ(20, flush_list[1].put_offset); - EXPECT_EQ(proxy1->route_id(), flush_list[2].route_id); - EXPECT_EQ(50, flush_list[2].put_offset); + GpuChannelMsg_FlushDeferredMessages::Param params; + ASSERT_TRUE(GpuChannelMsg_FlushDeferredMessages::Read(msg, ¶ms)); + std::vector<GpuDeferredMessage> deferred_messages = + std::get<0>(std::move(params)); + EXPECT_EQ(3u, deferred_messages.size()); + ExpectOrderingBarrier(deferred_messages[0], proxy1->route_id(), 10); + ExpectOrderingBarrier(deferred_messages[1], proxy2->route_id(), 20); + ExpectOrderingBarrier(deferred_messages[2], proxy1->route_id(), 50); } TEST_F(CommandBufferProxyImplTest, FlushPendingWorkFlushesOrderingBarriers) { @@ -110,18 +118,16 @@ EXPECT_EQ(1u, sink_.message_count()); const IPC::Message* msg = - sink_.GetFirstMessageMatching(GpuChannelMsg_FlushCommandBuffers::ID); + sink_.GetFirstMessageMatching(GpuChannelMsg_FlushDeferredMessages::ID); ASSERT_TRUE(msg); - GpuChannelMsg_FlushCommandBuffers::Param params; - ASSERT_TRUE(GpuChannelMsg_FlushCommandBuffers::Read(msg, ¶ms)); - std::vector<FlushParams> flush_list = std::get<0>(std::move(params)); - EXPECT_EQ(3u, flush_list.size()); - EXPECT_EQ(proxy1->route_id(), flush_list[0].route_id); - EXPECT_EQ(10, flush_list[0].put_offset); - EXPECT_EQ(proxy2->route_id(), flush_list[1].route_id); - EXPECT_EQ(20, flush_list[1].put_offset); - EXPECT_EQ(proxy1->route_id(), flush_list[2].route_id); - EXPECT_EQ(30, flush_list[2].put_offset); + GpuChannelMsg_FlushDeferredMessages::Param params; + ASSERT_TRUE(GpuChannelMsg_FlushDeferredMessages::Read(msg, ¶ms)); + std::vector<GpuDeferredMessage> deferred_messages = + std::get<0>(std::move(params)); + EXPECT_EQ(3u, deferred_messages.size()); + ExpectOrderingBarrier(deferred_messages[0], proxy1->route_id(), 10); + ExpectOrderingBarrier(deferred_messages[1], proxy2->route_id(), 20); + ExpectOrderingBarrier(deferred_messages[2], proxy1->route_id(), 30); } TEST_F(CommandBufferProxyImplTest, EnsureWorkVisibleFlushesOrderingBarriers) { @@ -137,23 +143,45 @@ EXPECT_EQ(2u, sink_.message_count()); const IPC::Message* msg = sink_.GetMessageAt(0); ASSERT_TRUE(msg); - EXPECT_EQ(static_cast<uint32_t>(GpuChannelMsg_FlushCommandBuffers::ID), + EXPECT_EQ(static_cast<uint32_t>(GpuChannelMsg_FlushDeferredMessages::ID), msg->type()); - GpuChannelMsg_FlushCommandBuffers::Param params; - ASSERT_TRUE(GpuChannelMsg_FlushCommandBuffers::Read(msg, ¶ms)); - std::vector<FlushParams> flush_list = std::get<0>(std::move(params)); - EXPECT_EQ(3u, flush_list.size()); - EXPECT_EQ(proxy1->route_id(), flush_list[0].route_id); - EXPECT_EQ(10, flush_list[0].put_offset); - EXPECT_EQ(proxy2->route_id(), flush_list[1].route_id); - EXPECT_EQ(20, flush_list[1].put_offset); - EXPECT_EQ(proxy1->route_id(), flush_list[2].route_id); - EXPECT_EQ(30, flush_list[2].put_offset); + GpuChannelMsg_FlushDeferredMessages::Param params; + ASSERT_TRUE(GpuChannelMsg_FlushDeferredMessages::Read(msg, ¶ms)); + std::vector<GpuDeferredMessage> deferred_messages = + std::get<0>(std::move(params)); + EXPECT_EQ(3u, deferred_messages.size()); + ExpectOrderingBarrier(deferred_messages[0], proxy1->route_id(), 10); + ExpectOrderingBarrier(deferred_messages[1], proxy2->route_id(), 20); + ExpectOrderingBarrier(deferred_messages[2], proxy1->route_id(), 30); msg = sink_.GetMessageAt(1); ASSERT_TRUE(msg); EXPECT_EQ(static_cast<uint32_t>(GpuChannelMsg_Nop::ID), msg->type()); } +TEST_F(CommandBufferProxyImplTest, + EnqueueDeferredMessageEnqueuesPendingOrderingBarriers) { + auto proxy1 = CreateAndInitializeProxy(); + + proxy1->OrderingBarrier(10); + proxy1->OrderingBarrier(20); + channel_->EnqueueDeferredMessage( + GpuCommandBufferMsg_DestroyTransferBuffer(proxy1->route_id(), 3)); + EXPECT_EQ(0u, sink_.message_count()); + proxy1->FlushPendingWork(); + + EXPECT_EQ(1u, sink_.message_count()); + const IPC::Message* msg = + sink_.GetFirstMessageMatching(GpuChannelMsg_FlushDeferredMessages::ID); + ASSERT_TRUE(msg); + GpuChannelMsg_FlushDeferredMessages::Param params; + ASSERT_TRUE(GpuChannelMsg_FlushDeferredMessages::Read(msg, ¶ms)); + std::vector<GpuDeferredMessage> deferred_messages = + std::get<0>(std::move(params)); + EXPECT_EQ(2u, deferred_messages.size()); + ExpectOrderingBarrier(deferred_messages[0], proxy1->route_id(), 20); + EXPECT_EQ(deferred_messages[1].message.type(), + GpuCommandBufferMsg_DestroyTransferBuffer::ID); +} } // namespace gpu
diff --git a/gpu/ipc/client/gpu_channel_host.cc b/gpu/ipc/client/gpu_channel_host.cc index a962e602..cb8d459 100644 --- a/gpu/ipc/client/gpu_channel_host.cc +++ b/gpu/ipc/client/gpu_channel_host.cc
@@ -14,6 +14,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/trace_event/trace_event.h" #include "build/build_config.h" +#include "gpu/ipc/common/command_buffer_id.h" #include "gpu/ipc/common/gpu_messages.h" #include "gpu/ipc/common/gpu_param_traits_macros.h" #include "ipc/ipc_channel_mojo.h" @@ -41,7 +42,9 @@ listener_(new Listener(std::move(handle), io_thread_), base::OnTaskRunnerDeleter(io_thread_)) { next_image_id_.GetNext(); - next_route_id_.GetNext(); + for (int32_t i = 0; + i <= static_cast<int32_t>(GpuChannelReservedRoutes::kMaxValue); ++i) + next_route_id_.GetNext(); } bool GpuChannelHost::Send(IPC::Message* msg) { @@ -91,61 +94,84 @@ std::vector<SyncToken> sync_token_fences) { AutoLock lock(context_lock_); - if (flush_list_.empty() || flush_list_.back().route_id != route_id || - flush_list_.back().transfer_buffer_id_to_destroy) - flush_list_.push_back(FlushParams()); + if (pending_ordering_barrier_ && + pending_ordering_barrier_->route_id != route_id) + EnqueuePendingOrderingBarrier(); + if (!pending_ordering_barrier_) + pending_ordering_barrier_.emplace(); - FlushParams& flush_params = flush_list_.back(); - flush_params.flush_id = next_flush_id_++; - flush_params.route_id = route_id; - flush_params.put_offset = put_offset; - flush_params.sync_token_fences.insert( - flush_params.sync_token_fences.end(), + pending_ordering_barrier_->deferred_message_id = next_deferred_message_id_++; + pending_ordering_barrier_->route_id = route_id; + pending_ordering_barrier_->put_offset = put_offset; + pending_ordering_barrier_->sync_token_fences.insert( + pending_ordering_barrier_->sync_token_fences.end(), std::make_move_iterator(sync_token_fences.begin()), std::make_move_iterator(sync_token_fences.end())); - flush_params.transfer_buffer_id_to_destroy = 0; - return flush_params.flush_id; + return pending_ordering_barrier_->deferred_message_id; } -uint32_t GpuChannelHost::DestroyTransferBuffer(int32_t route_id, - int32_t id_to_destroy) { +uint32_t GpuChannelHost::EnqueueDeferredMessage( + const IPC::Message& message, + std::vector<SyncToken> sync_token_fences) { AutoLock lock(context_lock_); - flush_list_.push_back(FlushParams()); - FlushParams& flush_params = flush_list_.back(); - flush_params.flush_id = next_flush_id_++; - flush_params.route_id = route_id; - flush_params.put_offset = -1; - flush_params.transfer_buffer_id_to_destroy = id_to_destroy; - return flush_params.flush_id; + EnqueuePendingOrderingBarrier(); + enqueued_deferred_message_id_ = next_deferred_message_id_++; + GpuDeferredMessage deferred_message; + deferred_message.message = message; + deferred_message.sync_token_fences = std::move(sync_token_fences); + deferred_messages_.push_back(std::move(deferred_message)); + return enqueued_deferred_message_id_; } -void GpuChannelHost::EnsureFlush(uint32_t flush_id) { +void GpuChannelHost::EnsureFlush(uint32_t deferred_message_id) { AutoLock lock(context_lock_); - InternalFlush(flush_id); + InternalFlush(deferred_message_id); } -void GpuChannelHost::VerifyFlush(uint32_t flush_id) { +void GpuChannelHost::VerifyFlush(uint32_t deferred_message_id) { AutoLock lock(context_lock_); - InternalFlush(flush_id); + InternalFlush(deferred_message_id); - if (flush_id > verified_flush_id_) { + if (deferred_message_id > verified_deferred_message_id_) { Send(new GpuChannelMsg_Nop()); - verified_flush_id_ = next_flush_id_ - 1; + verified_deferred_message_id_ = flushed_deferred_message_id_; } } -void GpuChannelHost::InternalFlush(uint32_t flush_id) { +void GpuChannelHost::EnqueuePendingOrderingBarrier() { + context_lock_.AssertAcquired(); + if (!pending_ordering_barrier_) + return; + DCHECK_LT(enqueued_deferred_message_id_, + pending_ordering_barrier_->deferred_message_id); + enqueued_deferred_message_id_ = + pending_ordering_barrier_->deferred_message_id; + GpuDeferredMessage deferred_message; + deferred_message.message = GpuCommandBufferMsg_AsyncFlush( + pending_ordering_barrier_->route_id, + pending_ordering_barrier_->put_offset, + pending_ordering_barrier_->deferred_message_id); + deferred_message.sync_token_fences = + std::move(pending_ordering_barrier_->sync_token_fences); + deferred_messages_.push_back(std::move(deferred_message)); + pending_ordering_barrier_.reset(); +} + +void GpuChannelHost::InternalFlush(uint32_t deferred_message_id) { context_lock_.AssertAcquired(); - if (!flush_list_.empty() && flush_id > flushed_flush_id_) { - DCHECK_EQ(flush_list_.back().flush_id, next_flush_id_ - 1); + EnqueuePendingOrderingBarrier(); + if (!deferred_messages_.empty() && + deferred_message_id > flushed_deferred_message_id_) { + DCHECK_EQ(enqueued_deferred_message_id_, next_deferred_message_id_ - 1); - Send(new GpuChannelMsg_FlushCommandBuffers(std::move(flush_list_))); + Send( + new GpuChannelMsg_FlushDeferredMessages(std::move(deferred_messages_))); - flush_list_.clear(); - flushed_flush_id_ = next_flush_id_ - 1; + deferred_messages_.clear(); + flushed_deferred_message_id_ = next_deferred_message_id_ - 1; } } @@ -228,6 +254,16 @@ GpuChannelHost::Listener::RouteInfo& GpuChannelHost::Listener::RouteInfo:: operator=(RouteInfo&& other) = default; +GpuChannelHost::OrderingBarrierInfo::OrderingBarrierInfo() = default; + +GpuChannelHost::OrderingBarrierInfo::~OrderingBarrierInfo() = default; + +GpuChannelHost::OrderingBarrierInfo::OrderingBarrierInfo( + OrderingBarrierInfo&&) = default; + +GpuChannelHost::OrderingBarrierInfo& GpuChannelHost::OrderingBarrierInfo:: +operator=(OrderingBarrierInfo&&) = default; + GpuChannelHost::Listener::Listener( mojo::ScopedMessagePipeHandle handle, scoped_refptr<base::SingleThreadTaskRunner> io_task_runner)
diff --git a/gpu/ipc/client/gpu_channel_host.h b/gpu/ipc/client/gpu_channel_host.h index 37fc4d8..261ae2ee 100644 --- a/gpu/ipc/client/gpu_channel_host.h +++ b/gpu/ipc/client/gpu_channel_host.h
@@ -24,7 +24,6 @@ #include "gpu/config/gpu_feature_info.h" #include "gpu/config/gpu_info.h" #include "gpu/gpu_export.h" -#include "gpu/ipc/common/flush_params.h" #include "ipc/ipc_channel_handle.h" #include "ipc/message_filter.h" #include "ipc/message_router.h" @@ -34,6 +33,7 @@ struct PendingSyncMsg; class ChannelMojo; } +struct GpuDeferredMessage; namespace gpu { struct SyncToken; @@ -81,21 +81,29 @@ // IPC::Sender implementation: bool Send(IPC::Message* msg) override; - // Enqueue an ordering barrier to defer the flush and return an identifier - // that can be used to ensure or verify the flush later. + // Enqueue a deferred message for the ordering barrier and return an + // identifier that can be used to ensure or verify the deferred message later. uint32_t OrderingBarrier(int32_t route_id, int32_t put_offset, std::vector<SyncToken> sync_token_fences); - // Ensure that the all ordering barriers prior upto |flush_id| have been - // flushed. Pass UINT32_MAX to force all pending ordering barriers to be - // flushed. - void EnsureFlush(uint32_t flush_id); + // Enqueues an IPC message that is deferred until the next implicit or + // explicit flush. The IPC is also possibly gated on one or more SyncTokens + // being released, but is handled in-order relative to other such IPCs and/or + // OrderingBarriers. Returns a deferred message id just like OrderingBarrier. + uint32_t EnqueueDeferredMessage( + const IPC::Message& message, + std::vector<SyncToken> sync_token_fences = {}); - // Verify that the all ordering barriers prior upto |flush_id| have reached - // the service. Pass UINT32_MAX to force all pending ordering barriers to be - // verified. - void VerifyFlush(uint32_t flush_id); + // Ensure that the all deferred messages prior upto |deferred_message_id| have + // been flushed. Pass UINT32_MAX to force all pending deferred messages to be + // flushed. + void EnsureFlush(uint32_t deferred_message_id); + + // Verify that the all deferred messages prior upto |deferred_message_id| have + // reached the service. Pass UINT32_MAX to force all pending deferred messages + // to be verified. + void VerifyFlush(uint32_t deferred_message_id); // Destroy this channel. Must be called on the main thread, before // destruction. @@ -125,11 +133,6 @@ // Reserve one unused transfer buffer ID. int32_t ReserveTransferBufferId(); - // An ordering barrier must be placed after any commands that use the buffer - // before it is safe to call this function to destroy it. Returns a flush id - // just like OrderingBarrier. - uint32_t DestroyTransferBuffer(int32_t route_id, int32_t id_to_destroy); - // Reserve one unused image ID. int32_t ReserveImageId(); @@ -206,13 +209,32 @@ bool lost_ = false; }; - void InternalFlush(uint32_t flush_id); + struct OrderingBarrierInfo { + OrderingBarrierInfo(); + ~OrderingBarrierInfo(); + OrderingBarrierInfo(OrderingBarrierInfo&&); + OrderingBarrierInfo& operator=(OrderingBarrierInfo&&); + + // Route ID of the command buffer for this command buffer flush. + int32_t route_id; + // Client put offset. Service get offset is updated in shared memory. + int32_t put_offset; + // Increasing counter for the deferred message. + uint32_t deferred_message_id; + // Sync token dependencies of the message. These are sync tokens for which + // waits are in the commands that are part of this command buffer flush. + std::vector<SyncToken> sync_token_fences; + }; + + void EnqueuePendingOrderingBarrier(); + void InternalFlush(uint32_t deferred_message_id); // Threading notes: all fields are constant during the lifetime of |this| // except: // - |next_image_id_|, atomic type // - |next_route_id_|, atomic type - // - |flush_list_| and |*_flush_id_| protected by |context_lock_| + // - |deferred_messages_| and |*_deferred_message_id_| protected by + // |context_lock_| const scoped_refptr<base::SingleThreadTaskRunner> io_thread_; const int channel_id_; @@ -230,12 +252,18 @@ // Route IDs are allocated in sequence. base::AtomicSequenceNumber next_route_id_; - // Protects |flush_list_| and |*_flush_id_|. + // Protects |deferred_messages_|, |pending_ordering_barrier_| and + // |*_deferred_message_id_|. mutable base::Lock context_lock_; - std::vector<FlushParams> flush_list_; - uint32_t next_flush_id_ = 1; - uint32_t flushed_flush_id_ = 0; - uint32_t verified_flush_id_ = 0; + std::vector<GpuDeferredMessage> deferred_messages_; + base::Optional<OrderingBarrierInfo> pending_ordering_barrier_; + uint32_t next_deferred_message_id_ = 1; + // Highest deferred message id in |deferred_messages_|. + uint32_t enqueued_deferred_message_id_ = 0; + // Highest deferred message id sent to the channel. + uint32_t flushed_deferred_message_id_ = 0; + // Highest deferred message id known to have been received by the service. + uint32_t verified_deferred_message_id_ = 0; DISALLOW_COPY_AND_ASSIGN(GpuChannelHost); };
diff --git a/gpu/ipc/client/shared_image_interface_proxy.cc b/gpu/ipc/client/shared_image_interface_proxy.cc new file mode 100644 index 0000000..311d0e4e --- /dev/null +++ b/gpu/ipc/client/shared_image_interface_proxy.cc
@@ -0,0 +1,64 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "gpu/ipc/client/shared_image_interface_proxy.h" + +#include "gpu/ipc/client/gpu_channel_host.h" +#include "gpu/ipc/common/command_buffer_id.h" +#include "gpu/ipc/common/gpu_messages.h" +#include "gpu/ipc/common/gpu_param_traits_macros.h" + +namespace gpu { + +SharedImageInterfaceProxy::SharedImageInterfaceProxy(GpuChannelHost* host, + int32_t route_id) + : host_(host), route_id_(route_id) {} + +SharedImageInterfaceProxy::~SharedImageInterfaceProxy() = default; +Mailbox SharedImageInterfaceProxy::CreateSharedImage( + viz::ResourceFormat format, + const gfx::Size& size, + const gfx::ColorSpace& color_space, + uint32_t usage) { + GpuChannelMsg_CreateSharedImage_Params params; + params.mailbox = Mailbox::Generate(); + params.format = format; + params.size = size; + params.color_space = color_space; + params.usage = usage; + { + base::AutoLock lock(lock_); + params.release_id = ++next_release_id_; + // Note: we enqueue the IPC under the lock to guarantee monotonicity of the + // release ids as seen by the service. + host_->EnqueueDeferredMessage( + GpuChannelMsg_CreateSharedImage(route_id_, params)); + } + return params.mailbox; +} + +void SharedImageInterfaceProxy::DestroySharedImage(const SyncToken& sync_token, + const Mailbox& mailbox) { + SyncToken new_token = sync_token; + if (!new_token.verified_flush()) { + // Only allow unverified sync tokens for the same channel. + DCHECK_EQ(sync_token.namespace_id(), gpu::CommandBufferNamespace::GPU_IO); + int sync_token_channel_id = + ChannelIdFromCommandBufferId(sync_token.command_buffer_id()); + DCHECK_EQ(sync_token_channel_id, host_->channel_id()); + new_token.SetVerifyFlush(); + } + host_->EnqueueDeferredMessage( + GpuChannelMsg_DestroySharedImage(route_id_, mailbox), {new_token}); +} + +SyncToken SharedImageInterfaceProxy::GenUnverifiedSyncToken() { + base::AutoLock lock(lock_); + return SyncToken( + CommandBufferNamespace::GPU_IO, + CommandBufferIdFromChannelAndRoute(host_->channel_id(), route_id_), + next_release_id_); +} + +} // namespace gpu
diff --git a/gpu/ipc/client/shared_image_interface_proxy.h b/gpu/ipc/client/shared_image_interface_proxy.h new file mode 100644 index 0000000..bf33da1 --- /dev/null +++ b/gpu/ipc/client/shared_image_interface_proxy.h
@@ -0,0 +1,38 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef GPU_IPC_CLIENT_SHARED_IMAGE_INTERFACE_PROXY_H_ +#define GPU_IPC_CLIENT_SHARED_IMAGE_INTERFACE_PROXY_H_ + +#include "base/synchronization/lock.h" +#include "gpu/command_buffer/client/shared_image_interface.h" + +namespace gpu { +class GpuChannelHost; + +// Implementation of SharedImageInterface that sends commands over GPU channel +// IPCs. +class SharedImageInterfaceProxy : public SharedImageInterface { + public: + explicit SharedImageInterfaceProxy(GpuChannelHost* host, int32_t route_id); + ~SharedImageInterfaceProxy() override; + Mailbox CreateSharedImage(viz::ResourceFormat format, + const gfx::Size& size, + const gfx::ColorSpace& color_space, + uint32_t usage) override; + void DestroySharedImage(const SyncToken& sync_token, + const Mailbox& mailbox) override; + SyncToken GenUnverifiedSyncToken() override; + + private: + GpuChannelHost* const host_; + const int32_t route_id_; + // Protects next_release_id_. + base::Lock lock_; + uint32_t next_release_id_ = 0; +}; + +} // namespace gpu + +#endif // GPU_IPC_CLIENT_SHARED_IMAGE_INTERFACE_PROXY_H_
diff --git a/gpu/ipc/common/BUILD.gn b/gpu/ipc/common/BUILD.gn index fdd4aaa..373f81ac 100644 --- a/gpu/ipc/common/BUILD.gn +++ b/gpu/ipc/common/BUILD.gn
@@ -65,8 +65,7 @@ visibility = [ "//gpu/*" ] sources = [ - "flush_params.cc", - "flush_params.h", + "command_buffer_id.h", "gpu_client_ids.h", "gpu_memory_buffer_impl.cc", "gpu_memory_buffer_impl.h", @@ -125,11 +124,13 @@ deps = [ "//base", + "//components/viz/common:resource_format", "//gpu/command_buffer/common:common_sources", "//gpu/config:config_sources", "//ui/base", "//ui/gfx/ipc", "//ui/gfx/ipc/buffer_types", + "//ui/gfx/ipc/color", "//ui/gfx/ipc/geometry", "//ui/gl", ]
diff --git a/gpu/ipc/common/DEPS b/gpu/ipc/common/DEPS index 5f79994..3725d16 100644 --- a/gpu/ipc/common/DEPS +++ b/gpu/ipc/common/DEPS
@@ -1,5 +1,6 @@ include_rules = [ "+base", + "+components/viz/common/resources/resource_format.h", "+ipc", "+mojo", "+ui/base",
diff --git a/gpu/ipc/common/command_buffer_id.h b/gpu/ipc/common/command_buffer_id.h new file mode 100644 index 0000000..820543c --- /dev/null +++ b/gpu/ipc/common/command_buffer_id.h
@@ -0,0 +1,30 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef GPU_IPC_COMMON_COMMAND_BUFFER_ID_H_ +#define GPU_IPC_COMMON_COMMAND_BUFFER_ID_H_ + +#include "gpu/command_buffer/common/command_buffer_id.h" + +namespace gpu { + +enum class GpuChannelReservedRoutes : int32_t { + kSharedImageInterface = 0, + kMaxValue = kSharedImageInterface, +}; + +inline CommandBufferId CommandBufferIdFromChannelAndRoute(int channel_id, + int32_t route_id) { + return CommandBufferId::FromUnsafeValue( + (static_cast<uint64_t>(channel_id) << 32) | route_id); +} + +inline int ChannelIdFromCommandBufferId( + gpu::CommandBufferId command_buffer_id) { + return static_cast<int>(command_buffer_id.GetUnsafeValue() >> 32); +} + +} // namespace gpu + +#endif // GPU_IPC_COMMON_COMMAND_BUFFER_ID_H_
diff --git a/gpu/ipc/common/flush_params.cc b/gpu/ipc/common/flush_params.cc deleted file mode 100644 index 073d6d5..0000000 --- a/gpu/ipc/common/flush_params.cc +++ /dev/null
@@ -1,16 +0,0 @@ -// Copyright 2017 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 "gpu/ipc/common/flush_params.h" - -namespace gpu { - -FlushParams::FlushParams() = default; -FlushParams::FlushParams(const FlushParams& other) = default; -FlushParams::FlushParams(FlushParams&& other) = default; -FlushParams::~FlushParams() = default; -FlushParams& FlushParams::operator=(const FlushParams& other) = default; -FlushParams& FlushParams::operator=(FlushParams&& other) = default; - -} // namespace gpu
diff --git a/gpu/ipc/common/flush_params.h b/gpu/ipc/common/flush_params.h deleted file mode 100644 index 1523000..0000000 --- a/gpu/ipc/common/flush_params.h +++ /dev/null
@@ -1,39 +0,0 @@ -// Copyright 2017 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 GPU_IPC_COMMON_FLUSH_PARAMS_H_ -#define GPU_IPC_COMMON_FLUSH_PARAMS_H_ - -#include <stdint.h> -#include <vector> - -#include "gpu/command_buffer/common/sync_token.h" -#include "gpu/gpu_export.h" - -namespace gpu { - -struct GPU_EXPORT FlushParams { - FlushParams(); - FlushParams(const FlushParams& other); - FlushParams(FlushParams&& other); - ~FlushParams(); - FlushParams& operator=(const FlushParams& other); - FlushParams& operator=(FlushParams&& other); - - // Route ID of the command buffer for this flush. - int32_t route_id; - // If nonzero, destroy this transfer buffer instead of flushing. - int32_t transfer_buffer_id_to_destroy; - // Client put offset. Service get offset is updated in shared memory. - int32_t put_offset; - // Increasing counter for the flush. - uint32_t flush_id; - // Sync token dependencies of the flush. These are sync tokens for which waits - // are in the commands that are part of this flush. - std::vector<SyncToken> sync_token_fences; -}; - -} // namespace gpu - -#endif // GPU_IPC_COMMON_FLUSH_PARAMS_H_
diff --git a/gpu/ipc/common/gpu_messages.h b/gpu/ipc/common/gpu_messages.h index f9ca1df2..b563322 100644 --- a/gpu/ipc/common/gpu_messages.h +++ b/gpu/ipc/common/gpu_messages.h
@@ -16,6 +16,7 @@ #include "base/memory/shared_memory.h" #include "base/unguessable_token.h" #include "build/build_config.h" +#include "components/viz/common/resources/resource_format.h" #include "gpu/command_buffer/common/capabilities.h" #include "gpu/command_buffer/common/command_buffer.h" #include "gpu/command_buffer/common/constants.h" @@ -32,6 +33,7 @@ #include "ui/gfx/geometry/size.h" #include "ui/gfx/gpu_fence_handle.h" #include "ui/gfx/gpu_memory_buffer.h" +#include "ui/gfx/ipc/color/gfx_param_traits.h" #include "ui/gfx/ipc/geometry/gfx_param_traits.h" #include "ui/gfx/ipc/gfx_param_traits.h" #include "ui/gfx/native_widget_types.h" @@ -72,6 +74,20 @@ IPC_STRUCT_MEMBER(uint64_t, image_release_count) IPC_STRUCT_END() +IPC_STRUCT_BEGIN(GpuChannelMsg_CreateSharedImage_Params) + IPC_STRUCT_MEMBER(gpu::Mailbox, mailbox) + IPC_STRUCT_MEMBER(viz::ResourceFormat, format) + IPC_STRUCT_MEMBER(gfx::Size, size) + IPC_STRUCT_MEMBER(gfx::ColorSpace, color_space) + IPC_STRUCT_MEMBER(uint32_t, usage) + IPC_STRUCT_MEMBER(uint32_t, release_id) +IPC_STRUCT_END() + +IPC_STRUCT_BEGIN(GpuDeferredMessage) + IPC_STRUCT_MEMBER(IPC::Message, message) + IPC_STRUCT_MEMBER(std::vector<gpu::SyncToken>, sync_token_fences) +IPC_STRUCT_END() + //------------------------------------------------------------------------------ // GPU Channel Messages // These are messages from a renderer process to the GPU process. @@ -94,8 +110,12 @@ IPC_SYNC_MESSAGE_CONTROL1_0(GpuChannelMsg_DestroyCommandBuffer, int32_t /* instance_id */) -IPC_MESSAGE_CONTROL1(GpuChannelMsg_FlushCommandBuffers, - std::vector<gpu::FlushParams> /* flush_list */) +IPC_MESSAGE_CONTROL1(GpuChannelMsg_FlushDeferredMessages, + std::vector<GpuDeferredMessage> /* deferred_messages */) + +IPC_MESSAGE_ROUTED1(GpuChannelMsg_CreateSharedImage, + GpuChannelMsg_CreateSharedImage_Params /* params */) +IPC_MESSAGE_ROUTED1(GpuChannelMsg_DestroySharedImage, gpu::Mailbox /* id */) // Crash the GPU process in similar way to how chrome://gpucrash does. // This is only supported in testing environments, and is otherwise ignored.
diff --git a/gpu/ipc/common/gpu_param_traits_macros.h b/gpu/ipc/common/gpu_param_traits_macros.h index edb20f0..621890d 100644 --- a/gpu/ipc/common/gpu_param_traits_macros.h +++ b/gpu/ipc/common/gpu_param_traits_macros.h
@@ -5,12 +5,12 @@ #ifndef GPU_IPC_COMMON_GPU_PARAM_TRAITS_MACROS_H_ #define GPU_IPC_COMMON_GPU_PARAM_TRAITS_MACROS_H_ +#include "components/viz/common/resources/resource_format.h" #include "gpu/command_buffer/common/constants.h" #include "gpu/command_buffer/common/context_result.h" #include "gpu/command_buffer/common/scheduling_priority.h" #include "gpu/command_buffer/common/swap_buffers_complete_params.h" #include "gpu/gpu_export.h" -#include "gpu/ipc/common/flush_params.h" #include "gpu/ipc/common/gpu_command_buffer_traits.h" #include "ipc/ipc_message_macros.h" #include "ui/gfx/ipc/gfx_param_traits.h" @@ -19,14 +19,6 @@ #undef IPC_MESSAGE_EXPORT #define IPC_MESSAGE_EXPORT GPU_EXPORT -IPC_STRUCT_TRAITS_BEGIN(gpu::FlushParams) - IPC_STRUCT_TRAITS_MEMBER(route_id) - IPC_STRUCT_TRAITS_MEMBER(transfer_buffer_id_to_destroy) - IPC_STRUCT_TRAITS_MEMBER(put_offset) - IPC_STRUCT_TRAITS_MEMBER(flush_id) - IPC_STRUCT_TRAITS_MEMBER(sync_token_fences) -IPC_STRUCT_TRAITS_END() - IPC_ENUM_TRAITS_MAX_VALUE(gpu::SchedulingPriority, gpu::SchedulingPriority::kLast) IPC_ENUM_TRAITS_MAX_VALUE(gpu::ContextResult, @@ -38,4 +30,6 @@ IPC_STRUCT_TRAITS_MEMBER(swap_response) IPC_STRUCT_TRAITS_END() +IPC_ENUM_TRAITS_MAX_VALUE(viz::ResourceFormat, viz::RESOURCE_FORMAT_MAX); + #endif // GPU_IPC_COMMON_GPU_PARAM_TRAITS_MACROS_H_
diff --git a/gpu/ipc/gl_in_process_context.cc b/gpu/ipc/gl_in_process_context.cc index 2c583527..6a23e5a 100644 --- a/gpu/ipc/gl_in_process_context.cc +++ b/gpu/ipc/gl_in_process_context.cc
@@ -52,6 +52,10 @@ return command_buffer_.get(); } +SharedImageInterface* GLInProcessContext::GetSharedImageInterface() { + return command_buffer_->GetSharedImageInterface(); +} + void GLInProcessContext::SetUpdateVSyncParametersCallback( const InProcessCommandBuffer::UpdateVSyncParametersCallback& callback) { command_buffer_->SetUpdateVSyncParametersCallback(callback);
diff --git a/gpu/ipc/gl_in_process_context.h b/gpu/ipc/gl_in_process_context.h index 905dd4f8..923af56a 100644 --- a/gpu/ipc/gl_in_process_context.h +++ b/gpu/ipc/gl_in_process_context.h
@@ -16,6 +16,7 @@ #include "ui/gl/gl_surface.h" namespace gpu { +class SharedImageInterface; class TransferBuffer; struct GpuFeatureInfo; struct SharedMemoryLimits; @@ -62,6 +63,8 @@ CommandBuffer* GetCommandBuffer(); + SharedImageInterface* GetSharedImageInterface(); + void SetUpdateVSyncParametersCallback( const InProcessCommandBuffer::UpdateVSyncParametersCallback& callback);
diff --git a/gpu/ipc/in_process_command_buffer.cc b/gpu/ipc/in_process_command_buffer.cc index 1c49a97..63bf0e4 100644 --- a/gpu/ipc/in_process_command_buffer.cc +++ b/gpu/ipc/in_process_command_buffer.cc
@@ -28,6 +28,7 @@ #include "build/build_config.h" #include "gpu/command_buffer/client/gpu_control_client.h" #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h" +#include "gpu/command_buffer/client/shared_image_interface.h" #include "gpu/command_buffer/common/gpu_memory_buffer_support.h" #include "gpu/command_buffer/common/swap_buffers_complete_params.h" #include "gpu/command_buffer/common/swap_buffers_flags.h" @@ -48,6 +49,7 @@ #include "gpu/command_buffer/service/raster_decoder.h" #include "gpu/command_buffer/service/raster_decoder_context_state.h" #include "gpu/command_buffer/service/service_utils.h" +#include "gpu/command_buffer/service/shared_image_factory.h" #include "gpu/command_buffer/service/sync_point_manager.h" #include "gpu/command_buffer/service/transfer_buffer_manager.h" #include "gpu/config/gpu_crash_keys.h" @@ -162,6 +164,70 @@ } // anonyous namespace +class InProcessCommandBuffer::SharedImageInterface + : public gpu::SharedImageInterface { + public: + explicit SharedImageInterface(InProcessCommandBuffer* parent) + : parent_(parent), + command_buffer_id_(CommandBufferId::FromUnsafeValue( + g_next_command_buffer_id.GetNext() + 1)) {} + + ~SharedImageInterface() override = default; + + Mailbox CreateSharedImage(viz::ResourceFormat format, + const gfx::Size& size, + const gfx::ColorSpace& color_space, + uint32_t usage) override { + auto mailbox = Mailbox::Generate(); + { + base::AutoLock lock(lock_); + // Note: we enqueue the task under the lock to guarantee monotonicity of + // the release ids as seen by the service. Unretained is safe because + // InProcessCommandBuffer synchronizes with the GPU thread at destruction + // time, cancelling tasks, before |this| is destroyed. + parent_->QueueOnceTask( + false, + base::BindOnce(&InProcessCommandBuffer::CreateSharedImageOnGpuThread, + parent_->gpu_thread_weak_ptr_, mailbox, format, size, + color_space, usage, + MakeSyncToken(next_fence_sync_release_++))); + } + return mailbox; + } + + void DestroySharedImage(const SyncToken& sync_token, + const Mailbox& mailbox) override { + // Need a repeatable task to handle SyncToken waits. + parent_->QueueRepeatableTask(base::BindRepeating( + &InProcessCommandBuffer::DestroySharedImageOnGpuThread, + parent_->gpu_thread_weak_ptr_, sync_token, mailbox)); + } + + SyncToken GenUnverifiedSyncToken() override { + base::AutoLock lock(lock_); + return MakeSyncToken(next_fence_sync_release_ - 1); + } + + CommandBufferId command_buffer_id() const { return command_buffer_id_; } + + private: + SyncToken MakeSyncToken(uint64_t release_id) { + return SyncToken(CommandBufferNamespace::IN_PROCESS, command_buffer_id_, + release_id); + } + + InProcessCommandBuffer* const parent_; + + const CommandBufferId command_buffer_id_; + + // Accessed on any thread. release_id_lock_ protects access to + // next_fence_sync_release_. + base::Lock lock_; + uint64_t next_fence_sync_release_ = 1; + + DISALLOW_COPY_AND_ASSIGN(SharedImageInterface); +}; + InProcessCommandBuffer::InProcessCommandBuffer( scoped_refptr<CommandBufferTaskExecutor> task_executer) : command_buffer_id_(CommandBufferId::FromUnsafeValue( @@ -169,6 +235,7 @@ flush_event_(base::WaitableEvent::ResetPolicy::AUTOMATIC, base::WaitableEvent::InitialState::NOT_SIGNALED), task_executor_(MaybeGetDefaultTaskExecutor(std::move(task_executer))), + shared_image_interface_(new SharedImageInterface(this)), fence_sync_wait_event_(base::WaitableEvent::ResetPolicy::AUTOMATIC, base::WaitableEvent::InitialState::NOT_SIGNALED), client_thread_weak_ptr_factory_(this), @@ -204,6 +271,11 @@ ->DecoderIdForTest(); } +gpu::SharedImageInterface* InProcessCommandBuffer::GetSharedImageInterface() + const { + return shared_image_interface_.get(); +} + bool InProcessCommandBuffer::MakeCurrent() { CheckSequencedThread(); @@ -387,6 +459,14 @@ task_executor_->sync_point_manager()->CreateSyncPointClientState( GetNamespaceID(), GetCommandBufferID(), sync_point_order_data_->sequence_id()); + // Make the SharedImageInterface use the same sequence as the command buffer, + // it's necessary for WebView because of the blocking behavior. + // TODO(piman): see if it's worth using a different sequence for non-WebView. + shared_image_client_state_ = + task_executor_->sync_point_manager()->CreateSyncPointClientState( + CommandBufferNamespace::IN_PROCESS, + shared_image_interface_->command_buffer_id(), + sync_point_order_data_->sequence_id()); if (context_group_->use_passthrough_cmd_decoder()) { // When using the passthrough command decoder, only share with other @@ -562,6 +642,8 @@ gpu_thread_weak_ptr_factory_.InvalidateWeakPtrs(); // Clean up GL resources if possible. bool have_context = context_.get() && context_->MakeCurrent(surface_.get()); + if (shared_image_factory_) + shared_image_factory_->DestroyAllSharedImages(have_context); // Prepare to destroy the surface while the context is still current, because // some surface destructors make GL calls. @@ -586,6 +668,10 @@ sync_point_client_state_->Destroy(); sync_point_client_state_ = nullptr; } + if (shared_image_client_state_) { + shared_image_client_state_->Destroy(); + shared_image_client_state_ = nullptr; + } gl_share_group_ = nullptr; context_group_ = nullptr; @@ -1190,6 +1276,48 @@ } } +void InProcessCommandBuffer::CreateSharedImageOnGpuThread( + const Mailbox& mailbox, + viz::ResourceFormat format, + const gfx::Size& size, + const gfx::ColorSpace& color_space, + uint32_t usage, + const SyncToken& sync_token) { + CheckSequencedThread(); + if (!MakeCurrent()) + return; + if (!shared_image_factory_) { + shared_image_factory_ = std::make_unique<SharedImageFactory>( + GetGpuPreferences(), context_group_->feature_info()->workarounds(), + GetGpuFeatureInfo(), context_group_->mailbox_manager(), image_factory_, + nullptr); + } + if (!shared_image_factory_->CreateSharedImage(mailbox, format, size, + color_space, usage)) { + // Signal errors by losing the command buffer. + command_buffer_->SetParseError(error::kLostContext); + return; + } + context_group_->mailbox_manager()->PushTextureUpdates(sync_token); + shared_image_client_state_->ReleaseFenceSync(sync_token.release_count()); +} + +void InProcessCommandBuffer::DestroySharedImageOnGpuThread( + const SyncToken& sync_token, + const Mailbox& mailbox) { + CheckSequencedThread(); + if (OnWaitSyncToken(sync_token)) + return; + if (!MakeCurrent()) + return; + if (!shared_image_factory_ || + !shared_image_factory_->DestroySharedImage(mailbox)) { + // Signal errors by losing the command buffer. + command_buffer_->SetParseError(error::kLostContext); + return; + } +} + void InProcessCommandBuffer::SetLock(base::Lock*) { // No support for using on multiple threads. NOTREACHED();
diff --git a/gpu/ipc/in_process_command_buffer.h b/gpu/ipc/in_process_command_buffer.h index aa1b3d4e..0575b14 100644 --- a/gpu/ipc/in_process_command_buffer.h +++ b/gpu/ipc/in_process_command_buffer.h
@@ -22,6 +22,7 @@ #include "base/single_thread_task_runner.h" #include "base/synchronization/lock.h" #include "base/synchronization/waitable_event.h" +#include "components/viz/common/resources/resource_format.h" #include "gpu/command_buffer/client/gpu_control.h" #include "gpu/command_buffer/common/command_buffer.h" #include "gpu/command_buffer/common/context_result.h" @@ -61,6 +62,8 @@ class CommandBufferTaskExecutor; class GpuMemoryBufferManager; class ImageFactory; +class SharedImageFactory; +class SharedImageInterface; class SyncPointClientState; class SyncPointOrderData; class TransferBufferManager; @@ -198,7 +201,11 @@ return task_executor_.get(); } + gpu::SharedImageInterface* GetSharedImageInterface() const; + private: + class SharedImageInterface; + struct InitializeOnGpuThreadParams { bool is_offscreen; SurfaceHandle window; @@ -264,6 +271,14 @@ uint32_t gpu_fence_id, const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, base::OnceCallback<void(std::unique_ptr<gfx::GpuFence>)> callback); + void CreateSharedImageOnGpuThread(const Mailbox& mailbox, + viz::ResourceFormat format, + const gfx::Size& size, + const gfx::ColorSpace& color_space, + uint32_t usage, + const SyncToken& sync_tokne); + void DestroySharedImageOnGpuThread(const SyncToken& sync_token, + const Mailbox& mailbox); // Callbacks on the gpu thread. void PerformDelayedWorkOnGpuThread(); @@ -287,6 +302,9 @@ scoped_refptr<gl::GLSurface> surface_; scoped_refptr<SyncPointOrderData> sync_point_order_data_; scoped_refptr<SyncPointClientState> sync_point_client_state_; + scoped_refptr<SyncPointClientState> shared_image_client_state_; + std::unique_ptr<SharedImageFactory> shared_image_factory_; + // Used to throttle PerformDelayedWorkOnGpuThread. bool delayed_work_pending_ = false; ImageFactory* image_factory_ = nullptr; @@ -309,6 +327,7 @@ // Accessed on both threads: base::WaitableEvent flush_event_; scoped_refptr<CommandBufferTaskExecutor> task_executor_; + std::unique_ptr<SharedImageInterface> shared_image_interface_; // The group of contexts that share namespaces with this context. scoped_refptr<gles2::ContextGroup> context_group_;
diff --git a/gpu/ipc/raster_in_process_context.cc b/gpu/ipc/raster_in_process_context.cc index 55e0d75..5eb9f48 100644 --- a/gpu/ipc/raster_in_process_context.cc +++ b/gpu/ipc/raster_in_process_context.cc
@@ -116,6 +116,10 @@ return raster_implementation_.get(); } +SharedImageInterface* RasterInProcessContext::GetSharedImageInterface() { + return command_buffer_->GetSharedImageInterface(); +} + ServiceTransferCache* RasterInProcessContext::GetTransferCacheForTest() const { return command_buffer_->GetTransferCacheForTest(); }
diff --git a/gpu/ipc/raster_in_process_context.h b/gpu/ipc/raster_in_process_context.h index b3322f3..968c4bb 100644 --- a/gpu/ipc/raster_in_process_context.h +++ b/gpu/ipc/raster_in_process_context.h
@@ -21,6 +21,7 @@ class CommandBufferHelper; class ContextSupport; class ServiceTransferCache; +class SharedImageInterface; class TransferBuffer; struct GpuFeatureInfo; struct SharedMemoryLimits; @@ -59,6 +60,8 @@ ContextSupport* GetContextSupport(); + SharedImageInterface* GetSharedImageInterface(); + // Test only functions. ServiceTransferCache* GetTransferCacheForTest() const; InProcessCommandBuffer* GetCommandBufferForTest() const;
diff --git a/gpu/ipc/service/BUILD.gn b/gpu/ipc/service/BUILD.gn index 834eab22f..489fb52 100644 --- a/gpu/ipc/service/BUILD.gn +++ b/gpu/ipc/service/BUILD.gn
@@ -34,6 +34,8 @@ "pass_through_image_transport_surface.h", "raster_command_buffer_stub.cc", "raster_command_buffer_stub.h", + "shared_image_stub.cc", + "shared_image_stub.h", ] defines = [ "GPU_IPC_SERVICE_IMPLEMENTATION" ] if (is_chromecast) {
diff --git a/gpu/ipc/service/DEPS b/gpu/ipc/service/DEPS index 07174c2..0af5af5 100644 --- a/gpu/ipc/service/DEPS +++ b/gpu/ipc/service/DEPS
@@ -1,5 +1,6 @@ include_rules = [ "+components/viz/common/features.h", + "+components/viz/common/resources/resource_format.h", "+third_party/skia", "+ui/accelerated_widget_mac", "+ui/base",
diff --git a/gpu/ipc/service/gpu_channel.cc b/gpu/ipc/service/gpu_channel.cc index dfa9045..2cf63f307 100644 --- a/gpu/ipc/service/gpu_channel.cc +++ b/gpu/ipc/service/gpu_channel.cc
@@ -37,6 +37,7 @@ #include "gpu/command_buffer/service/mailbox_manager.h" #include "gpu/command_buffer/service/memory_tracking.h" #include "gpu/command_buffer/service/scheduler.h" +#include "gpu/ipc/common/command_buffer_id.h" #include "gpu/ipc/common/gpu_messages.h" #include "gpu/ipc/service/gles2_command_buffer_stub.h" #include "gpu/ipc/service/gpu_channel_manager.h" @@ -51,14 +52,6 @@ #include "ui/gl/gl_utils.h" namespace gpu { -namespace { - -CommandBufferId GenerateCommandBufferId(int channel_id, int32_t route_id) { - return CommandBufferId::FromUnsafeValue( - (static_cast<uint64_t>(channel_id) << 32) | route_id); -} - -} // anonymous namespace struct GpuChannelMessage { IPC::Message message; @@ -238,47 +231,39 @@ if (!gpu_channel_) return MessageErrorHandler(message, "Channel destroyed"); - // TODO(sunnyps): Remove the async flush message once the non-scheduler code - // path is removed. - if (message.type() == GpuCommandBufferMsg_AsyncFlush::ID) - return MessageErrorHandler(message, "Invalid flush message"); + switch (message.type()) { + case GpuCommandBufferMsg_AsyncFlush::ID: + case GpuCommandBufferMsg_DestroyTransferBuffer::ID: + case GpuChannelMsg_CreateSharedImage::ID: + case GpuChannelMsg_DestroySharedImage::ID: + return MessageErrorHandler(message, "Invalid message"); + default: + break; + } - std::vector<Scheduler::Task> tasks; + if (message.type() == GpuChannelMsg_FlushDeferredMessages::ID) { + GpuChannelMsg_FlushDeferredMessages::Param params; - if (message.type() == GpuChannelMsg_FlushCommandBuffers::ID) { - GpuChannelMsg_FlushCommandBuffers::Param params; - - if (!GpuChannelMsg_FlushCommandBuffers::Read(&message, ¶ms)) + if (!GpuChannelMsg_FlushDeferredMessages::Read(&message, ¶ms)) return MessageErrorHandler(message, "Invalid flush message"); - std::vector<FlushParams> flush_list = std::get<0>(std::move(params)); + std::vector<GpuDeferredMessage> deferred_messages = + std::get<0>(std::move(params)); + std::vector<Scheduler::Task> tasks; + tasks.reserve(deferred_messages.size()); - for (auto& flush_info : flush_list) { - auto it = route_sequences_.find(flush_info.route_id); + for (auto& deferred_message : deferred_messages) { + auto it = route_sequences_.find(deferred_message.message.routing_id()); if (it == route_sequences_.end()) { DLOG(ERROR) << "Invalid route id in flush list"; continue; } - if (flush_info.transfer_buffer_id_to_destroy) { - tasks.emplace_back( - it->second /* sequence_id */, - base::BindOnce(&GpuChannel::HandleMessage, - gpu_channel_->AsWeakPtr(), - GpuCommandBufferMsg_DestroyTransferBuffer( - flush_info.route_id, - flush_info.transfer_buffer_id_to_destroy)), - std::move(flush_info.sync_token_fences)); - } else { - GpuCommandBufferMsg_AsyncFlush flush_message( - flush_info.route_id, flush_info.put_offset, flush_info.flush_id); - - tasks.emplace_back( - it->second /* sequence_id */, - base::BindOnce(&GpuChannel::HandleMessage, - gpu_channel_->AsWeakPtr(), flush_message), - std::move(flush_info.sync_token_fences)); - } + tasks.emplace_back( + it->second /* sequence_id */, + base::BindOnce(&GpuChannel::HandleMessage, gpu_channel_->AsWeakPtr(), + std::move(deferred_message.message)), + std::move(deferred_message.sync_token_fences)); } scheduler_->ScheduleTasks(std::move(tasks)); @@ -391,6 +376,13 @@ void GpuChannel::Init(std::unique_ptr<FilteredSender> channel) { channel_ = std::move(channel); channel_->AddFilter(filter_.get()); + // SharedImageInterfaceProxy/Stub is a singleton per channel, using a reserved + // route. + const int32_t route_id = + static_cast<int32_t>(GpuChannelReservedRoutes::kSharedImageInterface); + shared_image_stub_ = std::make_unique<SharedImageStub>(this, route_id); + filter_->AddRoute(route_id, shared_image_stub_->sequence()); + router_.AddRoute(route_id, shared_image_stub_.get()); } void GpuChannel::SetUnhandledMessageListener(IPC::Listener* listener) { @@ -618,7 +610,7 @@ } CommandBufferId command_buffer_id = - GenerateCommandBufferId(client_id_, route_id); + CommandBufferIdFromChannelAndRoute(client_id_, route_id); SequenceId sequence_id = stream_sequences_[stream_id]; if (sequence_id.is_null()) { @@ -722,6 +714,7 @@ } size += tracker->GetSize(); } + size += shared_image_stub_->GetSize(); return size; }
diff --git a/gpu/ipc/service/gpu_channel.h b/gpu/ipc/service/gpu_channel.h index 35d61d09..3e8c1c6 100644 --- a/gpu/ipc/service/gpu_channel.h +++ b/gpu/ipc/service/gpu_channel.h
@@ -11,6 +11,7 @@ #include <memory> #include <string> +#include "base/callback.h" #include "base/containers/flat_map.h" #include "base/macros.h" #include "base/memory/ref_counted.h" @@ -23,6 +24,7 @@ #include "gpu/command_buffer/service/sync_point_manager.h" #include "gpu/ipc/service/command_buffer_stub.h" #include "gpu/ipc/service/gpu_ipc_service_export.h" +#include "gpu/ipc/service/shared_image_stub.h" #include "ipc/ipc_sender.h" #include "ipc/ipc_sync_channel.h" #include "ipc/message_router.h" @@ -39,10 +41,11 @@ namespace gpu { -class Scheduler; -class SyncPointManager; class GpuChannelManager; class GpuChannelMessageFilter; +class Scheduler; +class SharedImageStub; +class SyncPointManager; class GPU_IPC_SERVICE_EXPORT FilteredSender : public IPC::Sender { public: @@ -237,6 +240,7 @@ scoped_refptr<gl::GLShareGroup> share_group_; std::unique_ptr<gles2::ImageManager> image_manager_; + std::unique_ptr<SharedImageStub> shared_image_stub_; const bool is_gpu_host_;
diff --git a/gpu/ipc/service/shared_image_stub.cc b/gpu/ipc/service/shared_image_stub.cc new file mode 100644 index 0000000..4ad36ad --- /dev/null +++ b/gpu/ipc/service/shared_image_stub.cc
@@ -0,0 +1,139 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "gpu/ipc/service/shared_image_stub.h" + +#include "base/trace_event/trace_event.h" +#include "gpu/command_buffer/service/scheduler.h" +#include "gpu/command_buffer/service/shared_image_factory.h" +#include "gpu/ipc/common/command_buffer_id.h" +#include "gpu/ipc/common/gpu_messages.h" +#include "gpu/ipc/service/gpu_channel.h" +#include "gpu/ipc/service/gpu_channel_manager.h" +#include "gpu/ipc/service/gpu_memory_buffer_factory.h" +#include "ui/gl/gl_context.h" + +namespace gpu { + +SharedImageStub::SharedImageStub(GpuChannel* channel, int32_t route_id) + : channel_(channel), + sequence_(channel->scheduler()->CreateSequence(SchedulingPriority::kLow)), + sync_point_client_state_( + channel->sync_point_manager()->CreateSyncPointClientState( + CommandBufferNamespace::GPU_IO, + CommandBufferIdFromChannelAndRoute(channel->client_id(), + route_id), + sequence_)) {} + +SharedImageStub::~SharedImageStub() { + channel_->scheduler()->DestroySequence(sequence_); + sync_point_client_state_->Destroy(); + if (factory_ && factory_->HasImages()) { + bool have_context = MakeContextCurrentAndCreateFactory(); + factory_->DestroyAllSharedImages(have_context); + } +} + +bool SharedImageStub::OnMessageReceived(const IPC::Message& msg) { + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(SharedImageStub, msg) + IPC_MESSAGE_HANDLER(GpuChannelMsg_CreateSharedImage, OnCreateSharedImage) + IPC_MESSAGE_HANDLER(GpuChannelMsg_DestroySharedImage, OnDestroySharedImage) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + return handled; +} + +void SharedImageStub::OnCreateSharedImage( + const GpuChannelMsg_CreateSharedImage_Params& params) { + TRACE_EVENT2("gpu", "SharedImageStub::OnCreateSharedImage", "width", + params.size.width(), "height", params.size.height()); + if (!MakeContextCurrentAndCreateFactory()) + return; + + if (!factory_->CreateSharedImage(params.mailbox, params.format, params.size, + params.color_space, params.usage)) { + LOG(ERROR) << "SharedImageStub: Unable to create shared image"; + OnError(); + return; + } + sync_point_client_state_->ReleaseFenceSync(params.release_id); +} + +void SharedImageStub::OnDestroySharedImage(const Mailbox& mailbox) { + TRACE_EVENT0("gpu", "SharedImageStub::OnDestroySharedImage"); + if (!MakeContextCurrentAndCreateFactory()) + return; + + if (!factory_->DestroySharedImage(mailbox)) { + LOG(ERROR) << "SharedImageStub: Unable to destroy shared image"; + OnError(); + return; + } +} + +bool SharedImageStub::MakeContextCurrentAndCreateFactory() { + if (!factory_) { + auto* channel_manager = channel_->gpu_channel_manager(); + DCHECK(!context_state_); + ContextResult result; + context_state_ = channel_manager->GetRasterDecoderContextState(&result); + if (result != ContextResult::kSuccess) { + LOG(ERROR) << "SharedImageStub: unable to create context"; + OnError(); + return false; + } + DCHECK(context_state_); + DCHECK(!context_state_->context_lost); + DCHECK(context_state_->context->IsCurrent(nullptr)); + gpu::GpuMemoryBufferFactory* gmb_factory = + channel_manager->gpu_memory_buffer_factory(); + factory_ = std::make_unique<SharedImageFactory>( + channel_manager->gpu_preferences(), + channel_manager->gpu_driver_bug_workarounds(), + channel_manager->gpu_feature_info(), channel_manager->mailbox_manager(), + gmb_factory ? gmb_factory->AsImageFactory() : nullptr, this); + return true; + } else { + DCHECK(context_state_); + if (context_state_->context_lost) { + LOG(ERROR) << "SharedImageStub: context already lost"; + OnError(); + return false; + } else { + if (context_state_->context->MakeCurrent(context_state_->surface.get())) + return true; + context_state_->context_lost = true; + LOG(ERROR) << "SharedImageStub: MakeCurrent failed"; + OnError(); + return false; + } + } +} + +void SharedImageStub::OnError() { + channel_->OnChannelError(); +} + +void SharedImageStub::TrackMemoryAllocatedChange(uint64_t delta) { + size_ += delta; +} + +uint64_t SharedImageStub::GetSize() const { + return size_; +} + +uint64_t SharedImageStub::ClientTracingId() const { + return channel_->client_tracing_id(); +} + +int SharedImageStub::ClientId() const { + return channel_->client_id(); +} + +uint64_t SharedImageStub::ShareGroupTracingGUID() const { + return sync_point_client_state_->command_buffer_id().GetUnsafeValue(); +} + +} // namespace gpu
diff --git a/gpu/ipc/service/shared_image_stub.h b/gpu/ipc/service/shared_image_stub.h new file mode 100644 index 0000000..21aef31 --- /dev/null +++ b/gpu/ipc/service/shared_image_stub.h
@@ -0,0 +1,58 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef GPU_IPC_SERVICE_SHARED_IMAGE_STUB_H_ +#define GPU_IPC_SERVICE_SHARED_IMAGE_STUB_H_ + +#include "components/viz/common/resources/resource_format.h" +#include "gpu/command_buffer/service/memory_tracking.h" +#include "gpu/command_buffer/service/sync_point_manager.h" +#include "ipc/ipc_listener.h" + +struct GpuChannelMsg_CreateSharedImage_Params; + +namespace gpu { +struct Mailbox; +class GpuChannel; +class SharedImageFactory; + +namespace raster { +struct RasterDecoderContextState; +} + +class SharedImageStub : public IPC::Listener, public gles2::MemoryTracker { + public: + SharedImageStub(GpuChannel* channel, int32_t route_id); + ~SharedImageStub() override; + + // IPC::Listener implementation: + bool OnMessageReceived(const IPC::Message& msg) override; + + // gles2::MemoryTracker implementation; + void TrackMemoryAllocatedChange(uint64_t delta) override; + uint64_t GetSize() const override; + uint64_t ClientTracingId() const override; + int ClientId() const override; + uint64_t ShareGroupTracingGUID() const override; + + SequenceId sequence() const { return sequence_; } + + private: + void OnCreateSharedImage( + const GpuChannelMsg_CreateSharedImage_Params& params); + void OnDestroySharedImage(const Mailbox& mailbox); + bool MakeContextCurrentAndCreateFactory(); + void OnError(); + + GpuChannel* channel_; + SequenceId sequence_; + scoped_refptr<gpu::SyncPointClientState> sync_point_client_state_; + scoped_refptr<raster::RasterDecoderContextState> context_state_; + std::unique_ptr<SharedImageFactory> factory_; + uint64_t size_ = 0; +}; + +} // namespace gpu + +#endif // GPU_IPC_SERVICE_SHARED_IMAGE_STUB_H_
diff --git a/infra/config/global/cr-buildbucket.cfg b/infra/config/global/cr-buildbucket.cfg index 3485def..b01f2546 100644 --- a/infra/config/global/cr-buildbucket.cfg +++ b/infra/config/global/cr-buildbucket.cfg
@@ -143,6 +143,12 @@ } builder_mixins { + # https://crbug.com/853248, should hopefully be temporary + name: "android-tablet-ci" + execution_timeout_secs: 14400 # 4 hours +} + +builder_mixins { name: "android-fyi-ci" recipe { properties: "mastername:chromium.android.fyi" @@ -783,6 +789,7 @@ builders { name: "KitKat Tablet Tester" mixins: "android-ci" + mixins: "android-tablet-ci" dimensions: "os:Ubuntu-14.04" } @@ -801,6 +808,7 @@ builders { name: "Lollipop Tablet Tester" mixins: "android-ci" + mixins: "android-tablet-ci" dimensions: "os:Ubuntu-14.04" } @@ -813,6 +821,7 @@ builders { name: "Marshmallow Tablet Tester" mixins: "android-ci" + mixins: "android-tablet-ci" dimensions: "os:Ubuntu-14.04" } @@ -1301,7 +1310,6 @@ builders { name: "win-asan" dimensions: "os:Windows-10" - dimensions: "cores:32" mixins: "memory-ci" } builders {
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm index 1aa05022..30cd9028 100644 --- a/ios/chrome/app/main_controller.mm +++ b/ios/chrome/app/main_controller.mm
@@ -114,7 +114,6 @@ #import "ios/chrome/browser/ui/browser_view_controller.h" #import "ios/chrome/browser/ui/commands/open_new_tab_command.h" #import "ios/chrome/browser/ui/commands/show_signin_command.h" -#import "ios/chrome/browser/ui/download/legacy_download_manager_controller.h" #import "ios/chrome/browser/ui/external_file_remover_factory.h" #import "ios/chrome/browser/ui/external_file_remover_impl.h" #import "ios/chrome/browser/ui/first_run/first_run_util.h"
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd index d99228edc..8cf2fc1 100644 --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd
@@ -514,7 +514,7 @@ Clear Browsing Data </message> <message name="IDS_IOS_CONFIRM_CLEAR_BUTTON_TITLE" desc="Title for the UIAlertController indicating browsing data selected will be removed. [Length: 20em] [iOS only]"> - The items you selected will be removed + The items you selected will be removed. </message> <message name="IDS_IOS_CONFIRM_CLEAR_BUTTON" desc="Accessibility label for the button used to confirm clearing data. [iOS only]"> Confirm Clear Browsing Data
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb index 23f4f1b7..db1757b 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">Es posible que Chromium use servicios web para mejorar tu experiencia de navegación (tienes la opción de inhabilitar estos servicios). <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> <translation id="2687023731466035790">Obtener las funciones inteligentes de Google en Chromium</translation> <translation id="2730884209570016437">Chromium no puede utilizar tu cámara porque la está usando otra aplicación</translation> +<translation id="2797210818057553964">Puedes personalizar esta opción en la configuración de Chromium en cualquier momento</translation> <translation id="3256316712990552818">Se copió en Chromium.</translation> <translation id="3413120535237193088">Para obtener tus favoritos en todos tus dispositivos, accede a Chromium.</translation> <translation id="3473048256428424907">Activar el escáner QR en Chromium</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">Los datos seleccionados se quitaron de Chromium y los dispositivos sincronizados. Es posible que tu cuenta de Google tenga otros formularios del historial de navegación, como las búsquedas y la actividad de otros servicios de Google en history.google.com.</translation> <translation id="7400689562045506105">Usa Chromium en todas partes</translation> +<translation id="7499048969477415415">Se cambiaron las opciones de configuración que controlan la sincronización, la personalización y otros servicios de Google en Chromium. Es posible que tu configuración actual se vea afectada.</translation> <translation id="7674213385180944843">Abre Configuración > Privacidad > Cámara > Chromium y activa la cámara.</translation> <translation id="7746854981345936341">Sugerencia de Chromium: Algunos botones ahora están en la parte inferior de la pantalla, como Retroceder, Avanzar y Buscar.</translation> <translation id="786327964234957808">La cuenta de sincronización cambiará de <ph name="USER_EMAIL1" /> a <ph name="USER_EMAIL2" />. El dominio <ph name="DOMAIN" /> administra tus datos existentes de Chromium. Esta acción borrará los datos de este dispositivo, pero permanecerán en <ph name="USER_EMAIL1" />.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb index b1cc6e1..3cd05dc2 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">Chromium voi käyttää verkkopalveluita selauskokemuksesi parantamiseen. Voit halutessasi poistaa nämä palvelut käytöstä. <ph name="BEGIN_LINK" />Lisätietoja<ph name="END_LINK" /></translation> <translation id="2687023731466035790">Googlen älykkäitä ratkaisuja Chromiumiin</translation> <translation id="2730884209570016437">Chromium ei voi käyttää kameraa, koska se on toisen sovelluksen käytössä.</translation> +<translation id="2797210818057553964">Voit muokata tätä koska tahansa Chromiumin asetuksista</translation> <translation id="3256316712990552818">Kopioitiin Chromiumiin.</translation> <translation id="3413120535237193088">Kirjaudu sisään Chromiumiin, niin voit käyttää kirjanmerkkejäsi kaikilla laitteilla.</translation> <translation id="3473048256428424907">Ota käyttöön Chromiumin QR-lukija</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">Valitut tiedot on poistettu Chromiumista ja synkronoiduilta laitteilta. Google-tililläsi voi olla muita selaushistoriatietoja, kuten hakuja ja toimintaa muista Google-palveluista. Voit katsella tietoja osoitteessa history.google.com.</translation> <translation id="7400689562045506105">Käytä Chromiumia missä tahansa</translation> +<translation id="7499048969477415415">Synkronointia, personointia ja muita Googlen palveluita Chromiumissa määrittävät asetukset ovat muuttuneet. Tämä voi vaikuttaa nykyisiin asetuksiisi.</translation> <translation id="7674213385180944843">Avaa Asetukset > Tietosuoja > Kamera > Chromium ja ota kamera käyttöön.</translation> <translation id="7746854981345936341">Chromium-vinkki: Takaisin, Seuraava, Haku ja jotkin muut painikkeet löytyvät nyt näytön alareunasta.</translation> <translation id="786327964234957808">Muutoksen jälkeen synkronointi käyttää tilin <ph name="USER_EMAIL1" /> sijaan tiliä <ph name="USER_EMAIL2" />. <ph name="DOMAIN" /> hallitsee olemassa olevia Chromium-tietojasi. Tiedot poistetaan tältä laitteelta, mutta ne säilyvät tilillä <ph name="USER_EMAIL1" />.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb index 81f4d5b3..25c4dcc 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">Maaaring gumamit ang Chromium ng mga serbisyo sa web upang mapahusay ang iyong karanasan sa pag-browse. Opsyonal mong madi-disable ang mga serbisyong ito. <ph name="BEGIN_LINK" />Matuto pa<ph name="END_LINK" /></translation> <translation id="2687023731466035790">Magkaroon ng mga smart na feature ng Google sa Chromium</translation> <translation id="2730884209570016437">Hindi magamit ng Chromium ang iyong camera ngayon dahil ginagamit ito sa isa pang application</translation> +<translation id="2797210818057553964">Mako-customize mo ito anumang oras sa Mga Setting ng Chromium</translation> <translation id="3256316712990552818">Kinopya sa Chromium</translation> <translation id="3413120535237193088">Upang mailagay ang iyong mga bookmark sa lahat ng iyong device, mag-sign in sa Chromium.</translation> <translation id="3473048256428424907">I-on ang QR scanner ng Chromium</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">Inalis ang piniling data mula sa Chromium at mga naka-sync na device. Maaaring mayroong ibang mga uri ng history ng pagba-browse ang iyong Google Account gaya ng mga paghahanap at aktibidad mula sa iba pang mga serbisyo ng Google sa history.google.com.</translation> <translation id="7400689562045506105">Gamitin ang Chromium Kahit Saan</translation> +<translation id="7499048969477415415">Nabago ang mga setting ng pagkontrol sa pag-sync, pag-personalize, at iba pang serbisyo ng Google sa Chromium. Maaari itong makaapekto sa iyong mga kasalukuyang setting.</translation> <translation id="7674213385180944843">Buksan ang Settings > Privacy > Camera > Chromium at i-on ang camera.</translation> <translation id="7746854981345936341">Tip sa Chromium. Nasa ibaba na ng iyong screen ang ilang button, tulad ng Bumalik, Susunod, at Maghanap.</translation> <translation id="786327964234957808">Pinapalitan mo ang mga sync account mula sa <ph name="USER_EMAIL1" /> patungo sa <ph name="USER_EMAIL2" />. Ang iyong data ng Chromium ay pinamamahalaan ng <ph name="DOMAIN" />. Ide-delete nito ang iyong data mula sa device na ito, ngunit mananatili ang iyong data sa <ph name="USER_EMAIL1" />.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb index 5a88074b..5b9e378 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">Chromium, તમારા બ્રાઉઝિંગ અનુભવને બહેતર બનાવવા માટે વેબ સેવાઓનો ઉપયોગ કરી શકે છે. તમે વૈકલ્પિકરૂપે આ સેવાઓને અક્ષમ કરી શકો છો. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation> <translation id="2687023731466035790">Chromiumમાં Google સ્માર્ટ મેળવો</translation> <translation id="2730884209570016437">Chromium, તમારા કૅમેરાનો ઉપયોગ કરી શકતું નથી કારણ કે તે બીજી ઍપ્લિકેશન દ્વારા ઉપયોગમાં છે</translation> +<translation id="2797210818057553964">Chromium સેટિંગમાં તમે આને કોઈપણ સમયે કસ્ટમાઇઝ કરી શકો છો</translation> <translation id="3256316712990552818">Chromium પર કૉપી કરી</translation> <translation id="3413120535237193088">તમારા તમામ ઉપકરણો પર તમારા બુકમાર્ક્સ મેળવવા માટે, Chromium માં સાઇન ઇન કરો.</translation> <translation id="3473048256428424907">Chromium QR સ્કેનર ચાલુ કરો</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">પસંદ કરેલ ડેટા Chromium અને સમન્વયિત કરેલ ઉપકરણોમાંથી દૂર કરવામાં આવ્યો છે. તમારા Google એકાઉન્ટમાં બ્રાઉઝિંગ ઇતિહાસના અન્ય સ્વરૂપો જેમ કે શોધ અને history.google.com પરની અન્ય Google સેવાઓમાંની પ્રવૃત્તિ હોઈ શકે છે.</translation> <translation id="7400689562045506105">Chromium નો ઉપયોગ સર્વત્ર કરો</translation> +<translation id="7499048969477415415">Chromiumમાં સિંક, વૈયક્તિકરણ અને અન્ય Google સેવાઓ નિયંત્રિત કરતી સેટિંગ બદલવામાં આવી છે. તેની તમારી વર્તમાન સેટિંગ પર અસર થઈ શકે છે.</translation> <translation id="7674213385180944843">સેટિંગ્સ > ગોપનીયતા > કૅમેરો > Chromium ખોલો અને કૅમેરો ચાલુ કરો.</translation> <translation id="7746854981345936341">Chromium ટિપ. પાછળ, ફૉર્વર્ડ અને શોધ જેવાં કેટલાક બટનો હવે તમારી સ્ક્રીનના તળિયે છે.</translation> <translation id="786327964234957808">તમે <ph name="USER_EMAIL1" /> થી <ph name="USER_EMAIL2" /> પર સમન્વયન એકાઉન્ટ્સને સ્વિચ કરી રહ્યાં છો. તમારો અસ્તિત્વમાંનો Chromium ડેટા <ph name="DOMAIN" /> દ્વારા સંચાલિત કરવામાં આવે છે. આ ઉપકરણ પરથી આ તમારા ડેટાને કાઢી નાખશે, પરંતુ તમારો ડેટા <ph name="USER_EMAIL1" /> માં રહેશે.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb index 14c3d09..5e47264c 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">Előfordulhat, hogy a Chromium internetes szolgáltatásokat használ böngészési élménye javítására. Lehetősége van az ilyen szolgáltatások letiltására. <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" />.</translation> <translation id="2687023731466035790">Még több okos megoldás a Google-től a Chromiumban</translation> <translation id="2730884209570016437">A Chromium nem tudja használni a kamerát, mivel egy másik alkalmazás használja</translation> +<translation id="2797210818057553964">Ezt bármikor személyre szabhatja a Chromium beállításaiban</translation> <translation id="3256316712990552818">A Chromiumra másolva</translation> <translation id="3413120535237193088">Ha az összes eszközén szeretné elérni könyvjelzőit, jelentkezzen be a Chromiumba.</translation> <translation id="3473048256428424907">A Chromium QR-olvasójának bekapcsolása</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">A kiválasztott adatokat eltávolítottuk a Chromiumból és a szinkronizált eszközökről. Előfordulhat, hogy Google-fiókjában (a history.google.com címen) még szerepelnek a böngészési előzmények egyéb formái, így például a keresések és egyéb tevékenységek más Google-szolgáltatásokból.</translation> <translation id="7400689562045506105">A Chromium mindenhol használható</translation> +<translation id="7499048969477415415">Megváltoztak a szinkronizálást, a személyre szabást és a Chromium más Google-szolgáltatásait vezérlő beállítások. Ez befolyásolhatja az aktuális beállításokat.</translation> <translation id="7674213385180944843">Nyissa meg a Beállítások > Adatvédelem > Kamera > Chromium elemet, és kapcsolja be a kamerát.</translation> <translation id="7746854981345936341">Tipp a Chromium használatához. Egyes gombok (például a Vissza, az Előre vagy a Keresés) mostantól a képernyő alján jelennek meg.</translation> <translation id="786327964234957808">A(z) <ph name="USER_EMAIL1" /> szinkronizált fiókról a következőre vált át: <ph name="USER_EMAIL2" />. A meglévő Chromium-adatokat a(z) <ph name="DOMAIN" /> kezeli. Ezzel törli az adatait erről az eszközről, viszont azok továbbra is megmaradnak a(z) <ph name="USER_EMAIL1" /> fiókban.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb index df65dda..68ecd4ef8 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">Chromium は、より快適なブラウジングを提供する目的でウェブサービスを使用することがあります。これらのサービスは無効にすることもできます。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation> <translation id="2687023731466035790">Chromium で Google の最先端技術を活用</translation> <translation id="2730884209570016437">カメラは別のアプリが使用中のため、Chromium では使用できません</translation> +<translation id="2797210818057553964">この設定は Chromium の [設定] ページでいつでもカスタマイズできます</translation> <translation id="3256316712990552818">Chromium にコピー済み</translation> <translation id="3413120535237193088">お使いのどの端末でも同じブックマークを使用するには、Chromium にログインします。</translation> <translation id="3473048256428424907">Chromium の QR スキャナをオンにする</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">選択したデータが Chromium から削除され、同期された端末からも削除されました。他の Google サービスでの検索や操作など、Google アカウントの他の形式の閲覧履歴が history.google.com に残ることがあります。</translation> <translation id="7400689562045506105">Chromium をどこでも使用</translation> +<translation id="7499048969477415415">Chromium で同期、カスタマイズ、その他の Google サービスを管理する設定を変更しました。これにより、現在の設定に影響が生じる可能性があります。</translation> <translation id="7674213385180944843">[設定] > [プライバシー] > [カメラ] > [Chromium] の順に選択し、カメラをオンにします。</translation> <translation id="7746854981345936341">Chromium の使い方のヒント: 戻る、進む、検索など一部のボタンは画面の下部に表示されるようになりました。</translation> <translation id="786327964234957808">同期アカウントを <ph name="USER_EMAIL1" /> から <ph name="USER_EMAIL2" /> に切り替えようとしています。既存の Chromium データは <ph name="DOMAIN" /> で管理されています。この操作を行うと、データはこの端末から削除されますが、<ph name="USER_EMAIL1" /> には残ります。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb index a5a2031..d1bfc803 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_kn.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಅನುಭವವನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ವೆಬ್ ಸೇವೆಗಳನ್ನು Chromium ಬಳಸಬಹುದು. ನೀವು ಐಚ್ಛಿಕವಾಗಿ ಈ ಸೇವೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು. <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" /></translation> <translation id="2687023731466035790">Chromium ನಲ್ಲಿ Google ಸ್ಮಾರ್ಟ್ಗಳನ್ನು ಪಡೆಯಿರಿ</translation> <translation id="2730884209570016437">ನಿಮ್ಮ ಕ್ಯಾಮರಾವನ್ನು ಬೇರೆ ಅಪ್ಲಿಕೇಶನ್ ಮೂಲಕ ಬಳಸುತ್ತಿರುವ ಕಾರಣ Chromium ಗೆ ಅದನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation> +<translation id="2797210818057553964">Chromium ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ನೀವು ಇದನ್ನು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಬೇಕಾದರೂ ಕಸ್ಟಮೈಸ್ ಮಾಡಬಹುದು</translation> <translation id="3256316712990552818">Chromium ಗೆ ನಕಲಿಸಲಾಗಿದೆ</translation> <translation id="3413120535237193088">ನಿಮ್ಮ ಎಲ್ಲ ಸಾಧನಗಳಲ್ಲಿ ನಿಮ್ಮ ಬುಕ್ಮಾರ್ಕ್ಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಲು, Chromium ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ.</translation> <translation id="3473048256428424907">Chromium QR ಸ್ಕ್ಯಾನರ್ ಆನ್ ಮಾಡಿ</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">ಆಯ್ಕೆ ಮಾಡಲಾದ ಡೇಟಾವನ್ನು Chromium ಮತ್ತು ಸಿಂಕ್ ಮಾಡಲ್ಪಟ್ಟ ಸಾಧನಗಳಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ. ನಿಮ್ಮ Google ಖಾತೆಯು history.google.com ನಲ್ಲಿ ಇತರ Google ಸೇವೆಗಳಿಂದ ಹುಡುಕಾಟಗಳು ಮತ್ತು ಚಟುವಟಿಕೆಯಂತಹ ಬ್ರೌಸಿಂಗ್ ಹುಡುಕಾಟದ ಇತರ ಪ್ರಕಾರಗಳನ್ನು ಹೊಂದಿರಬಹುದು.</translation> <translation id="7400689562045506105">ಎಲ್ಲೆಡೆ Chromium ಬಳಸಿ</translation> +<translation id="7499048969477415415">Chromium ನಲ್ಲಿ ಸಿಂಕ್, ವೈಯಕ್ತೀಕರಣ ಮತ್ತು ಇತರ Google ಸೇವೆಗಳನ್ನು ನಿಯಂತ್ರಿಸುವ ಸೆಟ್ಟಿಂಗ್ಗಳು ಬದಲಾಗಿವೆ. ಇದು ನಿಮ್ಮ ಪ್ರಸ್ತುತ ಸೆಟ್ಟಿಂಗ್ಗಳ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರಬಹುದು.</translation> <translation id="7674213385180944843">ಸೆಟ್ಟಿಂಗ್ಗಳು > ಗೌಪ್ಯತೆ > ಕ್ಯಾಮರಾ > Chromium ತೆರೆಯಿರಿ ಮತ್ತು ಕ್ಯಾಮರಾ ಆನ್ ಮಾಡಿ.</translation> <translation id="7746854981345936341">Chromium ಸಲಹೆ. ಹಿಂದೆ, ಮುಂದೆ ಮತ್ತು ಹುಡುಕಾಟದಂತಹ ಕೆಲವು ಬಟನ್ಗಳು ಈಗ ನಿಮ್ಮ ಪರದೆಯ ಕೆಳಭಾಗದಲ್ಲಿವೆ.</translation> <translation id="786327964234957808"><ph name="USER_EMAIL1" /> ರಿಂದ <ph name="USER_EMAIL2" /> ಗೆ ನೀವು ಸಿಂಕ್ ಖಾತೆಗಳನ್ನು ಬದಲಾಯಿಸುತ್ತಿರುವಿರಿ. ನಿಮ್ಮ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ Chromium ಡೇಟಾವನ್ನು <ph name="DOMAIN" /> ರಿಂದ ನಿರ್ವಹಿಸಲಾಗುತ್ತಿದೆ. ಈ ಸಾಧನದಲ್ಲಿರುವ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಇದು ಅಳಿಸಿಹಾಕುತ್ತದೆ, ಆದರೆ ನಿಮ್ಮ ಡೇಟಾ <ph name="USER_EMAIL1" /> ರಲ್ಲಿಯೇ ಇರುತ್ತದೆ.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb index 713247c..8051d42 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">Chromium에서 사용자에게 더 나은 인터넷 사용 환경을 제공하기 위해 웹 서비스를 사용할 수 있습니다. 원하는 경우 서비스를 사용 중지하실 수 있습니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation> <translation id="2687023731466035790">Chromium에서 더욱 스마트한 Google을 사용하세요</translation> <translation id="2730884209570016437">다른 애플리케이션에서 카메라를 사용하고 있으므로 Chromium에서 카메라를 사용할 수 없습니다.</translation> +<translation id="2797210818057553964">Chromium 설정에서 언제든지 맞춤설정할 수 있습니다.</translation> <translation id="3256316712990552818">Chromium에 복사됨</translation> <translation id="3413120535237193088">어느 기기에서나 내 북마크를 사용하려면 Chromium에 로그인하세요.</translation> <translation id="3473048256428424907">Chromium QR 스캐너 사용 설정</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">선택한 데이터가 Chromium 및 동기화된 기기에서 삭제되었습니다. history.google.com에서 검색이나 기타 Google 서비스에서의 활동 등 내 Google 계정에 있는 다른 형식의 탐색 기록을 확인할 수 있습니다.</translation> <translation id="7400689562045506105">어디서나 Chromium 사용</translation> +<translation id="7499048969477415415">Chromium에서 동기화, 맞춤설정 및 기타 Google 서비스를 관리하는 설정이 변경되었습니다. 이로 인해 현재 설정이 영향을 받을 수 있습니다.</translation> <translation id="7674213385180944843">설정 > 개인정보 보호 > 카메라 > Chromium을 열고 카메라를 사용 설정하세요.</translation> <translation id="7746854981345936341">Chromium 도움말. 뒤로, 앞으로, 검색과 같은 일부 버튼이 화면 하단으로 이동했습니다.</translation> <translation id="786327964234957808">동기화 계정을 <ph name="USER_EMAIL1" />에서 <ph name="USER_EMAIL2" />(으)로 전환합니다. 기존 Chromium 데이터는 <ph name="DOMAIN" />에서 관리됩니다. 이 기기에서는 데이터가 삭제되지만 <ph name="USER_EMAIL1" />에 계속해서 데이터가 보관됩니다.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb index 3d7a9ed..e6d472c 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_lt.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">„Chromium“ gali naudoti žiniatinklio paslaugas naršymo funkcijoms pagerinti. Galite pasirinktinai išjungti šias paslaugas. <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /></translation> <translation id="2687023731466035790">Gaukite „Google“ išmaniųjų funkcijų projekte „Chromium“</translation> <translation id="2730884209570016437">„Chromium“ negali naudoti fotoaparato, nes jį naudoja kita programa</translation> +<translation id="2797210818057553964">Tai galite bet kada tinkinti „Chromium“ nustatymuose</translation> <translation id="3256316712990552818">Nukopijuota į „Chromium“</translation> <translation id="3413120535237193088">Prisijunkite prie „Chromium“, kad pasiektumėte žymes visuose įrenginiuose.</translation> <translation id="3473048256428424907">Įjunkite „Chromium“ QR skaitytuvą</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">Pasirinkti duomenys pašalinti iš „Chromium“ ir sinchronizuojamų įrenginių. Adresu history.google.com gali būti pateikta kitų formų jūsų „Google“ paskyros istorija, pvz., paieškos ir veikla kitose „Google“ paslaugose.</translation> <translation id="7400689562045506105">„Chromium“ naudojimas visuose įrenginiuose</translation> +<translation id="7499048969477415415">Pasikeitė sinchronizavimo, suasmeninimo ir kitų „Google“ paslaugų, naudojamų „Chromium“, valdymo nustatymai. Tai gali turėti įtakos jūsų dabartiniams nustatymams.</translation> <translation id="7674213385180944843">Atidarykite „Nustatymai“ > „Privatumas“ > „Fotoaparatas“ > „Chromium“ ir įjunkite fotoaparatą.</translation> <translation id="7746854981345936341">„Chromium“ patarimas. Kai kurie mygtukai dabar yra ekrano apačioje, pvz., mygtukai „Atgal“, „Pirmyn“ ir „Ieškoti“.</translation> <translation id="786327964234957808">Perjungiate sinchronizuojamas paskyras iš <ph name="USER_EMAIL1" /> į <ph name="USER_EMAIL2" />. Esamus „Chromium“ duomenis tvarko <ph name="DOMAIN" />. Tai atlikus bus ištrinti duomenys iš šio įrenginio, bet duomenys liks <ph name="USER_EMAIL1" />.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb index 7692826..88e9ecfd 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ml.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">നിങ്ങളുടെ ബ്രൗസിംഗ് അനുഭവം മെച്ചപ്പെടുത്താൻ Chromium വെബ് സേവനങ്ങൾ ഉപയോഗിക്കാനിടയുണ്ട്. വേണമെങ്കിൽ ഈ സേവനങ്ങൾ പ്രവർത്തനരഹിതമാക്കാം. <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" /></translation> <translation id="2687023731466035790">Chromium-ത്തിൽ Google സ്മാർട്ട്സ് നേടുക</translation> <translation id="2730884209570016437">നിങ്ങളുടെ ക്യാമറ നിലവിൽ മറ്റൊരു അപ്ലിക്കേഷൻ ഉപയോഗിക്കുന്നതിനാൽ Chromium-ത്തിന് അത് ഉപയോഗിക്കാനാവില്ല</translation> +<translation id="2797210818057553964">Chromium ക്രമീകരണത്തിൽ, ഏത് സമയത്തും നിങ്ങൾക്കിത് ഇഷ്ടാനുസൃതമാക്കാം</translation> <translation id="3256316712990552818">Chromium-ലേക്ക് പകർത്തി</translation> <translation id="3413120535237193088">നിങ്ങളുടെ എല്ലാ ഉപകരണങ്ങളിലും ബുക്ക്മാർക്കുകൾ ലഭിക്കാൻ, Chromium-ത്തിൽ സൈൻ ഇൻ ചെയ്യുക.</translation> <translation id="3473048256428424907">Chromium QR സ്കാനർ ഓണാക്കുക</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">തിരഞ്ഞെടുത്ത വിവരങ്ങൾ Chromium-ത്തിൽ നിന്നും സമന്വയിപ്പിച്ച ഉപകരണങ്ങളിൽ നിന്നും നീക്കംചെയ്തു. നിങ്ങളുടെ Google അക്കൗണ്ടിന് history.google.com എന്നതിൽ മറ്റ് Google സേവനങ്ങളിൽ നിന്നുള്ള തിരയലുകൾ, പ്രവൃത്തി എന്നിങ്ങനെ മറ്റ് തരത്തിലുള്ള ബ്രൗസിംഗ് ചരിത്രമുണ്ടായിരിക്കാം.</translation> <translation id="7400689562045506105">എല്ലായിടത്തും Chromium ഉപയോഗിക്കുക</translation> +<translation id="7499048969477415415">Chromium-ത്തിൽ സമന്വയം, വ്യക്തിപരമാക്കൽ, മറ്റ് Google സേവനങ്ങൾ എന്നിവ നിയന്ത്രിക്കുന്ന ക്രമീകരണം മാറിയിട്ടുണ്ട്. ഇത് നിങ്ങളുടെ ക്രമീകരണത്തെ ബാധിച്ചേക്കാം.</translation> <translation id="7674213385180944843">ക്രമീകരണം > സ്വകാര്യത > ക്യാമറ > Chromium തുറന്ന് ക്യാമറ ഓണാക്കുക.</translation> <translation id="7746854981345936341">Chromium നുറുങ്ങ്. മടങ്ങുക, മുമ്പോട്ട് പോകുക, തിരയൽ എന്നീ ചില ബട്ടണുകൾ, ഇപ്പോൾ നിങ്ങളുടെ സ്ക്രീനിന്റെ താഴെയാണ്.</translation> <translation id="786327964234957808">നിങ്ങൾ <ph name="USER_EMAIL1" /> എന്നതിൽ നിന്ന് <ph name="USER_EMAIL2" /> എന്നതിലേക്ക് സമന്വയ അക്കൗണ്ടുകൾ മാറ്റുകയാണ്. <ph name="DOMAIN" /> ഡൊമെയ്നാണ് നിങ്ങളുടെ നിലവിലുള്ള Chromium വിവരങ്ങൾ മാനേജുചെയ്യുന്നത്. ഇത് ഈ ഉപകരണത്തിൽ നിന്ന് വിവരങ്ങൾ ഇല്ലാതാക്കുമെങ്കിലും <ph name="USER_EMAIL1" /> എന്നതിൽ തുടർന്നും അവ ഉണ്ടായിരിക്കുന്നതാണ്.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb index 496d3d6..556835c7 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">Chromium आपला ब्राउझिंग अनुभव सुधारण्यासाठी वेब सेवा वापरू शकते. आपण या सेवा वैकल्पिकपणे अक्षम करू शकता. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation> <translation id="2687023731466035790">Chromium मध्ये Google स्मार्ट मिळवा</translation> <translation id="2730884209570016437">Chromium आपला कॅमेरा वापरू शकत नाही कारण दुसरा अॅप्लिकेशन तो वापरत आहे</translation> +<translation id="2797210818057553964">तुम्ही Chromium सेटिंग्जमध्ये हे कधीही कस्टमाइझ करू शकता</translation> <translation id="3256316712990552818">Chromium वर कॉपी केले</translation> <translation id="3413120535237193088">सर्व डिव्हाइसवर आपले बुकमार्क प्राप्त करण्यासाठी, Chromium मध्ये साइन इन करा.</translation> <translation id="3473048256428424907">Chromium QR स्कॅनर चालू करा</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">निवडलेला डेटा Chromium आणि संकालित केलेल्या डिव्हाइस मधून काढला गेला आहे. आपल्या Google खात्यामध्ये history.google.com येथे Google च्या इतर सेवांमधील शोध आणि क्रियाकलाप यासारख्या ब्राउझिंग इतिहासाची इतर स्वरूपे असू शकतात.</translation> <translation id="7400689562045506105">Chromium सर्वत्र वापरा</translation> +<translation id="7499048969477415415">Chromium मध्ये सिंक, पर्सनलायझेशन आणि इतर Google सेवा नियंत्रित करणाऱ्या सेटिंग्ज बदलल्या आहेत. याचा तुमच्या सध्याच्या सेटिंग्जवर परिणाम होऊ शकतो.</translation> <translation id="7674213385180944843">सेटिंग्ज > गोपनीयता > कॅमेरा > Chromium उघडा आणि कॅमेरा चालू करा.</translation> <translation id="7746854981345936341">Chromium टीप. काही बटणे आता तुमच्या स्क्रीनच्या तळाशी आहेत, जसे की मागे, पुढे आणि शोध.</translation> <translation id="786327964234957808">आपण संकालित केलेली खाती <ph name="USER_EMAIL1" /> वरून <ph name="USER_EMAIL2" /> वर स्विच करीत आहात. आपला विद्यमान Chromium डेटा <ph name="DOMAIN" /> द्वारे व्यवस्थापित केला आहे. हे आपला डेटा या डिव्हाइस वरून हटवेल परंतु आपला डेटा <ph name="USER_EMAIL1" /> मध्ये असेल.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb index da6dbfe570..8fba1c3f 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb
@@ -24,7 +24,7 @@ <translation id="3605252743693911722">Zaloguj się w Chromium, by mieć dostęp do swoich zakładek, haseł i innych ustawień na wszystkich swoich urządzeniach.</translation> <translation id="3805899903892079518">Chromium nie ma dostępu do Twoich zdjęć ani filmów. Aby włączyć dostęp w iOS, wybierz Ustawienia > Prywatność > Zdjęcia.</translation> <translation id="4024541897090868497">Aby korzystać ze swoich kart na wszystkich urządzeniach, zaloguj się w Chromium.</translation> -<translation id="4157467675761413638">Wskazówka dla użytkowników Chromium. Aby zobaczyć więcej opcji kart, naciśnij i przytrzymaj przycisk Pokaż karty na pasku narzędzi, który znajduje się na dole lub górze ekranu.</translation> +<translation id="4157467675761413638">Wskazówka dla użytkowników Chromium. Aby zobaczyć więcej opcji kart, naciśnij i przytrzymaj przycisk Pokaż karty na pasku narzędzi, który znajduje się na dole lub na górze ekranu.</translation> <translation id="4241912885070669028">Wylogowujesz się z konta, którym zarządza <ph name="SIGNOUT_MANAGED_DOMAIN" />. Spowoduje to usunięcie danych Chromium z tego urządzenia, ale pozostaną one na koncie Google.</translation> <translation id="4272892696084633551">Pomóż w ulepszaniu funkcji i działania Chromium</translation> <translation id="4555020257205549924">Gdy ta funkcja jest włączona, Chromium oferuje tłumaczenie stron w innych językach przy użyciu Tłumacza Google. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb index 9f25d58..9f5e1e4 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">Для более качественной работы Chromium может использовать веб-сервисы. При необходимости отключите их. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation> <translation id="2687023731466035790">Интеллектуальные функции Google в Chromium</translation> <translation id="2730884209570016437">Chromium не может получить доступ к камере, поскольку она используется другим приложением.</translation> +<translation id="2797210818057553964">Вы можете выбрать нужные параметры в настройках Chromium в любое время</translation> <translation id="3256316712990552818">Скопировано в Chromium</translation> <translation id="3413120535237193088">Чтобы получить доступ к закладкам на всех ваших устройствах, войдите в Chromium.</translation> <translation id="3473048256428424907">Включите QR-сканер в Chromium</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">Выбранные данные удалены из Chromium и с синхронизированных устройств. Остальная история ваших действий в Интернете может храниться в аккаунте Google, например в виде поисковых запросов и сведений из наших сервисов. Она доступна на странице history.google.com.</translation> <translation id="7400689562045506105">Возьмите Chromium с собой</translation> +<translation id="7499048969477415415">В Chromium изменились параметры синхронизации, персонализации и других сервисов Google. Это может повлиять на текущие настройки.</translation> <translation id="7674213385180944843">Откройте "Настройки > Конфиденциальность > Камера > Chromium" и включите камеру.</translation> <translation id="7746854981345936341">Совет для Chromium. Некоторые кнопки, например "Назад", "Вперед" и "Поиск", теперь расположены в нижней части экрана.</translation> <translation id="786327964234957808">Вы переходите из аккаунта <ph name="USER_EMAIL1" /> в <ph name="USER_EMAIL2" />. Данными Chromium управляет администратор домена <ph name="DOMAIN" />. Обратите внимание, что данные будут удалены с устройства, но сохранятся в аккаунте <ph name="USER_EMAIL1" />.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb index c6a5f3f..eadaecb 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">உங்கள் உலாவல் அனுபவத்தை மேம்படுத்த, Chromium ஆனது இணையச் சேவைகளைப் பயன்படுத்தலாம். நீங்கள் விரும்பினால் இந்தச் சேவைகளை முடக்கிக்கொள்ளலாம். <ph name="BEGIN_LINK" />மேலும் அறிக<ph name="END_LINK" /></translation> <translation id="2687023731466035790">Chromiumமில் Google ஸ்மார்ட்களைப் பெறுங்கள்</translation> <translation id="2730884209570016437">கேமராவை மற்றொரு பயன்பாடு உபயோகிப்பதால், Chromium அதைப் பயன்படுத்த முடியாது</translation> +<translation id="2797210818057553964">Chromium அமைப்புகளில் இதை எப்போது வேண்டுமானாலும் தனிப்பயனாக்கலாம்</translation> <translation id="3256316712990552818">Chromium இல் நகலெடுக்கப்பட்டது</translation> <translation id="3413120535237193088">உங்கள் எல்லாச் சாதனங்களிலும் புத்தகக்குறிகளைப் பெற, Chromium இல் உள்நுழையவும்.</translation> <translation id="3473048256428424907">Chromium QR ஸ்கேனரை இயக்கவும்</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">தேர்ந்தெடுத்த தரவு Chromium மற்றும் ஒத்திசைத்த சாதனங்களிலிருந்து அகற்றப்பட்டது. history.google.com எனும் தளத்தில் உங்கள் Google கணக்கில் பிற வகை உலாவல் வரலாறு இருக்கக்கூடும். எடுத்துக்காட்டாக, பிற Google சேவைகளில் நீங்கள் மேற்கொள்ளும் தேடல்கள், செயல்பாடுகள் போன்றவை.</translation> <translation id="7400689562045506105">எங்கிருந்தும் Chromiumஐப் பயன்படுத்தலாம்</translation> +<translation id="7499048969477415415">Chromiumமில் ஒத்திசைவு, தனிப்பயனாக்கம் மற்றும் பிற Google சேவைகளைக் கட்டுப்படுத்தும் அமைப்புகள் மாற்றப்பட்டுள்ளன. இது உங்கள் தற்போதைய அமைப்புகளைப் பாதிக்கலாம்.</translation> <translation id="7674213385180944843">அமைப்புகள் > தனியுரிமை > கேமரா > Chromium என்பதைத் திறந்து, கேமராவை இயக்கவும்.</translation> <translation id="7746854981345936341">Chromium உதவிக்குறிப்பு: 'பின்செல்’, ‘முன்செல்’, ‘தேடு’ போன்ற சில பட்டன்கள் இப்போது உங்கள் திரையின் அடிப்பகுதியில் உள்ளன.</translation> <translation id="786327964234957808">ஒத்திசைவுக் கணக்குகளை <ph name="USER_EMAIL1" /> இலிருந்து <ph name="USER_EMAIL2" />க்கு மாற்றுகிறீர்கள். தற்போதுள்ள Chromium தரவை <ph name="DOMAIN" /> நிர்வகிக்கிறது. இவ்வாறு செய்வதால், இந்தச் சாதனத்திலிருந்து தரவு நீக்கப்படும், எனினும் <ph name="USER_EMAIL1" /> இல் தரவு தொடர்ந்து இருக்கும்.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb index 3bc1195..f205ace 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_th.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">Chromium อาจใช้บริการเว็บเพื่อปรับปรุงประสบการณ์การท่องเว็บของคุณ คุณสามารถเลือกปิดบริการเหล่านี้ได้ <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation> <translation id="2687023731466035790">ใช้ฟีเจอร์เจ๋งๆ จาก Google ใน Chromium</translation> <translation id="2730884209570016437">Chromium ไม่สามารถใช้กล้องถ่ายรูปเนื่องจากแอปพลิเคชันอื่นใช้งานอยู่</translation> +<translation id="2797210818057553964">คุณปรับแต่งตัวเลือกนี้ได้ทุกเมื่อในการตั้งค่า Chromium</translation> <translation id="3256316712990552818">คัดลอกลงใน Chromium แล้ว</translation> <translation id="3413120535237193088">ลงชื่อเข้าใช้ Chromium เพื่อรับบุ๊กมาร์กในอุปกรณ์ทุกเครื่องของคุณ</translation> <translation id="3473048256428424907">เปิดโปรแกรมสแกนโค้ด QR ของ Chromium</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">ระบบได้นำข้อมูลที่เลือกไว้ออกจาก Chromium และอุปกรณ์ที่ซิงค์แล้ว บัญชี Google ของคุณอาจมีประวัติการท่องเว็บในรูปแบบอื่นๆ เช่น การค้นหาและกิจกรรมจากบริการอื่นๆ ของ Google ที่ history.google.com</translation> <translation id="7400689562045506105">ใช้ Chromium ได้ทุกที่</translation> +<translation id="7499048969477415415">การตั้งค่าที่ควบคุมการซิงค์ การปรับเปลี่ยนในแบบของคุณ และบริการอื่นๆ ของ Google ใน Chromium มีการเปลี่ยนแปลง ซึ่งอาจส่งผลต่อการตั้งค่าปัจจุบันของคุณ</translation> <translation id="7674213385180944843">เปิดการตั้งค่า > ความเป็นส่วนตัว > กล้อง > Chromium แล้วเปิดกล้องถ่ายรูป</translation> <translation id="7746854981345936341">เคล็ดลับสำหรับ Chromium ตอนนี้บางปุ่มแสดงอยู่ที่ด้านล่างของหน้าจอแล้ว เช่น ปุ่มกลับ ไปข้างหน้า และค้นหา</translation> <translation id="786327964234957808">คุณกำลังเปลี่ยนบัญชีในการซิงค์จาก <ph name="USER_EMAIL1" /> เป็น <ph name="USER_EMAIL2" /> ข้อมูล Chromium ที่มีอยู่ของคุณจัดการโดย <ph name="DOMAIN" /> การเปลี่ยนบัญชีจะลบข้อมูลจากอุปกรณ์นี้ แต่ข้อมูลจะยังคงอยู่ใน <ph name="USER_EMAIL1" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb index 34990b8..c14c927 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_tr.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">Chromium, göz atma deneyiminizi iyileştirmek için web hizmetleri kullanabilir. İsteğe bağlı olarak bu hizmetleri devre dışı bırakabilirsiniz. <ph name="BEGIN_LINK" />Daha fazla bilgi<ph name="END_LINK" /></translation> <translation id="2687023731466035790">Chromium'da Google'ın akıllı yaklaşımını elde edin</translation> <translation id="2730884209570016437">Kameranız başka bir uygulama tarafından kullanıldığından Chromium, kameranızı kullanamıyor.</translation> +<translation id="2797210818057553964">Bunu istediğiniz zaman Chromium Ayarları'ndan özelleştirebilirsiniz</translation> <translation id="3256316712990552818">Chromium'a kopyalandı</translation> <translation id="3413120535237193088">Yer işaretlerinizi tüm cihazlarınızda almak için Chromium'da oturum açın.</translation> <translation id="3473048256428424907">Chromium QR tarayıcısını açın</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">Seçilen veriler Chromium'dan ve senkronize edilen cihazlardan kaldırıldı. Google Hesabınızda diğer tarama geçmişi biçimleri (örneğin, history.google.com adresindeki diğer Google hizmetlerine bağlı aramalar ve etkinlikler) bulunabilir.</translation> <translation id="7400689562045506105">Chromium'u Her Yerde Kullanın</translation> +<translation id="7499048969477415415">Chromium'da senkronizasyon, kişiselleştirme ve diğer Google hizmetlerini kontrol eden ayarlar değişti. Bu durum geçerli ayarlarınızı etkileyebilir.</translation> <translation id="7674213385180944843">Ayarlar > Gizlilik > Kamera > Chromium'a gidin ve kamerayı açın.</translation> <translation id="7746854981345936341">Chromium için ipucu: Geri, İleri ve Ara gibi bazı düğmeler artık ekranınızın alt bölümünde bulunuyor.</translation> <translation id="786327964234957808">Senkronizasyon hesapları arasında (<ph name="USER_EMAIL1" /> hesabından <ph name="USER_EMAIL2" /> hesabına) geçiş yapıyorsunuz. Mevcut Chromium verileriniz <ph name="DOMAIN" /> tarafından yönetiliyor. Bu işlemle verileriniz bu cihazdan silinir, ancak <ph name="USER_EMAIL1" /> hesabınızda kalmaya devam eder.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb index 9954cd1a..5b02c43 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">Chromium có thể sử dụng dịch vụ web để cải thiện trải nghiệm duyệt web của bạn. Bạn có thể tùy ý vô hiệu hóa các dịch vụ này. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation> <translation id="2687023731466035790">Trải nghiệm các tính năng thông minh của Google trong Chromium</translation> <translation id="2730884209570016437">Chromium không thể sử dụng máy ảnh của bạn do một ứng dụng khác đang dùng máy ảnh.</translation> +<translation id="2797210818057553964">Bạn có thể thay đổi tùy chọn này bất cứ lúc nào trong mục Cài đặt Chromium</translation> <translation id="3256316712990552818">Đã sao chép vào Chromium</translation> <translation id="3413120535237193088">Để nhận dấu trang trên tất cả các thiết bị của bạn, hãy đăng nhập vào Chromium.</translation> <translation id="3473048256428424907">Bật trình quét QR của Chromium</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">Dữ liệu được chọn đã bị xóa khỏi Chromium và các thiết bị được đồng bộ hóa. Tài khoản Google của bạn có thể có các dạng lịch sử duyệt web khác, chẳng hạn như tìm kiếm và hoạt động từ các dịch vụ khác của Google tại history.google.com.</translation> <translation id="7400689562045506105">Sử dụng Chromium mọi nơi</translation> +<translation id="7499048969477415415">Các tùy chọn cài đặt kiểm soát tính năng đồng bộ hóa, cá nhân hóa và các dịch vụ khác của Google trong Chromium đã thay đổi. Điều này có thể ảnh hưởng đến các tùy chọn cài đặt hiện tại của bạn.</translation> <translation id="7674213385180944843">Mở Cài đặt > Bảo mật > Máy ảnh > Chromium và bật máy ảnh.</translation> <translation id="7746854981345936341">Mẹo dành cho Chromium. Một số nút hiện nằm ở cuối màn hình, chẳng hạn như nút Quay lại, Tiến lên và Tìm kiếm.</translation> <translation id="786327964234957808">Bạn đang chuyển các tài khoản đồng bộ hóa từ <ph name="USER_EMAIL1" /> về <ph name="USER_EMAIL2" />. Dữ liệu Chromium hiện có của bạn do <ph name="DOMAIN" /> quản lý. Thao tác này sẽ xóa dữ liệu của bạn khỏi thiết bị này nhưng dữ liệu đó sẽ vẫn còn trong <ph name="USER_EMAIL1" />.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb index ffa8174..68b27d0 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">Chromium 可能会使用网络服务来改善您的浏览体验。不过,您可以选择停用这些服务。<ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" /></translation> <translation id="2687023731466035790">在 Chromium 中畅享 Google 的智能技术</translation> <translation id="2730884209570016437">由于另一个应用正在使用您的相机,因此 Chromium 无法使用。</translation> +<translation id="2797210818057553964">您可以随时在 Chromium 设置中自定义此设置</translation> <translation id="3256316712990552818">已复制到 Chromium</translation> <translation id="3413120535237193088">要将您的书签同步到您所有的设备上,请登录 Chromium。</translation> <translation id="3473048256428424907">开启 Chromium QR 码扫描器</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">所选数据已从 Chromium 和同步的设备中移除。不过,您的 Google 帐号在 history.google.com 上可能有其他形式的浏览记录(例如,在其他 Google 服务中的搜索记录和活动记录)。</translation> <translation id="7400689562045506105">随时随地使用 Chromium</translation> +<translation id="7499048969477415415">Chromium 中控制同步、个性化功能和其他 Google 服务的设置已发生更改。这可能会影响您目前的设置。</translation> <translation id="7674213385180944843">打开“设置”>“隐私”>“相机”>“Chromium”,然后开启相机。</translation> <translation id="7746854981345936341">Chromium 提示。现在屏幕底部会显示“后退”、“前进”和“搜索”等按钮。</translation> <translation id="786327964234957808">您正要将同步帐号从 <ph name="USER_EMAIL1" /> 切换到 <ph name="USER_EMAIL2" />。您现有的 Chromium 数据由 <ph name="DOMAIN" /> 管理。切换同步帐号后,您的数据将从这台设备上删除,但仍会保留在 <ph name="USER_EMAIL1" /> 中。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb index 77099cd..c0e5e0c 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb
@@ -17,6 +17,7 @@ <translation id="2647554856022461007">Chromium 可能會使用網路服務改善你的瀏覽體驗。不過,你可以選擇停用這些服務。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation> <translation id="2687023731466035790">在 Chromium 中體驗 Google 強大的智慧功能</translation> <translation id="2730884209570016437">另一個應用程式正在使用你的相機,因此 Chromium 無法使用</translation> +<translation id="2797210818057553964">你隨時可在 Chromium 設定中自訂這項設定</translation> <translation id="3256316712990552818">已複製到 Chromium</translation> <translation id="3413120535237193088">如要在所有裝置上存取你的書籤,請登入 Chromium。</translation> <translation id="3473048256428424907">開啟 Chromium QR 掃描器</translation> @@ -45,6 +46,7 @@ <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">系統已將你所選取的資料從 Chromium 和其他同步的裝置中移除。你的 Google 帳戶仍可能保留了其他類型的瀏覽記錄,例如其他 Google 服務中的搜尋和活動記錄 (可前往 history.google.com 查詢)。</translation> <translation id="7400689562045506105">Chromium 隨時隨地都能派上用場</translation> +<translation id="7499048969477415415">Chromium 的同步處理、個人化功能和其他 Google 服務控制設定已變更。這可能影響你目前的設定。</translation> <translation id="7674213385180944843">請前往 [設定] > [隱私權] > [相機] > [Chromium],並開啟相機。</translation> <translation id="7746854981345936341">Chromium 提示。部分按鈕 (例如 [返回]、[往前] 和 [搜尋]) 現在位於畫面底部。</translation> <translation id="786327964234957808">你設定同步處理的帳戶即將從 <ph name="USER_EMAIL1" /> 改為 <ph name="USER_EMAIL2" />。你現有的 Chrome 資料是由 <ph name="DOMAIN" /> 所管理。系統會將你的資料從這個裝置上刪除,但繼續保留在 <ph name="USER_EMAIL1" /> 中。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb index 070668f2..58767c5 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb
@@ -58,5 +58,5 @@ <translation id="8459495907675268833">Wybrane dane zostały usunięte z Chrome i synchronizowanych urządzeń. Inne rodzaje historii przeglądania, takie jak wyszukiwania i aktywność w innych usługach Google, mogą być nadal dostępne na Twoim koncie Google na history.google.com</translation> <translation id="8540666473246803645">Google Chrome</translation> <translation id="8606668294522778825">Aby poprawić wygodę przeglądania, Google Chrome może korzystać z usług internetowych. Możesz je opcjonalnie wyłączyć. <ph name="BEGIN_LINK" />Dowiedz się więcej<ph name="END_LINK" /></translation> -<translation id="96145293669295453">Wskazówka dla użytkowników Chrome. Aby zobaczyć więcej opcji kart, naciśnij i przytrzymaj przycisk Pokaż karty na pasku narzędzi, który znajduje się na dole lub górze ekranu.</translation> +<translation id="96145293669295453">Wskazówka dla użytkowników Chrome. Aby zobaczyć więcej opcji kart, naciśnij i przytrzymaj przycisk „Pokaż karty” na pasku narzędzi, który znajduje się na dole lub górze ekranu.</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb index f650523a..035c4b5 100644 --- a/ios/chrome/app/strings/resources/ios_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">ሁሉንም ትሮች ይዝጉ</translation> <translation id="8114753159095730575">ፋይል ለመውረድ ይገኛል። አማራጮች ከማያ ገጹ ግርጌ አጠገብ ይገኛሉ።</translation> <translation id="8160722851663543621">ፍለጋዎችን ከአድራሻ አሞሌው እና ከፍለጋ ሳጥኑ እና አንዳንድ ኩኪዎችን ወደ ነባሪው የፍለጋ ፕሮግራምዎ ይልካል</translation> -<translation id="8178325540017397816">የመረጧቸው ንጥሎች ይወገዳሉ</translation> <translation id="8205564605687841303">ተወው</translation> <translation id="8225985093977202398">የተሸጎጡ ምስሎች እና ፋይሎች</translation> <translation id="8261506727792406068">ሰርዝ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index 415b6aa..8cfa4e2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">إغلاق جميع علامات التبويب</translation> <translation id="8114753159095730575">أصبح بالإمكان تنزيل الملف. يمكنك مراجعة الخيارات في أسفل الشاشة.</translation> <translation id="8160722851663543621">يُرسِل عمليات البحث من شريط العناوين ومربّع البحث وبعض ملفات تعريف الارتباط إلى محرك البحث التلقائي.</translation> -<translation id="8178325540017397816">ستتم إزالة العناصر التي اخترتها.</translation> <translation id="8205564605687841303">إلغاء</translation> <translation id="8225985093977202398">الصور والملفات المُخزنة مؤقتًا</translation> <translation id="8261506727792406068">حذف</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb index 1aa24d4..301756b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Затваряне на разделите</translation> <translation id="8114753159095730575">Наличен е файл за изтегляне. Съответните опции са достъпни в долната част на екрана.</translation> <translation id="8160722851663543621">Изпраща заявките за търсене от адресната лента и полето за търсене, както и някои „бисквитки“, до стандартната ви търсеща машина</translation> -<translation id="8178325540017397816">Избраните елементи ще бъдат премахнати</translation> <translation id="8205564605687841303">Отказ</translation> <translation id="8225985093977202398">Кеширани изображения и файлове</translation> <translation id="8261506727792406068">Изтриване</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb index b23767b1..a5ffd76b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -422,7 +422,6 @@ <translation id="8080028325999236607">সমস্ত ট্যাব বন্ধ করুন</translation> <translation id="8114753159095730575">ফাইল ডাউনলোড করা যাবে। স্ক্রিনের নিচের দিকে বিকল্পগুলি উপলভ্য।</translation> <translation id="8160722851663543621">অ্যাড্রেস বার এবং সার্চ বক্স থেকে সার্চের তথ্য এবং কিছু কুকি আপনার ডিফল্ট সার্চ ইঞ্জিনে পাঠায়</translation> -<translation id="8178325540017397816">আপনার বেছে নেওয়া আইটেমগুলি সরানো হবে</translation> <translation id="8205564605687841303">বাতিল করুন</translation> <translation id="8225985093977202398">সঞ্চিত ছবি এবং ফাইলগুলি</translation> <translation id="8261506727792406068">মুছুন</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb index 4b24548d..81d04cd4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Tanca totes les pestanyes</translation> <translation id="8114753159095730575">La baixada de fitxers està disponible. Opcions disponibles a la part inferior de la pantalla.</translation> <translation id="8160722851663543621">Envia al motor de cerca predeterminat algunes galetes i cerques de la barra d'adreces i del quadre de cerca</translation> -<translation id="8178325540017397816">Els elements que has seleccionat se suprimiran</translation> <translation id="8205564605687841303">Cancel·la</translation> <translation id="8225985093977202398">Fitxers i imatges a memòria cau</translation> <translation id="8261506727792406068">Suprimeix</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb index 33610f8..bdcbbeb3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Zavřít všechny karty</translation> <translation id="8114753159095730575">Je k dispozici soubor ke stažení. Možnosti jsou k dispozici ve spodní části obrazovky.</translation> <translation id="8160722851663543621">Odesílá vyhledávací dotazy z adresního řádku a vyhledávacího pole a několik souborů cookie vašemu výchozímu vyhledávači</translation> -<translation id="8178325540017397816">Vybrané položky budou odstraněny</translation> <translation id="8205564605687841303">Zrušit</translation> <translation id="8225985093977202398">Obrázky a soubory v mezipaměti</translation> <translation id="8261506727792406068">Smazat</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index dafb2208..2c83e17 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Luk alle faner</translation> <translation id="8114753159095730575">Filer kan downloades. Se valgmulighederne nederst på skærmen.</translation> <translation id="8160722851663543621">Sender søgninger fra adresselinjen og søgefeltet samt nogle cookies til din standardsøgemaskine</translation> -<translation id="8178325540017397816">De valgte elementer fjernes</translation> <translation id="8205564605687841303">Annuller</translation> <translation id="8225985093977202398">Billeder og filer, der er gemt i cache</translation> <translation id="8261506727792406068">Slet</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb index 108de8a..df16acf 100644 --- a/ios/chrome/app/strings/resources/ios_strings_de.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Alle Tabs schließen</translation> <translation id="8114753159095730575">Dateidownload verfügbar. Optionen stehen unten auf dem Bildschirm zur Verfügung.</translation> <translation id="8160722851663543621">Suchanfragen, die in die Adressleiste oder das Suchfeld eingegeben wurden, sowie einige Cookies werden an Ihre Standardsuchmaschine gesendet</translation> -<translation id="8178325540017397816">Die ausgewählten Elemente werden entfernt</translation> <translation id="8205564605687841303">Abbrechen</translation> <translation id="8225985093977202398">Bilder & Dateien im Cache</translation> <translation id="8261506727792406068">Löschen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb index 447c8a1..9748a4b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Κλείσ. όλων των καρτελών</translation> <translation id="8114753159095730575">Η λήψη του αρχείου είναι διαθέσιμη. Οι διαθέσιμες επιλογές βρίσκονται κοντά στο κάτω μέρος της οθόνης.</translation> <translation id="8160722851663543621">Αποστέλλει αναζητήσεις από τη γραμμή διευθύνσεων και το πλαίσιο αναζήτησης, καθώς και ορισμένα cookie στην προεπιλεγμένη μηχανή αναζήτησης</translation> -<translation id="8178325540017397816">Τα στοιχεία που επιλέξατε θα καταργηθούν</translation> <translation id="8205564605687841303">Ακύρωση</translation> <translation id="8225985093977202398">Εικόνες και αρχεία στην κρυφή μνήμη</translation> <translation id="8261506727792406068">Διαγραφή</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb index 43b73260..c1553af 100644 --- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Close All Tabs</translation> <translation id="8114753159095730575">File download is available. Options available near bottom of screen.</translation> <translation id="8160722851663543621">Sends searches from the address bar and search box, and some cookies to your default search engine</translation> -<translation id="8178325540017397816">The items that you selected will be removed</translation> <translation id="8205564605687841303">Cancel</translation> <translation id="8225985093977202398">Cached Images and Files</translation> <translation id="8261506727792406068">Delete</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb index cbb3070f31..3e2e83c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">Abrir imagen en nueva pestaña</translation> <translation id="3603009562372709545">Copiar URL del vínculo</translation> <translation id="3607167657931203000">Autocompletar datos</translation> +<translation id="360930808415985584">Controlar la sincronización, la personalización y mucho más</translation> <translation id="3609785682760573515">Sincronizando…</translation> <translation id="3628119975092896051">Tu lista de lectura está disponible sin conexión. Para agregar una página, presiona <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Precargar pág. web</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">Cerrar promoción de acceso</translation> <translation id="4526249700380860531">Consulta y administra las contraseñas que guardaste en <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" />.</translation> <translation id="4536418791685807335">Intenta volver a acceder.</translation> +<translation id="4541241553780729349">No se modificarán la sincronización de datos en Google ni las funciones que usas</translation> <translation id="457386861538956877">Más ...</translation> <translation id="461440297010471931">Búsqueda con Google</translation> <translation id="4619615317237390068">Pestañas de otros dispositivos</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">Cerrar todas las pestañas</translation> <translation id="8114753159095730575">El archivo ya se puede descargar. Las opciones disponibles se muestran junto a la parte inferior de la pantalla.</translation> <translation id="8160722851663543621">Envía las búsquedas de la barra de direcciones y del cuadro de búsqueda, y algunas cookies a tu motor de búsqueda predeterminado</translation> -<translation id="8178325540017397816">Se quitarán los elementos que seleccionaste</translation> <translation id="8205564605687841303">Cancelar</translation> <translation id="8225985093977202398">Imágenes y archivos almacenados en caché</translation> <translation id="8261506727792406068">Borrar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb index 7ea21a9..6c95f89 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Cerrar todas las pestañas</translation> <translation id="8114753159095730575">La descarga de archivos está disponible. Hay opciones disponibles en la parte inferior de la pantalla.</translation> <translation id="8160722851663543621">Envía las búsquedas de la barra de direcciones y del cuadro de búsqueda junto con algunas cookies a tu buscador predeterminado</translation> -<translation id="8178325540017397816">Se eliminarán los elementos que hayas seleccionado</translation> <translation id="8205564605687841303">Cancelar</translation> <translation id="8225985093977202398">Archivos e imágenes en caché</translation> <translation id="8261506727792406068">Eliminar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb index 10326d0..1163f7c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Sule kõik vahelehed</translation> <translation id="8114753159095730575">Allalaaditav fail on saadaval. Valikud kuvatakse ekraani alaosas.</translation> <translation id="8160722851663543621">Saadab teie vaikeotsingumootorile otsingud teie aadressiribalt ja otsingukastist ning mõned küpsisefailid</translation> -<translation id="8178325540017397816">Teie valitud üksused eemaldatakse</translation> <translation id="8205564605687841303">Tühista</translation> <translation id="8225985093977202398">Vahem. salv. kujut. ja failid</translation> <translation id="8261506727792406068">Kustuta</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb index 8cbb232..bd471f5a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -424,7 +424,6 @@ <translation id="8080028325999236607">بستن همه برگهها</translation> <translation id="8114753159095730575">بارگیری فایل دردسترس است. گزینهها نزدیک انتهای صفحه دردسترس است.</translation> <translation id="8160722851663543621">جستجوها را از نوار نشانی و جعبه جستجو و برخی کوکیها را به موتور جستجوی پیشفرض ارسال میکند</translation> -<translation id="8178325540017397816">موارد انتخابشده حذف میشود.</translation> <translation id="8205564605687841303">لغو</translation> <translation id="8225985093977202398">تصاویر و فایلهای قرار گرفته در حافظه پنهان</translation> <translation id="8261506727792406068">حذف</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb index 750bf96..ae2346d9 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">Avaa kuva uudessa välilehdessä</translation> <translation id="3603009562372709545">Kopioi linkin URL-osoite</translation> <translation id="3607167657931203000">Automaattisen täytön tiedot</translation> +<translation id="360930808415985584">Määritä synkronointi, personointi ja muita asetuksia</translation> <translation id="3609785682760573515">Synkronoidaan…</translation> <translation id="3628119975092896051">Lukulistasi on käytettävissä offline-tilassa. Lisää sivu lukulistaasi valitsemalla <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Esilataa verkkosivut</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">Sulje kirjautumismainos</translation> <translation id="4526249700380860531">Tarkastele ja hallinnoi tallennettuja salasanoja osoitteessa <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation> <translation id="4536418791685807335">Yritä kirjautua sisään uudelleen.</translation> +<translation id="4541241553780729349">Datan synkronointia Googleen ja käyttämiäsi ominaisuuksia ei muuteta</translation> <translation id="457386861538956877">Lisää...</translation> <translation id="461440297010471931">Haetaan Googlella</translation> <translation id="4619615317237390068">Välilehdet muista laitteista</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">Sulje kaikki välilehdet</translation> <translation id="8114753159095730575">Ladattava tiedosto on saatavilla. Ruudun alaosassa on käytettävissä valintoja.</translation> <translation id="8160722851663543621">Lähettää osoitekentän ja hakukentän kautta tehdyt haut sekä joitakin evästeitä oletushakukoneellesi</translation> -<translation id="8178325540017397816">Valitut kohteet poistetaan</translation> <translation id="8205564605687841303">Peruuta</translation> <translation id="8225985093977202398">Välimuistissa olevat kuvat ja tiedostot</translation> <translation id="8261506727792406068">Poista</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb index 9d6c782..c156729a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">Buksan ang Larawan sa Bagong Tab</translation> <translation id="3603009562372709545">Kopyahin ang URL ng Link</translation> <translation id="3607167657931203000">Mag-autofill ng Data</translation> +<translation id="360930808415985584">Kontrolin ang Pag-sync, Pag-personalize, at Higit pa</translation> <translation id="3609785682760573515">Nagsi-sync...</translation> <translation id="3628119975092896051">Available offline ang iyong listahan ng babasahin. Upang magdagdag ng page sa listahan ng babasahin mo, i-tap ang <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Mag-preload ng Mga Webpage</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">Isara ang promo sa pag-sign in</translation> <translation id="4526249700380860531">Tingnan at pamahalaan ang mga naka-save na password sa <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation> <translation id="4536418791685807335">Subukang mag-sign in muli.</translation> +<translation id="4541241553780729349">Hindi mababago ang pag-sync ng data sa Google at ang mga feature na ginagamit mo</translation> <translation id="457386861538956877">Higit pa...</translation> <translation id="461440297010471931">Paghahanap gamit ang Google</translation> <translation id="4619615317237390068">Mga tab mula sa iba pang mga device</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">Isara ang Lahat ng Tab</translation> <translation id="8114753159095730575">Available ang pag-download ng file. Available ang mga opsyon malapit sa ibaba ng screen.</translation> <translation id="8160722851663543621">Nagpapadala ng mga paghahanap mula sa address bar at box para sa paghahanap, at ilang cookie sa iyong default na search engine</translation> -<translation id="8178325540017397816">Maaalis ang mga pinili mong item</translation> <translation id="8205564605687841303">Kanselahin</translation> <translation id="8225985093977202398">Mga Naka-cache na Larawan at File</translation> <translation id="8261506727792406068">I-delete</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb index b5fa50a..afc9ed9 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Fermer tous les onglets</translation> <translation id="8114753159095730575">Vous pouvez télécharger des fichiers. Différentes options sont disponibles au bas de l'écran.</translation> <translation id="8160722851663543621">Envoie les recherches effectuées à partir de la barre d'adresse et du champ de recherche ainsi que des cookies à votre moteur de recherche par défaut</translation> -<translation id="8178325540017397816">Les éléments sélectionnés seront supprimés</translation> <translation id="8205564605687841303">Annuler</translation> <translation id="8225985093977202398">Img/fich. en cache</translation> <translation id="8261506727792406068">Supprimer</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb index 163e0af..5ea8654 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">નવા ટેબમાં છબી ખોલો</translation> <translation id="3603009562372709545">લિંક URL કૉપિ કરો</translation> <translation id="3607167657931203000">સ્વતઃભરણ ડેટા</translation> +<translation id="360930808415985584">સિંક, વૈયક્તિકરણ અને વધુ બાબતોને નિયંત્રિત કરો</translation> <translation id="3609785682760573515">સમન્વય કરી રહ્યું છે...</translation> <translation id="3628119975092896051">તમારી વાંચન સૂચિ ઑફલાઇન ઉપલબ્ધ છે. તમારી વાંચન સૂચિમાં પૃષ્ઠ ઉમેરવા માટે, <ph name="SHARE_OPENING_ICON" /> ટૅપ કરો.</translation> <translation id="3638472932233958418">વેબપૃષ્ઠો પહેલાથી લોડ કરો</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">સાઇન-ઇન પ્રોમો બંધ કરો</translation> <translation id="4526249700380860531"><ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> પર સાચવેલા પાસવર્ડ્સ જુઓ અને સંચાલિત કરો</translation> <translation id="4536418791685807335">ફરીથી સાઇન ઇન કરવાનો પ્રયાસ કરો.</translation> +<translation id="4541241553780729349">Googleમાં સિંક થતો ડેટા અને તમે ઉપયોગમાં લેતા હોય તે સુવિધાઓમાં કોઈ ફેરફાર થશે નહીં</translation> <translation id="457386861538956877">વધુ...</translation> <translation id="461440297010471931">Google વડે શોધી રહ્યાં છીએ</translation> <translation id="4619615317237390068">અન્ય ઉપકરણોમાંથી ટૅબ્સ</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">બધા ટૅબ્સ બંધ કરો</translation> <translation id="8114753159095730575">ફાઇલ ડાઉનલોડ માટે ઉપલબ્ધ છે. સ્ક્રીનના તળિયે વિકલ્પો ઉપલબ્ધ છે.</translation> <translation id="8160722851663543621">ઍડ્રેસ બાર અને શોધ બૉક્સમાંથી શોધ અને અમુક કુકીને તમારા ડિફૉલ્ટ શોધ એંજિન પર મોકલે છે</translation> -<translation id="8178325540017397816">તમે પસંદ કરેલી આઇટમો કાઢી નાખવામાં આવશે</translation> <translation id="8205564605687841303">રદ કરો</translation> <translation id="8225985093977202398">કૅશ કરેલ છબીઓ અને ફાઇલો</translation> <translation id="8261506727792406068">કાઢી નાખો</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb index ae1d2629..e2365dd4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">सभी टैब बंद करें</translation> <translation id="8114753159095730575">फ़ाइल डाउनलोड करने की सुविधा उपलब्ध है. विकल्प स्क्रीन के नीचे उपलब्ध हैं.</translation> <translation id="8160722851663543621">पता बार और खोज बॉक्स की खोजों और कुछ कुकी को आपके डिफ़ॉल्ट खोज इंजन पर भेजती है</translation> -<translation id="8178325540017397816">आपके चुने हुए आइटम हटा दिए जाएंगे</translation> <translation id="8205564605687841303">रद्द करें</translation> <translation id="8225985093977202398">संचित चित्र और फ़ाइलें</translation> <translation id="8261506727792406068">हटाएं</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb index 12841205..a192775 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Zatvori sve kartice</translation> <translation id="8114753159095730575">Dostupno je preuzimanje datoteka. Opcije su dostupne pri dnu zaslona.</translation> <translation id="8160722851663543621">Zadanoj tražilici šalje pretraživanja iz adresne trake i okvira za pretraživanje te neke kolačiće</translation> -<translation id="8178325540017397816">Odabrane će se stavke ukloniti</translation> <translation id="8205564605687841303">Odustani</translation> <translation id="8225985093977202398">Predmemorirane slike i datoteke</translation> <translation id="8261506727792406068">Izbriši</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb index e76382e..d3feefd 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">Kép megnyitása új lapon</translation> <translation id="3603009562372709545">Link URL-jének másolása</translation> <translation id="3607167657931203000">Automatikus kitöltés adatai</translation> +<translation id="360930808415985584">A szinkronizálás, személyre szabás és még sok más vezérlése</translation> <translation id="3609785682760573515">Szinkronizálás...</translation> <translation id="3628119975092896051">Olvasási listája hozzáférhető offline módban. Ha szeretne hozzáadni oldalakat a listához, koppintson a következőkre: <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Weboldalak előtöltése</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">Bejelentkezési promóció bezárása</translation> <translation id="4526249700380860531">A mentett jelszavak megtekintése és kezelése a <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> címen</translation> <translation id="4536418791685807335">Próbáljon meg újra bejelentkezni.</translation> +<translation id="4541241553780729349">A Google-lal szinkronizált adatok köre és a használt funkciók nem fognak megváltozni</translation> <translation id="457386861538956877">Továbbiak...</translation> <translation id="461440297010471931">Keresés a Google segítségével</translation> <translation id="4619615317237390068">Más eszközök lapjai</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">Összes lap bezárása</translation> <translation id="8114753159095730575">A fájlletöltés megvalósítható. A beállításokat a képernyő alján nyithatja meg.</translation> <translation id="8160722851663543621">A címsávban és a keresőmezőben végrehajtott kereséseket, valamint bizonyos cookie-kat elküld az alapértelmezett keresőmotornak</translation> -<translation id="8178325540017397816">A kiválasztott elemek törlődnek</translation> <translation id="8205564605687841303">Mégse</translation> <translation id="8225985093977202398">A gyorsítótárban lévő képek és fájlok</translation> <translation id="8261506727792406068">Törlés</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb index 4044a79..3053686 100644 --- a/ios/chrome/app/strings/resources/ios_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Tutup Semua Tab</translation> <translation id="8114753159095730575">Download file tersedia. Opsi tersedia di dekat bagian bawah layar.</translation> <translation id="8160722851663543621">Mengirimkan penelusuran dari kolom URL dan kotak penelusuran, serta beberapa cookie ke mesin telusur default</translation> -<translation id="8178325540017397816">Item yang Anda pilih akan dihapus</translation> <translation id="8205564605687841303">Batal</translation> <translation id="8225985093977202398">Gambar & File dalam Cache</translation> <translation id="8261506727792406068">Hapus</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb index 39f6c66..fd0ac219 100644 --- a/ios/chrome/app/strings/resources/ios_strings_it.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Chiudi tutte le schede</translation> <translation id="8114753159095730575">È possibile il download dei file. Le opzioni sono disponibili nella parte inferiore della schermata.</translation> <translation id="8160722851663543621">Invia al tuo motore di ricerca predefinito le ricerche dalla barra degli indirizzi e dalla casella di ricerca, nonché alcuni cookie</translation> -<translation id="8178325540017397816">Gli elementi selezionati verranno rimossi</translation> <translation id="8205564605687841303">Annulla</translation> <translation id="8225985093977202398">Immagini e file memorizzati nella cache</translation> <translation id="8261506727792406068">Elimina</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb index 5621ef2..0e24ce9 100644 --- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -421,7 +421,6 @@ <translation id="8080028325999236607">סגור את כל הכרטיסיות</translation> <translation id="8114753159095730575">יש קובץ זמין להורדה. האפשרויות זמינות בחלק התחתון של המסך.</translation> <translation id="8160722851663543621">שליחת חיפושים משורת כתובת האתר ותיבת החיפוש אל מנוע החיפוש שהגדרת כברירת מחדל, יחד עם קובצי cookie מסוימים</translation> -<translation id="8178325540017397816">הפריטים שבחרת יוסרו</translation> <translation id="8205564605687841303">בטל</translation> <translation id="8225985093977202398">תמונות וקבצים במטמון</translation> <translation id="8261506727792406068">מחיקה</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb index 902ac50..65a4cab 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">新しいタブで画像を開く</translation> <translation id="3603009562372709545">リンクのURLをコピー</translation> <translation id="3607167657931203000">自動入力のデータ</translation> +<translation id="360930808415985584">同期、カスタマイズ、その他の管理</translation> <translation id="3609785682760573515">同期しています...</translation> <translation id="3628119975092896051">リーディング リストをオフラインで利用できます。リーディング リストにページを追加するには、<ph name="SHARE_OPENING_ICON" /> をタップします。</translation> <translation id="3638472932233958418">ウェブページのプリロード</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">ログイン プロモーションを閉じる</translation> <translation id="4526249700380860531"><ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> での保存パスワードの表示と管理</translation> <translation id="4536418791685807335">もう一度ログインしてみてください。</translation> +<translation id="4541241553780729349">Google に同期しているデータと使用している機能は変更されません</translation> <translation id="457386861538956877">その他...</translation> <translation id="461440297010471931">Google 検索エンジンを使用</translation> <translation id="4619615317237390068">他のデバイスからのタブ</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">すべてのタブを閉じる</translation> <translation id="8114753159095730575">ファイルのダウンロードが利用可能です。画面の下の方にオプションがあります。</translation> <translation id="8160722851663543621">アドレスバーや検索ボックスに入力した検索語句と Cookie を既定の検索エンジンに送信します</translation> -<translation id="8178325540017397816">選択したアイテムが削除されます</translation> <translation id="8205564605687841303">キャンセル</translation> <translation id="8225985093977202398">キャッシュされた画像とファイル</translation> <translation id="8261506727792406068">削除</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb index 8b3443a..873e00e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">ಚಿತ್ರವನ್ನು ಹೊಸ ಟ್ಯಾಬ್ನಲ್ಲಿ ತೆರೆಯಿರಿ</translation> <translation id="3603009562372709545">ಲಿಂಕ್ URL ನಕಲಿಸಿ</translation> <translation id="3607167657931203000">ಸ್ವಯಂಭರ್ತಿ ಡೇಟಾ</translation> +<translation id="360930808415985584">ಸಿಂಕ್, ವೈಯಕ್ತೀಕರಣ ಮತ್ತು ಇನ್ನಷ್ಟನ್ನು ನಿಯಂತ್ರಿಸಿ</translation> <translation id="3609785682760573515">ಸಿಂಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation> <translation id="3628119975092896051">ನಿಮ್ಮ ಓದುವ ಪಟ್ಟಿಯು ಆಫ್ಲೈನ್ನಲ್ಲಿ ಲಭ್ಯವಿದೆ. ನಿಮ್ಮ ಓದುವ ಪಟ್ಟಿಗೆ ಪುಟವನ್ನು ಸೇರಿಸಲು, <ph name="SHARE_OPENING_ICON" /> ಟ್ಯಾಪ್ ಮಾಡಿ.</translation> <translation id="3638472932233958418">ವೆಬ್ ಪುಟಗಳನ್ನು ಪೂರ್ವಲೋಡ್ ಮಾಡಿ</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">ಸೈನ್-ಇನ್ ಪ್ರೋಮೋ ಮುಚ್ಚಿ</translation> <translation id="4526249700380860531"><ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> ನಲ್ಲಿ ಉಳಿಸಲಾದ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ವೀಕ್ಷಿಸಿ ಮತ್ತು ನಿರ್ವಹಿಸಿ</translation> <translation id="4536418791685807335">ಮತ್ತೊಮ್ಮೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ.</translation> +<translation id="4541241553780729349">ನೀವು Google ಗೆ ಸಿಂಕ್ ಮಾಡಿರುವ ಡೇಟಾ ಮತ್ತು ನೀವು ಬಳಸುವ ವೈಶಿಷ್ಟ್ಯಗಳು ಬದಲಾಗುವುದಿಲ್ಲ</translation> <translation id="457386861538956877">ಇನ್ನಷ್ಟು...</translation> <translation id="461440297010471931">Google ಮೂಲಕ ಹುಡುಕಲಾಗುತ್ತದೆ</translation> <translation id="4619615317237390068">ಇತರ ಸಾಧನಗಳಿಂದ ಟ್ಯಾಬ್ಗಳು</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">ಎಲ್ಲ ಟ್ಯಾಬ್ಗಳನ್ನು ಮುಚ್ಚಿ</translation> <translation id="8114753159095730575">ಫೈಲ್ ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡುವ ಸೌಲಭ್ಯ ಲಭ್ಯವಿದೆ. ಪರದೆಯ ಕೆಳಗಿನ ಭಾಗದಲ್ಲಿ ಆಯ್ಕೆಗಳು ಲಭ್ಯವಿವೆ.</translation> <translation id="8160722851663543621">ವಿಳಾಸ ಪಟ್ಟಿ ಮತ್ತು ಹುಡುಕಾಟ ಬಾಕ್ಸ್ನಿಂದ ಹುಡುಕಾಟಗಳನ್ನು ಹಾಗೂ ಕೆಲವು ಕುಕೀಗಳನ್ನು ನಿಮ್ಮ ಡಿಫಾಲ್ಟ್ ಹುಡುಕಾಟದ ಎಂಜಿನ್ಗೆ ಕಳುಹಿಸುತ್ತದೆ</translation> -<translation id="8178325540017397816">ನೀವು ಆಯ್ಕೆ ಮಾಡಿದ ಐಟಂಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ</translation> <translation id="8205564605687841303">ರದ್ದುಮಾಡಿ</translation> <translation id="8225985093977202398">ಸಂಗ್ರಹಿಸಲಾಗಿರುವ ಚಿತ್ರಗಳು ಮತ್ತು ಫೈಲ್ಗಳು</translation> <translation id="8261506727792406068">ಅಳಿಸಿ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb index 7ce5c33f8..50880087 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">새 탭에서 이미지 열기</translation> <translation id="3603009562372709545">링크 URL 복사</translation> <translation id="3607167657931203000">데이터 자동 완성</translation> +<translation id="360930808415985584">동기화, 맞춤설정 등 관리</translation> <translation id="3609785682760573515">동기화 중...</translation> <translation id="3628119975092896051">읽기 목록을 오프라인에서 사용할 수 있습니다. 읽기 목록에 페이지를 추가하려면 <ph name="SHARE_OPENING_ICON" />을(를) 탭하세요.</translation> <translation id="3638472932233958418">웹페이지 미리 로드하기</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">로그인 프로모션 닫기</translation> <translation id="4526249700380860531"><ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" />에서 저장된 비밀번호 보기 및 관리</translation> <translation id="4536418791685807335">다시 로그인해 주세요.</translation> +<translation id="4541241553780729349">Google에 동기화하는 데이터 및 사용하는 기능은 변경되지 않습니다.</translation> <translation id="457386861538956877">더보기...</translation> <translation id="461440297010471931">Google에서 검색하기</translation> <translation id="4619615317237390068">다른 기기의 탭</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">탭 모두 닫기</translation> <translation id="8114753159095730575">파일을 다운로드할 수 있습니다. 화면 하단에서 옵션을 선택할 수 있습니다.</translation> <translation id="8160722851663543621">검색주소창 및 검색창의 검색어 및 일부 쿠키를 기본 검색엔진에 전송</translation> -<translation id="8178325540017397816">선택한 항목 삭제</translation> <translation id="8205564605687841303">취소</translation> <translation id="8225985093977202398">캐시된 이미지 및 파일</translation> <translation id="8261506727792406068">삭제</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb index 655d13a2..6ce40b051 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">Atidaryti vaizdą naujo skirtuko lape</translation> <translation id="3603009562372709545">Kopijuoti nuorodos URL</translation> <translation id="3607167657931203000">Autom. pild. duom.</translation> +<translation id="360930808415985584">Sinchronizavimo, suasmeninimo ir kitų funkcijų valdymas</translation> <translation id="3609785682760573515">Sinchronizuojama...</translation> <translation id="3628119975092896051">Skaitymo sąrašas pasiekiamas neprisijungus. Kad pridėtumėte puslapį prie skaitymo sąrašo, palieskite <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Iš anksto įk. tinkl.</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">Uždaryti prisijungimo reklamą</translation> <translation id="4526249700380860531">Peržiūrėkite ir tvarkykite išsaugotus slaptažodžius apsilankę adresu <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation> <translation id="4536418791685807335">Bandykite prisijungti dar kartą.</translation> +<translation id="4541241553780729349">Su „Google“ sinchronizuojami duomenys ir naudojamos funkcijos nepasikeis</translation> <translation id="457386861538956877">Daugiau...</translation> <translation id="461440297010471931">Ieškoma naudojant „Google“</translation> <translation id="4619615317237390068">Skirtukai iš kitų įrenginių</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">Uždaryti visus skirtukus</translation> <translation id="8114753159095730575">Galima atsisiųsti failą. Parinktys pasiekiamos netoli ekrano apačios.</translation> <translation id="8160722851663543621">Numatytajam paieškos varikliui siunčiamos į adreso juostą ir paieškos laukelį įvestos paieškos ir kai kurie slapukai</translation> -<translation id="8178325540017397816">Pasirinkti elementai bus pašalinti</translation> <translation id="8205564605687841303">Atšaukti</translation> <translation id="8225985093977202398">Talp. vaiz. ir fail.</translation> <translation id="8261506727792406068">Ištrinti</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb index f9aa1e30..0155047 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Aizvērt visas cilnes</translation> <translation id="8114753159095730575">Pieejama failu lejupielāde. Pieejamās opcijas redzamas ekrāna apakšdaļā.</translation> <translation id="8160722851663543621">Nosūta meklēšanas vaicājumus no adreses joslas un meklēšanas lodziņa, kā arī dažus sīkfailus uz jūsu noklusējuma meklētājprogrammu</translation> -<translation id="8178325540017397816">Jūsu atlasītie vienumi tiks noņemti</translation> <translation id="8205564605687841303">Atcelt</translation> <translation id="8225985093977202398">Kešatmiņa</translation> <translation id="8261506727792406068">Dzēst</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb index 0cd82361..74ee093 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">പുതിയ ടാബിൽ ചിത്രം തുറക്കുക</translation> <translation id="3603009562372709545">ലിങ്ക് URL പകർത്തുക</translation> <translation id="3607167657931203000">ഓട്ടോഫിൽ ഡാറ്റ</translation> +<translation id="360930808415985584">സമന്വയവും വ്യക്തിപരമാക്കലും മറ്റും നിയന്ത്രിക്കുക</translation> <translation id="3609785682760573515">സമന്വയിപ്പിക്കുന്നു...</translation> <translation id="3628119975092896051">നിങ്ങളുടെ വായന ലിസ്റ്റ് ഓഫ്ലൈനിൽ ലഭ്യമാണ്. വായന ലിസ്റ്റിൽ ഒരു പേജ് ചേർക്കാൻ, <ph name="SHARE_OPENING_ICON" /> ടാപ്പുചെയ്യുക.</translation> <translation id="3638472932233958418">മുമ്പ് ലോഡുചെയ്ത വെബ്പേജുകൾ</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">സൈൻ ഇൻ പ്രമോ അടയ്ക്കുക</translation> <translation id="4526249700380860531"><ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> എന്നതിൽ സംരക്ഷിച്ച പാസ്വേഡുകൾ കാണുക, നിയന്ത്രിക്കുക</translation> <translation id="4536418791685807335">വീണ്ടും സൈൻ ഇൻ ചെയ്യാൻ ശ്രമിക്കുക.</translation> +<translation id="4541241553780729349">നിങ്ങൾ Google-ലേക്ക് സമന്വയിപ്പിക്കുന്ന ഡാറ്റയും ഉപയോഗിക്കുന്ന ഫീച്ചറുകളും മാറില്ല</translation> <translation id="457386861538956877">കൂടുതൽ...</translation> <translation id="461440297010471931">Google ഉപയോഗിച്ച് തിരയുന്നു</translation> <translation id="4619615317237390068">മറ്റ് ഉപകരണങ്ങളിൽ നിന്നുള്ള ടാബുകൾ</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">എല്ലാ ടാബുകളും അടയ്ക്കുക</translation> <translation id="8114753159095730575">ഫയൽ ഡൗൺലോഡ് ചെയ്യൽ ലഭ്യമാണ്. സ്ക്രീനിന്റെ ചുവടെ ഓപ്ഷനുകളുണ്ട്.</translation> <translation id="8160722851663543621">നിങ്ങളുടെ ഡിഫോൾട്ട് തിരയൽ എഞ്ചിനിലേക്ക് വിലാസ ബാറിൽ നിന്നും തിരയൽ ബോക്സിൽ നിന്നുമുള്ള തിരയലുകളും കുറച്ച് കുക്കികളും അയയ്ക്കുന്നു</translation> -<translation id="8178325540017397816">നിങ്ങൾ തിരഞ്ഞെടുത്ത ഇനങ്ങൾ നീക്കം ചെയ്യപ്പെടും</translation> <translation id="8205564605687841303">റദ്ദാക്കുക</translation> <translation id="8225985093977202398">കാഷെ ചെയ്ത ചിത്രങ്ങളും ഫയലുകളും</translation> <translation id="8261506727792406068">ഇല്ലാതാക്കുക</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index c8027fb..d8b3c05 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">नवीन टॅबमध्ये इमेज उघडा</translation> <translation id="3603009562372709545">दुवा URL कॉपी करा</translation> <translation id="3607167657931203000">स्वयं-भरण डेटा</translation> +<translation id="360930808415985584">सिंक, पर्सनलायझेशन आणि बरेच काही नियंत्रित करा</translation> <translation id="3609785682760573515">संकालन करत आहे...</translation> <translation id="3628119975092896051">तुमची वाचन सूची ऑफलाइन उपलब्ध आहे. आपल्या वाचन सूचीमध्ये एक पृष्ठ जोडण्यासाठी, <ph name="SHARE_OPENING_ICON" /> टॅप करा.</translation> <translation id="3638472932233958418">वेबपृष्ठे प्रीलोड करा</translation> @@ -214,6 +215,7 @@ <translation id="4526249700380860531"><ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> वर सेव्ह केलेले पासवर्ड पहा आणि व्यवस्थापित करा</translation> <translation id="4536418791685807335">पुन्हा साइन इन करण्याचा प्रयत्न करा.</translation> +<translation id="4541241553780729349">Google वर सिंक केलेला डेटा आणि तुम्ही वापरत असलेली वैशिष्ट्ये बदलणार नाहीत</translation> <translation id="457386861538956877">अधिक...</translation> <translation id="461440297010471931">Google ने शोधत आहे</translation> <translation id="4619615317237390068">अन्य डिव्हाइसेसमधील टॅब</translation> @@ -422,7 +424,6 @@ <translation id="8080028325999236607">सर्व टॅब बंद करा</translation> <translation id="8114753159095730575">फाइल डाउनलोड उपलब्ध आहे. स्क्रीनच्या तळाशी पर्याय उपलब्ध आहेत.</translation> <translation id="8160722851663543621">तुमच्या डीफॉल्ट शोध इंजिनवर अॅड्रेस बार आणि सर्च बॉक्स आणि काही कुकींमधून शोध पाठवते</translation> -<translation id="8178325540017397816">तुम्ही निवडलेले आयटम काढून टाकले जातील</translation> <translation id="8205564605687841303">रद्द करा</translation> <translation id="8225985093977202398">कॅश इमेज आणि फायली</translation> <translation id="8261506727792406068">हटवा</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb index 68eeca8..899a4228 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Tutup Semua Tab</translation> <translation id="8114753159095730575">Muat turun fail tersedia. Pilihan tersedia di bahagian bawah skrin.</translation> <translation id="8160722851663543621">Menghantar carian daripada bar alamat dan kotak carian serta beberapa kuki ke enjin carian lalai anda</translation> -<translation id="8178325540017397816">Item yang anda pilih akan dialih keluar</translation> <translation id="8205564605687841303">Batal</translation> <translation id="8225985093977202398">Imej dan Fail Dicache</translation> <translation id="8261506727792406068">Padam</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb index 7b245b6..48014db7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Alle tabbladen sluiten</translation> <translation id="8114753159095730575">Bestand downloaden is beschikbaar. Opties beschikbaar onderaan het scherm.</translation> <translation id="8160722851663543621">Hiermee worden de zoekopdrachten in de adresbalk en in het zoekvak en bepaalde cookies verzonden naar je standaard zoekmachine</translation> -<translation id="8178325540017397816">De geselecteerde items worden verwijderd</translation> <translation id="8205564605687841303">Annuleren</translation> <translation id="8225985093977202398">Afbeeldingen en bestanden in chachegeheugen</translation> <translation id="8261506727792406068">Verwijderen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb index d957d2b..f98808b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -421,7 +421,6 @@ <translation id="8080028325999236607">Lukk alle faner</translation> <translation id="8114753159095730575">Filnedlasting er tilgjengelig. Du finner alternativer på nedre del av skjermen.</translation> <translation id="8160722851663543621">Sender søk fra adressefeltet og søkefeltet samt noen informasjonskapsler til standardsøkemotoren din</translation> -<translation id="8178325540017397816">De valgte elementene blir fjernet</translation> <translation id="8205564605687841303">Avbryt</translation> <translation id="8225985093977202398">Bufrede bilder og filer</translation> <translation id="8261506727792406068">Slett</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb index b246da9..8a3e06c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Zamknij wszystkie karty</translation> <translation id="8114753159095730575">Pobrany plik jest dostępny. Opcje są dostępne u dołu ekranu.</translation> <translation id="8160722851663543621">Zapytania wpisane na pasku adresu i w polu wyszukiwania oraz niektóre pliki cookie zostaną wysłane do domyślnej wyszukiwarki</translation> -<translation id="8178325540017397816">Wybrane elementy zostaną usunięte</translation> <translation id="8205564605687841303">Anuluj</translation> <translation id="8225985093977202398">Obrazy i pliki w pamięci podręcznej</translation> <translation id="8261506727792406068">Usuń</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb index 3a61f5a..24d0f47 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -424,7 +424,6 @@ <translation id="8080028325999236607">Fechar todas as guias</translation> <translation id="8114753159095730575">O download de arquivo está disponível. Opções disponíveis perto da parte inferior da tela.</translation> <translation id="8160722851663543621">Envia pesquisas da barra de endereço e da caixa de pesquisa, além de alguns cookies, para seu mecanismo de pesquisa padrão</translation> -<translation id="8178325540017397816">Os itens selecionados serão removidos</translation> <translation id="8205564605687841303">Cancelar</translation> <translation id="8225985093977202398">Imagens e arquivos armazenados em cache</translation> <translation id="8261506727792406068">Excluir</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb index ee02cf8..8c7f868 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Fechar Todos os Separadores</translation> <translation id="8114753159095730575">A transferência de ficheiros está disponível. Opções disponíveis junto à parte inferior do ecrã.</translation> <translation id="8160722851663543621">Envia pesquisas da barra de endereço e da caixa de pesquisa, bem como alguns cookies, para o motor de pesquisa predefinido.</translation> -<translation id="8178325540017397816">Os itens selecionados vão ser removidos</translation> <translation id="8205564605687841303">Cancelar</translation> <translation id="8225985093977202398">Imagens e ficheiros em cache</translation> <translation id="8261506727792406068">Eliminar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb index 8a980df..086e347 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Închide filele</translation> <translation id="8114753159095730575">Descărcarea fișierelor este disponibilă. Opțiunile sunt disponibile în partea de jos a ecranului.</translation> <translation id="8160722851663543621">Trimite căutări din bara de adrese și din caseta de căutare și anumite cookie-uri în motorul de căutare prestabilit</translation> -<translation id="8178325540017397816">Elementele selectate vor fi eliminate</translation> <translation id="8205564605687841303">Anulează</translation> <translation id="8225985093977202398">Imaginile și fișierele memorate în cache</translation> <translation id="8261506727792406068">Șterge</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb index ffa5052..5589f454 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">Открыть изображение в новой вкладке</translation> <translation id="3603009562372709545">Копировать URL</translation> <translation id="3607167657931203000">Данные автозаполнения</translation> +<translation id="360930808415985584">Настройки синхронизации, персонализации и других сервисов</translation> <translation id="3609785682760573515">Cинхронизация…</translation> <translation id="3628119975092896051">Ваш список для чтения доступен без подключения к Интернету. Чтобы добавить в него страницу, нажмите <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Предварительная загрузка</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">Закрыть сообщение о входе</translation> <translation id="4526249700380860531">Просматривайте сохраненные пароли и управляйте ими на странице <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation> <translation id="4536418791685807335">Войдите в аккаунт снова.</translation> +<translation id="4541241553780729349">Данные, которые синхронизируются с серверами Google, и функции, которыми вы пользуетесь, останутся без изменений.</translation> <translation id="457386861538956877">Ещё...</translation> <translation id="461440297010471931">Поиск с помощью Google</translation> <translation id="4619615317237390068">Вкладки с других устройств</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">Закрыть все вкладки</translation> <translation id="8114753159095730575">Файл доступен для скачивания. Параметры указаны в нижней части экрана.</translation> <translation id="8160722851663543621">Отправлять поисковые запросы из адресной строки и окна поиска, а также файлы cookie в поисковую систему по умолчанию</translation> -<translation id="8178325540017397816">Удаление выбранных данных</translation> <translation id="8205564605687841303">Отмена</translation> <translation id="8225985093977202398">Файлы, сохраненные в кеше</translation> <translation id="8261506727792406068">Удалить</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index b747a75..409070d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Zavrieť všetky karty</translation> <translation id="8114753159095730575">Súbor je k dispozícii na stiahnutie. Možnosti sú k dispozícii v dolnej časti obrazovky.</translation> <translation id="8160722851663543621">Odošlú sa vyhľadávania z panela s adresou a vyhľadávacieho panela a niektoré súbory cookie do vášho predvoleného vyhľadávača</translation> -<translation id="8178325540017397816">Vybrané položky budú odstránené</translation> <translation id="8205564605687841303">Zrušiť</translation> <translation id="8225985093977202398">Obrázky a súbory vo vyrovnávacej pamäti</translation> <translation id="8261506727792406068">Odstrániť</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb index d580c04b..4398ca4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -421,7 +421,6 @@ <translation id="8080028325999236607">Zapri vse zavihke</translation> <translation id="8114753159095730575">Prenos datotek je na voljo. Možnosti so na voljo pri dnu zaslona.</translation> <translation id="8160722851663543621">Pošilja iskanja iz naslovne vrstice in iskalnega polja ter nekatere piškotke privzetemu iskalniku</translation> -<translation id="8178325540017397816">Izbrani elementi bodo odstranjeni</translation> <translation id="8205564605687841303">Prekliči</translation> <translation id="8225985093977202398">Cached Images and Files</translation> <translation id="8261506727792406068">Izbriši</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb index 29a7ca4c..ccc5796 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Затвори све картице</translation> <translation id="8114753159095730575">Преузимање датотеке није доступно. Опције су наведене у дну екрана.</translation> <translation id="8160722851663543621">Подразумеваном претраживачу шаље претраге из траке за адресу и оквира за претрагу и неке колачиће</translation> -<translation id="8178325540017397816">Изабране ставке биће уклоњене</translation> <translation id="8205564605687841303">Откажи</translation> <translation id="8225985093977202398">Кеширане слике и датотеке</translation> <translation id="8261506727792406068">Избриши</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb index d64233b..d90f13e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Stäng alla flikar</translation> <translation id="8114753159095730575">En filnedladdning är tillgänglig. Alternativ visas nära skärmens nederkant.</translation> <translation id="8160722851663543621">Skickar sökningar från adressfältet och sökrutan, och vissa cookies, till standardsökmotorn</translation> -<translation id="8178325540017397816">De markerade objekten tas bort</translation> <translation id="8205564605687841303">Avbryt</translation> <translation id="8225985093977202398">Cachelagrade bilder och filer</translation> <translation id="8261506727792406068">Radera</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb index d12d378..ace7425 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Funga Vichupo Vyote</translation> <translation id="8114753159095730575">Unaweza kupakua faili. Chaguo zinapatikana karibu na sehemu ya chini ya skrini.</translation> <translation id="8160722851663543621">Hutuma hoja za utafutaji kutoka sehemu ya anwani na kisanduku cha kutafutia na baadhi ya vidakuzi kwenye mtambo chaguomsingi wa kutafuta</translation> -<translation id="8178325540017397816">Vipengele ambavyo umechagua vitaondolewa</translation> <translation id="8205564605687841303">Ghairi</translation> <translation id="8225985093977202398">Picha na Faili Zilizowekwa katika Akiba</translation> <translation id="8261506727792406068">Futa</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb index eee70d1c..5dd6e56 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">படத்தைப் புதிய தாவலில் திற</translation> <translation id="3603009562372709545">இணைப்பு URL ஐ நகலெடு</translation> <translation id="3607167657931203000">தன்னிரப்பி தரவு</translation> +<translation id="360930808415985584">ஒத்திசைவு, தனிப்பயனாக்கம் மற்றும் பலவற்றைக் கட்டுப்படுத்தவும்</translation> <translation id="3609785682760573515">ஒத்திசைக்கிறது...</translation> <translation id="3628119975092896051">உங்கள் வாசிப்புப் பட்டியலை ஆஃப்லைனில் பயன்படுத்தலாம். வாசிப்புப் பட்டியலில் பக்கத்தைச் சேர்க்க, <ph name="SHARE_OPENING_ICON" /> என்பதைத் தட்டவும்.</translation> <translation id="3638472932233958418">வலைப்பக்கங்களை முன்னதாக ஏற்று</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">உள்நுழைவு விளம்பரத்தை மூடு</translation> <translation id="4526249700380860531"><ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> இல் சேமித்த கடவுச்சொற்களைப் பார்க்கலாம் மற்றும் நிர்வகிக்கலாம்.</translation> <translation id="4536418791685807335">மீண்டும் உள்நுழைந்து முயலவும்.</translation> +<translation id="4541241553780729349">Googleளுடன் நீங்கள் ஒத்திசைக்கும் தரவும் பயன்படுத்தும் அம்சங்களும் மாறாது</translation> <translation id="457386861538956877">மேலும்...</translation> <translation id="461440297010471931">Google மூலம் தேடுகிறது</translation> <translation id="4619615317237390068">பிற சாதனங்களின் தாவல்கள்</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">எல்லா தாவல்களையும் மூடு</translation> <translation id="8114753159095730575">கோப்பைப் பதிவிறக்கிக்கொள்ளலாம். திரையின் அடிப்பகுதிக்கு அருகில், விருப்பங்கள் உள்ளன.</translation> <translation id="8160722851663543621">முகவரிப் பட்டியிலிருந்தும், தேடல் பெட்டியிலிருந்தும் தேடல்களையும், சில குக்கீகளையும் இயல்புத் தேடல் இன்ஜினுக்கு அனுப்பும்</translation> -<translation id="8178325540017397816">நீங்கள் தேர்ந்தெடுத்தவை அகற்றப்படும்</translation> <translation id="8205564605687841303">ரத்துசெய்</translation> <translation id="8225985093977202398">தற்காலிகமாகச் சேமிக்கப்பட்ட படங்களும் கோப்புகளும்</translation> <translation id="8261506727792406068">நீக்கு</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index 7767baf4..ce9e5aa 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -421,7 +421,6 @@ <translation id="8080028325999236607">అన్ని ట్యాబ్లను మూసివేయి</translation> <translation id="8114753159095730575">ఫైల్ డౌన్లోడ్ అందుబాటులో ఉంది. ఎంపికలు స్క్రీన్ దిగువ భాగంలో అందుబాటులో ఉంటాయి.</translation> <translation id="8160722851663543621">చిరునామా పట్టీ మరియు శోధన పెట్టెలోని శోధనలను మరియు కొన్ని కుక్కీలను మీ డిఫాల్ట్ శోధన ఇంజిన్కు పంపుతుంది</translation> -<translation id="8178325540017397816">మీరు ఎంచుకున్న అంశాలు తీసివేయబడతాయి</translation> <translation id="8205564605687841303">రద్దు చేయి</translation> <translation id="8225985093977202398">కాష్ చిత్రాలు, ఫైల్లు</translation> <translation id="8261506727792406068">తొలగించు</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb index 23b2cdc..9184d30 100644 --- a/ios/chrome/app/strings/resources/ios_strings_th.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -165,6 +165,7 @@ <translation id="3588820906588687999">เปิดภาพในแท็บใหม่</translation> <translation id="3603009562372709545">คัดลอก URL ของลิงก์</translation> <translation id="3607167657931203000">ป้อนข้อมูลอัตโนมัติ</translation> +<translation id="360930808415985584">ควบคุมการซิงค์ การปรับเปลี่ยนในแบบของคุณ และอื่นๆ</translation> <translation id="3609785682760573515">กำลังซิงค์...</translation> <translation id="3628119975092896051">เรื่องรออ่านของคุณพร้อมใช้งานในแบบออฟไลน์ หากต้องการเพิ่มหน้าลงในเรื่องรออ่าน ให้แตะ<ph name="SHARE_OPENING_ICON" /></translation> <translation id="3638472932233958418">โหลดหน้าเว็บล่วงหน้า</translation> @@ -211,6 +212,7 @@ <translation id="4508750114462689118">ปิดโปรโมชันการลงชื่อเข้าใช้</translation> <translation id="4526249700380860531">ดูและจัดการรหัสผ่านที่บันทึกไว้ที่ <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation> <translation id="4536418791685807335">ลองลงชื่อเข้าใช้อีกครั้ง</translation> +<translation id="4541241553780729349">ข้อมูลที่ซิงค์กับ Google และฟีเจอร์ที่ใช้จะไม่เปลี่ยนแปลง</translation> <translation id="457386861538956877">เพิ่มเติม...</translation> <translation id="461440297010471931">กำลังค้นหาด้วย Google</translation> <translation id="4619615317237390068">แท็บจากอุปกรณ์อื่นๆ</translation> @@ -419,7 +421,6 @@ <translation id="8080028325999236607">ปิดแท็บทั้งหมด</translation> <translation id="8114753159095730575">การดาวน์โหลดไฟล์พร้อมใช้งาน มีตัวเลือกอยู่ทางด้านล่างของหน้าจอ</translation> <translation id="8160722851663543621">ส่งการค้นหาจากแถบที่อยู่และช่องค้นหารวมถึงคุกกี้บางรายการไปยังเครื่องมือค้นหาเริ่มต้น</translation> -<translation id="8178325540017397816">ระบบจะนำรายการที่คุณเลือกออก</translation> <translation id="8205564605687841303">ยกเลิก</translation> <translation id="8225985093977202398">รูปภาพและไฟล์ที่แคชไว้</translation> <translation id="8261506727792406068">ลบ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb index 4fe7c66..40a0296 100644 --- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">Resmi Yeni Sekmede Aç</translation> <translation id="3603009562372709545">Bağlantı URL'sini kopyala</translation> <translation id="3607167657931203000">Verileri Otomatik Doldur</translation> +<translation id="360930808415985584">Senkronizasyon, Kişiselleştirme ve Diğer özellikleri kontrol edin</translation> <translation id="3609785682760573515">Senkronize ediliyor...</translation> <translation id="3628119975092896051">Okuma listeniz çevrimdışı olarak kullanılabilir. Okuma listenize sayfa eklemek için <ph name="SHARE_OPENING_ICON" /> simgesine dokunun.</translation> <translation id="3638472932233958418">Web Sayfalarını Önceden Yükle</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">Oturum açma tanıtımını kapat</translation> <translation id="4526249700380860531">Kaydedilmiş şifreleri <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> adresinden görüntüleyin ve yönetin</translation> <translation id="4536418791685807335">Tekrar oturum açmayı deneyin.</translation> +<translation id="4541241553780729349">Google ile senkronize ettiğiniz veriler ve kullandığınız özellikler değişmez</translation> <translation id="457386861538956877">Diğer...</translation> <translation id="461440297010471931">Google ile arama</translation> <translation id="4619615317237390068">Diğer cihazlardan sekmeler</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">Tüm Sekmeleri Kapat</translation> <translation id="8114753159095730575">Dosya indirme işlevi kullanılabilir. Seçenekler ekranın alt tarafındadır.</translation> <translation id="8160722851663543621">Adres çubuğundan ve arama kutusundan aramaları ve bazı çerezleri varsayılan arama motorunuza gönderir</translation> -<translation id="8178325540017397816">Seçtiğiniz öğeler kaldırılacak</translation> <translation id="8205564605687841303">İptal</translation> <translation id="8225985093977202398">Önbelleğe Alınan Resimler ve Dosyalar</translation> <translation id="8261506727792406068">Sil</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb index 1a63271..9954020 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -423,7 +423,6 @@ <translation id="8080028325999236607">Закрити всі вкладки</translation> <translation id="8114753159095730575">Доступне завантаження файлу. Параметри можна знайти внизу екрана.</translation> <translation id="8160722851663543621">Надсилає пошукові запити з адресного рядка, вікна пошуку та деяких файлів cookie в пошукову систему за умовчанням</translation> -<translation id="8178325540017397816">Елемент, який ви вибрали, буде вилучено</translation> <translation id="8205564605687841303">Скасувати</translation> <translation id="8225985093977202398">Кешовані зображення й файли</translation> <translation id="8261506727792406068">Видалити</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index 7d5e12d..edfca28 100644 --- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">Mở ảnh trong tab mới</translation> <translation id="3603009562372709545">Sao chép URL liên kết</translation> <translation id="3607167657931203000">Dữ liệu tự động điền</translation> +<translation id="360930808415985584">Kiểm soát tính năng đồng bộ hóa, cá nhân hóa và các nội dung khác</translation> <translation id="3609785682760573515">Đang đồng bộ hóa...</translation> <translation id="3628119975092896051">Danh sách đọc của bạn khả dụng khi ngoại tuyến. Để thêm một trang vào danh sách đọc, nhấn <ph name="SHARE_OPENING_ICON" />.</translation> <translation id="3638472932233958418">Tải trước trang web</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">Đóng quảng cáo đăng nhập</translation> <translation id="4526249700380860531">Xem và quản lý mật khẩu đã lưu tại <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation> <translation id="4536418791685807335">Thử đăng nhập lại.</translation> +<translation id="4541241553780729349">Dữ liệu đồng bộ hóa với Google và các tính năng bạn sử dụng sẽ không thay đổi</translation> <translation id="457386861538956877">Thêm...</translation> <translation id="461440297010471931">Tìm kiếm bằng Google</translation> <translation id="4619615317237390068">Tab từ các thiết bị khác</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">Đóng tất cả các tab</translation> <translation id="8114753159095730575">Hiện đã có tệp tải xuống. Bạn có thể sử dụng các tùy chọn ở gần cuối màn hình.</translation> <translation id="8160722851663543621">Gửi nội dung tìm kiếm từ thanh địa chỉ và hộp tìm kiếm cũng như một số cookie đến công cụ tìm kiếm mặc định của bạn</translation> -<translation id="8178325540017397816">Các mục bạn đã chọn sẽ bị xóa</translation> <translation id="8205564605687841303">Hủy</translation> <translation id="8225985093977202398">Tệp và hình ảnh được lưu vào bộ nhớ đệm</translation> <translation id="8261506727792406068">Xóa</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb index cfeac0e..cb0843d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">在新标签页中打开图片</translation> <translation id="3603009562372709545">复制链接网址</translation> <translation id="3607167657931203000">自动填充数据</translation> +<translation id="360930808415985584">控制同步、个性化功能和其他设置</translation> <translation id="3609785682760573515">正在同步…</translation> <translation id="3628119975092896051">您的阅读清单可供离线访问。要将某个网页添加到该清单中,请依次点按<ph name="SHARE_OPENING_ICON" />。</translation> <translation id="3638472932233958418">预先加载网页</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">关闭登录推广元素</translation> <translation id="4526249700380860531">通过 <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> 查看和管理已保存的密码</translation> <translation id="4536418791685807335">请尝试重新登录。</translation> +<translation id="4541241553780729349">您同步到 Google 的数据和您使用的功能不会有所改变</translation> <translation id="457386861538956877">更多...</translation> <translation id="461440297010471931">目前所用的搜索引擎是 Google</translation> <translation id="4619615317237390068">从其他设备打开的标签页</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">关闭所有标签页</translation> <translation id="8114753159095730575">已可下载文件。选项位于屏幕底部附近。</translation> <translation id="8160722851663543621">将地址栏和搜索框中的搜索字词以及一些 Cookie 发送给您的默认搜索引擎</translation> -<translation id="8178325540017397816">系统将会移除您所选的各项内容</translation> <translation id="8205564605687841303">取消</translation> <translation id="8225985093977202398">缓存的图片和文件</translation> <translation id="8261506727792406068">删除</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb index 88fbeb21..4b5fa04 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -167,6 +167,7 @@ <translation id="3588820906588687999">在新分頁中開啟圖片</translation> <translation id="3603009562372709545">複製連結網址</translation> <translation id="3607167657931203000">自動填入資料</translation> +<translation id="360930808415985584">管理同步處理、個人化功能等更多設定</translation> <translation id="3609785682760573515">同步處理中...</translation> <translation id="3628119975092896051">閱讀清單可供離線存取。如要將網頁加入閱讀清單,請輕觸 <ph name="SHARE_OPENING_ICON" />。</translation> <translation id="3638472932233958418">預先載入網頁</translation> @@ -213,6 +214,7 @@ <translation id="4508750114462689118">關閉登入提示</translation> <translation id="4526249700380860531">您可以前往 <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> 查看及管理已儲存的密碼</translation> <translation id="4536418791685807335">請嘗試重新登入。</translation> +<translation id="4541241553780729349">同步處理至 Google 的資料和你所使用的功能不會有所改變</translation> <translation id="457386861538956877">更多…</translation> <translation id="461440297010471931">目前的搜尋引擎是 Google</translation> <translation id="4619615317237390068">在其他裝置上開啟的分頁</translation> @@ -421,7 +423,6 @@ <translation id="8080028325999236607">關閉所有分頁</translation> <translation id="8114753159095730575">可下載檔案,相關選項位於畫面底部。</translation> <translation id="8160722851663543621">將網址列和搜尋框中的搜尋字詞以及部分 Cookie 傳送給你的預設搜尋引擎</translation> -<translation id="8178325540017397816">系統將移除所選項目</translation> <translation id="8205564605687841303">取消</translation> <translation id="8225985093977202398">快取圖片和檔案</translation> <translation id="8261506727792406068">刪除</translation>
diff --git a/ios/chrome/browser/about_flags.mm b/ios/chrome/browser/about_flags.mm index cafbec8b..13dd0be6 100644 --- a/ios/chrome/browser/about_flags.mm +++ b/ios/chrome/browser/about_flags.mm
@@ -206,9 +206,6 @@ {"slim-navigation-manager", flag_descriptions::kSlimNavigationManagerName, flag_descriptions::kSlimNavigationManagerDescription, flags_ui::kOsIos, FEATURE_VALUE_TYPE(web::features::kSlimNavigationManager)}, - {"new-file-download", flag_descriptions::kNewFileDownloadName, - flag_descriptions::kNewFileDownloadDescription, flags_ui::kOsIos, - FEATURE_VALUE_TYPE(web::features::kNewFileDownload)}, {"web-error-pages", flag_descriptions::kWebErrorPagesName, flag_descriptions::kWebErrorPagesDescription, flags_ui::kOsIos, FEATURE_VALUE_TYPE(web::features::kWebErrorPages)},
diff --git a/ios/chrome/browser/application_context_impl.cc b/ios/chrome/browser/application_context_impl.cc index 049c7c67..b7db100 100644 --- a/ios/chrome/browser/application_context_impl.cc +++ b/ios/chrome/browser/application_context_impl.cc
@@ -57,6 +57,30 @@ #include "services/metrics/public/cpp/ukm_recorder.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" +namespace { + +// Requests a network::mojom::ProxyResolvingSocketFactory on the UI thread. +// Note that this cannot be called on a thread that is not the UI thread. +void RequestProxyResolvingSocketFactoryOnUIThread( + ApplicationContextImpl* app_context, + network::mojom::ProxyResolvingSocketFactoryRequest request) { + network::mojom::NetworkContext* network_context = + app_context->GetSystemNetworkContext(); + network_context->CreateProxyResolvingSocketFactory(std::move(request)); +} + +// Wrapper on top of the method above. This does a PostTask to the UI thread. +void RequestProxyResolvingSocketFactory( + ApplicationContextImpl* app_context, + network::mojom::ProxyResolvingSocketFactoryRequest request) { + web::WebThread::GetTaskRunnerForThread(web::WebThread::UI) + ->PostTask(FROM_HERE, + base::BindOnce(&RequestProxyResolvingSocketFactoryOnUIThread, + app_context, std::move(request))); +} + +} // namespace + ApplicationContextImpl::ApplicationContextImpl( base::SequencedTaskRunner* local_state_task_runner, const base::CommandLine& command_line, @@ -372,7 +396,11 @@ gcm_driver_ = gcm::CreateGCMDriverDesktop( base::WrapUnique(new gcm::GCMClientFactory), GetLocalState(), store_path, - GetSystemURLRequestContext(), GetSharedURLLoaderFactory(), ::GetChannel(), + // Because ApplicationContextImpl is destroyed after all WebThreads have + // been shut down, base::Unretained() is safe here. + base::BindRepeating(&RequestProxyResolvingSocketFactory, + base::Unretained(this)), + GetSharedURLLoaderFactory(), ::GetChannel(), IOSChromeGCMProfileServiceFactory::GetProductCategoryForSubtypes(), web::WebThread::GetTaskRunnerForThread(web::WebThread::UI), web::WebThread::GetTaskRunnerForThread(web::WebThread::IO),
diff --git a/ios/chrome/browser/download/browser_download_service.mm b/ios/chrome/browser/download/browser_download_service.mm index 1c25c1c3..7e11a2d 100644 --- a/ios/chrome/browser/download/browser_download_service.mm +++ b/ios/chrome/browser/download/browser_download_service.mm
@@ -4,14 +4,12 @@ #include "ios/chrome/browser/download/browser_download_service.h" -#include "base/feature_list.h" #include "base/metrics/histogram_macros.h" #import "ios/chrome/browser/download/download_manager_tab_helper.h" #include "ios/chrome/browser/download/pass_kit_mime_type.h" #import "ios/chrome/browser/download/pass_kit_tab_helper.h" #import "ios/web/public/download/download_controller.h" #import "ios/web/public/download/download_task.h" -#include "ios/web/public/features.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -57,12 +55,10 @@ tab_helper->Download(std::move(task)); } } else { - if (base::FeatureList::IsEnabled(web::features::kNewFileDownload)) { - DownloadManagerTabHelper* tab_helper = - DownloadManagerTabHelper::FromWebState(web_state); - if (tab_helper) { - tab_helper->Download(std::move(task)); - } + DownloadManagerTabHelper* tab_helper = + DownloadManagerTabHelper::FromWebState(web_state); + if (tab_helper) { + tab_helper->Download(std::move(task)); } } }
diff --git a/ios/chrome/browser/download/browser_download_service_unittest.mm b/ios/chrome/browser/download/browser_download_service_unittest.mm index 43eeed91..64ea4a0 100644 --- a/ios/chrome/browser/download/browser_download_service_unittest.mm +++ b/ios/chrome/browser/download/browser_download_service_unittest.mm
@@ -8,14 +8,12 @@ #include "base/macros.h" #include "base/test/metrics/histogram_tester.h" -#include "base/test/scoped_feature_list.h" #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" #import "ios/chrome/browser/download/download_manager_tab_helper.h" #include "ios/chrome/browser/download/pass_kit_mime_type.h" #import "ios/chrome/browser/download/pass_kit_tab_helper.h" #import "ios/web/public/download/download_controller.h" #import "ios/web/public/download/download_task.h" -#include "ios/web/public/features.h" #import "ios/web/public/test/fakes/fake_download_task.h" #import "ios/web/public/test/fakes/test_web_state.h" #include "ios/web/public/test/test_web_thread_bundle.h" @@ -63,8 +61,6 @@ protected: BrowserDownloadServiceTest() : browser_state_(browser_state_builder_.Build()) { - feature_list_.InitAndEnableFeature(web::features::kNewFileDownload); - StubTabHelper<PassKitTabHelper>::CreateForWebState(&web_state_); StubTabHelper<DownloadManagerTabHelper>::CreateForWebState(&web_state_); @@ -104,7 +100,6 @@ std::unique_ptr<TestChromeBrowserState> browser_state_; std::unique_ptr<BrowserDownloadService> service_; web::TestWebState web_state_; - base::test::ScopedFeatureList feature_list_; base::HistogramTester histogram_tester_; };
diff --git a/ios/chrome/browser/gcm/ios_chrome_gcm_profile_service_factory.cc b/ios/chrome/browser/gcm/ios_chrome_gcm_profile_service_factory.cc index cf463c1..f9e8152 100644 --- a/ios/chrome/browser/gcm/ios_chrome_gcm_profile_service_factory.cc +++ b/ios/chrome/browser/gcm/ios_chrome_gcm_profile_service_factory.cc
@@ -18,6 +18,35 @@ #include "ios/chrome/common/channel_info.h" #include "ios/web/public/web_thread.h" #include "services/network/public/cpp/shared_url_loader_factory.h" +#include "services/network/public/mojom/proxy_resolving_socket.mojom.h" + +namespace { + +// Requests a ProxyResolvingSocketFactoryPtr on the UI thread. Note that a +// WeakPtr of GCMProfileService is needed to detect when the KeyedService shuts +// down, and avoid calling into |profile| which might have also been destroyed. +void RequestProxyResolvingSocketFactoryOnUIThread( + web::BrowserState* context, + base::WeakPtr<gcm::GCMProfileService> service, + network::mojom::ProxyResolvingSocketFactoryRequest request) { + if (!service) + return; + context->GetProxyResolvingSocketFactory(std::move(request)); +} + +// A thread-safe wrapper to request a ProxyResolvingSocketFactoryPtr. +void RequestProxyResolvingSocketFactory( + web::BrowserState* context, + base::WeakPtr<gcm::GCMProfileService> service, + network::mojom::ProxyResolvingSocketFactoryRequest request) { + web::WebThread::GetTaskRunnerForThread(web::WebThread::UI) + ->PostTask( + FROM_HERE, + base::BindOnce(&RequestProxyResolvingSocketFactoryOnUIThread, context, + std::move(service), std::move(request))); +} + +} // namespace // static gcm::GCMProfileService* IOSChromeGCMProfileServiceFactory::GetForBrowserState( @@ -64,6 +93,7 @@ return std::make_unique<gcm::GCMProfileService>( browser_state->GetPrefs(), browser_state->GetStatePath(), browser_state->GetRequestContext(), + base::BindRepeating(&RequestProxyResolvingSocketFactory, context), browser_state->GetSharedURLLoaderFactory(), ::GetChannel(), GetProductCategoryForSubtypes(), IdentityManagerFactory::GetForBrowserState(browser_state),
diff --git a/ios/chrome/browser/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/ios_chrome_flag_descriptions.cc index 61a4503a..6f3b784 100644 --- a/ios/chrome/browser/ios_chrome_flag_descriptions.cc +++ b/ios/chrome/browser/ios_chrome_flag_descriptions.cc
@@ -220,11 +220,6 @@ "When enabled, uses the experimental slim navigation manager that provides " "better compatibility with HTML navigation spec."; -const char kNewFileDownloadName[] = "Use new Download Manager UI and backend"; -const char kNewFileDownloadDescription[] = - "When enabled, uses new Download Manager UI and ios/web Download API as " - "backend."; - const char kWebErrorPagesName[] = "Present load errors in web contents area, instead of using " "CRWNativeContent";
diff --git a/ios/chrome/browser/ios_chrome_flag_descriptions.h b/ios/chrome/browser/ios_chrome_flag_descriptions.h index 9b5ca8b5..f6d5cd1 100644 --- a/ios/chrome/browser/ios_chrome_flag_descriptions.h +++ b/ios/chrome/browser/ios_chrome_flag_descriptions.h
@@ -185,11 +185,6 @@ extern const char kSlimNavigationManagerName[]; extern const char kSlimNavigationManagerDescription[]; -// Title and description for the flag to enable new Download Manager UI and -// backend. -extern const char kNewFileDownloadName[]; -extern const char kNewFileDownloadDescription[]; - // Title and description for the flag to enable web based error pages. extern const char kWebErrorPagesName[]; extern const char kWebErrorPagesDescription[];
diff --git a/ios/chrome/browser/metrics/BUILD.gn b/ios/chrome/browser/metrics/BUILD.gn index b51cf75..22855af 100644 --- a/ios/chrome/browser/metrics/BUILD.gn +++ b/ios/chrome/browser/metrics/BUILD.gn
@@ -194,25 +194,6 @@ libs = [ "XCTest.framework" ] } -# TODO(crbug.com/694662): These tests depend on loading errors, which are -# behaving differently when the network is not available. When the underlying -# issue is resolved, these tests can move back to |eg_tests|. -source_set("external_url_eg_tests") { - configs += [ "//build/config/compiler:enable_arc" ] - testonly = true - sources = [ - "external_url_tab_usage_recorder_egtest.mm", - ] - deps = [ - ":metrics_internal", - ":test_support", - "//ios/chrome/test/app:test_support", - "//ios/chrome/test/earl_grey:test_support", - "//ios/web/public/test/http_server", - ] - libs = [ "XCTest.framework" ] -} - source_set("test_support") { testonly = true sources = [
diff --git a/ios/chrome/browser/metrics/external_url_tab_usage_recorder_egtest.mm b/ios/chrome/browser/metrics/external_url_tab_usage_recorder_egtest.mm deleted file mode 100644 index a24d7f0..0000000 --- a/ios/chrome/browser/metrics/external_url_tab_usage_recorder_egtest.mm +++ /dev/null
@@ -1,62 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import <EarlGrey/EarlGrey.h> - -#import "ios/chrome/browser/metrics/tab_usage_recorder.h" -#import "ios/chrome/browser/metrics/tab_usage_recorder_test_util.h" -#import "ios/chrome/test/app/histogram_test_util.h" -#import "ios/chrome/test/app/tab_test_util.h" -#import "ios/chrome/test/earl_grey/chrome_earl_grey.h" -#import "ios/chrome/test/earl_grey/chrome_test_case.h" -#include "ios/web/public/test/http_server/http_server_util.h" - -#if !defined(__has_feature) || !__has_feature(objc_arc) -#error "This file requires ARC support." -#endif - -namespace { - -const char kTestUrl[] = - "http://ios/testing/data/http_server_files/memory_usage.html"; - -} // namespace - -// External URL test case class for TabUsageRecorder. -@interface ExternalURLTabUsageRecorderTestCase : ChromeTestCase -@end - -@implementation ExternalURLTabUsageRecorderTestCase - -// TODO(crbug.com/852341): This test is failing on devices and simulators. -// Verify correct recording of metrics when the reloading of an evicted tab -// fails. -- (void)DISABLED_testEvictedTabReloadFailure { - web::test::SetUpFileBasedHttpServer(); - chrome_test_util::HistogramTester histogramTester; - FailureBlock failureBlock = ^(NSString* error) { - GREYFail(error); - }; - - // This URL is purposely invalid so it triggers a navigation error. - GURL invalidURL(kTestUrl); - - chrome_test_util::OpenNewTab(); - [ChromeEarlGrey loadURL:invalidURL]; - [ChromeEarlGrey waitForErrorPage]; - tab_usage_recorder_test_util::OpenNewIncognitoTabUsingUIAndEvictMainTabs(); - - tab_usage_recorder_test_util::SwitchToNormalMode(); - [ChromeEarlGrey waitForErrorPage]; - - histogramTester.ExpectUniqueSample(kEvictedTabReloadSuccessRate, - TabUsageRecorder::LOAD_FAILURE, 1, - failureBlock); - histogramTester.ExpectUniqueSample(kDidUserWaitForEvictedTabReload, - TabUsageRecorder::USER_WAITED, 1, - failureBlock); - histogramTester.ExpectTotalCount(kEvictedTabReloadTime, 0, failureBlock); -} - -@end
diff --git a/ios/chrome/browser/prerender/preload_controller.mm b/ios/chrome/browser/prerender/preload_controller.mm index 44a4427..6e1c3f5 100644 --- a/ios/chrome/browser/prerender/preload_controller.mm +++ b/ios/chrome/browser/prerender/preload_controller.mm
@@ -350,15 +350,6 @@ return nil; } -// Override the CRWNativeContentProvider methods to cancel any prerenders that -// require native content. -- (id<CRWNativeContent>)controllerForUnhandledContentAtURL:(const GURL&)URL - webState: - (web::WebState*)webState { - [self schedulePrerenderCancel]; - return nil; -} - - (CGFloat)nativeContentHeaderHeightForWebState:(web::WebState*)webState { return [delegate_ nativeContentHeaderHeightForPreloadController:self webState:webState];
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm index 8edb788ae..72a6efa 100644 --- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm +++ b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm
@@ -429,11 +429,14 @@ DCHECK(_isSigninPromoViewVisible); DCHECK(![self isInvalidClosedOrNeverVisible]); [self sendImpressionsTillSigninButtonsHistogram]; - signin_metrics::RecordSigninUserActionForAccessPoint( - _accessPoint, signin_metrics::PromoAction::PROMO_ACTION_NEW_ACCOUNT); - [self showSigninWithIdentity:nil - promoAction:signin_metrics::PromoAction:: - PROMO_ACTION_NEW_ACCOUNT]; + // On iOS, the promo does not have a button to add and account when there is + // already an account on the device. That flow goes through the NOT_DEFAULT + // promo instead. Always use the NO_EXISTING_ACCOUNT variant. + signin_metrics::PromoAction promo_action = + signin_metrics::PromoAction::PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT; + signin_metrics::RecordSigninUserActionForAccessPoint(_accessPoint, + promo_action); + [self showSigninWithIdentity:nil promoAction:promo_action]; } - (void)signinPromoViewDidTapSigninWithDefaultAccount: @@ -442,11 +445,11 @@ DCHECK(_isSigninPromoViewVisible); DCHECK(![self isInvalidClosedOrNeverVisible]); [self sendImpressionsTillSigninButtonsHistogram]; - signin_metrics::RecordSigninUserActionForAccessPoint( - _accessPoint, signin_metrics::PromoAction::PROMO_ACTION_WITH_DEFAULT); - [self showSigninWithIdentity:_defaultIdentity - promoAction:signin_metrics::PromoAction:: - PROMO_ACTION_WITH_DEFAULT]; + signin_metrics::PromoAction promo_action = + signin_metrics::PromoAction::PROMO_ACTION_WITH_DEFAULT; + signin_metrics::RecordSigninUserActionForAccessPoint(_accessPoint, + promo_action); + [self showSigninWithIdentity:_defaultIdentity promoAction:promo_action]; } - (void)signinPromoViewDidTapSigninWithOtherAccount: @@ -455,11 +458,11 @@ DCHECK(_isSigninPromoViewVisible); DCHECK(![self isInvalidClosedOrNeverVisible]); [self sendImpressionsTillSigninButtonsHistogram]; - signin_metrics::RecordSigninUserActionForAccessPoint( - _accessPoint, signin_metrics::PromoAction::PROMO_ACTION_NOT_DEFAULT); - [self showSigninWithIdentity:nil - promoAction:signin_metrics::PromoAction:: - PROMO_ACTION_NOT_DEFAULT]; + signin_metrics::PromoAction promo_action = + signin_metrics::PromoAction::PROMO_ACTION_NOT_DEFAULT; + signin_metrics::RecordSigninUserActionForAccessPoint(_accessPoint, + promo_action); + [self showSigninWithIdentity:nil promoAction:promo_action]; } - (void)signinPromoViewCloseButtonWasTapped:(SigninPromoView*)view {
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm index a3ff0a4..dce275d6 100644 --- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm +++ b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
@@ -248,11 +248,13 @@ completion = value; return YES; }]; - OCMExpect([consumer_ signinPromoViewMediator:mediator_ - shouldOpenSigninWithIdentity:nil - promoAction:signin_metrics::PromoAction:: - PROMO_ACTION_NEW_ACCOUNT - completion:completion_arg]); + OCMExpect([consumer_ + signinPromoViewMediator:mediator_ + shouldOpenSigninWithIdentity:nil + promoAction: + signin_metrics::PromoAction:: + PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT + completion:completion_arg]); [mediator_ signinPromoViewDidTapSigninWithNewAccount:signin_promo_view_]; EXPECT_TRUE(mediator_.isSigninInProgress); EXPECT_EQ(ios::SigninPromoViewState::UsedAtLeastOnce,
diff --git a/ios/chrome/browser/ui/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view_controller.mm index efa5474..a26b77c 100644 --- a/ios/chrome/browser/ui/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view_controller.mm
@@ -146,7 +146,6 @@ #import "ios/chrome/browser/ui/dialogs/dialog_presenter.h" #import "ios/chrome/browser/ui/dialogs/java_script_dialog_presenter_impl.h" #import "ios/chrome/browser/ui/download/download_manager_coordinator.h" -#import "ios/chrome/browser/ui/download/legacy_download_manager_controller.h" #import "ios/chrome/browser/ui/download/pass_kit_coordinator.h" #import "ios/chrome/browser/ui/elements/activity_overlay_coordinator.h" #import "ios/chrome/browser/ui/external_file_controller.h" @@ -2314,7 +2313,7 @@ } // Only add leading and trailing constraints once as they are never updated. - // This uses the existance of |primaryToolbarOffsetConstraint| as a proxy for + // This uses the existence of |primaryToolbarOffsetConstraint| as a proxy for // whether we've already added the leading and trailing constraints. if (!self.primaryToolbarOffsetConstraint) { [NSLayoutConstraint activateConstraints:@[ @@ -4005,17 +4004,6 @@ return nativeController; } -- (id<CRWNativeContent>)controllerForUnhandledContentAtURL:(const GURL&)URL - webState: - (web::WebState*)webState { - LegacyDownloadManagerController* downloadController = - [[LegacyDownloadManagerController alloc] initWithWebState:webState - downloadURL:URL - baseViewController:self]; - [downloadController start]; - return downloadController; -} - - (CGFloat)nativeContentHeaderHeightForWebState:(web::WebState*)webState { Tab* tab = LegacyTabHelper::GetTabForWebState(webState); if (IsUIRefreshPhase1Enabled() && tab &&
diff --git a/ios/chrome/browser/ui/download/BUILD.gn b/ios/chrome/browser/ui/download/BUILD.gn index e8a01337..62507e26 100644 --- a/ios/chrome/browser/ui/download/BUILD.gn +++ b/ios/chrome/browser/ui/download/BUILD.gn
@@ -17,8 +17,6 @@ "download_manager_state_view.mm", "download_manager_view_controller.h", "download_manager_view_controller.mm", - "legacy_download_manager_controller.h", - "legacy_download_manager_controller.mm", "pass_kit_coordinator.h", "pass_kit_coordinator.mm", "radial_progress_view.h", @@ -28,12 +26,7 @@ "resources:background_compact", "resources:background_regular", "resources:done_badge", - "resources:download_manager_controller_xib", "resources:error_badge", - "resources:error_icon", - "resources:file_icon_body", - "resources:file_icon_fold", - "resources:file_icon_fold_complete", "//base", "//components/infobars/core", "//components/strings", @@ -70,7 +63,6 @@ "download_manager_coordinator_unittest.mm", "download_manager_mediator_unittest.mm", "download_manager_view_controller_unittest.mm", - "legacy_download_manager_controller_unittest.mm", "pass_kit_coordinator_unittest.mm", ] deps = [
diff --git a/ios/chrome/browser/ui/download/download_manager_egtest.mm b/ios/chrome/browser/ui/download/download_manager_egtest.mm index 1f02bbe..93d124a 100644 --- a/ios/chrome/browser/ui/download/download_manager_egtest.mm +++ b/ios/chrome/browser/ui/download/download_manager_egtest.mm
@@ -5,7 +5,6 @@ #import <EarlGrey/EarlGrey.h> #import "base/test/ios/wait_util.h" -#include "base/test/scoped_feature_list.h" #include "ios/chrome/browser/chrome_url_constants.h" #include "ios/chrome/grit/ios_strings.h" #import "ios/chrome/test/app/tab_test_util.h" @@ -15,7 +14,6 @@ #import "ios/chrome/test/earl_grey/chrome_test_case.h" #import "ios/chrome/test/scoped_eg_synchronization_disabler.h" #include "ios/testing/embedded_test_server_handlers.h" -#include "ios/web/public/features.h" #include "net/test/embedded_test_server/http_request.h" #include "net/test/embedded_test_server/http_response.h" #include "net/test/embedded_test_server/request_handler_util.h" @@ -64,9 +62,7 @@ } // namespace // Tests critical user journeys for Download Manager. -@interface DownloadManagerTestCase : ChromeTestCase { - base::test::ScopedFeatureList _featureList; -} +@interface DownloadManagerTestCase : ChromeTestCase @end @implementation DownloadManagerTestCase @@ -74,8 +70,6 @@ - (void)setUp { [super setUp]; - _featureList.InitAndEnableFeature(web::features::kNewFileDownload); - self.testServer->RegisterRequestHandler( base::BindRepeating(&net::test_server::HandlePrefixedRequest, "/", base::BindRepeating(&GetResponse)));
diff --git a/ios/chrome/browser/ui/download/legacy_download_manager_controller.h b/ios/chrome/browser/ui/download/legacy_download_manager_controller.h deleted file mode 100644 index 6f46a2de..0000000 --- a/ios/chrome/browser/ui/download/legacy_download_manager_controller.h +++ /dev/null
@@ -1,38 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_DOWNLOAD_LEGACY_DOWNLOAD_MANAGER_CONTROLLER_H_ -#define IOS_CHROME_BROWSER_UI_DOWNLOAD_LEGACY_DOWNLOAD_MANAGER_CONTROLLER_H_ - -#import <UIKit/UIKit.h> - -#import "ios/chrome/browser/ui/native_content_controller.h" - -namespace web { -class WebState; -} // namespace web - -// This controller shows the native download manager. It shows the user basic -// information about the file (namely its type, size, and name), and gives them -// the option to download it and open it in another app. This controller is -// displayed when a URL is loaded that contains a file type that UIWebView -// cannot display itself. -@interface LegacyDownloadManagerController - : NativeContentController<UIDocumentInteractionControllerDelegate> - -// Initializes a controller for content from |url| using |webState| to provide -// the context to open a controller that allows the user to install Google Drive -// if they don't have it installed. Present UI from |baseViewController|. -- (instancetype)initWithWebState:(web::WebState*)webState - downloadURL:(const GURL&)url - baseViewController:(UIViewController*)baseViewController; - -// Starts loading the data for the file at the url passed into the -// initializer. This should only be called once, immediately after -// initialization. -- (void)start; - -@end - -#endif // IOS_CHROME_BROWSER_UI_DOWNLOAD_LEGACY_DOWNLOAD_MANAGER_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/download/legacy_download_manager_controller.mm b/ios/chrome/browser/ui/download/legacy_download_manager_controller.mm deleted file mode 100644 index 12c5f49..0000000 --- a/ios/chrome/browser/ui/download/legacy_download_manager_controller.mm +++ /dev/null
@@ -1,1591 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import "ios/chrome/browser/ui/download/legacy_download_manager_controller.h" - -#include <stdint.h> -#include <memory> - -#include "base/bind.h" -#include "base/files/file_path.h" -#include "base/files/file_util.h" -#include "base/location.h" -#include "base/memory/ref_counted.h" -#include "base/metrics/histogram_functions.h" -#include "base/metrics/histogram_macros.h" -#include "base/metrics/user_metrics.h" -#include "base/metrics/user_metrics_action.h" -#include "base/strings/sys_string_conversions.h" -#include "base/task/post_task.h" -#include "components/strings/grit/components_strings.h" -#include "ios/chrome/browser/download/download_directory_util.h" -#import "ios/chrome/browser/installation_notifier.h" -#import "ios/chrome/browser/store_kit/store_kit_tab_helper.h" -#import "ios/chrome/browser/ui/alert_coordinator/alert_coordinator.h" -#import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h" -#import "ios/chrome/browser/ui/network_activity_indicator_manager.h" -#include "ios/chrome/browser/ui/ui_util.h" -#import "ios/chrome/browser/ui/uikit_ui_util.h" -#include "ios/chrome/grit/ios_strings.h" -#import "ios/third_party/material_components_ios/src/components/ActivityIndicator/src/MaterialActivityIndicator.h" -#import "ios/third_party/material_components_ios/src/components/Buttons/src/MaterialButtons.h" -#import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h" -#include "ios/web/public/browser_state.h" -#include "ios/web/public/web_state/web_state.h" -#include "ios/web/public/web_thread.h" -#include "net/base/filename_util.h" -#include "net/http/http_response_headers.h" -#include "net/http/http_util.h" -#include "net/url_request/url_fetcher.h" -#include "net/url_request/url_fetcher_delegate.h" -#include "net/url_request/url_request_context_getter.h" -#include "net/url_request/url_request_status.h" -#include "ui/base/l10n/l10n_util_mac.h" -#import "ui/gfx/ios/uikit_util.h" - -#if !defined(__has_feature) || !__has_feature(objc_arc) -#error "This file requires ARC support." -#endif - -using base::UserMetricsAction; -using net::HttpResponseHeaders; -using net::URLFetcher; -using net::URLFetcherDelegate; -using net::URLRequestContextGetter; -using net::URLRequestStatus; - -@interface LegacyDownloadManagerController () - -// Creates the portrait and landscape mode constraints that are switched every -// time the interface is rotated. -- (void)initConstraints; - -// Runs every time the interface switches between portrait and landscape mode, -// and applies the appropriate UI constraints for |orientation|. -- (void)updateConstraints:(UIInterfaceOrientation)orientation; - -// Modifies (only) the constraints that anchor the action bar in portrait -// mode (there are different constraints for when the Google Drive -// button is showing versus not showing). This should only be called when -// the interface orientation is portrait. -- (void)updatePortraitActionBarConstraints; - -// Removes all constraints that position the action bar in portrait mode. -- (void)removePortraitActionBarConstraints; - -// Adds in the correct constraints to position the action bar in portrait mode, -// based on whether the Google Drive button is showing or not. This should only -// be called when the interface orientation is portrait. -- (void)addPortraitActionBarConstraints; - -// Updates the file type label's vertical constraint constant to position the -// file type label depending on the device orientation and whether or not the -// error icon is displayed. -- (void)updateFileTypeLabelConstraint; - -// Called every time the device orientation is about to change. -- (void)interfaceOrientationWillChangeNotification: - (NSNotification*)notification; - -// Called every time the device orientation has changed. -- (void)deviceOrientationDidChangeNotification:(NSNotification*)notification; - -// If |down| is YES, animates the file type label down. Otherwise animates -// the file type label up. Runs |completion| at the end of the animation. -- (void)animateFileTypeLabelDown:(BOOL)down - withCompletion:(void (^)(BOOL))completion; - -// Initializes the URL fetcher to make a HEAD request to get information about -// the file to download and starts the network activity indicator. -- (void)startHeadFetch; - -// Called when the HEAD request for the downloaded file returns and there is -// information about the file to display (size, type, etc.). -- (void)onHeadFetchComplete; - -// Creates the activity indicator to animate while download a file with an -// unknown file size. -- (void)initializeActivityIndicator; - -// Displays a dialog informing the user that no application on the device can -// open the file. The dialog contains a button for downloading Google Drive. -- (void)displayUnableToOpenFileDialog; - -// Displays the error UI to the user, notifying them that their download -// failed. This method only ensures that the file type label is in the right -// place, then calls |finishDisplayingError| to do all the other work. -- (void)displayError; - -// Updates the views to display the error UI. -- (void)finishDisplayingError; - -// Handles clicks on the download button - also the only way to get out of the -// error flow. -- (IBAction)downloadButtonTapped:(id)sender; - -// Undoes all the changes to the UI caused by calling |displayError|, and -// then calls |finishDownloadButtonTapped|. -- (void)hideError; - -// In practice this will almost always call |beginStartingContentDownload|, but -// it will call |startHeadFetch| if the head fetch never completed successfully -// and led to the error flow. -- (void)finishDownloadButtonTapped; - -// Begins the work start a download, including creating the downloads directory -- (void)beginStartingContentDownload; - -// Called after an attempt to create the downloads directory on another -// thread has completed. |directoryCreated| is true if the creation was -// successful, or false otherwise. -- (void)finishStartingContentDownload:(bool)directoryCreated; - -// Called when another chunk of the file has successfully been downloaded. -// |bytesDownloaded| gives the number of total bytes downloaded so far. -- (void)onContentFetchProgress:(long long)bytesDownloaded; - -// Changes the height of the progress bar to be |self.fractionDownloaded| the -// height of the document icon, and adjusts its y-coordinate so its bottom -// always aligns with the bottom of the document icon. If |withAnimation| is -// YES, it will animate the change (as long as the change is > 1 point). If -// |withCompletionAnimation| is YES, the file download complete animation will -// run once the progress bar has finished being set. -- (void)setProgressBarHeightWithAnimation:(BOOL)animated - withCompletionAnimation:(BOOL)completionAnimation; - -// Sets title from |messageId| on |button| label for both Normal and Highlighted -// states. Material design uses all caps for button labels. -- (void)setTitle:(int)messageId forButton:(UIButton*)button; - -// Makes the file icon "pop" and fades the image in the fold icon to the -// completed fold icon. This will also call -showGoogleDriveButton if the user -// doesn't have Google Drive installed on their device. -- (void)runDownloadCompleteAnimation; - -// Handles clicks on the cancel button. -- (IBAction)cancelButtonTapped:(id)sender; - -// Sets the time left label to the given text. If |animated| is YES, it will -// animate the text change. -- (void)setTimeLeft:(NSString*)text withAnimation:(BOOL)animated; - -// Called when the request for downloading the file has completed (successfully -// or not). -- (void)onContentFetchComplete; - -// Animates the Google Drive button onto the screen after |delay| time has -// passed. -- (void)showGoogleDriveButton; - -// Animates the Google Drive button off the screen. -- (void)hideGoogleDriveButton; - -// Handles clicks on the open in button. -- (IBAction)openInButtonTapped:(id)sender; - -// Opens a view controller that allows the user to install Google Drive. -- (void)openGoogleDriveInAppStore; - -// Calls -openGoogleDriveInAppStore to allow the user to install Google Drive. -- (IBAction)googleDriveButtonTapped:(id)sender; - -// Cleans up this LegacyDownloadManagerController, and deletes its file from the -// downloads directory if it has been created there. -- (void)dealloc; - -// Returns an NSString* unique to |self|, to use with the -// NetworkActivityIndicatorManager. -- (NSString*)getNetworkActivityKey; - -@end - -namespace { - -NSString* kGoogleDriveAppStoreId = @"507874739"; -NSString* kGoogleDriveURL = @"googledrive://"; -NSString* kGoogleDriveBundleId = @"com.google.Drive"; - -// Key of the UMA Download.IOSDownloadFileResult histogram. -const char* const kUMADownloadFileResult = "Download.IOSDownloadFileResult"; -// Values of the UMA Download.IOSDownloadFileResult histogram. -enum DownloadFileResult { - DOWNLOAD_COMPLETED, - DOWNLOAD_CANCELED, - DOWNLOAD_FAILURE, - DOWNLOAD_OTHER, - DOWNLOAD_FILE_RESULT_COUNT -}; - -// Key of the UMA Download.IOSDownloadedFileAction histogram. -const char* const kUMADownloadedFileAction = "Download.IOSDownloadedFileAction"; -// Values of the UMA Download.IOSDownloadedFileAction histogram. -enum DownloadedFileAction { - OPENED_IN_DRIVE, - OPENED_IN_OTHER_APP, - NO_ACTION, - DOWNLOADED_FILE_ACTION_COUNT -}; - -// Key of the UMA Download.IOSDownloadedFileStatusCode histogram. -const char kUMADownloadedFileStatusCode[] = - "Download.IOSDownloadedFileStatusCode"; - -// Key of the UMA.Download.IOSDownloadedFileNetError histogram. -const char kUMADownloadFileNetError[] = "Download.IOSDownloadedFileNetError"; - -int g_download_manager_id = 0; - -const int kNoFileSizeGiven = -1; - -const NSTimeInterval kFileTypeLabelAnimationDuration = 0.5; -const NSTimeInterval kErrorAnimationDuration = 0.5; - -const NSTimeInterval kProgressBarAnimationDuration = 1.0; - -const NSTimeInterval kDownloadCompleteAnimationDuration = 0.4; -NSString* const kDocumentPopAnimationKey = @"DocumentPopAnimationKey"; - -const NSTimeInterval kTimeLeftAnimationDuration = 0.25; -NSString* const kTimeLeftAnimationKey = @"TimeLeftAnimationKey"; - -const NSTimeInterval kGoogleDriveButtonAnimationDuration = 0.5; - -const int kUndownloadedDocumentColor = 0x7BAAF8; -const int kDownloadedDocumentColor = 0x4285F5; -const int kErrorDocumentColor = 0xDB4437; -const int kIndeterminateFileSizeColor = 0xEAEAEA; - -const CGFloat kFileTypeLabelWhiteAlpha = 0.87; -const CGFloat kFileTypeLabelBlackAlpha = 0.56; - -const CGFloat kDocumentContainerWidthPortrait = 136; -const CGFloat kDocumentContainerHeightPortrait = 180; -const CGFloat kDocumentContainerCenterYOneButtonOffsetPortrait = -34; -const CGFloat kDocumentContainerCenterYTwoButtonOffsetPortrait = -52; - -const CGFloat kDocumentContainerWidthLandscape = 82; -const CGFloat kDocumentContainerHeightLandscape = 109; -const CGFloat kDocumentContainerCenterYOffsetLandscape = -48; - -const CGFloat kFoldIconWidthPortrait = 56; -const CGFloat kFoldIconHeightPortrait = 106; - -const CGFloat kFoldIconWidthLandscape = 34; -const CGFloat kFoldIconHeightLandscape = 64; - -const CGFloat kErrorIconWidthPortrait = 40; -const CGFloat kErrorIconHeightPortrait = 40; - -const CGFloat kErrorIconWidthLandscape = 20; -const CGFloat kErrorIconHeightLandscape = 20; - -const CGFloat kFileTypeLabelWidthDeltaPortrait = -24; -const CGFloat kFileTypeLabelHeightPortrait = 42; - -const CGFloat kFileTypeLabelWidthDeltaLandscape = -16; -const CGFloat kFileTypeLabelHeightLandscape = 24; - -const CGFloat kFileTypeLabelVerticalOffset = 10; -const CGFloat kFileTypeLabelAnimationDeltaYPortrait = 44; -const CGFloat kFileTypeLabelAnimationDeltaYLandscape = 27; - -const CGFloat kTimeLeftLabelWidthDeltaPortrait = -24; -const CGFloat kTimeLeftLabelHeightPortrait = 16; -const CGFloat kTimeLeftLabelBottomSpacingOffsetPortrait = -12; - -const CGFloat kTimeLeftLabelWidthDeltaLandscape = -16; -const CGFloat kTimeLeftLabelHeightLandscape = 14; -const CGFloat kTimeLeftLabelBottomSpacingOffsetLandscape = -8; - -const CGFloat kFileNameLabelHeightPortrait = 20; -const CGFloat kFileNameLabelTopSpacingOffsetPortrait = 12; - -const CGFloat kFileNameLabelHeightLandscape = 16; -const CGFloat kFileNameLabelTopSpacingOffsetLandscape = 8; - -const CGFloat kErrorOrSizeLabelHeightPortrait = 16; -const CGFloat kErrorOrSizeLabelHeightLandscape = 14; - -const CGFloat kActionBarHeightOneButtonPortrait = 68; -const CGFloat kActionBarHeightTwoButtonPortrait = 104; - -const CGFloat kActionBarHeightLandscape = 52; - -const CGFloat kActionBarBorderHeight = 0.5; - -const CGFloat kActionBarButtonTopSpacingOffsetPortrait = 16; - -const CGFloat kActionBarButtonTopSpacingOffsetLandscape = 8; - -// This value is the same in portrait and landscape. -const CGFloat kActionBarButtonTrailingSpacingOffset = -16; - -const CGFloat kActivityIndicatorWidth = 30; - -// URLFetcher delegate that bridges from C++ to an Obj-C class for the HEAD -// request to get information about the file. -class DownloadHeadDelegate : public URLFetcherDelegate { - public: - explicit DownloadHeadDelegate(LegacyDownloadManagerController* owner) - : owner_(owner) {} - void OnURLFetchComplete(const URLFetcher* source) override { - [owner_ onHeadFetchComplete]; - }; - - private: - __weak LegacyDownloadManagerController* owner_; - DISALLOW_COPY_AND_ASSIGN(DownloadHeadDelegate); -}; - -// URLFetcher delegate that bridges from C++ to this Obj-C class for the -// request to download the contents of the file. -class DownloadContentDelegate : public URLFetcherDelegate { - public: - explicit DownloadContentDelegate(LegacyDownloadManagerController* owner) - : owner_(owner) {} - void OnURLFetchDownloadProgress(const URLFetcher* source, - int64_t current, - int64_t total, - int64_t current_network_bytes) override { - [owner_ onContentFetchProgress:current]; - } - void OnURLFetchComplete(const URLFetcher* source) override { - [owner_ onContentFetchComplete]; - }; - - private: - __weak LegacyDownloadManagerController* owner_; - DISALLOW_COPY_AND_ASSIGN(DownloadContentDelegate); -}; - -} // namespace - -@interface LegacyDownloadManagerController () { - int _downloadManagerId; - - // Coordinator for displaying the alert informing the user that no application - // on the device can open the file. - AlertCoordinator* _alertCoordinator; - - // The size of the file to be downloaded, as determined by the Content-Length - // header field in the initial HEAD request. This is set to |kNoFileSizeGiven| - // if the Content-Length header is not given. - long long _totalFileSize; - - // YES if |_fileTypeLabel| is vertically centered in |_documentContainer|. NO - // if |_fileTypeLabel| is lower to account for another view in - // |_documentContainer|. - BOOL _isFileTypeLabelCentered; - BOOL _isDisplayingError; - BOOL _didSuccessfullyFinishHeadFetch; - // WebState provides access to the *TabHelper objects. - web::WebState* _webState; - std::unique_ptr<URLFetcher> _fetcher; - std::unique_ptr<DownloadHeadDelegate> _headFetcherDelegate; - std::unique_ptr<DownloadContentDelegate> _contentFetcherDelegate; - base::FilePath _downloadFilePath; - MDCActivityIndicator* _activityIndicator; - // Set to YES when a download begins and is used to determine if the - // DownloadFileResult histogram needs to be recorded on -dealloc. - BOOL _recordDownloadResultHistogram; - // Set to YES when a file is downloaded and is used to determine if the - // DownloadedFileAction histogram needs to be recorded on -dealloc. - BOOL _recordFileActionHistogram; -} - -// The container that holds the |documentIcon|, the |progressBar|, the -// |foldIcon|, the |fileTypeLabel|, and the |timeLeftLabel|. -@property(nonatomic, strong) IBOutlet UIView* documentContainer; - -// The progress bar that displays download progress. -@property(nonatomic, strong) IBOutlet UIView* progressBar; - -// The image of the document. -@property(nonatomic, strong) IBOutlet UIImageView* documentIcon; - -// The image of the document fold. -@property(nonatomic, strong) IBOutlet UIImageView* foldIcon; - -// The error image displayed inside the document. -@property(nonatomic, strong) IBOutlet UIImageView* errorIcon; - -// The label that displays the file type of the file to be downloaded. -@property(nonatomic, strong) IBOutlet UILabel* fileTypeLabel; - -// The label that displays the estimate of how much time is still needed to -// finish the file download. -@property(nonatomic, strong) IBOutlet UILabel* timeLeftLabel; - -// The label that displays the name of the file to be downloaded, as it will -// be saved on the user's device. -@property(nonatomic, strong) IBOutlet UILabel* fileNameLabel; - -// The label that displays the size of the file to be downloaded or the error -// message. -@property(nonatomic, strong) IBOutlet UILabel* errorOrSizeLabel; - -// The label that displays error messages when errors occur. -@property(nonatomic, strong) IBOutlet UILabel* errorLabel; - -// The container that holds the |downloadButton|, |cancelButton|, -// |openInButton|, and |googleDriveButton|. -@property(nonatomic, strong) IBOutlet UIView* actionBar; - -// View that appears at the top of the action bar and acts as a border. -@property(nonatomic, strong) IBOutlet UIView* actionBarBorder; - -// The button which starts the file download. -@property(nonatomic, strong) IBOutlet MDCButton* downloadButton; - -// The button which switches with the |downloadButton| during a download. -// Pressing it cancels the download. -@property(nonatomic, strong) IBOutlet MDCButton* cancelButton; - -// The button that switches with the |cancelButton| when a file download -// completes. Pressing it opens the UIDocumentInteractionController, letting -// the user select another app in which to open the downloaded file. -@property(nonatomic, strong) IBOutlet MDCButton* openInButton; - -// The button that opens a view controller to allow the user to install -// Google Drive. -@property(nonatomic, strong) IBOutlet MDCButton* googleDriveButton; - -// The controller that displays the list of other apps that the downloaded file -// can be opened in. -@property(nonatomic, strong) - UIDocumentInteractionController* docInteractionController; - -// Contains all the constraints that should be applied only in portrait mode. -@property(nonatomic, strong) NSArray* portraitConstraintsArray; - -// Contains all the constraints that should be applied only in landscape mode. -@property(nonatomic, strong) NSArray* landscapeConstraintsArray; - -// Contains all the constraints that should be applied only in portrait mode -// when there is only one button showing in the action bar (i.e. the Google -// Drive button is NOT showing). -@property(nonatomic, strong) - NSArray* portraitActionBarOneButtonConstraintsArray; - -// Contains all the constraints that should be applied only in portrait mode -// when there are two buttons showing in the action bar (i.e. the Google Drive -// button IS showing). -@property(nonatomic, strong) - NSArray* portraitActionBarTwoButtonConstraintsArray; - -// Constraint that positions the file type label vertically in the center of the -// document with an additional offset. -@property(nonatomic, strong) NSLayoutConstraint* fileTypeLabelCentered; - -// Records the time the download started, to display an estimate of how much -// time is required to finish the download. -@property(nonatomic, strong) NSDate* downloadStartedTime; - -// Records the fraction (from 0.0 to 1.0) of the file that has been -// downloaded. -@property(nonatomic) double fractionDownloaded; - -// The base view controller from which to present UI. -@property(nonatomic, readonly, weak) UIViewController* baseViewController; - -@end - -@implementation LegacyDownloadManagerController - -@synthesize documentContainer = _documentContainer; -@synthesize progressBar = _progressBar; -@synthesize documentIcon = _documentIcon; -@synthesize foldIcon = _foldIcon; -@synthesize errorIcon = _errorIcon; -@synthesize fileTypeLabel = _fileTypeLabel; -@synthesize timeLeftLabel = _timeLeftLabel; -@synthesize fileNameLabel = _fileNameLabel; -@synthesize errorOrSizeLabel = _errorOrSizeLabel; -@synthesize errorLabel = _errorLabel; -@synthesize actionBar = _actionBar; -@synthesize actionBarBorder = _actionBarBorder; -@synthesize downloadButton = _downloadButton; -@synthesize cancelButton = _cancelButton; -@synthesize openInButton = _openInButton; -@synthesize googleDriveButton = _googleDriveButton; -@synthesize docInteractionController = _docInteractionController; -@synthesize portraitConstraintsArray = _portraitConstraintsArray; -@synthesize landscapeConstraintsArray = _landscapeConstraintsArray; -@synthesize portraitActionBarOneButtonConstraintsArray = - _portraitActionBarOneButtonConstraintsArray; -@synthesize portraitActionBarTwoButtonConstraintsArray = - _portraitActionBarTwoButtonConstraintsArray; -@synthesize fileTypeLabelCentered = _fileTypeLabelCentered; -@synthesize downloadStartedTime = _downloadStartedTime; -@synthesize fractionDownloaded = _fractionDownloaded; -@synthesize baseViewController = _baseViewController; - -- (instancetype)initWithWebState:(web::WebState*)webState - downloadURL:(const GURL&)url - baseViewController:(UIViewController*)baseViewController { - self = [super initWithNibName:@"DownloadManagerController" url:url]; - if (self) { - _downloadManagerId = g_download_manager_id++; - - DCHECK(webState); - _webState = webState; - _headFetcherDelegate.reset(new DownloadHeadDelegate(self)); - _contentFetcherDelegate.reset(new DownloadContentDelegate(self)); - _downloadFilePath = base::FilePath(); - _baseViewController = baseViewController; - - [_documentContainer - setBackgroundColor:UIColorFromRGB(kUndownloadedDocumentColor)]; - - _isFileTypeLabelCentered = YES; - _isDisplayingError = NO; - _didSuccessfullyFinishHeadFetch = NO; - - [self setTitle:IDS_IOS_DOWNLOAD_MANAGER_DOWNLOAD forButton:_downloadButton]; - [self setTitle:IDS_CANCEL forButton:_cancelButton]; - [self setTitle:IDS_IOS_OPEN_IN forButton:_openInButton]; - [self setTitle:IDS_IOS_DOWNLOAD_MANAGER_INSTALL_GOOGLE_DRIVE - forButton:_googleDriveButton]; - - [_documentContainer setIsAccessibilityElement:YES]; - self.fractionDownloaded = 0; - - // Constraints not in xib: - self.fileTypeLabelCentered = [_fileTypeLabel.centerYAnchor - constraintEqualToAnchor:_documentContainer.centerYAnchor - constant:kFileTypeLabelVerticalOffset]; - self.fileTypeLabelCentered.active = YES; - - // Action Bar Border - [_actionBarBorder.heightAnchor - constraintEqualToConstant:ui::AlignValueToUpperPixel( - kActionBarBorderHeight)] - .active = YES; - - [self initConstraints]; - UIInterfaceOrientation orientation = - [[UIApplication sharedApplication] statusBarOrientation]; - [self updateConstraints:orientation]; - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(interfaceOrientationWillChangeNotification:) - name:UIApplicationWillChangeStatusBarOrientationNotification - object:nil]; - [[NSNotificationCenter defaultCenter] - addObserver:self - selector:@selector(deviceOrientationDidChangeNotification:) - name:UIDeviceOrientationDidChangeNotification - object:nil]; - base::RecordAction(UserMetricsAction("MobileDownloadFileUIShown")); - } - return self; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] - removeObserver:self - name:UIApplicationWillChangeStatusBarOrientationNotification - object:nil]; - [[NSNotificationCenter defaultCenter] - removeObserver:self - name:UIDeviceOrientationDidChangeNotification - object:nil]; - [[InstallationNotifier sharedInstance] unregisterForNotifications:self]; - [[NetworkActivityIndicatorManager sharedInstance] - clearNetworkTasksForGroup:[self getNetworkActivityKey]]; - [_docInteractionController setDelegate:nil]; - [_docInteractionController dismissMenuAnimated:NO]; - if (!_downloadFilePath.empty()) { - // A local copy of _downloadFilePath must be made: the instance variable - // will be cleaned up during dealloc, but a local copy will be retained by - // the block and won't be deleted until the block completes. - base::FilePath downloadPathCopy = _downloadFilePath; - base::PostTaskWithTraits( - FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT}, - base::BindOnce(^{ - DeleteFile(downloadPathCopy, false); - })); - } - if (_recordDownloadResultHistogram) { - UMA_HISTOGRAM_ENUMERATION(kUMADownloadFileResult, DOWNLOAD_OTHER, - DOWNLOAD_FILE_RESULT_COUNT); - } - if (_recordFileActionHistogram) { - UMA_HISTOGRAM_ENUMERATION(kUMADownloadedFileAction, NO_ACTION, - DOWNLOADED_FILE_ACTION_COUNT); - } -} - -#pragma mark - Layout constraints - -- (void)initConstraints { - // Document Container - NSLayoutConstraint* portraitDocumentContainerWidth = - [_documentContainer.widthAnchor - constraintEqualToConstant:kDocumentContainerWidthPortrait]; - NSLayoutConstraint* portraitDocumentContainerHeight = - [_documentContainer.heightAnchor - constraintEqualToConstant:kDocumentContainerHeightPortrait]; - - // This constraint varies in portrait mode depending on whether the action - // bar is showing one button or two. - NSLayoutConstraint* portraitDocumentContainerCenterYOneButton = - [_documentContainer.centerYAnchor - constraintEqualToAnchor:self.view.centerYAnchor - constant: - kDocumentContainerCenterYOneButtonOffsetPortrait]; - NSLayoutConstraint* portraitDocumentContainerCenterYTwoButton = - [_documentContainer.centerYAnchor - constraintEqualToAnchor:self.view.centerYAnchor - constant: - kDocumentContainerCenterYTwoButtonOffsetPortrait]; - - NSLayoutConstraint* landscapeDocumentContainerWidth = - [_documentContainer.widthAnchor - constraintEqualToConstant:kDocumentContainerWidthLandscape]; - NSLayoutConstraint* landscapeDocumentContainerHeight = - [_documentContainer.heightAnchor - constraintEqualToConstant:kDocumentContainerHeightLandscape]; - NSLayoutConstraint* landscapeDocumentContainerCenterY = - [_documentContainer.centerYAnchor - constraintEqualToAnchor:self.view.centerYAnchor - constant:kDocumentContainerCenterYOffsetLandscape]; - - // Fold Icon - NSLayoutConstraint* portraitFoldIconWidth = - [_foldIcon.widthAnchor constraintEqualToConstant:kFoldIconWidthPortrait]; - NSLayoutConstraint* portraitFoldIconHeight = [_foldIcon.heightAnchor - constraintEqualToConstant:kFoldIconHeightPortrait]; - NSLayoutConstraint* landscapeFoldIconWidth = - [_foldIcon.widthAnchor constraintEqualToConstant:kFoldIconWidthLandscape]; - NSLayoutConstraint* landscapeFoldIconHeight = [_foldIcon.heightAnchor - constraintEqualToConstant:kFoldIconHeightLandscape]; - - // Error Icon - NSLayoutConstraint* portraitErrorIconWidth = [_errorIcon.widthAnchor - constraintEqualToConstant:kErrorIconWidthPortrait]; - NSLayoutConstraint* portraitErrorIconHeight = [_errorIcon.heightAnchor - constraintEqualToConstant:kErrorIconHeightPortrait]; - - NSLayoutConstraint* landscapeErrorIconWidth = [_errorIcon.widthAnchor - constraintEqualToConstant:kErrorIconWidthLandscape]; - NSLayoutConstraint* landscapeErrorIconHeight = [_errorIcon.heightAnchor - constraintEqualToConstant:kErrorIconHeightLandscape]; - - // File Type Label - NSLayoutConstraint* portraitFileTypeLabelWidth = [_fileTypeLabel.widthAnchor - constraintLessThanOrEqualToAnchor:_documentContainer.widthAnchor - constant:kFileTypeLabelWidthDeltaPortrait]; - NSLayoutConstraint* portraitFileTypeLabelHeight = [_fileTypeLabel.heightAnchor - constraintEqualToConstant:kFileTypeLabelHeightPortrait]; - - NSLayoutConstraint* landscapeFileTypeLabelWidth = [_fileTypeLabel.widthAnchor - constraintLessThanOrEqualToAnchor:_documentContainer.widthAnchor - constant:kFileTypeLabelWidthDeltaLandscape]; - NSLayoutConstraint* landscapeFileTypeLabelHeight = - [_fileTypeLabel.heightAnchor - constraintEqualToConstant:kFileTypeLabelHeightLandscape]; - - // Time Left Label - NSLayoutConstraint* portraitTimeLeftLabelWidth = [_timeLeftLabel.widthAnchor - constraintLessThanOrEqualToAnchor:_documentContainer.widthAnchor - constant:kTimeLeftLabelWidthDeltaPortrait]; - NSLayoutConstraint* portraitTimeLeftLabelHeight = [_timeLeftLabel.heightAnchor - constraintEqualToConstant:kTimeLeftLabelHeightPortrait]; - NSLayoutConstraint* portraitTimeLeftLabelBottomSpacing = - [_timeLeftLabel.bottomAnchor - constraintEqualToAnchor:_documentContainer.bottomAnchor - constant:kTimeLeftLabelBottomSpacingOffsetPortrait]; - - NSLayoutConstraint* landscapeTimeLeftLabelWidth = [_timeLeftLabel.widthAnchor - constraintLessThanOrEqualToAnchor:_documentContainer.widthAnchor - constant:kTimeLeftLabelWidthDeltaLandscape]; - NSLayoutConstraint* landscapeTimeLeftLabelHeight = - [_timeLeftLabel.heightAnchor - constraintEqualToConstant:kTimeLeftLabelHeightLandscape]; - NSLayoutConstraint* landscapeTimeLeftLabelBottomSpacing = - [_timeLeftLabel.bottomAnchor - constraintEqualToAnchor:_documentContainer.bottomAnchor - constant:kTimeLeftLabelBottomSpacingOffsetLandscape]; - - // File Name Label - NSLayoutConstraint* portraitFileNameLabelHeight = [_fileNameLabel.heightAnchor - constraintEqualToConstant:kFileNameLabelHeightPortrait]; - NSLayoutConstraint* portraitFileNameLabelTopSpacing = - [_fileNameLabel.topAnchor - constraintEqualToAnchor:_documentContainer.bottomAnchor - constant:kFileNameLabelTopSpacingOffsetPortrait]; - - NSLayoutConstraint* landscapeFileNameLabelHeight = - [_fileNameLabel.heightAnchor - constraintEqualToConstant:kFileNameLabelHeightLandscape]; - NSLayoutConstraint* landscapeFileNameLabelTopSpacing = - [_fileNameLabel.topAnchor - constraintEqualToAnchor:_documentContainer.bottomAnchor - constant:kFileNameLabelTopSpacingOffsetLandscape]; - - // File Size Label - NSLayoutConstraint* portraitFileSizeLabelHeight = - [_errorOrSizeLabel.heightAnchor - constraintEqualToConstant:kErrorOrSizeLabelHeightPortrait]; - NSLayoutConstraint* landscapeFileSizeLabelHeight = - [_errorOrSizeLabel.heightAnchor - constraintEqualToConstant:kErrorOrSizeLabelHeightLandscape]; - - // Action Bar - // This constraint varies in portrait mode depending on whether the action - // bar is showing one button or two. - NSLayoutConstraint* portraitActionBarHeightOneButton = - [_actionBar.heightAnchor - constraintEqualToConstant:kActionBarHeightOneButtonPortrait]; - NSLayoutConstraint* portraitActionBarHeightTwoButton = - [_actionBar.heightAnchor - constraintEqualToConstant:kActionBarHeightTwoButtonPortrait]; - - NSLayoutConstraint* landscapeActionBarHeight = [_actionBar.heightAnchor - constraintEqualToConstant:kActionBarHeightLandscape]; - - // Download Button - NSLayoutConstraint* portraitDownloadButtonTopSpacing = - [_downloadButton.topAnchor - constraintEqualToAnchor:_actionBar.topAnchor - constant:kActionBarButtonTopSpacingOffsetPortrait]; - NSLayoutConstraint* landscapeDownloadButtonTopSpacing = - [_downloadButton.topAnchor - constraintEqualToAnchor:_actionBar.topAnchor - constant:kActionBarButtonTopSpacingOffsetLandscape]; - - // Cancel Button - NSLayoutConstraint* portraitCancelButtonTopSpacing = [_cancelButton.topAnchor - constraintEqualToAnchor:_actionBar.topAnchor - constant:kActionBarButtonTopSpacingOffsetPortrait]; - NSLayoutConstraint* landscapeCancelButtonTopSpacing = [_cancelButton.topAnchor - constraintEqualToAnchor:_actionBar.topAnchor - constant:kActionBarButtonTopSpacingOffsetLandscape]; - - // Open In Button - NSLayoutConstraint* portraitOpenInButtonTopSpacing = [_openInButton.topAnchor - constraintEqualToAnchor:_actionBar.topAnchor - constant:kActionBarButtonTopSpacingOffsetPortrait]; - NSLayoutConstraint* landscapeOpenInButtonTopSpacing = [_openInButton.topAnchor - constraintEqualToAnchor:_actionBar.topAnchor - constant:kActionBarButtonTopSpacingOffsetLandscape]; - - // Google Drive Button - NSLayoutConstraint* portraitGoogleDriveButtonTopAlignment = - [_googleDriveButton.topAnchor - constraintEqualToAnchor:_openInButton.bottomAnchor]; - NSLayoutConstraint* portraitGoogleDriveButtonTrailingSpacing = - [_googleDriveButton.trailingAnchor - constraintEqualToAnchor:_actionBar.trailingAnchor - constant:kActionBarButtonTrailingSpacingOffset]; - - NSLayoutConstraint* landscapeGoogleDriveButtonTopSpacing = - [_googleDriveButton.topAnchor - constraintEqualToAnchor:_actionBar.topAnchor - constant:kActionBarButtonTopSpacingOffsetLandscape]; - NSLayoutConstraint* landscapeGoogleDriveButtonTrailingAlignment = - [_googleDriveButton.trailingAnchor - constraintEqualToAnchor:_openInButton.leadingAnchor]; - - self.portraitConstraintsArray = @[ - portraitDocumentContainerWidth, portraitDocumentContainerHeight, - portraitFoldIconWidth, portraitFoldIconHeight, portraitErrorIconWidth, - portraitErrorIconHeight, portraitFileTypeLabelWidth, - portraitFileTypeLabelHeight, portraitTimeLeftLabelWidth, - portraitTimeLeftLabelHeight, portraitTimeLeftLabelBottomSpacing, - portraitFileNameLabelHeight, portraitFileNameLabelTopSpacing, - portraitFileSizeLabelHeight, portraitDownloadButtonTopSpacing, - portraitCancelButtonTopSpacing, portraitOpenInButtonTopSpacing, - portraitGoogleDriveButtonTopAlignment, - portraitGoogleDriveButtonTrailingSpacing - ]; - self.landscapeConstraintsArray = @[ - landscapeDocumentContainerWidth, - landscapeDocumentContainerHeight, - landscapeDocumentContainerCenterY, - landscapeFoldIconWidth, - landscapeFoldIconHeight, - landscapeErrorIconWidth, - landscapeErrorIconHeight, - landscapeFileTypeLabelWidth, - landscapeFileTypeLabelHeight, - landscapeTimeLeftLabelWidth, - landscapeTimeLeftLabelHeight, - landscapeTimeLeftLabelBottomSpacing, - landscapeFileNameLabelHeight, - landscapeFileNameLabelTopSpacing, - landscapeFileSizeLabelHeight, - landscapeActionBarHeight, - landscapeDownloadButtonTopSpacing, - landscapeCancelButtonTopSpacing, - landscapeOpenInButtonTopSpacing, - landscapeGoogleDriveButtonTopSpacing, - landscapeGoogleDriveButtonTrailingAlignment - ]; - - self.portraitActionBarOneButtonConstraintsArray = @[ - portraitDocumentContainerCenterYOneButton, portraitActionBarHeightOneButton - ]; - - self.portraitActionBarTwoButtonConstraintsArray = @[ - portraitDocumentContainerCenterYTwoButton, portraitActionBarHeightTwoButton - ]; -} - -- (void)updateConstraints:(UIInterfaceOrientation)orientation { - [self.view removeConstraints:_portraitConstraintsArray]; - [self.view removeConstraints:_landscapeConstraintsArray]; - [self removePortraitActionBarConstraints]; - if (UIInterfaceOrientationIsPortrait(orientation)) { - [self.view addConstraints:_portraitConstraintsArray]; - [self addPortraitActionBarConstraints]; - - [_fileTypeLabel setFont:[MDCTypography display2Font]]; - [_timeLeftLabel setFont:[MDCTypography body1Font]]; - [_fileNameLabel setFont:[MDCTypography subheadFont]]; - [_errorOrSizeLabel setFont:[MDCTypography captionFont]]; - } else { - [self.view addConstraints:_landscapeConstraintsArray]; - - [_fileTypeLabel setFont:[MDCTypography display1Font]]; - [_timeLeftLabel setFont:[MDCTypography captionFont]]; - [_fileNameLabel setFont:[MDCTypography body1Font]]; - [_errorOrSizeLabel - setFont:[[MDCTypography fontLoader] regularFontOfSize:10]]; - } -} - -- (void)updatePortraitActionBarConstraints { - [self removePortraitActionBarConstraints]; - [self addPortraitActionBarConstraints]; -} - -- (void)removePortraitActionBarConstraints { - [self.view removeConstraints:_portraitActionBarOneButtonConstraintsArray]; - [self.view removeConstraints:_portraitActionBarTwoButtonConstraintsArray]; -} - -- (void)addPortraitActionBarConstraints { - if ([_googleDriveButton isHidden] || _googleDriveButton.alpha == 0) { - [self.view addConstraints:_portraitActionBarOneButtonConstraintsArray]; - } else { - [self.view addConstraints:_portraitActionBarTwoButtonConstraintsArray]; - } -} - -- (void)updateFileTypeLabelConstraint { - CGFloat constant = kFileTypeLabelVerticalOffset; - if (UIInterfaceOrientationIsPortrait( - [[UIApplication sharedApplication] statusBarOrientation])) { - if (!_isFileTypeLabelCentered) { - constant += kFileTypeLabelAnimationDeltaYPortrait; - } - } else { - if (!_isFileTypeLabelCentered) { - constant += kFileTypeLabelAnimationDeltaYLandscape; - } - } - self.fileTypeLabelCentered.constant = constant; -} - -- (void)interfaceOrientationWillChangeNotification: - (NSNotification*)notification { - NSNumber* orientationNumber = [[notification userInfo] - objectForKey:UIApplicationStatusBarOrientationUserInfoKey]; - UIInterfaceOrientation orientation = - static_cast<UIInterfaceOrientation>([orientationNumber integerValue]); - [self updateConstraints:orientation]; -} - -- (void)deviceOrientationDidChangeNotification:(NSNotification*)notification { - [self setProgressBarHeightWithAnimation:NO withCompletionAnimation:NO]; - [self updateFileTypeLabelConstraint]; -} - -- (void)animateFileTypeLabelDown:(BOOL)down - withCompletion:(void (^)(BOOL))completion { - if (_isFileTypeLabelCentered == !down) { - if (completion) { - completion(YES); - } - return; - } - - _isFileTypeLabelCentered = !down; - [UIView animateWithDuration:kFileTypeLabelAnimationDuration - delay:0 - options:UIViewAnimationOptionCurveEaseInOut - animations:^{ - [self updateFileTypeLabelConstraint]; - [self.view layoutIfNeeded]; - } - completion:^(BOOL finished) { - if (completion) { - completion(finished); - } - }]; -} - -#pragma mark - Getting metadata - -// TODO(fulbright): Investigate moving this code into -wasShown instead -// (-wasShown is currently not being called on this class even when it's -// implemented). -- (void)start { - [self startHeadFetch]; -} - -- (void)startHeadFetch { - _fetcher = URLFetcher::Create([self url], URLFetcher::HEAD, - _headFetcherDelegate.get()); - _fetcher->SetRequestContext( - _webState->GetBrowserState()->GetRequestContext()); - [[NetworkActivityIndicatorManager sharedInstance] - startNetworkTaskForGroup:[self getNetworkActivityKey]]; - _fetcher->Start(); -} - -- (void)onHeadFetchComplete { - [[NetworkActivityIndicatorManager sharedInstance] - stopNetworkTaskForGroup:[self getNetworkActivityKey]]; - int responseCode = _fetcher->GetResponseCode(); - base::UmaHistogramSparse( - kUMADownloadedFileStatusCode, - net::HttpUtil::MapStatusCodeForHistogram(responseCode)); - - if (!_fetcher->GetStatus().is_success() || responseCode != 200) { - [self displayError]; - return; - } - - _didSuccessfullyFinishHeadFetch = YES; - HttpResponseHeaders* headers = _fetcher->GetResponseHeaders(); - - std::string contentDisposition; - headers->GetNormalizedHeader("Content-Disposition", &contentDisposition); - // TODO(fulbright): It's possible that the filename returned from - // GetSuggestedFilename will already be in use (especially if "document" was - // used in a previous download). Find a way to avoid filename collisions. - // TODO(fulbright): Investigate why the comment on GetSuggestedFilename says - // that |mime_type| should only be passed if it's called on a thread that - // allows IO. - base::string16 utilGeneratedFilename = - net::GetSuggestedFilename(_fetcher->GetURL(), contentDisposition, - "", // charset - "", // "suggested" filename - "", // mime type - "document"); - - NSString* filename = base::SysUTF16ToNSString(utilGeneratedFilename); - if (filename != nil && ![filename isEqualToString:@""]) { - [_fileNameLabel setText:filename]; - [_fileNameLabel setHidden:NO]; - } - - NSString* fileType = [filename pathExtension]; - if (fileType != nil && ![fileType isEqualToString:@""]) { - [_fileTypeLabel setText:[fileType uppercaseString]]; - [_fileTypeLabel setHidden:NO]; - } - - int64_t length = headers->GetContentLength(); - if (length > 0) { - _totalFileSize = length; - NSString* fileSizeText = [NSByteCountFormatter - stringFromByteCount:length - countStyle:NSByteCountFormatterCountStyleFile]; - [_errorOrSizeLabel setText:fileSizeText]; - } else { - [_errorOrSizeLabel - setText:l10n_util::GetNSString( - IDS_IOS_DOWNLOAD_MANAGER_CANNOT_DETERMINE_FILE_SIZE)]; - _totalFileSize = kNoFileSizeGiven; - [self initializeActivityIndicator]; - _documentContainer.backgroundColor = - UIColorFromRGB(kIndeterminateFileSizeColor); - _fileTypeLabel.textColor = - [UIColor colorWithWhite:0 alpha:kFileTypeLabelBlackAlpha]; - } - [_errorOrSizeLabel setHidden:NO]; - - [_downloadButton setHidden:NO]; -} - -- (void)initializeActivityIndicator { - _activityIndicator = [[MDCActivityIndicator alloc] - initWithFrame:CGRectMake(0, 0, kActivityIndicatorWidth, - kActivityIndicatorWidth)]; - [_activityIndicator setRadius:AlignValueToPixel(kActivityIndicatorWidth / 2)]; - [_activityIndicator setStrokeWidth:4]; - [_activityIndicator - setCycleColors:@[ [[MDCPalette cr_bluePalette] tint500] ]]; - [_activityIndicator setTranslatesAutoresizingMaskIntoConstraints:NO]; - [_documentContainer addSubview:_activityIndicator]; - _activityIndicator.center = _documentContainer.center; - [NSLayoutConstraint activateConstraints:@[ - [[_activityIndicator centerYAnchor] - constraintEqualToAnchor:_documentContainer.centerYAnchor], - [[_activityIndicator centerXAnchor] - constraintEqualToAnchor:_documentContainer.centerXAnchor], - [[_activityIndicator heightAnchor] - constraintEqualToConstant:kActivityIndicatorWidth], - [[_activityIndicator widthAnchor] - constraintEqualToConstant:kActivityIndicatorWidth] - ]]; -} - -#pragma mark - Errors - -- (void)displayUnableToOpenFileDialog { - NSString* title = - l10n_util::GetNSString(IDS_IOS_DOWNLOAD_MANAGER_UNABLE_TO_OPEN_FILE); - NSString* message = - l10n_util::GetNSString(IDS_IOS_DOWNLOAD_MANAGER_NO_APP_MESSAGE); - - _alertCoordinator = [[AlertCoordinator alloc] - initWithBaseViewController:self.baseViewController - title:title - message:message]; - - StoreKitTabHelper* tabHelper = StoreKitTabHelper::FromWebState(_webState); - if (tabHelper) { - NSString* googleDriveButtonTitle = - l10n_util::GetNSString(IDS_IOS_DOWNLOAD_MANAGER_UPLOAD_TO_GOOGLE_DRIVE); - __weak LegacyDownloadManagerController* weakSelf = self; - [_alertCoordinator addItemWithTitle:googleDriveButtonTitle - action:^{ - [weakSelf openGoogleDriveInAppStore]; - } - style:UIAlertActionStyleDefault]; - } - [_alertCoordinator addItemWithTitle:l10n_util::GetNSString(IDS_CANCEL) - action:nil - style:UIAlertActionStyleCancel]; - - [_alertCoordinator start]; -} - -- (void)displayError { - if (_recordDownloadResultHistogram) { - _recordDownloadResultHistogram = NO; - UMA_HISTOGRAM_ENUMERATION(kUMADownloadFileResult, DOWNLOAD_FAILURE, - DOWNLOAD_FILE_RESULT_COUNT); - } - [_activityIndicator stopAnimating]; - _isDisplayingError = YES; - self.fractionDownloaded = 0; - if ([_fileTypeLabel isHidden]) { - [self finishDisplayingError]; - } else { - [self animateFileTypeLabelDown:YES - withCompletion:^(BOOL finished) { - [self finishDisplayingError]; - }]; - } -} - -- (void)finishDisplayingError { - _timeLeftLabel.hidden = YES; - _progressBar.hidden = YES; - _foldIcon.image = [UIImage imageNamed:@"file_icon_fold"]; - - // Prepare the error icon for the fading in animation. - [_errorIcon setAlpha:0.0]; - [_errorIcon setHidden:NO]; - - // Prepare the "Download failed." label text for the fading in animation. - NSString* errorText = - l10n_util::GetNSString(IDS_IOS_DOWNLOAD_MANAGER_DOWNLOAD_FAILED); - CATransition* errorTextAnimation = [CATransition animation]; - errorTextAnimation.duration = kErrorAnimationDuration; - [_documentContainer setAccessibilityLabel:errorText]; - - // Prepare the "RETRY DOWNLOAD" button text for the fading in animation. - [self setTitle:IDS_IOS_DOWNLOAD_MANAGER_RETRY_DOWNLOAD - forButton:_downloadButton]; - _downloadButton.alpha = 0.0; - _downloadButton.hidden = NO; - - [UIView - animateWithDuration:kErrorAnimationDuration - animations:^{ - [_errorIcon setAlpha:1.0]; - [_documentContainer - setBackgroundColor:UIColorFromRGB(kErrorDocumentColor)]; - [_downloadButton setAlpha:1.0]; - if (!_cancelButton.hidden) { - [_cancelButton setAlpha:0.0]; - } - }]; - - _errorOrSizeLabel.hidden = NO; - [_errorOrSizeLabel.layer addAnimation:errorTextAnimation - forKey:@"displayError"]; - [_errorOrSizeLabel setText:errorText]; -} - -- (IBAction)downloadButtonTapped:(id)sender { - _recordDownloadResultHistogram = YES; - [_downloadButton setHidden:YES]; - NSString* retryDownloadText = - l10n_util::GetNSString(IDS_IOS_DOWNLOAD_MANAGER_RETRY_DOWNLOAD); - if ([_downloadButton.titleLabel.text - caseInsensitiveCompare:retryDownloadText] == NSOrderedSame) { - base::RecordAction(UserMetricsAction("MobileDownloadRetryDownload")); - } - // Hide any error message that may have been shown in a previous attempt to - // download the file. - if (_isDisplayingError) { - [self hideError]; - } else { - [self finishDownloadButtonTapped]; - } -} - -- (void)hideError { - // Get the file size string to display. - NSString* fileSizeText; - if (!_didSuccessfullyFinishHeadFetch) { - // The file size hasn't been fetched yet, so just show a blank string. - fileSizeText = @""; - } else if (_totalFileSize == kNoFileSizeGiven) { - fileSizeText = l10n_util::GetNSString( - IDS_IOS_DOWNLOAD_MANAGER_CANNOT_DETERMINE_FILE_SIZE); - } else { - fileSizeText = [NSByteCountFormatter - stringFromByteCount:_totalFileSize - countStyle:NSByteCountFormatterCountStyleFile]; - } - CATransition* fileSizeTextAnimation = [CATransition animation]; - fileSizeTextAnimation.duration = kErrorAnimationDuration; - - // Prepare to change the download button back to its original text. - [_errorOrSizeLabel.layer addAnimation:fileSizeTextAnimation - forKey:@"hideError"]; - [_errorOrSizeLabel setText:fileSizeText]; - - if (![_fileTypeLabel isHidden] && _totalFileSize != kNoFileSizeGiven) { - [self animateFileTypeLabelDown:NO withCompletion:nil]; - } - - [UIView animateWithDuration:kErrorAnimationDuration - animations:^{ - _documentContainer.backgroundColor = - UIColorFromRGB(kUndownloadedDocumentColor); - _errorIcon.alpha = 0.0; - _downloadButton.alpha = 0.0; - } - completion:^(BOOL finished) { - _errorIcon.hidden = YES; - _errorIcon.alpha = 1.0; - _downloadButton.hidden = YES; - _downloadButton.alpha = 1.0; - [self setTitle:IDS_IOS_DOWNLOAD_MANAGER_DOWNLOAD - forButton:_downloadButton]; - _isDisplayingError = NO; - [self finishDownloadButtonTapped]; - }]; -} - -- (void)finishDownloadButtonTapped { - if (_didSuccessfullyFinishHeadFetch) { - [self beginStartingContentDownload]; - } else { - [self startHeadFetch]; - } -} - -#pragma mark - Downloading content - -- (void)beginStartingContentDownload { - // Ensure the directory that downloaded files are saved to exists. - base::FilePath downloadsDirectoryPath; - if (!GetDownloadsDirectory(&downloadsDirectoryPath)) { - [self displayError]; - return; - } - __weak LegacyDownloadManagerController* weakSelf = self; - base::PostTaskWithTraitsAndReplyWithResult( - FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_BLOCKING}, - base::BindOnce(^{ - return CreateDirectory(downloadsDirectoryPath); - }), - base::BindOnce(^(bool directoryCreated) { - [weakSelf finishStartingContentDownload:directoryCreated]; - })); -} - -- (void)finishStartingContentDownload:(bool)directoryCreated { - if (!directoryCreated) { - [self displayError]; - return; - } - base::FilePath downloadsDirectoryPath; - if (!GetDownloadsDirectory(&downloadsDirectoryPath)) { - [self displayError]; - return; - } - _downloadFilePath = downloadsDirectoryPath.Append( - base::SysNSStringToUTF8([_fileNameLabel text])); - - _fetcher = URLFetcher::Create([self url], URLFetcher::GET, - _contentFetcherDelegate.get()); - _fetcher->SetRequestContext( - _webState->GetBrowserState()->GetRequestContext()); - _fetcher->SaveResponseToFileAtPath( - _downloadFilePath, - base::CreateSequencedTaskRunnerWithTraits( - {base::MayBlock(), base::TaskPriority::BEST_EFFORT})); - [[NetworkActivityIndicatorManager sharedInstance] - startNetworkTaskForGroup:[self getNetworkActivityKey]]; - _fetcher->Start(); - - self.downloadStartedTime = [NSDate date]; - self.fractionDownloaded = 0.0; - [self setProgressBarHeightWithAnimation:NO withCompletionAnimation:NO]; - [self setTimeLeft:@"" withAnimation:NO]; - [_progressBar setHidden:NO]; - [_cancelButton setHidden:NO]; - [_cancelButton setAlpha:1]; -} - -- (void)setProgressBarHeightWithAnimation:(BOOL)animated - withCompletionAnimation:(BOOL)completionAnimation { - CGRect documentIconFrame = [_documentIcon frame]; - CGRect oldProgressFrame = [_progressBar frame]; - CGRect newProgressFrame = oldProgressFrame; - newProgressFrame.size.height = - self.fractionDownloaded * documentIconFrame.size.height; - newProgressFrame.origin.y = - CGRectGetMaxY(documentIconFrame) - newProgressFrame.size.height; - if (animated && - newProgressFrame.size.height - oldProgressFrame.size.height > 1) { - __weak UIView* weakProgressBar = _progressBar; - if (completionAnimation) { - __weak LegacyDownloadManagerController* weakSelf = self; - [UIView animateWithDuration:kProgressBarAnimationDuration - animations:^{ - [weakProgressBar setFrame:newProgressFrame]; - } - completion:^(BOOL) { - [weakSelf runDownloadCompleteAnimation]; - }]; - } else { - [UIView animateWithDuration:kProgressBarAnimationDuration - animations:^{ - [weakProgressBar setFrame:newProgressFrame]; - }]; - } - } else { - [_progressBar setFrame:newProgressFrame]; - if (completionAnimation) { - [self runDownloadCompleteAnimation]; - } - } -} - -- (void)setTitle:(int)messageId forButton:(UIButton*)button { - NSString* title = l10n_util::GetNSString(messageId); - NSString* capsTitle = - [title uppercaseStringWithLocale:[NSLocale currentLocale]]; - [button setTitle:capsTitle forState:UIControlStateNormal]; - [button setTitle:capsTitle forState:UIControlStateHighlighted]; -} - -- (void)runDownloadCompleteAnimation { - [_documentContainer - setBackgroundColor:UIColorFromRGB(kDownloadedDocumentColor)]; - - CAKeyframeAnimation* animation = - [CAKeyframeAnimation animationWithKeyPath:@"transform"]; - NSArray* vals = @[ - [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)], - [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.95, 0.95, 1.0)], - [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.1, 1.1, 1.0)], - [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)] - ]; - NSArray* times = @[ @0.0, @0.33, @0.66, @1.0 ]; - [animation setValues:vals]; - [animation setKeyTimes:times]; - [animation setDuration:kDownloadCompleteAnimationDuration]; - [_documentContainer.layer addAnimation:animation - forKey:kDocumentPopAnimationKey]; - - // Displays the "Install Google Drive" button if it is not installed. - NSURL* googleDriveURL = [NSURL URLWithString:kGoogleDriveURL]; - BOOL showGoogleDriveButton = - ![[UIApplication sharedApplication] canOpenURL:googleDriveURL]; - __weak UIImageView* weakFoldIcon = _foldIcon; - [UIView transitionWithView:_foldIcon - duration:kDownloadCompleteAnimationDuration - options:UIViewAnimationOptionTransitionCrossDissolve - animations:^{ - [weakFoldIcon setImage:[UIImage imageNamed:@"file_icon_fold_complete"]]; - if (_totalFileSize == kNoFileSizeGiven) { - _fileTypeLabel.textColor = - [UIColor colorWithWhite:1 alpha:kFileTypeLabelWhiteAlpha]; - } - } - completion:^(BOOL finished) { - if (showGoogleDriveButton) { - [self showGoogleDriveButton]; - } - }]; -} - -- (void)setFractionDownloaded:(double)fractionDownloaded { - _fractionDownloaded = fractionDownloaded; - if (_fractionDownloaded == 1) { - [_documentContainer - setAccessibilityLabel:l10n_util::GetNSString( - IDS_IOS_DOWNLOAD_MANAGER_DOWNLOAD_COMPLETE)]; - } else { - base::string16 percentDownloaded = base::SysNSStringToUTF16([NSString - stringWithFormat:@"%i", static_cast<int>(100 * _fractionDownloaded)]); - [_documentContainer - setAccessibilityLabel:l10n_util::GetNSStringF( - IDS_IOS_DOWNLOAD_MANAGER_PERCENT_DOWNLOADED, - percentDownloaded)]; - } -} - -- (IBAction)cancelButtonTapped:(id)sender { - // No-op if the file has finished downloading, which occurs if the download - // completes while the user is pressing down on the Cancel button. - if (self.fractionDownloaded == 1) - return; - - self.fractionDownloaded = 0; - [_cancelButton setHidden:YES]; - [[NetworkActivityIndicatorManager sharedInstance] - stopNetworkTaskForGroup:[self getNetworkActivityKey]]; - if (_totalFileSize == kNoFileSizeGiven) { - [_activityIndicator stopAnimating]; - [self animateFileTypeLabelDown:NO withCompletion:nil]; - } - _fetcher.reset(); - [_progressBar setHidden:YES]; - [_timeLeftLabel setHidden:YES]; - [_downloadButton setHidden:NO]; - if (_recordDownloadResultHistogram) { - _recordDownloadResultHistogram = NO; - UMA_HISTOGRAM_ENUMERATION(kUMADownloadFileResult, DOWNLOAD_CANCELED, - DOWNLOAD_FILE_RESULT_COUNT); - } -} - -- (void)onContentFetchProgress:(long long)bytesDownloaded { - if (_totalFileSize != kNoFileSizeGiven) { - self.fractionDownloaded = - static_cast<double>(bytesDownloaded) / _totalFileSize; - BOOL showFinishingAnimation = (bytesDownloaded == _totalFileSize); - [self setProgressBarHeightWithAnimation:YES - withCompletionAnimation:showFinishingAnimation]; - - NSTimeInterval elapsedSeconds = - -[self.downloadStartedTime timeIntervalSinceNow]; - long long bytesRemaining = _totalFileSize - bytesDownloaded; - DCHECK(bytesDownloaded > 0); - double secondsRemaining = - static_cast<double>(bytesRemaining) / bytesDownloaded * elapsedSeconds; - double minutesRemaining = secondsRemaining / 60; - int minutesRemainingInt = static_cast<int>(ceil(minutesRemaining)); - base::string16 minutesRemainingString = base::SysNSStringToUTF16( - [NSString stringWithFormat:@"%d", minutesRemainingInt]); - NSString* minutesRemainingText = l10n_util::GetNSStringF( - IDS_IOS_DOWNLOAD_MANAGER_TIME_LEFT, minutesRemainingString); - [self setTimeLeft:minutesRemainingText withAnimation:YES]; - [_timeLeftLabel setHidden:NO]; - } else { - [_documentContainer - setAccessibilityLabel:l10n_util::GetNSString( - IDS_IOS_DOWNLOAD_MANAGER_DOWNLOADING)]; - [_activityIndicator startAnimating]; - if (_isFileTypeLabelCentered) { - [self animateFileTypeLabelDown:YES withCompletion:nil]; - } - } -} - -- (void)setTimeLeft:(NSString*)text withAnimation:(BOOL)animated { - if (![text isEqualToString:[_timeLeftLabel text]]) { - if (animated) { - CATransition* animation = [CATransition animation]; - animation.duration = kTimeLeftAnimationDuration; - animation.type = kCATransitionPush; - animation.subtype = kCATransitionFromBottom; - animation.timingFunction = [CAMediaTimingFunction - functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; - [_timeLeftLabel.layer addAnimation:animation - forKey:kTimeLeftAnimationKey]; - } - [_timeLeftLabel setText:text]; - } -} - -- (void)onContentFetchComplete { - [_cancelButton setHidden:YES]; - [_timeLeftLabel setHidden:YES]; - [[NetworkActivityIndicatorManager sharedInstance] - stopNetworkTaskForGroup:[self getNetworkActivityKey]]; - - if (!_fetcher->GetStatus().is_success() || - _fetcher->GetResponseCode() != 200) { - [self displayError]; - // Log the Net Error code. - base::UmaHistogramSparse(kUMADownloadFileNetError, - -_fetcher->GetStatus().error()); - return; - } - - base::FilePath filePath; - bool success = _fetcher->GetResponseAsFilePath(YES, &filePath); - DCHECK(success); - NSString* filePathString = base::SysUTF8ToNSString(filePath.value()); - - if (_totalFileSize == kNoFileSizeGiven) { - [_activityIndicator stopAnimating]; - _activityIndicator = nil; - - // Display the file size. - NSError* error = nil; - NSDictionary* attributes = - [[NSFileManager defaultManager] attributesOfItemAtPath:filePathString - error:&error]; - if (!error) { - NSNumber* fileSizeNumber = [attributes objectForKey:NSFileSize]; - NSString* fileSizeText = [NSByteCountFormatter - stringFromByteCount:[fileSizeNumber longLongValue] - countStyle:NSByteCountFormatterCountStyleFile]; - [_errorOrSizeLabel setText:fileSizeText]; - } - - [self animateFileTypeLabelDown:NO withCompletion:nil]; - // Set the progress bar to 100% to give the document the filled in blue - // background. - self.fractionDownloaded = 1.0; - [self setProgressBarHeightWithAnimation:YES withCompletionAnimation:YES]; - } - - NSURL* fileURL = [NSURL fileURLWithPath:filePathString]; - self.docInteractionController = - [UIDocumentInteractionController interactionControllerWithURL:fileURL]; - self.docInteractionController.delegate = self; - - [_openInButton setHidden:NO]; - - _recordFileActionHistogram = YES; - _recordDownloadResultHistogram = NO; - UMA_HISTOGRAM_ENUMERATION(kUMADownloadFileResult, DOWNLOAD_COMPLETED, - DOWNLOAD_FILE_RESULT_COUNT); -} - -#pragma mark - Completed download actions - -- (void)showGoogleDriveButton { - _googleDriveButton.alpha = 0.0; - _googleDriveButton.hidden = NO; - UIInterfaceOrientation orientation = - [[UIApplication sharedApplication] statusBarOrientation]; - if (UIInterfaceOrientationIsPortrait(orientation)) { - [UIView animateWithDuration:kGoogleDriveButtonAnimationDuration - animations:^{ - _googleDriveButton.alpha = 1.0; - [self updatePortraitActionBarConstraints]; - [self.view layoutIfNeeded]; - }]; - } else { - [UIView animateWithDuration:kGoogleDriveButtonAnimationDuration - animations:^{ - _googleDriveButton.alpha = 1.0; - }]; - } -} - -- (void)hideGoogleDriveButton { - base::RecordAction( - UserMetricsAction("MobileDownloadFileUIInstallGoogleDrive")); - UIInterfaceOrientation orientation = - [[UIApplication sharedApplication] statusBarOrientation]; - if (UIInterfaceOrientationIsPortrait(orientation)) { - [UIView animateWithDuration:kDownloadCompleteAnimationDuration - animations:^{ - _googleDriveButton.alpha = 0.0; - [self updatePortraitActionBarConstraints]; - [self.view layoutIfNeeded]; - }]; - } else { - [UIView animateWithDuration:kDownloadCompleteAnimationDuration - animations:^{ - _googleDriveButton.alpha = 0.0; - }]; - } -} - -- (IBAction)openInButtonTapped:(id)sender { - BOOL showedMenu = - [_docInteractionController presentOpenInMenuFromRect:_openInButton.frame - inView:_actionBar - animated:YES]; - if (!showedMenu) { - [self displayUnableToOpenFileDialog]; - } -} - -- (IBAction)googleDriveButtonTapped:(id)sender { - [self openGoogleDriveInAppStore]; -} - -- (void)openGoogleDriveInAppStore { - StoreKitTabHelper* helper = StoreKitTabHelper::FromWebState(_webState); - if (helper) { - NSString* scheme = [[NSURL URLWithString:kGoogleDriveURL] scheme]; - [[InstallationNotifier sharedInstance] - registerForInstallationNotifications:self - withSelector:@selector(hideGoogleDriveButton) - forScheme:scheme]; - helper->OpenAppStore(kGoogleDriveAppStoreId); - } -} - -- (NSString*)getNetworkActivityKey { - return [NSString - stringWithFormat: - @"LegacyDownloadManagerController.NetworkActivityIndicatorKey.%d", - _downloadManagerId]; -} - -#pragma mark - UIDocumentInteractionControllerDelegate - -- (void)documentInteractionController: - (UIDocumentInteractionController*)controller - willBeginSendingToApplication:(NSString*)application { - if (_recordFileActionHistogram) { - if ([application isEqualToString:kGoogleDriveBundleId]) { - UMA_HISTOGRAM_ENUMERATION(kUMADownloadedFileAction, OPENED_IN_DRIVE, - DOWNLOADED_FILE_ACTION_COUNT); - } else { - UMA_HISTOGRAM_ENUMERATION(kUMADownloadedFileAction, OPENED_IN_OTHER_APP, - DOWNLOADED_FILE_ACTION_COUNT); - } - _recordFileActionHistogram = NO; - } -} - -#pragma mark - Methods for testing - -- (long long)totalFileSize { - return _totalFileSize; -} - -#pragma mark - CRWNativeContent - -- (void)close { - // Makes sure that all outstanding network requests are shut down before - // this controller is closed. - _fetcher.reset(); -} - -@end
diff --git a/ios/chrome/browser/ui/download/legacy_download_manager_controller_unittest.mm b/ios/chrome/browser/ui/download/legacy_download_manager_controller_unittest.mm deleted file mode 100644 index b8499a90..0000000 --- a/ios/chrome/browser/ui/download/legacy_download_manager_controller_unittest.mm +++ /dev/null
@@ -1,141 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import "ios/chrome/browser/ui/download/legacy_download_manager_controller.h" - -#import <UIKit/UIKit.h> - -#include <memory> - -#import "ios/chrome/browser/store_kit/store_kit_launcher.h" -#import "ios/chrome/browser/store_kit/store_kit_tab_helper.h" -#import "ios/chrome/browser/web/chrome_web_test.h" -#include "ios/web/public/test/test_web_thread.h" -#include "net/base/net_errors.h" -#include "net/http/http_response_headers.h" -#include "net/url_request/test_url_fetcher_factory.h" -#include "net/url_request/url_fetcher_delegate.h" -#include "net/url_request/url_request_test_util.h" -#include "testing/gtest_mac.h" -#include "testing/platform_test.h" -#import "third_party/ocmock/OCMock/OCMock.h" - -#if !defined(__has_feature) || !__has_feature(objc_arc) -#error "This file requires ARC support." -#endif - -using net::HttpResponseHeaders; -using net::URLRequestStatus; - -@interface LegacyDownloadManagerController (ExposedForTesting) -- (UIView*)documentContainer; -- (UIView*)progressBar; -- (UIImageView*)documentIcon; -- (UIImageView*)foldIcon; -- (UILabel*)timeLeftLabel; -- (UILabel*)fileTypeLabel; -- (UILabel*)fileNameLabel; -- (UILabel*)errorOrSizeLabel; -- (UIImageView*)errorIcon; -- (UIView*)actionBar; -- (UIButton*)downloadButton; -- (UIButton*)cancelButton; -- (UIButton*)openInButton; -- (UIButton*)googleDriveButton; -- (long long)totalFileSize; -@end - -namespace { - -const GURL kTestURL = GURL("http://www.example.com/test_download_file.txt"); - -class LegacyDownloadManagerControllerTest : public ChromeWebTest { - protected: - void SetUp() override { - ChromeWebTest::SetUp(); - _fetcher_factory.reset(new net::TestURLFetcherFactory()); - StoreKitTabHelper::CreateForWebState(web_state()); - StoreKitTabHelper* helper = StoreKitTabHelper::FromWebState(web_state()); - id mock_launcher = - [OCMockObject niceMockForProtocol:@protocol(StoreKitLauncher)]; - helper->SetLauncher(mock_launcher); - _controller = - [[LegacyDownloadManagerController alloc] initWithWebState:web_state() - downloadURL:kTestURL - baseViewController:nil]; - } - std::unique_ptr<net::TestURLFetcherFactory> _fetcher_factory; - __strong LegacyDownloadManagerController* _controller; -}; - -TEST_F(LegacyDownloadManagerControllerTest, TestXibViewConnections) { - EXPECT_TRUE([_controller documentContainer]); - EXPECT_TRUE([_controller progressBar]); - EXPECT_TRUE([_controller documentIcon]); - EXPECT_TRUE([_controller foldIcon]); - EXPECT_TRUE([_controller timeLeftLabel]); - EXPECT_TRUE([_controller fileTypeLabel]); - EXPECT_TRUE([_controller fileNameLabel]); - EXPECT_TRUE([_controller errorOrSizeLabel]); - EXPECT_TRUE([_controller errorIcon]); - EXPECT_TRUE([_controller actionBar]); - EXPECT_TRUE([_controller downloadButton]); - EXPECT_TRUE([_controller cancelButton]); - EXPECT_TRUE([_controller openInButton]); - EXPECT_TRUE([_controller googleDriveButton]); -} - -// TODO(crbug.com/804250): this test is flaky. -TEST_F(LegacyDownloadManagerControllerTest, TestStart) { - [_controller start]; - EXPECT_TRUE( - [[UIApplication sharedApplication] isNetworkActivityIndicatorVisible]); - net::TestURLFetcher* fetcher = _fetcher_factory->GetFetcherByID(0); - EXPECT_TRUE(fetcher != NULL); - EXPECT_EQ(kTestURL, fetcher->GetOriginalURL()); -} - -TEST_F(LegacyDownloadManagerControllerTest, TestOnHeadFetchCompleteSuccess) { - [_controller start]; - net::TestURLFetcher* fetcher = _fetcher_factory->GetFetcherByID(0); - - URLRequestStatus success_status(URLRequestStatus::SUCCESS, 0); - fetcher->set_status(success_status); - fetcher->set_response_code(200); - scoped_refptr<HttpResponseHeaders> headers; - headers = new HttpResponseHeaders("HTTP/1.x 200 OK\0"); - headers->AddHeader("Content-Length: 1000000000"); // ~1GB - fetcher->set_response_headers(headers); - - fetcher->delegate()->OnURLFetchComplete(fetcher); - EXPECT_FALSE( - [[UIApplication sharedApplication] isNetworkActivityIndicatorVisible]); - - EXPECT_EQ(1000000000, [_controller totalFileSize]); - NSString* fileSizeText = [NSByteCountFormatter - stringFromByteCount:1000000000 - countStyle:NSByteCountFormatterCountStyleFile]; - EXPECT_NSEQ(fileSizeText, [_controller errorOrSizeLabel].text); - EXPECT_FALSE([_controller downloadButton].hidden); -} - -TEST_F(LegacyDownloadManagerControllerTest, TestOnHeadFetchCompleteFailure) { - [_controller start]; - net::TestURLFetcher* fetcher = _fetcher_factory->GetFetcherByID(0); - - URLRequestStatus failure_status(URLRequestStatus::FAILED, - net::ERR_DNS_TIMED_OUT); - fetcher->set_status(failure_status); - - fetcher->delegate()->OnURLFetchComplete(fetcher); - EXPECT_FALSE( - [[UIApplication sharedApplication] isNetworkActivityIndicatorVisible]); - - EXPECT_TRUE([_controller fileTypeLabel].hidden); - EXPECT_FALSE([_controller downloadButton].hidden); - EXPECT_FALSE([_controller errorIcon].hidden); - EXPECT_FALSE([_controller errorOrSizeLabel].hidden); -} - -} // namespace
diff --git a/ios/chrome/browser/ui/download/resources/BUILD.gn b/ios/chrome/browser/ui/download/resources/BUILD.gn index 0a97f58..251aa8e7 100644 --- a/ios/chrome/browser/ui/download/resources/BUILD.gn +++ b/ios/chrome/browser/ui/download/resources/BUILD.gn
@@ -5,10 +5,6 @@ import("//build/config/ios/asset_catalog.gni") import("//build/config/ios/rules.gni") -bundle_data_ib_file("download_manager_controller_xib") { - source = "DownloadManagerController.xib" -} - imageset("background_compact") { sources = [ "background_compact.imageset/Contents.json", @@ -43,39 +39,3 @@ "error_badge.imageset/error_badge@3x.png", ] } - -imageset("error_icon") { - sources = [ - "error_icon.imageset/Contents.json", - "error_icon.imageset/error_icon.png", - "error_icon.imageset/error_icon@2x.png", - "error_icon.imageset/error_icon@3x.png", - ] -} - -imageset("file_icon_body") { - sources = [ - "file_icon_body.imageset/Contents.json", - "file_icon_body.imageset/file_icon_body.png", - "file_icon_body.imageset/file_icon_body@2x.png", - "file_icon_body.imageset/file_icon_body@3x.png", - ] -} - -imageset("file_icon_fold") { - sources = [ - "file_icon_fold.imageset/Contents.json", - "file_icon_fold.imageset/file_icon_fold.png", - "file_icon_fold.imageset/file_icon_fold@2x.png", - "file_icon_fold.imageset/file_icon_fold@3x.png", - ] -} - -imageset("file_icon_fold_complete") { - sources = [ - "file_icon_fold_complete.imageset/Contents.json", - "file_icon_fold_complete.imageset/file_icon_fold_complete.png", - "file_icon_fold_complete.imageset/file_icon_fold_complete@2x.png", - "file_icon_fold_complete.imageset/file_icon_fold_complete@3x.png", - ] -}
diff --git a/ios/chrome/browser/ui/download/resources/DownloadManagerController.xib b/ios/chrome/browser/ui/download/resources/DownloadManagerController.xib deleted file mode 100644 index 9e79819..0000000 --- a/ios/chrome/browser/ui/download/resources/DownloadManagerController.xib +++ /dev/null
@@ -1,204 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES"> - <dependencies> - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/> - </dependencies> - <objects> - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="LegacyDownloadManagerController"> - <connections> - <outlet property="actionBar" destination="mf4-ti-xzw" id="e6W-4V-boT"/> - <outlet property="actionBarBorder" destination="vi5-3Q-93W" id="Dgb-9u-X2x"/> - <outlet property="cancelButton" destination="fdr-8U-lOx" id="oXn-b3-YuV"/> - <outlet property="documentContainer" destination="7D5-sb-6tz" id="985-Zp-wnN"/> - <outlet property="documentIcon" destination="NH0-Qo-rt4" id="U2i-4M-pZE"/> - <outlet property="downloadButton" destination="ZY0-Rn-Jvb" id="EOh-Xu-0eZ"/> - <outlet property="errorIcon" destination="MoE-Yo-hcG" id="nWY-r5-rtb"/> - <outlet property="errorLabel" destination="N2t-MX-4cK" id="YX1-mF-FV2"/> - <outlet property="errorOrSizeLabel" destination="DVD-jj-g6B" id="hyu-Vn-imb"/> - <outlet property="fileNameLabel" destination="yu5-8G-2xD" id="kRQ-HJ-4pN"/> - <outlet property="fileTypeLabel" destination="uZZ-p3-Sok" id="Am5-2F-vEJ"/> - <outlet property="foldIcon" destination="7rm-Qh-Y6x" id="dDh-Ho-Ze5"/> - <outlet property="googleDriveButton" destination="bka-0X-s4A" id="TWm-Ug-VTH"/> - <outlet property="openInButton" destination="RCe-Np-tu4" id="9Pq-FZ-pbA"/> - <outlet property="progressBar" destination="7HI-kh-jA2" id="9NQ-eP-R4r"/> - <outlet property="timeLeftLabel" destination="zEC-Sy-aBG" id="r2G-rW-7Pj"/> - <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> - </connections> - </placeholder> - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> - <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT" userLabel="Main View"> - <rect key="frame" x="0.0" y="0.0" width="320" height="568"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <view contentMode="scaleToFill" ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="7D5-sb-6tz" userLabel="Document Container"> - <rect key="frame" x="92" y="194" width="136" height="180"/> - <subviews> - <view hidden="YES" contentMode="scaleToFill" ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="7HI-kh-jA2" userLabel="Progress Bar"> - <color key="backgroundColor" red="0.25882352941176467" green="0.52156862745098043" blue="0.96078431372549022" alpha="1" colorSpace="calibratedRGB"/> - </view> - <imageView opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" image="file_icon_body" translatesAutoresizingMaskIntoConstraints="NO" id="NH0-Qo-rt4" userLabel="Document Icon"> - <rect key="frame" x="0.0" y="0.0" width="136" height="180"/> - </imageView> - <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" image="file_icon_fold" translatesAutoresizingMaskIntoConstraints="NO" id="7rm-Qh-Y6x" userLabel="Fold Icon"> - <rect key="frame" x="80" y="0.0" width="56" height="106"/> - </imageView> - <imageView hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" image="error_icon" translatesAutoresizingMaskIntoConstraints="NO" id="MoE-Yo-hcG" userLabel="Error Icon"> - <rect key="frame" x="48" y="70" width="40" height="40"/> - </imageView> - <label hidden="YES" opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" misplaced="YES" text="ZIP" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="uZZ-p3-Sok" userLabel="File Type Label"> - <rect key="frame" x="35" y="82" width="66" height="42"/> - <fontDescription key="fontDescription" type="boldSystem" pointSize="42"/> - <color key="textColor" red="1" green="1" blue="1" alpha="0.87" colorSpace="calibratedRGB"/> - <nil key="highlightedColor"/> - </label> - <label hidden="YES" opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" misplaced="YES" text="3 min" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zEC-Sy-aBG" userLabel="Time Left Label"> - <rect key="frame" x="50" y="152" width="36" height="16"/> - <fontDescription key="fontDescription" type="system" pointSize="14"/> - <color key="textColor" red="1" green="1" blue="1" alpha="0.54000000000000004" colorSpace="calibratedRGB"/> - <nil key="highlightedColor"/> - </label> - </subviews> - <color key="backgroundColor" red="0.4823529411764706" green="0.66666666666666663" blue="0.97254901960784312" alpha="1" colorSpace="calibratedRGB"/> - <constraints> - <constraint firstItem="7rm-Qh-Y6x" firstAttribute="top" secondItem="7D5-sb-6tz" secondAttribute="top" id="88v-It-d6Q"/> - <constraint firstAttribute="centerY" secondItem="NH0-Qo-rt4" secondAttribute="centerY" id="Bjg-JV-eVj"/> - <constraint firstItem="7HI-kh-jA2" firstAttribute="leading" secondItem="7D5-sb-6tz" secondAttribute="leading" id="Gu0-Ul-1S8"/> - <constraint firstAttribute="centerX" secondItem="uZZ-p3-Sok" secondAttribute="centerX" id="JiU-nD-eqf"/> - <constraint firstAttribute="trailing" secondItem="7rm-Qh-Y6x" secondAttribute="trailing" id="K3i-QE-9QP"/> - <constraint firstAttribute="width" secondItem="NH0-Qo-rt4" secondAttribute="width" id="Q3h-gE-6Ta"/> - <constraint firstAttribute="centerX" secondItem="NH0-Qo-rt4" secondAttribute="centerX" id="SiU-of-Hge"/> - <constraint firstAttribute="centerX" secondItem="MoE-Yo-hcG" secondAttribute="centerX" id="URH-uu-yuH"/> - <constraint firstAttribute="height" secondItem="NH0-Qo-rt4" secondAttribute="height" id="ZEW-Wa-B8O"/> - <constraint firstAttribute="bottom" secondItem="7HI-kh-jA2" secondAttribute="bottom" id="d95-hn-K4Z"/> - <constraint firstAttribute="centerY" secondItem="MoE-Yo-hcG" secondAttribute="centerY" id="e2O-21-WFJ"/> - <constraint firstAttribute="centerX" secondItem="zEC-Sy-aBG" secondAttribute="centerX" id="kFk-4l-uoH"/> - <constraint firstAttribute="trailing" secondItem="7HI-kh-jA2" secondAttribute="trailing" id="kYr-cI-bjr"/> - <constraint firstItem="7HI-kh-jA2" firstAttribute="height" relation="lessThanOrEqual" secondItem="7D5-sb-6tz" secondAttribute="height" id="yt8-lS-rF5"/> - </constraints> - </view> - <label hidden="YES" opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="750" verticalHuggingPriority="750" ambiguous="YES" misplaced="YES" text="example.zip" textAlignment="center" lineBreakMode="middleTruncation" numberOfLines="6" baselineAdjustment="alignBaselines" minimumFontSize="8" adjustsLetterSpacingToFitWidth="YES" preferredMaxLayoutWidth="272" translatesAutoresizingMaskIntoConstraints="NO" id="yu5-8G-2xD" userLabel="File Name Label"> - <rect key="frame" x="24" y="382" width="272" height="16"/> - <fontDescription key="fontDescription" type="system" pointSize="16"/> - <color key="textColor" white="0.0" alpha="0.87" colorSpace="calibratedWhite"/> - <nil key="highlightedColor"/> - </label> - <label hidden="YES" opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="750" verticalHuggingPriority="750" ambiguous="YES" misplaced="YES" text="10.7 MB" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DVD-jj-g6B" userLabel="File Size Label"> - <rect key="frame" x="24" y="400" width="272" height="16"/> - <fontDescription key="fontDescription" type="system" pointSize="12"/> - <color key="textColor" red="0.63921568627450975" green="0.63921568627450975" blue="0.63921568627450975" alpha="1" colorSpace="calibratedRGB"/> - <nil key="highlightedColor"/> - </label> - <label hidden="YES" opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" misplaced="YES" text="Error" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="N2t-MX-4cK" userLabel="Error Label"> - <rect key="frame" x="24" y="418" width="272" height="16"/> - <constraints> - <constraint firstAttribute="height" constant="16" id="P2o-Hu-9Ys"/> - </constraints> - <fontDescription key="fontDescription" type="system" pointSize="16"/> - <nil key="highlightedColor"/> - </label> - <view contentMode="scaleToFill" ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="mf4-ti-xzw" userLabel="Action Bar"> - <rect key="frame" x="0.0" y="500" width="320" height="68"/> - <subviews> - <button hidden="YES" opaque="NO" contentMode="scaleToFill" ambiguous="YES" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZY0-Rn-Jvb" userLabel="Download Button" customClass="MDCFlatButton"> - <rect key="frame" x="189" y="16" width="115" height="36"/> - <constraints> - <constraint firstAttribute="height" constant="36" id="5wb-3U-z0u"/> - </constraints> - <fontDescription key="fontDescription" type="system" pointSize="14"/> - <inset key="contentEdgeInsets" minX="16" minY="0.0" maxX="16" maxY="0.0"/> - <state key="normal" title="DOWNLOAD"> - <color key="titleColor" red="0.25882352941176467" green="0.52156862745098043" blue="0.95294117647058818" alpha="1" colorSpace="calibratedRGB"/> - <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> - </state> - <connections> - <action selector="downloadButtonTapped:" destination="-1" eventType="touchUpInside" id="HWx-rL-g6I"/> - </connections> - </button> - <button hidden="YES" opaque="NO" contentMode="scaleToFill" ambiguous="YES" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fdr-8U-lOx" userLabel="Cancel Button" customClass="MDCFlatButton"> - <rect key="frame" x="215" y="16" width="89" height="36"/> - <constraints> - <constraint firstAttribute="height" constant="36" id="CEp-26-TfH"/> - </constraints> - <fontDescription key="fontDescription" type="system" pointSize="14"/> - <inset key="contentEdgeInsets" minX="16" minY="0.0" maxX="16" maxY="0.0"/> - <state key="normal" title="CANCEL"> - <color key="titleColor" red="0.85882352941176465" green="0.26666666666666666" blue="0.21568627450980393" alpha="1" colorSpace="calibratedRGB"/> - <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> - </state> - <connections> - <action selector="cancelButtonTapped:" destination="-1" eventType="touchUpInside" id="VOe-YR-FmZ"/> - </connections> - </button> - <button hidden="YES" opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" ambiguous="YES" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="RCe-Np-tu4" userLabel="Open In Button" customClass="MDCFlatButton"> - <rect key="frame" x="202" y="16" width="102" height="36"/> - <constraints> - <constraint firstAttribute="height" constant="36" id="Mbn-uc-6un"/> - </constraints> - <fontDescription key="fontDescription" type="system" pointSize="14"/> - <inset key="contentEdgeInsets" minX="16" minY="0.0" maxX="16" maxY="0.0"/> - <state key="normal" title="OPEN IN..."> - <color key="titleColor" red="0.25882352941176467" green="0.52156862745098043" blue="0.95294117647058818" alpha="1" colorSpace="calibratedRGB"/> - <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> - </state> - <connections> - <action selector="openInButtonTapped:" destination="-1" eventType="touchUpInside" id="kux-4p-DZK"/> - </connections> - </button> - <button hidden="YES" opaque="NO" contentMode="scaleToFill" ambiguous="YES" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bka-0X-s4A" userLabel="Google Drive Button" customClass="MDCFlatButton"> - <rect key="frame" x="103" y="20" width="197" height="30"/> - <constraints> - <constraint firstAttribute="height" constant="36" id="NBt-p1-tvy"/> - </constraints> - <fontDescription key="fontDescription" type="system" pointSize="14"/> - <inset key="contentEdgeInsets" minX="16" minY="0.0" maxX="16" maxY="0.0"/> - <state key="normal" title="INSTALL GOOGLE DRIVE"> - <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/> - <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> - </state> - <connections> - <action selector="googleDriveButtonTapped:" destination="-1" eventType="touchUpInside" id="6bR-jc-1u1"/> - </connections> - </button> - <view contentMode="scaleToFill" ambiguous="YES" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="vi5-3Q-93W" userLabel="Action Bar Border"> - <rect key="frame" x="0.0" y="0.0" width="320" height="1"/> - <color key="backgroundColor" white="0.0" alpha="0.13" colorSpace="calibratedWhite"/> - </view> - </subviews> - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> - <constraints> - <constraint firstAttribute="trailing" secondItem="ZY0-Rn-Jvb" secondAttribute="trailing" constant="16" id="03c-qr-eiI"/> - <constraint firstAttribute="trailing" secondItem="fdr-8U-lOx" secondAttribute="trailing" constant="16" id="2v2-Dh-lld"/> - <constraint firstItem="vi5-3Q-93W" firstAttribute="top" secondItem="mf4-ti-xzw" secondAttribute="top" id="9eW-1D-bcM"/> - <constraint firstAttribute="trailing" secondItem="RCe-Np-tu4" secondAttribute="trailing" constant="16" id="LDJ-HC-lhJ"/> - <constraint firstAttribute="trailing" secondItem="vi5-3Q-93W" secondAttribute="trailing" id="ksF-tw-umu"/> - <constraint firstItem="vi5-3Q-93W" firstAttribute="leading" secondItem="mf4-ti-xzw" secondAttribute="leading" id="msZ-nF-eFF"/> - </constraints> - </view> - </subviews> - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> - <constraints> - <constraint firstItem="yu5-8G-2xD" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="24" id="388-vR-nWw"/> - <constraint firstItem="yu5-8G-2xD" firstAttribute="trailing" relation="lessThanOrEqual" secondItem="i5M-Pr-FkT" secondAttribute="trailing" constant="-24" id="AnY-wf-Pun"/> - <constraint firstItem="N2t-MX-4cK" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="24" id="GSP-lu-z4r"/> - <constraint firstItem="DVD-jj-g6B" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="24" id="MXk-gC-2aS"/> - <constraint firstAttribute="trailing" relation="lessThanOrEqual" secondItem="DVD-jj-g6B" secondAttribute="trailing" constant="24" id="Ojk-vd-UZj"/> - <constraint firstItem="DVD-jj-g6B" firstAttribute="top" secondItem="yu5-8G-2xD" secondAttribute="bottom" constant="8" id="RZD-KL-Akd"/> - <constraint firstAttribute="centerX" secondItem="yu5-8G-2xD" secondAttribute="centerX" id="TCV-jQ-K1X"/> - <constraint firstItem="N2t-MX-4cK" firstAttribute="top" secondItem="DVD-jj-g6B" secondAttribute="bottom" id="V70-Pv-0BS"/> - <constraint firstItem="N2t-MX-4cK" firstAttribute="trailing" relation="lessThanOrEqual" secondItem="i5M-Pr-FkT" secondAttribute="trailing" constant="-24" id="Zel-JC-JTX"/> - <constraint firstItem="mf4-ti-xzw" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="cBc-dm-mmr"/> - <constraint firstAttribute="trailing" secondItem="mf4-ti-xzw" secondAttribute="trailing" id="hM4-Pt-UM0"/> - <constraint firstItem="DVD-jj-g6B" firstAttribute="trailing" secondItem="i5M-Pr-FkT" secondAttribute="trailing" constant="-24" id="hXh-Fh-hCv"/> - <constraint firstAttribute="bottom" secondItem="mf4-ti-xzw" secondAttribute="bottom" id="jAj-XG-4Hh"/> - <constraint firstAttribute="centerX" secondItem="7D5-sb-6tz" secondAttribute="centerX" id="p6n-K6-jDJ"/> - <constraint firstAttribute="centerX" secondItem="DVD-jj-g6B" secondAttribute="centerX" id="vBM-Wd-3rE"/> - <constraint firstAttribute="centerX" secondItem="N2t-MX-4cK" secondAttribute="centerX" id="y58-Q9-RDK"/> - </constraints> - </view> - </objects> - <resources> - <image name="error_icon" width="40" height="40"/> - <image name="file_icon_body" width="136" height="180"/> - <image name="file_icon_fold" width="56" height="106"/> - </resources> -</document>
diff --git a/ios/chrome/browser/ui/download/resources/error_icon.imageset/Contents.json b/ios/chrome/browser/ui/download/resources/error_icon.imageset/Contents.json deleted file mode 100644 index f485476..0000000 --- a/ios/chrome/browser/ui/download/resources/error_icon.imageset/Contents.json +++ /dev/null
@@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "error_icon.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "error_icon@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "error_icon@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file
diff --git a/ios/chrome/browser/ui/download/resources/error_icon.imageset/error_icon.png b/ios/chrome/browser/ui/download/resources/error_icon.imageset/error_icon.png deleted file mode 100644 index d04d0a7..0000000 --- a/ios/chrome/browser/ui/download/resources/error_icon.imageset/error_icon.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/browser/ui/download/resources/error_icon.imageset/error_icon@2x.png b/ios/chrome/browser/ui/download/resources/error_icon.imageset/error_icon@2x.png deleted file mode 100644 index 8fcd3315..0000000 --- a/ios/chrome/browser/ui/download/resources/error_icon.imageset/error_icon@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/browser/ui/download/resources/error_icon.imageset/error_icon@3x.png b/ios/chrome/browser/ui/download/resources/error_icon.imageset/error_icon@3x.png deleted file mode 100644 index 7e75078e..0000000 --- a/ios/chrome/browser/ui/download/resources/error_icon.imageset/error_icon@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/browser/ui/download/resources/file_icon_body.imageset/Contents.json b/ios/chrome/browser/ui/download/resources/file_icon_body.imageset/Contents.json deleted file mode 100644 index e5fb5afc..0000000 --- a/ios/chrome/browser/ui/download/resources/file_icon_body.imageset/Contents.json +++ /dev/null
@@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "file_icon_body.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "file_icon_body@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "file_icon_body@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file
diff --git a/ios/chrome/browser/ui/download/resources/file_icon_body.imageset/file_icon_body.png b/ios/chrome/browser/ui/download/resources/file_icon_body.imageset/file_icon_body.png deleted file mode 100644 index 4962d68..0000000 --- a/ios/chrome/browser/ui/download/resources/file_icon_body.imageset/file_icon_body.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/browser/ui/download/resources/file_icon_body.imageset/file_icon_body@2x.png b/ios/chrome/browser/ui/download/resources/file_icon_body.imageset/file_icon_body@2x.png deleted file mode 100644 index ed2dcb1f..0000000 --- a/ios/chrome/browser/ui/download/resources/file_icon_body.imageset/file_icon_body@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/browser/ui/download/resources/file_icon_body.imageset/file_icon_body@3x.png b/ios/chrome/browser/ui/download/resources/file_icon_body.imageset/file_icon_body@3x.png deleted file mode 100644 index b991690..0000000 --- a/ios/chrome/browser/ui/download/resources/file_icon_body.imageset/file_icon_body@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/browser/ui/download/resources/file_icon_fold.imageset/Contents.json b/ios/chrome/browser/ui/download/resources/file_icon_fold.imageset/Contents.json deleted file mode 100644 index 1343ae66..0000000 --- a/ios/chrome/browser/ui/download/resources/file_icon_fold.imageset/Contents.json +++ /dev/null
@@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "file_icon_fold.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "file_icon_fold@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "file_icon_fold@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file
diff --git a/ios/chrome/browser/ui/download/resources/file_icon_fold.imageset/file_icon_fold.png b/ios/chrome/browser/ui/download/resources/file_icon_fold.imageset/file_icon_fold.png deleted file mode 100644 index 84704ae..0000000 --- a/ios/chrome/browser/ui/download/resources/file_icon_fold.imageset/file_icon_fold.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/browser/ui/download/resources/file_icon_fold.imageset/file_icon_fold@2x.png b/ios/chrome/browser/ui/download/resources/file_icon_fold.imageset/file_icon_fold@2x.png deleted file mode 100644 index 29749b2..0000000 --- a/ios/chrome/browser/ui/download/resources/file_icon_fold.imageset/file_icon_fold@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/browser/ui/download/resources/file_icon_fold.imageset/file_icon_fold@3x.png b/ios/chrome/browser/ui/download/resources/file_icon_fold.imageset/file_icon_fold@3x.png deleted file mode 100644 index 57991be..0000000 --- a/ios/chrome/browser/ui/download/resources/file_icon_fold.imageset/file_icon_fold@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/browser/ui/download/resources/file_icon_fold_complete.imageset/Contents.json b/ios/chrome/browser/ui/download/resources/file_icon_fold_complete.imageset/Contents.json deleted file mode 100644 index 6c1c46e..0000000 --- a/ios/chrome/browser/ui/download/resources/file_icon_fold_complete.imageset/Contents.json +++ /dev/null
@@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "file_icon_fold_complete.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "file_icon_fold_complete@2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "file_icon_fold_complete@3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file
diff --git a/ios/chrome/browser/ui/download/resources/file_icon_fold_complete.imageset/file_icon_fold_complete.png b/ios/chrome/browser/ui/download/resources/file_icon_fold_complete.imageset/file_icon_fold_complete.png deleted file mode 100644 index 4d310164..0000000 --- a/ios/chrome/browser/ui/download/resources/file_icon_fold_complete.imageset/file_icon_fold_complete.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/browser/ui/download/resources/file_icon_fold_complete.imageset/file_icon_fold_complete@2x.png b/ios/chrome/browser/ui/download/resources/file_icon_fold_complete.imageset/file_icon_fold_complete@2x.png deleted file mode 100644 index 3b7aacb..0000000 --- a/ios/chrome/browser/ui/download/resources/file_icon_fold_complete.imageset/file_icon_fold_complete@2x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/browser/ui/download/resources/file_icon_fold_complete.imageset/file_icon_fold_complete@3x.png b/ios/chrome/browser/ui/download/resources/file_icon_fold_complete.imageset/file_icon_fold_complete@3x.png deleted file mode 100644 index cd11e926..0000000 --- a/ios/chrome/browser/ui/download/resources/file_icon_fold_complete.imageset/file_icon_fold_complete@3x.png +++ /dev/null Binary files differ
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_mediator.mm b/ios/chrome/browser/ui/location_bar/location_bar_mediator.mm index 70bc4485..a42a19f 100644 --- a/ios/chrome/browser/ui/location_bar/location_bar_mediator.mm +++ b/ios/chrome/browser/ui/location_bar/location_bar_mediator.mm
@@ -195,7 +195,7 @@ [self.consumer updateLocationIcon:[self currentLocationIcon] securityStatusText:base::SysUTF16ToNSString( - self.toolbarModel->GetSecureVerboseText())]; + self.toolbarModel->GetSecureAccessibilityText())]; } #pragma mark Location helpers
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_steady_view.h b/ios/chrome/browser/ui/location_bar/location_bar_steady_view.h index 99e62ac..6ab31095 100644 --- a/ios/chrome/browser/ui/location_bar/location_bar_steady_view.h +++ b/ios/chrome/browser/ui/location_bar/location_bar_steady_view.h
@@ -34,6 +34,9 @@ // Sets the location image. If |locationImage| is nil, hides the image view. - (void)setLocationImage:(UIImage*)locationImage; +// Sets the location label's text. +- (void)setLocationLabelText:(NSString*)string; + // The tappable button representing the location bar. @property(nonatomic, strong) UIButton* locationButton; // The label displaying the current location URL.
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_steady_view.mm b/ios/chrome/browser/ui/location_bar/location_bar_steady_view.mm index 2d26a6c6..e07c190 100644 --- a/ios/chrome/browser/ui/location_bar/location_bar_steady_view.mm +++ b/ios/chrome/browser/ui/location_bar/location_bar_steady_view.mm
@@ -275,6 +275,14 @@ } } +- (void)setLocationLabelText:(NSString*)string { + if ([self.locationLabel.text isEqualToString:string]) { + return; + } + self.locationLabel.text = string; + [self updateAccessibility]; +} + - (void)setSecurityLevelAccessibilityString:(NSString*)string { if ([_securityLevelAccessibilityString isEqualToString:string]) { return;
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm b/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm index e20adc91..20dc6ab 100644 --- a/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm +++ b/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm
@@ -212,7 +212,7 @@ #pragma mark - LocationBarConsumer - (void)updateLocationText:(NSString*)text { - self.locationBarSteadyView.locationLabel.text = text; + [self.locationBarSteadyView setLocationLabelText:text]; } - (void)updateLocationIcon:(UIImage*)icon
diff --git a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_constants.h b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_constants.h index acc41ae..3db70a5092 100644 --- a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_constants.h +++ b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_constants.h
@@ -11,5 +11,7 @@ extern NSString* const kCollapsedSectionsKey; // Accessibility identifier for the main view. extern NSString* const kRecentTabsTableViewControllerAccessibilityIdentifier; +// Accessibility identifier for the "Show History" cell. +extern NSString* const kRecentTabsShowFullHistoryCellAccessibilityIdentifier; #endif // IOS_CHROME_BROWSER_UI_NTP_RECENT_TABS_RECENT_TABS_CONSTANTS_H_
diff --git a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_constants.mm b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_constants.mm index e6072493..b83a421 100644 --- a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_constants.mm +++ b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_constants.mm
@@ -11,3 +11,5 @@ NSString* const kCollapsedSectionsKey = @"ChromeRecentTabsCollapsedSections"; NSString* const kRecentTabsTableViewControllerAccessibilityIdentifier = @"recent_tabs_view_controller"; +NSString* const kRecentTabsShowFullHistoryCellAccessibilityIdentifier = + @"kRecentTabsShowFullHistoryCellAccessibilityIdentifier";
diff --git a/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm b/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm index 91349dd..426f850 100644 --- a/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm +++ b/ios/chrome/browser/ui/recent_tabs/recent_tabs_table_view_controller.mm
@@ -215,6 +215,8 @@ [[TableViewAccessoryItem alloc] initWithType:ItemTypeShowFullHistory]; historyItem.title = l10n_util::GetNSString(IDS_HISTORY_SHOWFULLHISTORY_LINK); historyItem.image = [UIImage imageNamed:@"show_history"]; + historyItem.cellAccessibilityIdentifier = + kRecentTabsShowFullHistoryCellAccessibilityIdentifier; [model addItem:historyItem toSectionWithIdentifier:SectionIdentifierRecentlyClosedTabs]; }
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_accessory_item.h b/ios/chrome/browser/ui/table_view/cells/table_view_accessory_item.h index a2a6be3c..b463cba 100644 --- a/ios/chrome/browser/ui/table_view/cells/table_view_accessory_item.h +++ b/ios/chrome/browser/ui/table_view/cells/table_view_accessory_item.h
@@ -16,6 +16,8 @@ @property(nonatomic, readwrite, strong) UIImage* image; // The title label in the cell. @property(nonatomic, readwrite, copy) NSString* title; +// The accessibility identifier for the cell. +@property(nonatomic, readwrite, copy) NSString* cellAccessibilityIdentifier; @end
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_accessory_item.mm b/ios/chrome/browser/ui/table_view/cells/table_view_accessory_item.mm index a4ff17e4..f38d8bf 100644 --- a/ios/chrome/browser/ui/table_view/cells/table_view_accessory_item.mm +++ b/ios/chrome/browser/ui/table_view/cells/table_view_accessory_item.mm
@@ -15,6 +15,7 @@ @implementation TableViewAccessoryItem +@synthesize cellAccessibilityIdentifier = _cellAccessibilityIdentifier; @synthesize image = _image; @synthesize title = _title; @@ -41,7 +42,7 @@ } cell.titleLabel.text = self.title; - + cell.accessibilityIdentifier = self.cellAccessibilityIdentifier; cell.imageView.backgroundColor = styler.tableViewBackgroundColor; cell.titleLabel.backgroundColor = styler.tableViewBackgroundColor; if (styler.cellTitleColor)
diff --git a/ios/chrome/browser/ui/toolbar/keyboard_assist/OWNERS b/ios/chrome/browser/ui/toolbar/keyboard_assist/OWNERS deleted file mode 100644 index 3f33d7b..0000000 --- a/ios/chrome/browser/ui/toolbar/keyboard_assist/OWNERS +++ /dev/null
@@ -1,4 +0,0 @@ -lod@chromium.org - -# TEAM: ios-directory-owners@chromium.org -# OS: iOS
diff --git a/ios/chrome/common/OWNERS b/ios/chrome/common/OWNERS index b67c133..737378fc 100644 --- a/ios/chrome/common/OWNERS +++ b/ios/chrome/common/OWNERS
@@ -1,4 +1,3 @@ -lod@chromium.org olivierrobin@chromium.org # TEAM: ios-directory-owners@chromium.org # OS: iOS
diff --git a/ios/chrome/common/app_group/OWNERS b/ios/chrome/common/app_group/OWNERS index ff84a83..3ebff38d 100644 --- a/ios/chrome/common/app_group/OWNERS +++ b/ios/chrome/common/app_group/OWNERS
@@ -1,2 +1 @@ -lod@chromium.org olivierrobin@chromium.org
diff --git a/ios/chrome/content_widget_extension/OWNERS b/ios/chrome/content_widget_extension/OWNERS index b67c133..737378fc 100644 --- a/ios/chrome/content_widget_extension/OWNERS +++ b/ios/chrome/content_widget_extension/OWNERS
@@ -1,4 +1,3 @@ -lod@chromium.org olivierrobin@chromium.org # TEAM: ios-directory-owners@chromium.org # OS: iOS
diff --git a/ios/chrome/search_widget_extension/OWNERS b/ios/chrome/search_widget_extension/OWNERS index b67c133..737378fc 100644 --- a/ios/chrome/search_widget_extension/OWNERS +++ b/ios/chrome/search_widget_extension/OWNERS
@@ -1,4 +1,3 @@ -lod@chromium.org olivierrobin@chromium.org # TEAM: ios-directory-owners@chromium.org # OS: iOS
diff --git a/ios/chrome/share_extension/OWNERS b/ios/chrome/share_extension/OWNERS index b67c133..737378fc 100644 --- a/ios/chrome/share_extension/OWNERS +++ b/ios/chrome/share_extension/OWNERS
@@ -1,4 +1,3 @@ -lod@chromium.org olivierrobin@chromium.org # TEAM: ios-directory-owners@chromium.org # OS: iOS
diff --git a/ios/chrome/test/earl_grey/BUILD.gn b/ios/chrome/test/earl_grey/BUILD.gn index 6cb36fd..5264e0ef 100644 --- a/ios/chrome/test/earl_grey/BUILD.gn +++ b/ios/chrome/test/earl_grey/BUILD.gn
@@ -201,7 +201,6 @@ chrome_ios_eg_test("ios_chrome_external_url_egtests") { deps = [ - "//ios/chrome/browser/metrics:external_url_eg_tests", "//ios/chrome/browser/translate:external_url_eg_tests", ] }
diff --git a/ios/web/browser_state.mm b/ios/web/browser_state.mm index 58d35374..bc97df0c 100644 --- a/ios/web/browser_state.mm +++ b/ios/web/browser_state.mm
@@ -168,13 +168,7 @@ network::mojom::URLLoaderFactory* BrowserState::GetURLLoaderFactory() { if (!url_loader_factory_) { - DCHECK(!network_context_); - DCHECK(!network_context_owner_); - - net::URLRequestContextGetter* request_context = GetRequestContext(); - DCHECK(request_context); - network_context_owner_ = std::make_unique<NetworkContextOwner>( - request_context, &network_context_); + CreateNetworkContext(); auto url_loader_factory_params = network::mojom::URLLoaderFactoryParams::New(); url_loader_factory_params->process_id = network::mojom::kBrowserProcessId; @@ -187,6 +181,14 @@ return url_loader_factory_.get(); } +void BrowserState::GetProxyResolvingSocketFactory( + network::mojom::ProxyResolvingSocketFactoryRequest request) { + if (!network_context_owner_) + CreateNetworkContext(); + + network_context_->CreateProxyResolvingSocketFactory(std::move(request)); +} + scoped_refptr<network::SharedURLLoaderFactory> BrowserState::GetSharedURLLoaderFactory() { return shared_url_loader_factory_; @@ -200,6 +202,16 @@ return url_data_manager_ios_backend_; } +void BrowserState::CreateNetworkContext() { + DCHECK(!network_context_); + DCHECK(!network_context_owner_); + + net::URLRequestContextGetter* request_context = GetRequestContext(); + DCHECK(request_context); + network_context_owner_ = + std::make_unique<NetworkContextOwner>(request_context, &network_context_); +} + // static BrowserState* BrowserState::FromSupportsUserData( base::SupportsUserData* supports_user_data) {
diff --git a/ios/web/features.mm b/ios/web/features.mm index 9835b52b..d8e0984 100644 --- a/ios/web/features.mm +++ b/ios/web/features.mm
@@ -16,9 +16,6 @@ const base::Feature kSlimNavigationManager{"SlimNavigationManager", base::FEATURE_DISABLED_BY_DEFAULT}; -const base::Feature kNewFileDownload{"NewFileDownload", - base::FEATURE_ENABLED_BY_DEFAULT}; - const base::Feature kWebErrorPages{"WebErrorPages", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/ios/web/public/browser_state.h b/ios/web/public/browser_state.h index b5ff40b..d00d7dd9 100644 --- a/ios/web/public/browser_state.h +++ b/ios/web/public/browser_state.h
@@ -9,6 +9,7 @@ #include "base/supports_user_data.h" #include "services/network/public/mojom/network_service.mojom.h" +#include "services/network/public/mojom/proxy_resolving_socket.mojom.h" #include "services/network/public/mojom/url_loader_factory.mojom.h" #include "services/service_manager/embedder/embedded_service_info.h" @@ -66,6 +67,10 @@ // Returns a URLLoaderFactory that is backed by GetRequestContext. network::mojom::URLLoaderFactory* GetURLLoaderFactory(); + // Binds a ProxyResolvingSocketFactory request to NetworkContext. + void GetProxyResolvingSocketFactory( + network::mojom::ProxyResolvingSocketFactoryRequest request); + // Like URLLoaderFactory, but wrapped inside SharedURLLoaderFactory scoped_refptr<network::SharedURLLoaderFactory> GetSharedURLLoaderFactory(); @@ -115,6 +120,8 @@ // Not intended for usage outside of //web. URLDataManagerIOSBackend* GetURLDataManagerIOSBackendOnIOThread(); + void CreateNetworkContext(); + network::mojom::URLLoaderFactoryPtr url_loader_factory_; scoped_refptr<network::WeakWrapperSharedURLLoaderFactory> shared_url_loader_factory_;
diff --git a/ios/web/public/features.h b/ios/web/public/features.h index f6bc0c36..ecbef4f6 100644 --- a/ios/web/public/features.h +++ b/ios/web/public/features.h
@@ -19,9 +19,6 @@ // Used to enable the WKBackForwardList based navigation manager. extern const base::Feature kSlimNavigationManager; -// Used to enable new Download Manager UI and backend. -extern const base::Feature kNewFileDownload; - // Used to enable displaying error pages in WebState by loading HTML string. extern const base::Feature kWebErrorPages;
diff --git a/ios/web/public/test/fakes/test_native_content_provider.mm b/ios/web/public/test/fakes/test_native_content_provider.mm index 6baf869..510aef1 100644 --- a/ios/web/public/test/fakes/test_native_content_provider.mm +++ b/ios/web/public/test/fakes/test_native_content_provider.mm
@@ -39,13 +39,6 @@ return nativeContent == _nativeContent.end() ? nil : nativeContent->second; } -- (id<CRWNativeContent>)controllerForUnhandledContentAtURL:(const GURL&)URL - webState: - (web::WebState*)webState { - auto nativeContent = _nativeContent.find(URL); - return nativeContent == _nativeContent.end() ? nil : nativeContent->second; -} - - (CGFloat)nativeContentHeaderHeightForWebState:(web::WebState*)webState { return 0; }
diff --git a/ios/web/public/web_state/ui/crw_native_content_provider.h b/ios/web/public/web_state/ui/crw_native_content_provider.h index 6aad3ba..337db2b 100644 --- a/ios/web/public/web_state/ui/crw_native_content_provider.h +++ b/ios/web/public/web_state/ui/crw_native_content_provider.h
@@ -40,15 +40,6 @@ withError:(NSError*)error isPost:(BOOL)isPost; -// Returns an autoreleased controller for driving a native view contained -// within the web content area for unhandled content at |URL|. |webState| -// triggered the navigation to |URL|. -// TODO(crbug.com/791806) DEPRECATED! Clients must use web::DownloadController -// for renderer initiated downloads. -- (id<CRWNativeContent>)controllerForUnhandledContentAtURL:(const GURL&)URL - webState: - (web::WebState*)webState; - // Called to retrieve the height of any header that is overlaying on top of the // native content. This can be used to implement, for e.g. a toolbar that // changes height dynamically. Returning a non-zero height affects the visible
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm index d2313fb..1ca827e 100644 --- a/ios/web/web_state/ui/crw_web_controller.mm +++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -2985,36 +2985,11 @@ // executed when web controller rejected the load inside // decidePolicyForNavigationResponse: to handle download or WKWebView // opened a Universal Link. - NSString* errorURLSpec = - error.userInfo[NSURLErrorFailingURLStringErrorKey]; - NSURL* errorURL = [NSURL URLWithString:errorURLSpec]; - NSString* MIMEType = [_pendingNavigationInfo MIMEType]; - if (!base::FeatureList::IsEnabled(web::features::kNewFileDownload) && - ![MIMEType isEqualToString:@"application/vnd.apple.pkpass"]) { - // This block is executed to handle legacy download navigation. - const GURL errorGURL = net::GURLWithNSURL(errorURL); - if (errorGURL.is_valid()) { - id<CRWNativeContent> controller = [_nativeProvider - controllerForUnhandledContentAtURL:errorGURL - webState:self.webState]; - if (controller) { - [self loadCompleteWithSuccess:NO forNavigation:navigation]; - [self removeWebView]; - [self setNativeController:controller]; - [self loadNativeViewWithSuccess:YES - navigationContext:navigationContext]; - _loadPhase = web::PAGE_LOADED; - return; - } - } - } - if (!navigationContext->IsDownload()) { // Non-download navigation was cancelled because WKWebView has opened a // Universal Link and called webView:didFailProvisionalNavigation:. self.navigationManagerImpl->DiscardNonCommittedItems(); } - _webStateImpl->SetIsLoading(false); return; } @@ -4419,13 +4394,9 @@ responseURL, contentDisposition, contentLength, base::SysNSStringToUTF8(MIMEType), transition); } - BOOL isPassKit = [MIMEType isEqualToString:@"application/vnd.apple.pkpass"]; - if (isPassKit || - base::FeatureList::IsEnabled(web::features::kNewFileDownload)) { - // Discard the pending item to ensure that the current URL is not - // different from what is displayed on the view. - [self discardNonCommittedItemsIfLastCommittedWasNotNativeView]; - } + // Discard the pending item to ensure that the current URL is not different + // from what is displayed on the view. + [self discardNonCommittedItemsIfLastCommittedWasNotNativeView]; _webStateImpl->SetIsLoading(false); }
diff --git a/ios/web_view/internal/sync/web_view_gcm_profile_service_factory.mm b/ios/web_view/internal/sync/web_view_gcm_profile_service_factory.mm index baa19f8..27134ab5 100644 --- a/ios/web_view/internal/sync/web_view_gcm_profile_service_factory.mm +++ b/ios/web_view/internal/sync/web_view_gcm_profile_service_factory.mm
@@ -16,6 +16,7 @@ #include "ios/web_view/internal/signin/web_view_identity_manager_factory.h" #include "ios/web_view/internal/web_view_browser_state.h" #include "services/network/public/cpp/shared_url_loader_factory.h" +#include "services/network/public/mojom/proxy_resolving_socket.mojom.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -23,6 +24,34 @@ namespace ios_web_view { +namespace { + +// Requests a ProxyResolvingSocketFactoryPtr on the UI thread. Note that a +// WeakPtr of GCMProfileService is needed to detect when the KeyedService shuts +// down, and avoid calling into |profile| which might have also been destroyed. +void RequestProxyResolvingSocketFactoryOnUIThread( + web::BrowserState* context, + base::WeakPtr<gcm::GCMProfileService> service, + network::mojom::ProxyResolvingSocketFactoryRequest request) { + if (!service) + return; + context->GetProxyResolvingSocketFactory(std::move(request)); +} + +// A thread-safe wrapper to request a ProxyResolvingSocketFactoryPtr. +void RequestProxyResolvingSocketFactory( + web::BrowserState* context, + base::WeakPtr<gcm::GCMProfileService> service, + network::mojom::ProxyResolvingSocketFactoryRequest request) { + web::WebThread::GetTaskRunnerForThread(web::WebThread::UI) + ->PostTask( + FROM_HERE, + base::BindOnce(&RequestProxyResolvingSocketFactoryOnUIThread, context, + std::move(service), std::move(request))); +} + +} // namespace + // static gcm::GCMProfileService* WebViewGCMProfileServiceFactory::GetForBrowserState( WebViewBrowserState* browser_state) { @@ -64,6 +93,7 @@ return std::make_unique<gcm::GCMProfileService>( browser_state->GetPrefs(), browser_state->GetStatePath(), browser_state->GetRequestContext(), + base::BindRepeating(&RequestProxyResolvingSocketFactory, context), browser_state->GetSharedURLLoaderFactory(), version_info::Channel::UNKNOWN, GetProductCategoryForSubtypes(), WebViewIdentityManagerFactory::GetForBrowserState(browser_state),
diff --git a/mash/runner/main.cc b/mash/runner/main.cc index 9484317..68e56a3 100644 --- a/mash/runner/main.cc +++ b/mash/runner/main.cc
@@ -87,10 +87,12 @@ base::test::ScopedTaskEnvironment scoped_task_environment; service_manager::Context service_manager_context(nullptr, std::move(manifest_value)); + base::RunLoop loop; scoped_task_environment.GetMainThreadTaskRunner()->PostTask( FROM_HERE, base::Bind(&service_manager::Context::RunCommandLineApplication, - base::Unretained(&service_manager_context))); - base::RunLoop().Run(); + base::Unretained(&service_manager_context), + loop.QuitClosure())); + loop.Run(); return 0; }
diff --git a/media/audio/fuchsia/audio_output_stream_fuchsia.cc b/media/audio/fuchsia/audio_output_stream_fuchsia.cc index d41a2039..0417433 100644 --- a/media/audio/fuchsia/audio_output_stream_fuchsia.cc +++ b/media/audio/fuchsia/audio_output_stream_fuchsia.cc
@@ -32,7 +32,7 @@ fuchsia::media::AudioPtr audio_server = base::fuchsia::ComponentContext::GetDefault() ->ConnectToService<fuchsia::media::Audio>(); - audio_server->CreateRendererV2(audio_renderer_.NewRequest()); + audio_server->CreateAudioRenderer2(audio_renderer_.NewRequest()); audio_renderer_.set_error_handler( fit::bind_member(this, &AudioOutputStreamFuchsia::OnRendererError)); @@ -200,7 +200,7 @@ if (reference_time_.is_null()) { audio_renderer_->Play( - fuchsia::media::kNoTimestamp, stream_position_samples_ - frames_filled, + fuchsia::media::NO_TIMESTAMP, stream_position_samples_ - frames_filled, [this](int64_t reference_time, int64_t media_time) { if (!callback_) return;
diff --git a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java index 356a46b..2fe9c77 100644 --- a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java +++ b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
@@ -330,6 +330,13 @@ @CalledByNative void release() { + if (mUseAsyncApi) { + // Disconnect from the native code to ensure we don't issue calls + // into it after its destruction. + synchronized (this) { + mNativeMediaCodecBridge = 0; + } + } try { String codecName = "unknown"; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
diff --git a/media/base/android/media_codec_bridge_impl.cc b/media/base/android/media_codec_bridge_impl.cc index 07324d83..9946bae 100644 --- a/media/base/android/media_codec_bridge_impl.cc +++ b/media/base/android/media_codec_bridge_impl.cc
@@ -325,8 +325,8 @@ MediaCodecBridgeImpl::MediaCodecBridgeImpl( ScopedJavaGlobalRef<jobject> j_bridge, base::RepeatingClosure on_buffers_available_cb) - : j_bridge_(std::move(j_bridge)), - on_buffers_available_cb_(std::move(on_buffers_available_cb)) { + : on_buffers_available_cb_(std::move(on_buffers_available_cb)), + j_bridge_(std::move(j_bridge)) { DCHECK(!j_bridge_.is_null()); if (on_buffers_available_cb_.is_null())
diff --git a/media/base/android/media_codec_bridge_impl.h b/media/base/android/media_codec_bridge_impl.h index 8560db40..ba541b1 100644 --- a/media/base/android/media_codec_bridge_impl.h +++ b/media/base/android/media_codec_bridge_impl.h
@@ -150,9 +150,10 @@ JNIEnv* /* env */, const base::android::JavaParamRef<jobject>& /* obj */) override; + base::RepeatingClosure on_buffers_available_cb_; + // The Java MediaCodecBridge instance. base::android::ScopedJavaGlobalRef<jobject> j_bridge_; - base::RepeatingClosure on_buffers_available_cb_; DISALLOW_COPY_AND_ASSIGN(MediaCodecBridgeImpl); };
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc index 7361893..4610d85e 100644 --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc
@@ -325,6 +325,10 @@ const base::Feature kUseSurfaceLayerForVideo{"UseSurfaceLayerForVideo", base::FEATURE_ENABLED_BY_DEFAULT}; +// Use SurfaceLayer instead of VideoLayer for MediaStream. +const base::Feature kUseSurfaceLayerForVideoMS{ + "UseSurfaceLayerForVideoMS", base::FEATURE_DISABLED_BY_DEFAULT}; + // Enable VA-API hardware encode acceleration for VP8. const base::Feature kVaapiVP8Encoder{"VaapiVP8Encoder", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/media/base/media_switches.h b/media/base/media_switches.h index 967fd507..6be16b7 100644 --- a/media/base/media_switches.h +++ b/media/base/media_switches.h
@@ -138,6 +138,7 @@ MEDIA_EXPORT extern const base::Feature kVideoBlitColorAccuracy; MEDIA_EXPORT extern const base::Feature kUnifiedAutoplay; MEDIA_EXPORT extern const base::Feature kUseSurfaceLayerForVideo; +MEDIA_EXPORT extern const base::Feature kUseSurfaceLayerForVideoMS; MEDIA_EXPORT extern const base::Feature kUseModernMediaControls; #if defined(OS_ANDROID)
diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc index 3ca7160..1bd40a8 100644 --- a/media/base/video_frame.cc +++ b/media/base/video_frame.cc
@@ -413,6 +413,7 @@ sizeof(frame->mailbox_holders_)); frame->mailbox_holders_release_cb_ = ReleaseMailboxCB(); frame->dmabuf_fds_ = std::move(dmabuf_fds); + DCHECK(frame->HasDmaBufs()); return frame; } @@ -863,6 +864,10 @@ return ret; } + +bool VideoFrame::HasDmaBufs() const { + return !dmabuf_fds_.empty(); +} #endif void VideoFrame::AddReadOnlySharedMemoryRegion(
diff --git a/media/base/video_frame.h b/media/base/video_frame.h index b180e7e..befc00bf 100644 --- a/media/base/video_frame.h +++ b/media/base/video_frame.h
@@ -425,6 +425,9 @@ // that the caller shall not close them, or use them after the VideoFrame is // destroyed. std::vector<int> DmabufFds() const; + + // Returns true if |frame| has DmaBufs. + bool HasDmaBufs() const; #endif void AddReadOnlySharedMemoryRegion(base::ReadOnlySharedMemoryRegion* region);
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h index 12694a6..330194f 100644 --- a/media/blink/webmediaplayer_impl.h +++ b/media/blink/webmediaplayer_impl.h
@@ -879,10 +879,7 @@ // Whether the use of a surface layer instead of a video layer is enabled. bool surface_layer_for_video_enabled_ = false; - base::OnceCallback<std::unique_ptr<blink::WebSurfaceLayerBridge>( - blink::WebSurfaceLayerBridgeObserver*, - cc::UpdateSubmissionStateCB)> - create_bridge_callback_; + CreateSurfaceLayerBridgeCB create_bridge_callback_; base::CancelableOnceCallback<void(base::TimeTicks)> frame_time_report_cb_;
diff --git a/media/blink/webmediaplayer_params.cc b/media/blink/webmediaplayer_params.cc index 0436885..42317de1 100644 --- a/media/blink/webmediaplayer_params.cc +++ b/media/blink/webmediaplayer_params.cc
@@ -28,9 +28,7 @@ bool enable_instant_source_buffer_gc, bool embedded_media_experience_enabled, mojom::MediaMetricsProviderPtr metrics_provider, - base::OnceCallback<std::unique_ptr<blink::WebSurfaceLayerBridge>( - blink::WebSurfaceLayerBridgeObserver*, - cc::UpdateSubmissionStateCB)> create_bridge_callback, + CreateSurfaceLayerBridgeCB create_bridge_callback, scoped_refptr<viz::ContextProvider> context_provider, bool use_surface_layer_for_video) : defer_load_cb_(defer_load_cb),
diff --git a/media/blink/webmediaplayer_params.h b/media/blink/webmediaplayer_params.h index 0793f19..21b132e0 100644 --- a/media/blink/webmediaplayer_params.h +++ b/media/blink/webmediaplayer_params.h
@@ -37,6 +37,11 @@ namespace media { +using CreateSurfaceLayerBridgeCB = + base::OnceCallback<std::unique_ptr<blink::WebSurfaceLayerBridge>( + blink::WebSurfaceLayerBridgeObserver*, + cc::UpdateSubmissionStateCB)>; + class SwitchableAudioRendererSink; // Holds parameters for constructing WebMediaPlayerImpl without having @@ -81,9 +86,7 @@ bool enable_instant_source_buffer_gc, bool embedded_media_experience_enabled, mojom::MediaMetricsProviderPtr metrics_provider, - base::OnceCallback<std::unique_ptr<blink::WebSurfaceLayerBridge>( - blink::WebSurfaceLayerBridgeObserver*, - cc::UpdateSubmissionStateCB)> bridge_callback, + CreateSurfaceLayerBridgeCB bridge_callback, scoped_refptr<viz::ContextProvider> context_provider, bool use_surface_layer_for_video); @@ -153,10 +156,7 @@ return request_routing_token_cb_; } - base::OnceCallback<std::unique_ptr<blink::WebSurfaceLayerBridge>( - blink::WebSurfaceLayerBridgeObserver*, - cc::UpdateSubmissionStateCB)> - create_bridge_callback() { + CreateSurfaceLayerBridgeCB create_bridge_callback() { return std::move(create_bridge_callback_); } @@ -187,10 +187,7 @@ bool enable_instant_source_buffer_gc_; const bool embedded_media_experience_enabled_; mojom::MediaMetricsProviderPtr metrics_provider_; - base::OnceCallback<std::unique_ptr<blink::WebSurfaceLayerBridge>( - blink::WebSurfaceLayerBridgeObserver*, - cc::UpdateSubmissionStateCB)> - create_bridge_callback_; + CreateSurfaceLayerBridgeCB create_bridge_callback_; scoped_refptr<viz::ContextProvider> context_provider_; bool use_surface_layer_for_video_;
diff --git a/media/gpu/v4l2/v4l2_jpeg_decode_accelerator.cc b/media/gpu/v4l2/v4l2_jpeg_decode_accelerator.cc index 6cb64f5..22fe7351 100644 --- a/media/gpu/v4l2/v4l2_jpeg_decode_accelerator.cc +++ b/media/gpu/v4l2/v4l2_jpeg_decode_accelerator.cc
@@ -133,8 +133,9 @@ const BitstreamBuffer& bitstream_buffer, scoped_refptr<VideoFrame> video_frame) : bitstream_buffer_id(bitstream_buffer.id()), - shm(bitstream_buffer.handle(), bitstream_buffer.size(), true), - offset(bitstream_buffer.offset()), + shm(bitstream_buffer.handle(), + bitstream_buffer.size(), + bitstream_buffer.offset()), out_frame(video_frame) {} V4L2JpegDecodeAccelerator::JobRecord::~JobRecord() {} @@ -289,7 +290,7 @@ void V4L2JpegDecodeAccelerator::DecodeTask( std::unique_ptr<JobRecord> job_record) { DCHECK(decoder_task_runner_->BelongsToCurrentThread()); - if (!job_record->shm.MapAt(job_record->offset, job_record->shm.size())) { + if (!job_record->shm.IsValid()) { VPLOGF(1) << "could not map bitstream_buffer"; PostNotifyError(job_record->bitstream_buffer_id, UNREADABLE_INPUT); return;
diff --git a/media/gpu/v4l2/v4l2_jpeg_decode_accelerator.h b/media/gpu/v4l2/v4l2_jpeg_decode_accelerator.h index f68c213..c40c422 100644 --- a/media/gpu/v4l2/v4l2_jpeg_decode_accelerator.h +++ b/media/gpu/v4l2/v4l2_jpeg_decode_accelerator.h
@@ -67,9 +67,7 @@ // Input image buffer ID. int32_t bitstream_buffer_id; // Memory mapped from |bitstream_buffer|. - UnalignedSharedMemory shm; - // Offset used for shm. - off_t offset; + WritableUnalignedMapping shm; // Output frame buffer. scoped_refptr<VideoFrame> out_frame; };
diff --git a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc index feb0f9c4..98b4181 100644 --- a/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc +++ b/media/gpu/v4l2/v4l2_slice_video_decode_accelerator.cc
@@ -201,8 +201,7 @@ ~BitstreamBufferRef(); const base::WeakPtr<VideoDecodeAccelerator::Client> client; const scoped_refptr<base::SingleThreadTaskRunner> client_task_runner; - const std::unique_ptr<UnalignedSharedMemory> shm; - off_t offset; + const std::unique_ptr<WritableUnalignedMapping> shm; off_t bytes_used; const int32_t input_id; }; @@ -214,11 +213,10 @@ int32_t input_id) : client(client), client_task_runner(client_task_runner), - shm(buffer ? std::make_unique<UnalignedSharedMemory>(buffer->handle(), - buffer->size(), - true) + shm(buffer ? std::make_unique<WritableUnalignedMapping>(buffer->handle(), + buffer->size(), + buffer->offset()) : nullptr), - offset(buffer ? buffer->offset() : 0), bytes_used(0), input_id(input_id) {} @@ -1349,12 +1347,12 @@ new BitstreamBufferRef(decode_client_, decode_task_runner_, &bitstream_buffer, bitstream_buffer.id())); - // Skip empty buffer. + // Skip empty buffer. This must be done after creating bitstream_record as the + // handle in the bitstream_buffer needs to be consumed. if (bitstream_buffer.size() == 0) return; - if (!bitstream_record->shm->MapAt(bitstream_record->offset, - bitstream_record->shm->size())) { + if (!bitstream_record->shm->IsValid()) { VLOGF(1) << "Could not map bitstream_buffer"; NOTIFY_ERROR(UNREADABLE_INPUT); return;
diff --git a/media/gpu/v4l2/v4l2_video_decode_accelerator.cc b/media/gpu/v4l2/v4l2_video_decode_accelerator.cc index a89015a0..e6260515 100644 --- a/media/gpu/v4l2/v4l2_video_decode_accelerator.cc +++ b/media/gpu/v4l2/v4l2_video_decode_accelerator.cc
@@ -78,8 +78,7 @@ ~BitstreamBufferRef(); const base::WeakPtr<Client> client; const scoped_refptr<base::SingleThreadTaskRunner> client_task_runner; - const std::unique_ptr<UnalignedSharedMemory> shm; - off_t offset; + const std::unique_ptr<WritableUnalignedMapping> shm; size_t bytes_used; const int32_t input_id; }; @@ -98,11 +97,10 @@ int32_t input_id) : client(client), client_task_runner(client_task_runner), - shm(buffer ? std::make_unique<UnalignedSharedMemory>(buffer->handle(), - buffer->size(), - true) + shm(buffer ? std::make_unique<WritableUnalignedMapping>(buffer->handle(), + buffer->size(), + buffer->offset()) : nullptr), - offset(buffer ? buffer->offset() : 0), bytes_used(0), input_id(input_id) {} @@ -779,12 +777,12 @@ new BitstreamBufferRef(decode_client_, decode_task_runner_, &bitstream_buffer, bitstream_buffer.id())); - // Skip empty buffer. + // Skip empty buffer. This must be done after creating bitstream_record as the + // handle in the bitstream_buffer needs to be consumed. if (bitstream_buffer.size() == 0) return; - if (!bitstream_record->shm->MapAt(bitstream_record->offset, - bitstream_record->shm->size())) { + if (!bitstream_record->shm->IsValid()) { VLOGF(1) << "could not map bitstream_buffer"; NOTIFY_ERROR(UNREADABLE_INPUT); return;
diff --git a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc index 347d285..702ea012 100644 --- a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc +++ b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
@@ -89,10 +89,10 @@ namespace media { struct V4L2VideoEncodeAccelerator::BitstreamBufferRef { - BitstreamBufferRef(int32_t id, std::unique_ptr<UnalignedSharedMemory> shm) + BitstreamBufferRef(int32_t id, std::unique_ptr<WritableUnalignedMapping> shm) : id(id), shm(std::move(shm)) {} const int32_t id; - const std::unique_ptr<UnalignedSharedMemory> shm; + const std::unique_ptr<WritableUnalignedMapping> shm; }; V4L2VideoEncodeAccelerator::InputRecord::InputRecord() : at_device(false) {} @@ -250,7 +250,9 @@ return false; } - RequestEncodingParametersChange(config.initial_bitrate, kInitialFramerate); + RequestEncodingParametersChange( + config.initial_bitrate, + config.initial_framerate.value_or(kDefaultFramerate)); encoder_state_ = kInitialized; @@ -307,9 +309,9 @@ return; } - auto shm = std::make_unique<UnalignedSharedMemory>(buffer.handle(), - buffer.size(), false); - if (!shm->MapAt(buffer.offset(), buffer.size())) { + auto shm = std::make_unique<WritableUnalignedMapping>( + buffer.handle(), buffer.size(), buffer.offset()); + if (!shm->IsValid()) { NOTIFY_ERROR(kPlatformFailureError); return; }
diff --git a/media/gpu/v4l2/v4l2_video_encode_accelerator.h b/media/gpu/v4l2/v4l2_video_encode_accelerator.h index 9535ff6..8c78f86 100644 --- a/media/gpu/v4l2/v4l2_video_encode_accelerator.h +++ b/media/gpu/v4l2/v4l2_video_encode_accelerator.h
@@ -91,7 +91,7 @@ }; enum { - kInitialFramerate = 30, + kDefaultFramerate = 30, // These are rather subjectively tuned. kInputBufferCount = 2, kOutputBufferCount = 2,
diff --git a/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.cc b/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.cc index 7c09af1..e2b83646 100644 --- a/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.cc +++ b/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.cc
@@ -84,7 +84,7 @@ // consumption, provided by the client. struct VaapiJpegDecodeAccelerator::DecodeRequest { DecodeRequest(int32_t bitstream_buffer_id, - std::unique_ptr<UnalignedSharedMemory> shm, + std::unique_ptr<WritableUnalignedMapping> shm, const scoped_refptr<VideoFrame>& video_frame) : bitstream_buffer_id(bitstream_buffer_id), shm(std::move(shm)), @@ -92,7 +92,7 @@ ~DecodeRequest() = default; int32_t bitstream_buffer_id; - std::unique_ptr<UnalignedSharedMemory> shm; + std::unique_ptr<WritableUnalignedMapping> shm; scoped_refptr<VideoFrame> video_frame; }; @@ -310,17 +310,17 @@ DVLOGF(4) << "Mapping new input buffer id: " << bitstream_buffer.id() << " size: " << bitstream_buffer.size(); - // UnalignedSharedMemory will take over the |bitstream_buffer.handle()|. - auto shm = std::make_unique<UnalignedSharedMemory>( - bitstream_buffer.handle(), bitstream_buffer.size(), true); - if (bitstream_buffer.id() < 0) { VLOGF(1) << "Invalid bitstream_buffer, id: " << bitstream_buffer.id(); NotifyErrorFromDecoderThread(bitstream_buffer.id(), INVALID_ARGUMENT); return; } - if (!shm->MapAt(bitstream_buffer.offset(), bitstream_buffer.size())) { + auto shm = std::make_unique<WritableUnalignedMapping>( + bitstream_buffer.handle(), bitstream_buffer.size(), + bitstream_buffer.offset()); + + if (!shm->IsValid()) { VLOGF(1) << "Failed to map input buffer"; NotifyErrorFromDecoderThread(bitstream_buffer.id(), UNREADABLE_INPUT); return;
diff --git a/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.h b/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.h index f3f6e74..4ba645e 100644 --- a/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.h +++ b/media/gpu/vaapi/vaapi_jpeg_decode_accelerator.h
@@ -16,7 +16,6 @@ #include "base/synchronization/lock.h" #include "base/threading/thread.h" #include "media/base/bitstream_buffer.h" -#include "media/base/unaligned_shared_memory.h" #include "media/gpu/media_gpu_export.h" #include "media/gpu/vaapi/vaapi_jpeg_decoder.h" #include "media/gpu/vaapi/vaapi_wrapper.h"
diff --git a/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc b/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc index afedbcd4..2b6040c0 100644 --- a/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc +++ b/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.cc
@@ -50,8 +50,8 @@ VaapiJpegEncodeAccelerator::EncodeRequest::EncodeRequest( int32_t buffer_id, scoped_refptr<media::VideoFrame> video_frame, - std::unique_ptr<UnalignedSharedMemory> exif_shm, - std::unique_ptr<UnalignedSharedMemory> output_shm, + std::unique_ptr<WritableUnalignedMapping> exif_shm, + std::unique_ptr<WritableUnalignedMapping> output_shm, int quality) : buffer_id(buffer_id), video_frame(std::move(video_frame)), @@ -286,12 +286,11 @@ return; } - std::unique_ptr<UnalignedSharedMemory> exif_shm; + std::unique_ptr<WritableUnalignedMapping> exif_shm; if (exif_buffer) { - // |exif_shm| will take ownership of the |exif_buffer->handle()|. - exif_shm = std::make_unique<UnalignedSharedMemory>( - exif_buffer->handle(), exif_buffer->size(), true); - if (!exif_shm->MapAt(exif_buffer->offset(), exif_buffer->size())) { + exif_shm = std::make_unique<WritableUnalignedMapping>( + exif_buffer->handle(), exif_buffer->size(), exif_buffer->offset()); + if (!exif_shm->IsValid()) { VLOGF(1) << "Failed to map exif buffer"; task_runner_->PostTask( FROM_HERE, base::BindOnce(&VaapiJpegEncodeAccelerator::NotifyError, @@ -307,10 +306,9 @@ } } - // |output_shm| will take ownership of the |output_buffer.handle()|. - auto output_shm = std::make_unique<UnalignedSharedMemory>( - output_buffer.handle(), output_buffer.size(), false); - if (!output_shm->MapAt(output_buffer.offset(), output_buffer.size())) { + auto output_shm = std::make_unique<WritableUnalignedMapping>( + output_buffer.handle(), output_buffer.size(), output_buffer.offset()); + if (!output_shm->IsValid()) { VLOGF(1) << "Failed to map output buffer"; task_runner_->PostTask( FROM_HERE,
diff --git a/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.h b/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.h index 5a7f22c..534aa09 100644 --- a/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.h +++ b/media/gpu/vaapi/vaapi_jpeg_encode_accelerator.h
@@ -50,15 +50,15 @@ struct EncodeRequest { EncodeRequest(int32_t buffer_id, scoped_refptr<media::VideoFrame> video_frame, - std::unique_ptr<UnalignedSharedMemory> exif_shm, - std::unique_ptr<UnalignedSharedMemory> output_shm, + std::unique_ptr<WritableUnalignedMapping> exif_shm, + std::unique_ptr<WritableUnalignedMapping> output_shm, int quality); ~EncodeRequest(); int32_t buffer_id; scoped_refptr<media::VideoFrame> video_frame; - std::unique_ptr<UnalignedSharedMemory> exif_shm; - std::unique_ptr<UnalignedSharedMemory> output_shm; + std::unique_ptr<WritableUnalignedMapping> exif_shm; + std::unique_ptr<WritableUnalignedMapping> output_shm; int quality; DISALLOW_COPY_AND_ASSIGN(EncodeRequest);
diff --git a/media/gpu/vaapi/vaapi_video_decode_accelerator.cc b/media/gpu/vaapi/vaapi_video_decode_accelerator.cc index b347326..38406c59 100644 --- a/media/gpu/vaapi/vaapi_video_decode_accelerator.cc +++ b/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
@@ -86,7 +86,7 @@ public: InputBuffer() = default; InputBuffer(uint32_t id, - std::unique_ptr<UnalignedSharedMemory> shm, + std::unique_ptr<WritableUnalignedMapping> shm, base::OnceCallback<void(int32_t id)> release_cb) : id_(id), shm_(std::move(shm)), release_cb_(std::move(release_cb)) {} ~InputBuffer() { @@ -98,11 +98,11 @@ // Indicates this is a dummy buffer for flush request. bool IsFlushRequest() const { return shm_ == nullptr; } int32_t id() const { return id_; } - UnalignedSharedMemory* shm() const { return shm_.get(); } + WritableUnalignedMapping* shm() const { return shm_.get(); } private: const int32_t id_ = -1; - const std::unique_ptr<UnalignedSharedMemory> shm_; + const std::unique_ptr<WritableUnalignedMapping> shm_; base::OnceCallback<void(int32_t id)> release_cb_; DISALLOW_COPY_AND_ASSIGN(InputBuffer); @@ -287,11 +287,11 @@ DCHECK(flush_buffer->IsFlushRequest()); input_buffers_.push(std::move(flush_buffer)); } else { - auto shm = std::make_unique<UnalignedSharedMemory>( - bitstream_buffer.handle(), bitstream_buffer.size(), true); - RETURN_AND_NOTIFY_ON_FAILURE( - shm->MapAt(bitstream_buffer.offset(), bitstream_buffer.size()), - "Failed to map input buffer", UNREADABLE_INPUT, ); + auto shm = std::make_unique<WritableUnalignedMapping>( + bitstream_buffer.handle(), bitstream_buffer.size(), + bitstream_buffer.offset()); + RETURN_AND_NOTIFY_ON_FAILURE(shm->IsValid(), "Failed to map input buffer", + UNREADABLE_INPUT, ); auto input_buffer = std::make_unique<InputBuffer>( bitstream_buffer.id(), std::move(shm),
diff --git a/media/gpu/vaapi/vaapi_video_encode_accelerator.cc b/media/gpu/vaapi/vaapi_video_encode_accelerator.cc index fdb300e2..9cbb8c26 100644 --- a/media/gpu/vaapi/vaapi_video_encode_accelerator.cc +++ b/media/gpu/vaapi/vaapi_video_encode_accelerator.cc
@@ -126,13 +126,12 @@ struct VaapiVideoEncodeAccelerator::BitstreamBufferRef { BitstreamBufferRef(int32_t id, const BitstreamBuffer& buffer) : id(id), - shm(std::make_unique<UnalignedSharedMemory>(buffer.handle(), - buffer.size(), - false)), - offset(buffer.offset()) {} + shm(std::make_unique<WritableUnalignedMapping>(buffer.handle(), + buffer.size(), + buffer.offset())) {} + const int32_t id; - const std::unique_ptr<UnalignedSharedMemory> shm; - const off_t offset; + const std::unique_ptr<WritableUnalignedMapping> shm; }; VideoEncodeAccelerator::SupportedProfiles @@ -297,8 +296,10 @@ // TODO(johnylin): pass |config.h264_output_level| to H264Encoder. // https://crbug.com/863327 - if (!encoder_->Initialize(config.input_visible_size, config.output_profile, - config.initial_bitrate, kDefaultFramerate)) { + if (!encoder_->Initialize( + config.input_visible_size, config.output_profile, + config.initial_bitrate, + config.initial_framerate.value_or(kDefaultFramerate))) { NOTIFY_ERROR(kInvalidArgumentError, "Failed initializing encoder"); return; } @@ -413,6 +414,7 @@ scoped_refptr<VaapiEncodeJob> encode_job, std::unique_ptr<BitstreamBufferRef> buffer) { DCHECK(encoder_thread_task_runner_->BelongsToCurrentThread()); + DCHECK(buffer->shm->IsValid()); uint8_t* target_data = reinterpret_cast<uint8_t*>(buffer->shm->memory()); size_t data_size = 0; @@ -550,7 +552,7 @@ DCHECK(encoder_thread_task_runner_->BelongsToCurrentThread()); DCHECK_NE(state_, kUninitialized); - if (!buffer_ref->shm->MapAt(buffer_ref->offset, buffer_ref->shm->size())) { + if (!buffer_ref->shm->IsValid()) { NOTIFY_ERROR(kPlatformFailureError, "Failed mapping shared memory."); return; }
diff --git a/media/gpu/video_encode_accelerator_unittest.cc b/media/gpu/video_encode_accelerator_unittest.cc index 28b8e99..86d61403 100644 --- a/media/gpu/video_encode_accelerator_unittest.cc +++ b/media/gpu/video_encode_accelerator_unittest.cc
@@ -1478,14 +1478,9 @@ // Helper function to create VEA. static std::unique_ptr<VideoEncodeAccelerator> CreateVideoEncodeAccelerator( - VideoPixelFormat input_format, - const gfx::Size& input_visible_size, - VideoCodecProfile output_profile, - uint32_t initial_bitrate, + const VideoEncodeAccelerator::Config& config, VideoEncodeAccelerator::Client* client, const gpu::GpuPreferences& gpu_preferences) { - const VideoEncodeAccelerator::Config config(input_format, input_visible_size, - output_profile, initial_bitrate); if (g_fake_encoder) { std::unique_ptr<VideoEncodeAccelerator> encoder( new FakeVideoEncodeAccelerator( @@ -1508,9 +1503,10 @@ DVLOG(1) << "Profile: " << test_stream_->requested_profile << ", initial bitrate: " << requested_bitrate_; - encoder_ = CreateVideoEncodeAccelerator( + const VideoEncodeAccelerator::Config config( kInputFormat, test_stream_->visible_size, test_stream_->requested_profile, - requested_bitrate_, this, gpu::GpuPreferences()); + requested_bitrate_, requested_framerate_); + encoder_ = CreateVideoEncodeAccelerator(config, this, gpu::GpuPreferences()); if (!encoder_) { LOG(ERROR) << "Failed creating a VideoEncodeAccelerator."; SetState(CS_ERROR); @@ -2128,9 +2124,10 @@ LOG_ASSERT(g_env->test_streams_.size()); gfx::Size visible_size(width_, height_); - encoder_ = CreateVideoEncodeAccelerator( + const VideoEncodeAccelerator::Config config( kInputFormat, visible_size, g_env->test_streams_[0]->requested_profile, - bitrate_, this, gpu::GpuPreferences()); + bitrate_, fps_); + encoder_ = CreateVideoEncodeAccelerator(config, this, gpu::GpuPreferences()); if (!encoder_) { LOG(ERROR) << "Failed creating a VideoEncodeAccelerator."; SetState(CS_ERROR);
diff --git a/media/mojo/interfaces/video_encode_accelerator.mojom b/media/mojo/interfaces/video_encode_accelerator.mojom index c827b9b..4ff5a0fe 100644 --- a/media/mojo/interfaces/video_encode_accelerator.mojom +++ b/media/mojo/interfaces/video_encode_accelerator.mojom
@@ -49,6 +49,8 @@ gfx.mojom.Size input_visible_size; VideoCodecProfile output_profile; uint32 initial_bitrate; + uint32 initial_framerate; + bool has_initial_framerate; // Whether or not config has initial framerate uint8 h264_output_level; bool has_h264_output_level; // Whether or not config has H264 output level };
diff --git a/media/mojo/interfaces/video_encode_accelerator_mojom_traits.cc b/media/mojo/interfaces/video_encode_accelerator_mojom_traits.cc index b80b0100..fdf0098b 100644 --- a/media/mojo/interfaces/video_encode_accelerator_mojom_traits.cc +++ b/media/mojo/interfaces/video_encode_accelerator_mojom_traits.cc
@@ -133,6 +133,11 @@ if (!input.ReadOutputProfile(&output_profile)) return false; + base::Optional<uint32_t> initial_framerate; + if (input.has_initial_framerate()) { + initial_framerate = input.initial_framerate(); + } + base::Optional<uint8_t> h264_output_level; if (input.has_h264_output_level()) { h264_output_level = input.h264_output_level(); @@ -140,7 +145,7 @@ *output = media::VideoEncodeAccelerator::Config( input_format, input_visible_size, output_profile, input.initial_bitrate(), - h264_output_level); + initial_framerate, h264_output_level); return true; }
diff --git a/media/mojo/interfaces/video_encode_accelerator_mojom_traits.h b/media/mojo/interfaces/video_encode_accelerator_mojom_traits.h index 13c26c2a..170cd4c 100644 --- a/media/mojo/interfaces/video_encode_accelerator_mojom_traits.h +++ b/media/mojo/interfaces/video_encode_accelerator_mojom_traits.h
@@ -98,6 +98,16 @@ return input.initial_bitrate; } + static uint32_t initial_framerate( + const media::VideoEncodeAccelerator::Config& input) { + return input.initial_framerate.value_or(0); + } + + static bool has_initial_framerate( + const media::VideoEncodeAccelerator::Config& input) { + return input.initial_framerate.has_value(); + } + static uint8_t h264_output_level( const media::VideoEncodeAccelerator::Config& input) { return input.h264_output_level.value_or(0);
diff --git a/media/video/gpu_memory_buffer_video_frame_pool.cc b/media/video/gpu_memory_buffer_video_frame_pool.cc index 49e2982..5c88cc2 100644 --- a/media/video/gpu_memory_buffer_video_frame_pool.cc +++ b/media/video/gpu_memory_buffer_video_frame_pool.cc
@@ -27,6 +27,7 @@ #include "base/trace_event/memory_dump_manager.h" #include "base/trace_event/memory_dump_provider.h" #include "base/trace_event/trace_event.h" +#include "build/build_config.h" #include "gpu/GLES2/gl2extchromium.h" #include "gpu/command_buffer/client/gles2_interface.h" #include "media/base/bind_to_current_loop.h" @@ -561,6 +562,11 @@ gpu_factories_->VideoFrameOutputFormat(video_frame->BitDepth()); } + bool is_software_backed_video_frame = !video_frame->HasTextures(); +#if defined(OS_LINUX) + is_software_backed_video_frame &= !video_frame->HasDmaBufs(); +#endif + bool passthrough = false; if (output_format_ == GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED) passthrough = true; @@ -594,7 +600,7 @@ case PIXEL_FORMAT_YUV444P12: case PIXEL_FORMAT_Y16: case PIXEL_FORMAT_UNKNOWN: - if (!video_frame->HasTextures()) { + if (is_software_backed_video_frame) { UMA_HISTOGRAM_ENUMERATION( "Media.GpuMemoryBufferVideoFramePool.UnsupportedFormat", video_frame->format(), PIXEL_FORMAT_MAX + 1);
diff --git a/media/video/video_encode_accelerator.cc b/media/video/video_encode_accelerator.cc index 93845dc..64d9fce 100644 --- a/media/video/video_encode_accelerator.cc +++ b/media/video/video_encode_accelerator.cc
@@ -35,11 +35,13 @@ const gfx::Size& input_visible_size, VideoCodecProfile output_profile, uint32_t initial_bitrate, + base::Optional<uint32_t> initial_framerate, base::Optional<uint8_t> h264_output_level) : input_format(input_format), input_visible_size(input_visible_size), output_profile(output_profile), initial_bitrate(initial_bitrate), + initial_framerate(initial_framerate), h264_output_level(h264_output_level) {} VideoEncodeAccelerator::Config::~Config() = default; @@ -51,6 +53,10 @@ VideoPixelFormatToString(input_format).c_str(), input_visible_size.ToString().c_str(), GetProfileName(output_profile).c_str(), initial_bitrate); + if (initial_framerate) { + str += base::StringPrintf(", initial_framerate: %u", + initial_framerate.value()); + } if (h264_output_level) { str += base::StringPrintf(", h264_output_level: %u", h264_output_level.value());
diff --git a/media/video/video_encode_accelerator.h b/media/video/video_encode_accelerator.h index 61a054a7..58d6254e 100644 --- a/media/video/video_encode_accelerator.h +++ b/media/video/video_encode_accelerator.h
@@ -102,6 +102,7 @@ const gfx::Size& input_visible_size, VideoCodecProfile output_profile, uint32_t initial_bitrate, + base::Optional<uint32_t> initial_framerate = base::nullopt, base::Optional<uint8_t> h264_output_level = base::nullopt); ~Config(); @@ -122,6 +123,10 @@ // Initial bitrate of encoded output stream in bits per second. uint32_t initial_bitrate; + // Initial encoding framerate in frames per second. This is optional and + // VideoEncodeAccelerator should use default framerate if not given. + base::Optional<uint32_t> initial_framerate; + // Codec level of encoded output stream for H264 only. This value should // be aligned to the H264 standard definition of SPS.level_idc. The only // exception is in Main and Baseline profile we still use
diff --git a/mojo/public/cpp/bindings/array_traits_stl.h b/mojo/public/cpp/bindings/array_traits_stl.h index dec47bf..61688ed 100644 --- a/mojo/public/cpp/bindings/array_traits_stl.h +++ b/mojo/public/cpp/bindings/array_traits_stl.h
@@ -14,6 +14,29 @@ namespace mojo { template <typename T> +struct ArrayTraits<std::unordered_set<T>> { + using Element = T; + using ConstIterator = typename std::unordered_set<T>::const_iterator; + + static bool IsNull(const std::unordered_set<T>& input) { + // std::unordered_set<> is always converted to non-null mojom array. + return false; + } + + static size_t GetSize(const std::unordered_set<T>& input) { + return input.size(); + } + + static ConstIterator GetBegin(const std::unordered_set<T>& input) { + return input.begin(); + } + + static void AdvanceIterator(ConstIterator& iterator) { ++iterator; } + + static const T& GetValue(ConstIterator& iterator) { return *iterator; } +}; + +template <typename T> struct ArrayTraits<std::vector<T>> { using Element = T;
diff --git a/mojo/public/cpp/bindings/callback_helpers.h b/mojo/public/cpp/bindings/callback_helpers.h index be4d97b..94bc98cc 100644 --- a/mojo/public/cpp/bindings/callback_helpers.h +++ b/mojo/public/cpp/bindings/callback_helpers.h
@@ -15,7 +15,7 @@ // This is a helper utility to wrap a base::OnceCallback such that if the // callback is destructed before it has a chance to run (e.g. the callback is -// bound into a task and the task is dropped), it will be run the with +// bound into a task and the task is dropped), it will be run with the // default arguments passed into WrapCallbackWithDefaultInvokeIfNotRun. // Alternatively, it will run the delete closure passed to // WrapCallbackWithDropHandler.
diff --git a/net/base/completion_callback.h b/net/base/completion_callback.h index 78658bd8..eb60f872 100644 --- a/net/base/completion_callback.h +++ b/net/base/completion_callback.h
@@ -21,8 +21,6 @@ // error code. typedef base::Callback<void(int64_t)> Int64CompletionCallback; -typedef base::CancelableCallback<void(int)> CancelableCompletionCallback; - } // namespace net #endif // NET_BASE_COMPLETION_CALLBACK_H_
diff --git a/net/base/elements_upload_data_stream.cc b/net/base/elements_upload_data_stream.cc index 5500c5c..8716a722 100644 --- a/net/base/elements_upload_data_stream.cc +++ b/net/base/elements_upload_data_stream.cc
@@ -6,7 +6,6 @@ #include "base/bind.h" #include "base/logging.h" -#include "net/base/completion_callback.h" #include "net/base/io_buffer.h" #include "net/base/net_errors.h" #include "net/base/upload_bytes_element_reader.h"
diff --git a/net/base/file_stream_unittest.cc b/net/base/file_stream_unittest.cc index 2fa7c1d..4a89052 100644 --- a/net/base/file_stream_unittest.cc +++ b/net/base/file_stream_unittest.cc
@@ -499,8 +499,6 @@ total_bytes_written_(total_bytes_written), total_bytes_read_(total_bytes_read), data_read_(data_read), - callback_(base::Bind(&TestWriteReadCompletionCallback::OnComplete, - base::Unretained(this))), test_data_(CreateTestDataBuffer()), drainable_(new DrainableIOBuffer(test_data_.get(), kTestDataSize)) {} @@ -515,7 +513,10 @@ return result_; } - const CompletionCallback& callback() const { return callback_; } + CompletionOnceCallback callback() { + return base::BindOnce(&TestWriteReadCompletionCallback::OnComplete, + base::Unretained(this)); + } void ValidateWrittenData() { TestCompletionCallback callback; @@ -579,7 +580,6 @@ int* total_bytes_written_; int* total_bytes_read_; std::string* data_read_; - const CompletionCallback callback_; scoped_refptr<IOBufferWithSize> test_data_; scoped_refptr<DrainableIOBuffer> drainable_; @@ -638,8 +638,6 @@ waiting_for_result_(false), stream_(stream), total_bytes_written_(total_bytes_written), - callback_(base::Bind(&TestWriteCloseCompletionCallback::OnComplete, - base::Unretained(this))), test_data_(CreateTestDataBuffer()), drainable_(new DrainableIOBuffer(test_data_.get(), kTestDataSize)) {} @@ -654,7 +652,10 @@ return result_; } - const CompletionCallback& callback() const { return callback_; } + CompletionOnceCallback callback() { + return base::BindOnce(&TestWriteCloseCompletionCallback::OnComplete, + base::Unretained(this)); + } private: void OnComplete(int result) { @@ -686,7 +687,6 @@ bool waiting_for_result_; FileStream* stream_; int* total_bytes_written_; - const CompletionCallback callback_; scoped_refptr<IOBufferWithSize> test_data_; scoped_refptr<DrainableIOBuffer> drainable_;
diff --git a/net/base/test_completion_callback_unittest.cc b/net/base/test_completion_callback_unittest.cc index f2dd1e67..5a0242d 100644 --- a/net/base/test_completion_callback_unittest.cc +++ b/net/base/test_completion_callback_unittest.cc
@@ -12,7 +12,7 @@ #include "base/macros.h" #include "base/single_thread_task_runner.h" #include "base/threading/thread_task_runner_handle.h" -#include "net/base/completion_callback.h" +#include "net/base/completion_once_callback.h" #include "net/test/test_with_scoped_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" @@ -41,7 +41,7 @@ // Posts to the current thread a task which itself posts |callback| to the // current thread. Returns true on success - bool DoSomething(const CompletionCallback& callback); + bool DoSomething(CompletionOnceCallback callback); private: class ExampleWorker; @@ -54,8 +54,8 @@ class ExampleEmployer::ExampleWorker : public base::RefCountedThreadSafe<ExampleWorker> { public: - ExampleWorker(ExampleEmployer* employer, const CompletionCallback& callback) - : employer_(employer), callback_(callback) {} + ExampleWorker(ExampleEmployer* employer, CompletionOnceCallback callback) + : employer_(employer), callback_(std::move(callback)) {} void DoWork(); void DoCallback(); private: @@ -65,7 +65,7 @@ // Only used on the origin thread (where DoSomething was called). ExampleEmployer* employer_; - CompletionCallback callback_; + CompletionOnceCallback callback_; // Used to post ourselves onto the origin thread. const scoped_refptr<base::SingleThreadTaskRunner> origin_task_runner_ = base::ThreadTaskRunnerHandle::Get(); @@ -86,17 +86,17 @@ // destroyed. employer_->request_ = NULL; - callback_.Run(kMagicResult); + std::move(callback_).Run(kMagicResult); } ExampleEmployer::ExampleEmployer() = default; ExampleEmployer::~ExampleEmployer() = default; -bool ExampleEmployer::DoSomething(const CompletionCallback& callback) { +bool ExampleEmployer::DoSomething(CompletionOnceCallback callback) { DCHECK(!request_.get()) << "already in use"; - request_ = new ExampleWorker(this, callback); + request_ = new ExampleWorker(this, std::move(callback)); if (!base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::Bind(&ExampleWorker::DoWork, request_))) { @@ -126,10 +126,10 @@ ExampleEmployer boss; TestClosure closure; bool did_check_result = false; - CompletionCallback completion_callback = - base::Bind(&CallClosureAfterCheckingResult, closure.closure(), - base::Unretained(&did_check_result)); - bool queued = boss.DoSomething(completion_callback); + CompletionOnceCallback completion_callback = + base::BindOnce(&CallClosureAfterCheckingResult, closure.closure(), + base::Unretained(&did_check_result)); + bool queued = boss.DoSomething(std::move(completion_callback)); EXPECT_TRUE(queued); EXPECT_FALSE(did_check_result);
diff --git a/net/disk_cache/entry_unittest.cc b/net/disk_cache/entry_unittest.cc index cdd90e0c..9829b347 100644 --- a/net/disk_cache/entry_unittest.cc +++ b/net/disk_cache/entry_unittest.cc
@@ -2257,10 +2257,10 @@ DoomSparseEntry(); } -// A CompletionCallback wrapper that deletes the cache from within the callback. -// The way a CompletionCallback works means that all tasks (even new ones) -// are executed by the message loop before returning to the caller so the only -// way to simulate a race is to execute what we want on the callback. +// A TestCompletionCallback wrapper that deletes the cache from within the +// callback. The way TestCompletionCallback works means that all tasks (even +// new ones) are executed by the message loop before returning to the caller so +// the only way to simulate a race is to execute what we want on the callback. class SparseTestCompletionCallback: public net::TestCompletionCallback { public: explicit SparseTestCompletionCallback(
diff --git a/net/http/bidirectional_stream_unittest.cc b/net/http/bidirectional_stream_unittest.cc index 42ed8b91..06d0e27e 100644 --- a/net/http/bidirectional_stream_unittest.cc +++ b/net/http/bidirectional_stream_unittest.cc
@@ -18,6 +18,7 @@ #include "base/time/time.h" #include "base/timer/mock_timer.h" #include "build/build_config.h" +#include "net/base/completion_once_callback.h" #include "net/base/load_timing_info.h" #include "net/base/load_timing_info_test_util.h" #include "net/base/net_errors.h" @@ -121,7 +122,7 @@ EXPECT_TRUE(request_headers_sent); if (callback_.is_null()) return; - callback_.Run(OK); + std::move(callback_).Run(OK); } void OnHeadersReceived( @@ -178,8 +179,8 @@ void Start(std::unique_ptr<BidirectionalStreamRequestInfo> request_info, HttpNetworkSession* session, - const CompletionCallback& cb) { - callback_ = cb; + CompletionOnceCallback cb) { + callback_ = std::move(cb); stream_.reset(new BidirectionalStream(std::move(request_info), session, true, this, std::move(timer_))); if (run_until_completion_) @@ -304,7 +305,7 @@ // calling into |stream_|. bool not_expect_callback_; - CompletionCallback callback_; + CompletionOnceCallback callback_; DISALLOW_COPY_AND_ASSIGN(TestDelegateBase); };
diff --git a/net/http/http_cache_lookup_manager.cc b/net/http/http_cache_lookup_manager.cc index d3f1ef53..650929e 100644 --- a/net/http/http_cache_lookup_manager.cc +++ b/net/http/http_cache_lookup_manager.cc
@@ -37,7 +37,7 @@ int HttpCacheLookupManager::LookupTransaction::StartLookup( HttpCache* cache, - const CompletionCallback& callback, + CompletionOnceCallback callback, const NetLogWithSource& session_net_log) { net_log_.BeginEvent(NetLogEventType::SERVER_PUSH_LOOKUP_TRANSACTION, base::Bind(&NetLogPushLookupTransactionCallback, @@ -47,7 +47,7 @@ request_->method = "GET"; request_->load_flags = LOAD_ONLY_FROM_CACHE | LOAD_SKIP_CACHE_VALIDATION; cache->CreateTransaction(DEFAULT_PRIORITY, &transaction_); - return transaction_->Start(request_.get(), callback, net_log_); + return transaction_->Start(request_.get(), std::move(callback), net_log_); } void HttpCacheLookupManager::LookupTransaction::OnLookupComplete(int result) {
diff --git a/net/http/http_cache_lookup_manager.h b/net/http/http_cache_lookup_manager.h index 8a651bd..ba649cd 100644 --- a/net/http/http_cache_lookup_manager.h +++ b/net/http/http_cache_lookup_manager.h
@@ -42,7 +42,7 @@ // Issues an HttpCache::Transaction to lookup whether the response is cached // without header validation. int StartLookup(HttpCache* cache, - const CompletionCallback& callback, + CompletionOnceCallback callback, const NetLogWithSource& session_net_log); void OnLookupComplete(int result);
diff --git a/net/http/http_cache_transaction.cc b/net/http/http_cache_transaction.cc index 835b976..01d558f 100644 --- a/net/http/http_cache_transaction.cc +++ b/net/http/http_cache_transaction.cc
@@ -227,8 +227,9 @@ return mode_; } -int HttpCache::Transaction::WriteMetadata(IOBuffer* buf, int buf_len, - const CompletionCallback& callback) { +int HttpCache::Transaction::WriteMetadata(IOBuffer* buf, + int buf_len, + CompletionOnceCallback callback) { DCHECK(buf); DCHECK_GT(buf_len, 0); DCHECK(!callback.is_null()); @@ -240,7 +241,7 @@ // avoid writing again (it should be the same, right?), but let's allow the // caller to "update" the contents with something new. return entry_->disk_entry->WriteData(kMetadataIndex, 0, buf, buf_len, - callback, true); + std::move(callback), true); } LoadState HttpCache::Transaction::GetWriterLoadState() const { @@ -3025,18 +3026,21 @@ return OK; } -int HttpCache::Transaction::WriteToEntry(int index, int offset, - IOBuffer* data, int data_len, - const CompletionCallback& callback) { +int HttpCache::Transaction::WriteToEntry(int index, + int offset, + IOBuffer* data, + int data_len, + CompletionOnceCallback callback) { if (!entry_) return data_len; int rv = 0; if (!partial_ || !data_len) { - rv = entry_->disk_entry->WriteData(index, offset, data, data_len, callback, - true); + rv = entry_->disk_entry->WriteData(index, offset, data, data_len, + std::move(callback), true); } else { - rv = partial_->CacheWrite(entry_->disk_entry, data, data_len, callback); + rv = partial_->CacheWrite(entry_->disk_entry, data, data_len, + std::move(callback)); } return rv; }
diff --git a/net/http/http_cache_transaction.h b/net/http/http_cache_transaction.h index a5682a0..31fada99 100644 --- a/net/http/http_cache_transaction.h +++ b/net/http/http_cache_transaction.h
@@ -18,7 +18,6 @@ #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "base/time/time.h" -#include "net/base/completion_callback.h" #include "net/base/completion_once_callback.h" #include "net/base/completion_repeating_callback.h" #include "net/base/io_buffer.h" @@ -104,7 +103,7 @@ // method. int WriteMetadata(IOBuffer* buf, int buf_len, - const CompletionCallback& callback); + CompletionOnceCallback callback); HttpCache::ActiveEntry* entry() { return entry_; } @@ -114,7 +113,7 @@ // to the cache entry. LoadState GetWriterLoadState() const; - const CompletionCallback& io_callback() { return io_callback_; } + const CompletionRepeatingCallback& io_callback() { return io_callback_; } const NetLogWithSource& net_log() const; @@ -454,8 +453,11 @@ // Called to write data to the cache entry. If the write fails, then the // cache entry is destroyed. Future calls to this function will just do // nothing without side-effect. Returns a network error code. - int WriteToEntry(int index, int offset, IOBuffer* data, int data_len, - const CompletionCallback& callback); + int WriteToEntry(int index, + int offset, + IOBuffer* data, + int data_len, + CompletionOnceCallback callback); // Called to write response_ to the cache entry. |truncated| indicates if the // entry should be marked as incomplete.
diff --git a/net/http/http_cache_unittest.cc b/net/http/http_cache_unittest.cc index 2aa204fa..4040675 100644 --- a/net/http/http_cache_unittest.cc +++ b/net/http/http_cache_unittest.cc
@@ -29,7 +29,6 @@ #include "base/trace_event/process_memory_dump.h" #include "base/trace_event/trace_event_argument.h" #include "net/base/cache_type.h" -#include "net/base/completion_callback.h" #include "net/base/elements_upload_data_stream.h" #include "net/base/host_port_pair.h" #include "net/base/ip_endpoint.h"
diff --git a/net/http/http_cache_writers.cc b/net/http/http_cache_writers.cc index 2ccc30a2..d21d427 100644 --- a/net/http/http_cache_writers.cc +++ b/net/http/http_cache_writers.cc
@@ -54,7 +54,7 @@ int HttpCache::Writers::Read(scoped_refptr<IOBuffer> buf, int buf_len, - const CompletionCallback& callback, + CompletionOnceCallback callback, Transaction* transaction) { DCHECK(buf); DCHECK_GT(buf_len, 0); @@ -65,7 +65,7 @@ // this transaction waits for the read to complete and gets its buffer filled // with the data returned from that read. if (next_state_ != State::NONE) { - WaitingForRead read_info(buf, buf_len, callback); + WaitingForRead read_info(buf, buf_len, std::move(callback)); waiting_for_read_.insert(std::make_pair(transaction, std::move(read_info))); return ERR_IO_PENDING; } @@ -82,7 +82,7 @@ int rv = DoLoop(OK); if (rv == ERR_IO_PENDING) - callback_ = callback; + callback_ = std::move(callback); return rv; } @@ -254,9 +254,8 @@ true /* response_truncated */); data->Done(); io_buf_len_ = data->pickle()->size(); - CompletionCallback noop_callback = base::BindRepeating([](int result) {}); entry_->disk_entry->WriteData(kResponseInfoIndex, 0, data.get(), io_buf_len_, - noop_callback, true); + base::DoNothing(), true); } bool HttpCache::Writers::ShouldTruncate() { @@ -350,31 +349,33 @@ } } while (next_state_ != State::NONE && rv != ERR_IO_PENDING); - // Save the callback as this object may be destroyed when the cache callback - // is run. - CompletionCallback callback = callback_; - - if (next_state_ == State::NONE) { - read_buf_ = NULL; - callback_.Reset(); - DCHECK(!all_writers_.empty() || cache_callback_); - if (cache_callback_) - std::move(cache_callback_).Run(); - // |this| may have been destroyed in the cache_callback_. + if (next_state_ != State::NONE) { + if (rv != ERR_IO_PENDING && !callback_.is_null()) { + std::move(callback_).Run(rv); + } + return rv; } - if (rv != ERR_IO_PENDING && !callback.is_null()) { - base::ResetAndReturn(&callback).Run(rv); - } + // Save the callback as |this| may be destroyed when |cache_callback_| is run. + // Note that |callback_| is intentionally reset even if it is not run. + CompletionOnceCallback callback = std::move(callback_); + read_buf_ = NULL; + DCHECK(!all_writers_.empty() || cache_callback_); + if (cache_callback_) + std::move(cache_callback_).Run(); + // |this| may have been destroyed in the |cache_callback_|. + if (rv != ERR_IO_PENDING && !callback.is_null()) + std::move(callback).Run(rv); return rv; } int HttpCache::Writers::DoNetworkRead() { DCHECK(network_transaction_); next_state_ = State::NETWORK_READ_COMPLETE; - CompletionCallback io_callback = - base::Bind(&HttpCache::Writers::OnIOComplete, weak_factory_.GetWeakPtr()); - return network_transaction_->Read(read_buf_.get(), io_buf_len_, io_callback); + CompletionOnceCallback io_callback = base::BindOnce( + &HttpCache::Writers::OnIOComplete, weak_factory_.GetWeakPtr()); + return network_transaction_->Read(read_buf_.get(), io_buf_len_, + std::move(io_callback)); } int HttpCache::Writers::DoNetworkReadComplete(int result) { @@ -408,8 +409,8 @@ return num_bytes; int current_size = entry_->disk_entry->GetDataSize(kResponseContentIndex); - CompletionCallback io_callback = - base::Bind(&HttpCache::Writers::OnIOComplete, weak_factory_.GetWeakPtr()); + CompletionOnceCallback io_callback = base::BindOnce( + &HttpCache::Writers::OnIOComplete, weak_factory_.GetWeakPtr()); int rv = 0; @@ -424,11 +425,11 @@ if (!partial) { rv = entry_->disk_entry->WriteData(kResponseContentIndex, current_size, - read_buf_.get(), num_bytes, io_callback, - true); + read_buf_.get(), num_bytes, + std::move(io_callback), true); } else { rv = partial->CacheWrite(entry_->disk_entry, read_buf_.get(), num_bytes, - io_callback); + std::move(io_callback)); } return rv; }
diff --git a/net/http/http_cache_writers.h b/net/http/http_cache_writers.h index f92f51c9..e914ab1 100644 --- a/net/http/http_cache_writers.h +++ b/net/http/http_cache_writers.h
@@ -10,7 +10,6 @@ #include <memory> #include "base/memory/weak_ptr.h" -#include "net/base/completion_callback.h" #include "net/base/completion_once_callback.h" #include "net/http/http_cache.h" @@ -68,7 +67,7 @@ // |callback|. int Read(scoped_refptr<IOBuffer> buf, int buf_len, - const CompletionCallback& callback, + CompletionOnceCallback callback, Transaction* transaction); // Invoked when StopCaching is called on a member transaction. @@ -278,7 +277,7 @@ // written. bool should_keep_entry_ = true; - CompletionCallback callback_; // Callback for active_transaction_. + CompletionOnceCallback callback_; // Callback for active_transaction_. // Since cache_ can destroy |this|, |cache_callback_| is only invoked at the // end of DoLoop().
diff --git a/net/http/http_response_body_drainer.h b/net/http/http_response_body_drainer.h index e2d159d..7f72b06 100644 --- a/net/http/http_response_body_drainer.h +++ b/net/http/http_response_body_drainer.h
@@ -10,7 +10,6 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/timer/timer.h" -#include "net/base/completion_callback.h" #include "net/base/net_export.h" #include "net/http/http_network_session.h" @@ -56,7 +55,6 @@ const std::unique_ptr<HttpStream> stream_; State next_state_; int total_read_; - CompletionCallback user_callback_; base::OneShotTimer timer_; HttpNetworkSession* session_;
diff --git a/net/http/http_stream_factory_job_controller.cc b/net/http/http_stream_factory_job_controller.cc index 3f33223..8e4733dd 100644 --- a/net/http/http_stream_factory_job_controller.cc +++ b/net/http/http_stream_factory_job_controller.cc
@@ -748,10 +748,10 @@ HostPortPair destination(HostPortPair::FromURL(request_info_.url)); GURL origin_url = ApplyHostMappingRules(request_info_.url, &destination); - CompletionCallback io_callback = + CompletionOnceCallback io_callback = base::Bind(&JobController::OnIOComplete, base::Unretained(this)); return session_->proxy_resolution_service()->ResolveProxy( - origin_url, request_info_.method, &proxy_info_, io_callback, + origin_url, request_info_.method, &proxy_info_, std::move(io_callback), &proxy_resolve_request_, session_->context().proxy_delegate, net_log_); }
diff --git a/net/http/partial_data.cc b/net/http/partial_data.cc index 823eee70..c485fb0b 100644 --- a/net/http/partial_data.cc +++ b/net/http/partial_data.cc
@@ -15,7 +15,6 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" -#include "net/base/completion_once_callback.h" #include "net/base/net_errors.h" #include "net/disk_cache/disk_cache.h" #include "net/http/http_response_headers.h" @@ -94,7 +93,7 @@ } int PartialData::ShouldValidateCache(disk_cache::Entry* entry, - const CompletionCallback& callback) { + CompletionOnceCallback callback) { DCHECK_GE(current_range_start_, 0); // Scan the disk cache for the first cached portion within this range. @@ -117,7 +116,7 @@ std::move(cb)); if (cached_min_len_ == ERR_IO_PENDING) { - callback_ = callback; + callback_ = std::move(callback); return ERR_IO_PENDING; } else { cached_start_ = *start; @@ -398,7 +397,7 @@ int PartialData::CacheRead(disk_cache::Entry* entry, IOBuffer* data, int data_len, - const CompletionCallback& callback) { + CompletionOnceCallback callback) { int read_len = std::min(data_len, cached_min_len_); if (!read_len) return 0; @@ -406,13 +405,13 @@ int rv = 0; if (sparse_entry_) { rv = entry->ReadSparseData(current_range_start_, data, read_len, - callback); + std::move(callback)); } else { if (current_range_start_ > std::numeric_limits<int32_t>::max()) return ERR_INVALID_ARGUMENT; rv = entry->ReadData(kDataStream, static_cast<int>(current_range_start_), - data, read_len, callback); + data, read_len, std::move(callback)); } return rv; } @@ -420,17 +419,17 @@ int PartialData::CacheWrite(disk_cache::Entry* entry, IOBuffer* data, int data_len, - const CompletionCallback& callback) { + CompletionOnceCallback callback) { DVLOG(3) << "To write: " << data_len; if (sparse_entry_) { - return entry->WriteSparseData( - current_range_start_, data, data_len, callback); + return entry->WriteSparseData(current_range_start_, data, data_len, + std::move(callback)); } else { if (current_range_start_ > std::numeric_limits<int32_t>::max()) return ERR_INVALID_ARGUMENT; return entry->WriteData(kDataStream, static_cast<int>(current_range_start_), - data, data_len, callback, true); + data, data_len, std::move(callback), true); } }
diff --git a/net/http/partial_data.h b/net/http/partial_data.h index 0822d03f..9120ff4 100644 --- a/net/http/partial_data.h +++ b/net/http/partial_data.h
@@ -9,7 +9,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" -#include "net/base/completion_callback.h" +#include "net/base/completion_once_callback.h" #include "net/http/http_byte_range.h" #include "net/http/http_request_headers.h" @@ -57,7 +57,7 @@ // error code. If this method returns ERR_IO_PENDING, the |callback| will be // notified when the result is ready. int ShouldValidateCache(disk_cache::Entry* entry, - const CompletionCallback& callback); + CompletionOnceCallback callback); // Builds the required |headers| to perform the proper cache validation for // the next range to be fetched. @@ -106,14 +106,14 @@ int CacheRead(disk_cache::Entry* entry, IOBuffer* data, int data_len, - const CompletionCallback& callback); + CompletionOnceCallback callback); // Writes |data_len| bytes to cache. This is basically a wrapper around the // API of the cache that provides the right arguments for the current range. int CacheWrite(disk_cache::Entry* entry, IOBuffer* data, int data_len, - const CompletionCallback& callback); + CompletionOnceCallback callback); // This method should be called when CacheRead() finishes the read, to update // the internal state about the current range. @@ -155,7 +155,7 @@ bool sparse_entry_; bool truncated_; // We have an incomplete 200 stored. bool initial_validation_; // Only used for truncated entries. - CompletionCallback callback_; + CompletionOnceCallback callback_; base::WeakPtrFactory<PartialData> weak_factory_; DISALLOW_COPY_AND_ASSIGN(PartialData);
diff --git a/net/proxy_resolution/network_delegate_error_observer_unittest.cc b/net/proxy_resolution/network_delegate_error_observer_unittest.cc index 9ddb750..bfb0867 100644 --- a/net/proxy_resolution/network_delegate_error_observer_unittest.cc +++ b/net/proxy_resolution/network_delegate_error_observer_unittest.cc
@@ -12,7 +12,6 @@ #include "base/test/scoped_task_environment.h" #include "base/threading/thread.h" #include "base/threading/thread_task_runner_handle.h" -#include "net/base/completion_callback.h" #include "net/base/net_errors.h" #include "net/base/network_delegate_impl.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc b/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc index abdaeb0..029c025 100644 --- a/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc +++ b/net/proxy_resolution/pac_file_fetcher_impl_unittest.cc
@@ -19,7 +19,6 @@ #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_task_environment.h" #include "base/threading/thread_task_runner_handle.h" -#include "net/base/completion_callback.h" #include "net/base/filename_util.h" #include "net/base/load_flags.h" #include "net/base/network_delegate_impl.h"
diff --git a/net/proxy_resolution/proxy_resolution_service.cc b/net/proxy_resolution/proxy_resolution_service.cc index 3703bcb..c0580eb 100644 --- a/net/proxy_resolution/proxy_resolution_service.cc +++ b/net/proxy_resolution/proxy_resolution_service.cc
@@ -1092,15 +1092,10 @@ // static std::unique_ptr<ProxyResolutionService> ProxyResolutionService::CreateDirect() { - return CreateDirectWithNetLog(NULL); -} - -std::unique_ptr<ProxyResolutionService> -ProxyResolutionService::CreateDirectWithNetLog(NetLog* net_log) { // Use direct connections. return std::make_unique<ProxyResolutionService>( std::make_unique<ProxyConfigServiceDirect>(), - std::make_unique<ProxyResolverFactoryForNullResolver>(), net_log); + std::make_unique<ProxyResolverFactoryForNullResolver>(), nullptr); } // static
diff --git a/net/proxy_resolution/proxy_resolution_service.h b/net/proxy_resolution/proxy_resolution_service.h index d85001e7e..b98c50d 100644 --- a/net/proxy_resolution/proxy_resolution_service.h +++ b/net/proxy_resolution/proxy_resolution_service.h
@@ -261,9 +261,6 @@ // Creates a proxy service that uses a DIRECT connection for all requests. static std::unique_ptr<ProxyResolutionService> CreateDirect(); - // |net_log|'s lifetime must exceed ProxyResolutionService. - static std::unique_ptr<ProxyResolutionService> CreateDirectWithNetLog( - NetLog* net_log); // This method is used by tests to create a ProxyResolutionService that // returns a hardcoded proxy fallback list (|pac_string|) for every URL.
diff --git a/net/proxy_resolution/proxy_resolution_service_unittest.cc b/net/proxy_resolution/proxy_resolution_service_unittest.cc index 43e7a8b..0aadcab 100644 --- a/net/proxy_resolution/proxy_resolution_service_unittest.cc +++ b/net/proxy_resolution/proxy_resolution_service_unittest.cc
@@ -530,24 +530,25 @@ explicit DeletingCallback(std::unique_ptr<T>* deletee); ~DeletingCallback() override; - const CompletionCallback& callback() const { return callback_; } + CompletionOnceCallback callback() { + return base::BindOnce(&DeletingCallback::DeleteItem, + base::Unretained(this)); + } private: - void DeleteItem(std::unique_ptr<T>* deletee, int result) { - deletee->reset(); + void DeleteItem(int result) { + deletee_->reset(); SetResult(result); } - const CompletionCallback callback_; + std::unique_ptr<T>* deletee_; DISALLOW_COPY_AND_ASSIGN(DeletingCallback); }; template <typename T> DeletingCallback<T>::DeletingCallback(std::unique_ptr<T>* deletee) - : callback_(base::BindRepeating(&DeletingCallback::DeleteItem, - base::Unretained(this), - deletee)) {} + : deletee_(deletee) {} template <typename T> DeletingCallback<T>::~DeletingCallback() = default;
diff --git a/net/server/http_server_unittest.cc b/net/server/http_server_unittest.cc index 6bff423d41..2e9c8560 100644 --- a/net/server/http_server_unittest.cc +++ b/net/server/http_server_unittest.cc
@@ -85,7 +85,7 @@ message->clear(); while (total_bytes_received < expected_bytes) { TestCompletionCallback callback; - ReadInternal(callback.callback()); + ReadInternal(&callback); int bytes_received = callback.WaitForResult(); if (bytes_received <= 0) return false; @@ -138,12 +138,12 @@ Write(); } - void ReadInternal(const CompletionCallback& callback) { + void ReadInternal(TestCompletionCallback* callback) { read_buffer_ = new IOBufferWithSize(kMaxExpectedResponseLength); - int result = - socket_->Read(read_buffer_.get(), kMaxExpectedResponseLength, callback); + int result = socket_->Read(read_buffer_.get(), kMaxExpectedResponseLength, + callback->callback()); if (result != ERR_IO_PENDING) - callback.Run(result); + callback->callback().Run(result); } bool IsCompleteResponse(const std::string& response) {
diff --git a/net/socket/client_socket_handle.cc b/net/socket/client_socket_handle.cc index cd68fdd6..281ab3b 100644 --- a/net/socket/client_socket_handle.cc +++ b/net/socket/client_socket_handle.cc
@@ -23,8 +23,6 @@ pool_(NULL), higher_pool_(NULL), reuse_type_(ClientSocketHandle::UNUSED), - callback_(base::Bind(&ClientSocketHandle::OnIOComplete, - base::Unretained(this))), is_ssl_error_(false) {} ClientSocketHandle::~ClientSocketHandle() { @@ -73,7 +71,7 @@ socket_.reset(); group_name_.clear(); reuse_type_ = ClientSocketHandle::UNUSED; - user_callback_.Reset(); + callback_.Reset(); if (higher_pool_) RemoveHigherLayeredPool(higher_pool_); pool_ = NULL; @@ -162,8 +160,8 @@ void ClientSocketHandle::OnIOComplete(int result) { TRACE_EVENT0(kNetTracingCategory, "ClientSocketHandle::OnIOComplete"); - CompletionOnceCallback callback = std::move(user_callback_); - user_callback_.Reset(); + CompletionOnceCallback callback = std::move(callback_); + callback_.Reset(); HandleInitCompletion(result); std::move(callback).Run(result); }
diff --git a/net/socket/client_socket_handle.h b/net/socket/client_socket_handle.h index 401662e..1b0338dd 100644 --- a/net/socket/client_socket_handle.h +++ b/net/socket/client_socket_handle.h
@@ -13,7 +13,6 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/time/time.h" -#include "net/base/completion_callback.h" #include "net/base/ip_endpoint.h" #include "net/base/load_states.h" #include "net/base/load_timing_info.h" @@ -222,8 +221,7 @@ std::unique_ptr<StreamSocket> socket_; std::string group_name_; SocketReuseType reuse_type_; - CompletionCallback callback_; - CompletionOnceCallback user_callback_; + CompletionOnceCallback callback_; base::TimeDelta idle_time_; int pool_id_; // See ClientSocketPool::ReleaseSocket() for an explanation. bool is_ssl_error_; @@ -257,11 +255,13 @@ ResetErrorState(); pool_ = pool; group_name_ = group_name; - int rv = - pool_->RequestSocket(group_name, &socket_params, priority, socket_tag, - respect_limits, this, callback_, net_log); + CompletionOnceCallback io_complete_callback = + base::BindOnce(&ClientSocketHandle::OnIOComplete, base::Unretained(this)); + int rv = pool_->RequestSocket(group_name, &socket_params, priority, + socket_tag, respect_limits, this, + std::move(io_complete_callback), net_log); if (rv == ERR_IO_PENDING) { - user_callback_ = std::move(callback); + callback_ = std::move(callback); } else { HandleInitCompletion(rv); }
diff --git a/net/socket/client_socket_pool_base_unittest.cc b/net/socket/client_socket_pool_base_unittest.cc index 7a17f045..309047a1e 100644 --- a/net/socket/client_socket_pool_base_unittest.cc +++ b/net/socket/client_socket_pool_base_unittest.cc
@@ -1540,7 +1540,7 @@ TestClientSocketPool* pool, TestConnectJobFactory* test_connect_job_factory, TestConnectJob::JobType next_job_type, - const CompletionCallback& nested_callback, + TestCompletionCallback* nested_callback, int first_request_result) { EXPECT_THAT(first_request_result, IsOk()); @@ -1555,10 +1555,10 @@ TestCompletionCallback callback; int rv = handle->Init("a", params, LOWEST, SocketTag(), ClientSocketPool::RespectLimits::ENABLED, - nested_callback, pool, NetLogWithSource()); + nested_callback->callback(), pool, NetLogWithSource()); if (rv != ERR_IO_PENDING) { DCHECK_EQ(TestConnectJob::kMockJob, next_job_type); - nested_callback.Run(rv); + nested_callback->callback().Run(rv); } else { DCHECK_EQ(TestConnectJob::kMockPendingJob, next_job_type); } @@ -1578,7 +1578,7 @@ ClientSocketPool::RespectLimits::ENABLED, base::Bind(&RequestSocketOnComplete, &handle, pool_.get(), connect_job_factory_, TestConnectJob::kMockPendingJob, - second_result_callback.callback()), + &second_result_callback), pool_.get(), NetLogWithSource()); ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); @@ -1599,7 +1599,7 @@ ClientSocketPool::RespectLimits::ENABLED, base::Bind(&RequestSocketOnComplete, &handle, pool_.get(), connect_job_factory_, TestConnectJob::kMockPendingJob, - second_result_callback.callback()), + &second_result_callback), pool_.get(), NetLogWithSource()); ASSERT_THAT(rv, IsError(ERR_IO_PENDING));
diff --git a/net/socket/sequenced_socket_data_unittest.cc b/net/socket/sequenced_socket_data_unittest.cc index 8748c42..da27a16 100644 --- a/net/socket/sequenced_socket_data_unittest.cc +++ b/net/socket/sequenced_socket_data_unittest.cc
@@ -78,11 +78,11 @@ void SetInvokeRead(scoped_refptr<IOBuffer> read_buf, int read_len, int second_rv, - CompletionCallback callback) { + CompletionOnceCallback callback) { second_read_ = true; second_read_buf_ = read_buf; second_rv_ = second_rv; - second_callback_ = callback; + second_callback_ = std::move(callback); second_len_ = read_len; } @@ -91,17 +91,18 @@ void SetInvokeWrite(const char* write_data, int write_len, int second_rv, - CompletionCallback callback) { + CompletionOnceCallback callback) { second_read_ = false; second_rv_ = second_rv; second_write_data_ = write_data; - second_callback_ = callback; + second_callback_ = std::move(callback); second_len_ = write_len; } // Returns the OnIOComplete callback for this helper. - CompletionCallback callback() { - return base::Bind(&ReentrantHelper::OnIOComplete, base::Unretained(this)); + CompletionOnceCallback callback() { + return base::BindOnce(&ReentrantHelper::OnIOComplete, + base::Unretained(this)); } // Retuns the buffer where data is expected to have been written, @@ -120,13 +121,13 @@ if (second_read_) { ASSERT_EQ(second_rv_, socket_->Read(second_read_buf_.get(), second_len_, - second_callback_)); + std::move(second_callback_))); } else { scoped_refptr<IOBuffer> write_buf = new IOBuffer(second_len_); memcpy(write_buf->data(), second_write_data_, second_len_); - ASSERT_EQ(second_rv_, - socket_->Write(write_buf.get(), second_len_, second_callback_, - TRAFFIC_ANNOTATION_FOR_TESTS)); + ASSERT_EQ(second_rv_, socket_->Write(write_buf.get(), second_len_, + std::move(second_callback_), + TRAFFIC_ANNOTATION_FOR_TESTS)); } } @@ -137,7 +138,7 @@ const char* first_read_data_; int first_len_; - CompletionCallback second_callback_; + CompletionOnceCallback second_callback_; bool second_read_; int second_rv_; scoped_refptr<IOBuffer> second_read_buf_; @@ -184,7 +185,7 @@ // attempts an aync write of |data| with |callback| void ReentrantAsyncWriteCallback(const char* data, int len, - CompletionCallback callback, + CompletionOnceCallback callback, int expected_rv, int rv); @@ -214,10 +215,14 @@ // do not consume all data. void set_expect_eof(bool expect_eof) { expect_eof_ = expect_eof; } + CompletionOnceCallback failing_callback() { + return base::BindOnce(&SequencedSocketDataTest::FailingCompletionCallback, + base::Unretained(this)); + } + TestCompletionCallback read_callback_; scoped_refptr<IOBuffer> read_buf_; TestCompletionCallback write_callback_; - CompletionCallback failing_callback_; StreamSocket* sock_; private: @@ -235,10 +240,7 @@ }; SequencedSocketDataTest::SequencedSocketDataTest() - : failing_callback_( - base::Bind(&SequencedSocketDataTest::FailingCompletionCallback, - base::Unretained(this))), - sock_(nullptr), + : sock_(nullptr), connect_data_(SYNCHRONOUS, OK), endpoint_("www.google.com", 443), tcp_params_(new TransportSocketParams( @@ -247,8 +249,7 @@ OnHostResolutionCallback(), TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)), socket_pool_(10, 10, &socket_factory_), - expect_eof_(true) { -} + expect_eof_(true) {} SequencedSocketDataTest::~SequencedSocketDataTest() { // Make sure no unexpected pending tasks will cause a failure. @@ -297,7 +298,7 @@ ASSERT_EQ(rv, sock_->Read(read_buf_.get(), len, read_callback_.callback())); ASSERT_FALSE(read_callback_.have_result()); } else { - ASSERT_EQ(rv, sock_->Read(read_buf_.get(), len, failing_callback_)); + ASSERT_EQ(rv, sock_->Read(read_buf_.get(), len, failing_callback())); } } @@ -346,7 +347,7 @@ TRAFFIC_ANNOTATION_FOR_TESTS)); ASSERT_FALSE(write_callback_.have_result()); } else { - ASSERT_EQ(rv, sock_->Write(buf.get(), len, failing_callback_, + ASSERT_EQ(rv, sock_->Write(buf.get(), len, failing_callback(), TRAFFIC_ANNOTATION_FOR_TESTS)); } } @@ -383,13 +384,13 @@ void SequencedSocketDataTest::ReentrantAsyncWriteCallback( const char* data, int len, - CompletionCallback callback, + CompletionOnceCallback callback, int expected_rv, int rv) { EXPECT_EQ(expected_rv, rv); scoped_refptr<IOBuffer> write_buf(new IOBuffer(len)); memcpy(write_buf->data(), data, len); - EXPECT_THAT(sock_->Write(write_buf.get(), len, callback, + EXPECT_THAT(sock_->Write(write_buf.get(), len, std::move(callback), TRAFFIC_ANNOTATION_FOR_TESTS), IsError(ERR_IO_PENDING)); } @@ -593,7 +594,7 @@ Initialize(reads, base::span<MockWrite>()); scoped_refptr<IOBuffer> read_buf(new IOBuffer(2 * kLen1)); - ASSERT_EQ(kLen1, sock_->Read(read_buf.get(), 2 * kLen1, failing_callback_)); + ASSERT_EQ(kLen1, sock_->Read(read_buf.get(), 2 * kLen1, failing_callback())); ASSERT_EQ(std::string(kMsg1, kLen1), std::string(read_buf->data(), kLen1)); } @@ -1023,9 +1024,9 @@ ERR_IO_PENDING, sock_->Read( read_buf.get(), kLen1, - base::Bind(&SequencedSocketDataTest::ReentrantAsyncWriteCallback, - base::Unretained(this), kMsg2, kLen2, - write_callback_.callback(), kLen1))); + base::BindOnce(&SequencedSocketDataTest::ReentrantAsyncWriteCallback, + base::Unretained(this), kMsg2, kLen2, + write_callback_.callback(), kLen1))); ASSERT_FALSE(write_callback_.have_result()); ASSERT_EQ(kLen2, write_callback_.WaitForResult()); @@ -1081,7 +1082,7 @@ ReentrantHelper helper3(sock_); helper3.SetExpectedWrite(kLen3); - helper3.SetInvokeRead(read_buf_, kLen4, kLen4, failing_callback_); + helper3.SetInvokeRead(read_buf_, kLen4, kLen4, failing_callback()); ReentrantHelper helper2(sock_); helper2.SetExpectedRead(kMsg2, kLen2); @@ -1118,7 +1119,7 @@ ReentrantHelper helper3(sock_); helper3.SetExpectedRead(kMsg3, kLen3); - helper3.SetInvokeWrite(kMsg4, kLen4, kLen4, failing_callback_); + helper3.SetInvokeWrite(kMsg4, kLen4, kLen4, failing_callback()); ReentrantHelper helper2(sock_); helper2.SetExpectedWrite(kLen2);
diff --git a/net/socket/socket_bio_adapter.cc b/net/socket/socket_bio_adapter.cc index edbd637a..f6940c3a 100644 --- a/net/socket/socket_bio_adapter.cc +++ b/net/socket/socket_bio_adapter.cc
@@ -73,10 +73,10 @@ bio_->ptr = this; bio_->init = 1; - read_callback_ = base::Bind(&SocketBIOAdapter::OnSocketReadComplete, - weak_factory_.GetWeakPtr()); - write_callback_ = base::Bind(&SocketBIOAdapter::OnSocketWriteComplete, - weak_factory_.GetWeakPtr()); + read_callback_ = base::BindRepeating(&SocketBIOAdapter::OnSocketReadComplete, + weak_factory_.GetWeakPtr()); + write_callback_ = base::BindRepeating( + &SocketBIOAdapter::OnSocketWriteComplete, weak_factory_.GetWeakPtr()); } SocketBIOAdapter::~SocketBIOAdapter() {
diff --git a/net/socket/socket_bio_adapter.h b/net/socket/socket_bio_adapter.h index 48f2557..9547535 100644 --- a/net/socket/socket_bio_adapter.h +++ b/net/socket/socket_bio_adapter.h
@@ -7,7 +7,7 @@ #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" -#include "net/base/completion_callback.h" +#include "net/base/completion_repeating_callback.h" #include "net/base/net_export.h" #include "third_party/boringssl/src/include/openssl/base.h" @@ -106,8 +106,8 @@ // ClientSocketHandles and raw StreamSockets. StreamSocket* socket_; - CompletionCallback read_callback_; - CompletionCallback write_callback_; + CompletionRepeatingCallback read_callback_; + CompletionRepeatingCallback write_callback_; // The capacity of the read buffer. int read_buffer_capacity_;
diff --git a/net/socket/socks_client_socket_pool.cc b/net/socket/socks_client_socket_pool.cc index d5da299..1d0139c3 100644 --- a/net/socket/socks_client_socket_pool.cc +++ b/net/socket/socks_client_socket_pool.cc
@@ -61,9 +61,7 @@ NetLogWithSource::Make(net_log, NetLogSourceType::SOCKS_CONNECT_JOB)), socks_params_(socks_params), transport_pool_(transport_pool), - resolver_(host_resolver), - callback_( - base::Bind(&SOCKSConnectJob::OnIOComplete, base::Unretained(this))) {} + resolver_(host_resolver) {} SOCKSConnectJob::~SOCKSConnectJob() { // We don't worry about cancelling the tcp socket since the destructor in @@ -127,9 +125,11 @@ int SOCKSConnectJob::DoTransportConnect() { next_state_ = STATE_TRANSPORT_CONNECT_COMPLETE; transport_socket_handle_.reset(new ClientSocketHandle()); + CompletionOnceCallback callback = + base::BindOnce(&SOCKSConnectJob::OnIOComplete, base::Unretained(this)); return transport_socket_handle_->Init( group_name(), socks_params_->transport_params(), priority(), socket_tag(), - respect_limits(), callback_, transport_pool_, net_log()); + respect_limits(), std::move(callback), transport_pool_, net_log()); } int SOCKSConnectJob::DoTransportConnectComplete(int result) {
diff --git a/net/socket/socks_client_socket_pool.h b/net/socket/socks_client_socket_pool.h index 48fb475a..6f1920a 100644 --- a/net/socket/socks_client_socket_pool.h +++ b/net/socket/socks_client_socket_pool.h
@@ -108,7 +108,6 @@ HostResolver* const resolver_; State next_state_; - CompletionCallback callback_; std::unique_ptr<ClientSocketHandle> transport_socket_handle_; std::unique_ptr<StreamSocket> socket_;
diff --git a/net/socket/ssl_client_socket_impl.cc b/net/socket/ssl_client_socket_impl.cc index 1667eee..5be76220 100644 --- a/net/socket/ssl_client_socket_impl.cc +++ b/net/socket/ssl_client_socket_impl.cc
@@ -814,6 +814,14 @@ return rv; } +int SSLClientSocketImpl::CancelReadIfReady() { + int result = transport_->socket()->CancelReadIfReady(); + // Cancel |user_read_callback_|, because caller does not expect the callback + // to be invoked after they have canceled the ReadIfReady. + user_read_callback_.Reset(); + return result; +} + int SSLClientSocketImpl::Write( IOBuffer* buf, int buf_len,
diff --git a/net/socket/ssl_client_socket_impl.h b/net/socket/ssl_client_socket_impl.h index 150a479..4648ab72 100644 --- a/net/socket/ssl_client_socket_impl.h +++ b/net/socket/ssl_client_socket_impl.h
@@ -125,6 +125,7 @@ int ReadIfReady(IOBuffer* buf, int buf_len, CompletionOnceCallback callback) override; + int CancelReadIfReady() override; int Write(IOBuffer* buf, int buf_len, CompletionOnceCallback callback,
diff --git a/net/socket/ssl_client_socket_pool.cc b/net/socket/ssl_client_socket_pool.cc index bb8c4e1..6ff2c5d 100644 --- a/net/socket/ssl_client_socket_pool.cc +++ b/net/socket/ssl_client_socket_pool.cc
@@ -132,8 +132,8 @@ : (params->privacy_mode() == PRIVACY_MODE_ENABLED ? "pm/" + context.ssl_session_cache_shard : context.ssl_session_cache_shard))), - callback_( - base::Bind(&SSLConnectJob::OnIOComplete, base::Unretained(this))) {} + callback_(base::BindRepeating(&SSLConnectJob::OnIOComplete, + base::Unretained(this))) {} SSLConnectJob::~SSLConnectJob() = default;
diff --git a/net/socket/ssl_client_socket_pool.h b/net/socket/ssl_client_socket_pool.h index f54469a..25a97707 100644 --- a/net/socket/ssl_client_socket_pool.h +++ b/net/socket/ssl_client_socket_pool.h
@@ -12,6 +12,7 @@ #include "base/memory/ref_counted.h" #include "base/time/time.h" #include "net/base/completion_once_callback.h" +#include "net/base/completion_repeating_callback.h" #include "net/base/net_export.h" #include "net/base/privacy_mode.h" #include "net/http/http_response_info.h" @@ -159,7 +160,7 @@ const SSLClientSocketContext context_; State next_state_; - CompletionCallback callback_; + CompletionRepeatingCallback callback_; std::unique_ptr<ClientSocketHandle> transport_socket_handle_; std::unique_ptr<SSLClientSocket> ssl_socket_;
diff --git a/net/socket/ssl_server_socket.h b/net/socket/ssl_server_socket.h index 92d2185..6ba484ef 100644 --- a/net/socket/ssl_server_socket.h +++ b/net/socket/ssl_server_socket.h
@@ -18,7 +18,7 @@ #include <memory> -#include "net/base/completion_callback.h" +#include "net/base/completion_once_callback.h" #include "net/base/net_export.h" #include "net/socket/ssl_socket.h" #include "net/socket/stream_socket.h" @@ -42,7 +42,7 @@ // if the process completes asynchronously. If Disconnect is called before // completion then the callback will be silently, as for other StreamSocket // calls. - virtual int Handshake(const CompletionCallback& callback) = 0; + virtual int Handshake(CompletionOnceCallback callback) = 0; }; class SSLServerContext {
diff --git a/net/socket/ssl_server_socket_impl.cc b/net/socket/ssl_server_socket_impl.cc index eb44d4c..f46a0e0 100644 --- a/net/socket/ssl_server_socket_impl.cc +++ b/net/socket/ssl_server_socket_impl.cc
@@ -69,7 +69,7 @@ ~SocketImpl() override; // SSLServerSocket interface. - int Handshake(const CompletionCallback& callback) override; + int Handshake(CompletionOnceCallback callback) override; // SSLSocket interface. int ExportKeyingMaterial(const base::StringPiece& label, @@ -334,7 +334,7 @@ } int SSLServerContextImpl::SocketImpl::Handshake( - const CompletionCallback& callback) { + CompletionOnceCallback callback) { net_log_.BeginEvent(NetLogEventType::SSL_SERVER_HANDSHAKE); // Set up new ssl object. @@ -352,7 +352,7 @@ GotoState(STATE_HANDSHAKE); rv = DoHandshakeLoop(OK); if (rv == ERR_IO_PENDING) { - user_handshake_callback_ = callback; + user_handshake_callback_ = std::move(callback); } else { net_log_.EndEventWithNetErrorCode(NetLogEventType::SSL_SERVER_HANDSHAKE, rv);
diff --git a/net/socket/ssl_server_socket_impl.h b/net/socket/ssl_server_socket_impl.h index 74ffbfa..0e45a6a 100644 --- a/net/socket/ssl_server_socket_impl.h +++ b/net/socket/ssl_server_socket_impl.h
@@ -10,7 +10,6 @@ #include <memory> #include "base/macros.h" -#include "net/base/completion_callback.h" #include "net/base/io_buffer.h" #include "net/socket/ssl_server_socket.h" #include "net/ssl/ssl_server_config.h"
diff --git a/net/socket/udp_socket_posix_unittest.cc b/net/socket/udp_socket_posix_unittest.cc index 4167ab5..5c4e28bc8 100644 --- a/net/socket/udp_socket_posix_unittest.cc +++ b/net/socket/udp_socket_posix_unittest.cc
@@ -4,7 +4,7 @@ #include "net/socket/udp_socket_posix.h" -#include "net/base/completion_callback.h" +#include "net/base/completion_repeating_callback.h" #include "net/base/net_errors.h" #include "net/log/test_net_log.h" #include "net/log/test_net_log_entry.h" @@ -109,7 +109,7 @@ datagram_buffer_pool_->Enqueue(msg.data(), msg.length(), buffers); } - void SetWriteCallback(CompletionCallback callback) { + void SetWriteCallback(CompletionOnceCallback callback) { UDPSocketPosix::SetWriteCallback(std::move(callback)); } @@ -230,7 +230,7 @@ int total_lengths_ = kHelloMsg.length() + kSecondMsg.length() + kThirdMsg.length(); DatagramBuffer* buffer_ptrs_[kNumMsgs]; - CompletionCallback write_callback_; + CompletionRepeatingCallback write_callback_; #if HAVE_SENDMMSG struct iovec msg_iov_[kNumMsgs]; struct mmsghdr msgvec_[kNumMsgs];
diff --git a/net/socket/websocket_transport_client_socket_pool_unittest.cc b/net/socket/websocket_transport_client_socket_pool_unittest.cc index 58f3a9f..3861660 100644 --- a/net/socket/websocket_transport_client_socket_pool_unittest.cc +++ b/net/socket/websocket_transport_client_socket_pool_unittest.cc
@@ -366,7 +366,7 @@ // |nested_callback| is called with the result of the second socket request. void RequestSocketOnComplete(ClientSocketHandle* handle, WebSocketTransportClientSocketPool* pool, - const CompletionCallback& nested_callback, + TestCompletionCallback* nested_callback, int first_request_result) { EXPECT_THAT(first_request_result, IsOk()); @@ -379,10 +379,10 @@ TransportSocketParams::COMBINE_CONNECT_AND_WRITE_DEFAULT)); int rv = handle->Init("a", dest, LOWEST, SocketTag(), ClientSocketPool::RespectLimits::ENABLED, - nested_callback, pool, NetLogWithSource()); + nested_callback->callback(), pool, NetLogWithSource()); EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); if (ERR_IO_PENDING != rv) - nested_callback.Run(rv); + nested_callback->callback().Run(rv); } // Tests the case where a second socket is requested in a completion callback, @@ -397,7 +397,7 @@ int rv = handle.Init("a", dest, LOWEST, SocketTag(), ClientSocketPool::RespectLimits::ENABLED, base::Bind(&RequestSocketOnComplete, &handle, &pool_, - second_result_callback.callback()), + &second_result_callback), &pool_, NetLogWithSource()); ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); EXPECT_THAT(second_result_callback.WaitForResult(), IsOk());
diff --git a/net/spdy/spdy_session_unittest.cc b/net/spdy/spdy_session_unittest.cc index 0148dad..cc35d50d 100644 --- a/net/spdy/spdy_session_unittest.cc +++ b/net/spdy/spdy_session_unittest.cc
@@ -15,7 +15,6 @@ #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "base/test/scoped_task_environment.h" -#include "net/base/completion_callback.h" #include "net/base/host_port_pair.h" #include "net/base/io_buffer.h" #include "net/base/ip_endpoint.h"
diff --git a/net/spdy/spdy_test_util_common.cc b/net/spdy/spdy_test_util_common.cc index 4905bde..5e408256 100644 --- a/net/spdy/spdy_test_util_common.cc +++ b/net/spdy/spdy_test_util_common.cc
@@ -12,7 +12,6 @@ #include "base/logging.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h" -#include "net/base/completion_callback.h" #include "net/base/host_port_pair.h" #include "net/cert/ct_policy_enforcer.h" #include "net/cert/ct_policy_status.h"
diff --git a/net/test/embedded_test_server/http_connection.cc b/net/test/embedded_test_server/http_connection.cc index dbde3a87..9cf8d19 100644 --- a/net/test/embedded_test_server/http_connection.cc +++ b/net/test/embedded_test_server/http_connection.cc
@@ -36,8 +36,8 @@ } } -int HttpConnection::ReadData(const CompletionCallback& callback) { - return socket_->Read(read_buf_.get(), read_buf_->size(), callback); +int HttpConnection::ReadData(CompletionOnceCallback callback) { + return socket_->Read(read_buf_.get(), read_buf_->size(), std::move(callback)); } bool HttpConnection::ConsumeData(int size) {
diff --git a/net/test/embedded_test_server/http_connection.h b/net/test/embedded_test_server/http_connection.h index ab7d96f..bbf0398 100644 --- a/net/test/embedded_test_server/http_connection.h +++ b/net/test/embedded_test_server/http_connection.h
@@ -12,7 +12,7 @@ #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "base/strings/string_piece.h" -#include "net/base/completion_callback.h" +#include "net/base/completion_once_callback.h" #include "net/base/io_buffer.h" #include "net/test/embedded_test_server/http_request.h" #include "net/test/embedded_test_server/http_response.h" @@ -46,7 +46,7 @@ // Accepts raw chunk of data from the client. Internally, passes it to the // HttpRequestParser class. If a request is parsed, then |callback_| is // called. - int ReadData(const CompletionCallback& callback); + int ReadData(CompletionOnceCallback callback); bool ConsumeData(int size);
diff --git a/net/tools/disk_cache_memory_test/disk_cache_memory_test.cc b/net/tools/disk_cache_memory_test/disk_cache_memory_test.cc index bef45c80..a27d939 100644 --- a/net/tools/disk_cache_memory_test/disk_cache_memory_test.cc +++ b/net/tools/disk_cache_memory_test/disk_cache_memory_test.cc
@@ -25,7 +25,6 @@ #include "base/task/task_scheduler/task_scheduler.h" #include "base/threading/thread_task_runner_handle.h" #include "net/base/cache_type.h" -#include "net/base/completion_callback.h" #include "net/base/net_errors.h" #include "net/disk_cache/disk_cache.h" #include "net/disk_cache/simple/simple_backend_impl.h" @@ -93,15 +92,13 @@ std::unique_ptr<Backend> backend; bool succeeded = false; base::RunLoop run_loop; - const net::CompletionCallback callback = base::Bind( - &SetSuccessCodeOnCompletion, - base::Unretained(&run_loop), - base::Unretained(&succeeded)); + net::CompletionOnceCallback callback = + base::BindOnce(&SetSuccessCodeOnCompletion, &run_loop, &succeeded); const int net_error = CreateCacheBackend(spec.cache_type, spec.backend_type, spec.path, 0, - false, nullptr, &backend, callback); + false, nullptr, &backend, std::move(callback)); if (net_error == net::OK) - callback.Run(net::OK); + SetSuccessCodeOnCompletion(&run_loop, &succeeded, net::OK); else run_loop.Run(); if (!succeeded) { @@ -112,16 +109,14 @@ // For the simple cache, the index may not be initialized yet. if (spec.backend_type == net::CACHE_BACKEND_SIMPLE) { base::RunLoop index_run_loop; - const net::CompletionCallback index_callback = base::Bind( - &SetSuccessCodeOnCompletion, - base::Unretained(&index_run_loop), - base::Unretained(&succeeded)); + net::CompletionOnceCallback index_callback = base::BindOnce( + &SetSuccessCodeOnCompletion, &index_run_loop, &succeeded); SimpleBackendImpl* simple_backend = static_cast<SimpleBackendImpl*>(backend.get()); const int index_net_error = - simple_backend->index()->ExecuteWhenReady(index_callback); + simple_backend->index()->ExecuteWhenReady(std::move(index_callback)); if (index_net_error == net::OK) - index_callback.Run(net::OK); + SetSuccessCodeOnCompletion(&index_run_loop, &succeeded, net::OK); else index_run_loop.Run(); if (!succeeded) {
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc index 96ccbf9..81ea6c0 100644 --- a/pdf/pdfium/pdfium_engine.cc +++ b/pdf/pdfium/pdfium_engine.cc
@@ -2858,7 +2858,7 @@ int rv; FPDF_PAGE page = pages_[page_index]->GetPage(); if (progressive_paints_[progressive_index].bitmap()) { - rv = FPDF_RenderPage_Continue(page, static_cast<IFSDK_PAUSE*>(this)); + rv = FPDF_RenderPage_Continue(page, this); } else { int start_x; int start_y; @@ -2872,12 +2872,11 @@ 0xFFFFFFFF); rv = FPDF_RenderPageBitmap_Start(new_bitmap.get(), page, start_x, start_y, size_x, size_y, current_rotation_, - GetRenderingFlags(), - static_cast<IFSDK_PAUSE*>(this)); + GetRenderingFlags(), this); progressive_paints_[progressive_index].SetBitmapAndImageData( std::move(new_bitmap), *image_data); } - return rv != FPDF_RENDER_TOBECOUNTINUED; + return rv != FPDF_RENDER_TOBECONTINUED; } void PDFiumEngine::FinishPaint(int progressive_index,
diff --git a/printing/android/java/src/org/chromium/printing/PrintingContext.java b/printing/android/java/src/org/chromium/printing/PrintingContext.java index 15f9d85..c583cf3 100644 --- a/printing/android/java/src/org/chromium/printing/PrintingContext.java +++ b/printing/android/java/src/org/chromium/printing/PrintingContext.java
@@ -57,16 +57,6 @@ } } - /** - * Notifies the native side that the user just chose a new set of printing settings. - * @param success True if the user has chosen printing settings necessary for the - * generation of PDF, false if there has been a problem. - */ - @Override - public void askUserForSettingsReply(boolean success) { - nativeAskUserForSettingsReply(mNativeObject, success); - } - @CalledByNative public static PrintingContext create(long nativeObjectPointer) { ThreadUtils.assertOnUiThread(); @@ -135,8 +125,7 @@ // If the printing dialog has already finished, tell Chromium that operation is cancelled. if (mController.hasPrintingFinished()) { // NOTE: We don't call nativeAskUserForSettingsReply (hence Chromium callback in - // AskUserForSettings callback) twice. See {@link PrintingControllerImpl#onFinish} - // for more explanation. + // AskUserForSettings callback) twice. askUserForSettingsReply(false); } else { mController.setPrintingContext(this); @@ -145,14 +134,18 @@ } } + private void askUserForSettingsReply(boolean success) { + assert mNativeObject != 0; + nativeAskUserForSettingsReply(mNativeObject, success); + } + @Override public void showSystemDialogDone() { nativeShowSystemDialogDone(mNativeObject); } private native void nativeAskUserForSettingsReply( - long nativePrintingContextAndroid, - boolean success); + long nativePrintingContextAndroid, boolean success); private native void nativeShowSystemDialogDone(long nativePrintingContextAndroid); }
diff --git a/printing/android/java/src/org/chromium/printing/PrintingContextInterface.java b/printing/android/java/src/org/chromium/printing/PrintingContextInterface.java index 3bc3e82..6c57715 100644 --- a/printing/android/java/src/org/chromium/printing/PrintingContextInterface.java +++ b/printing/android/java/src/org/chromium/printing/PrintingContextInterface.java
@@ -17,12 +17,6 @@ void updatePrintingContextMap(int fileDescriptor, boolean delete); /** - * Notifies the native side if the printing settings are successfully prepared. - * @param success True if the settings are successfully prepared to be used by the native side. - */ - void askUserForSettingsReply(boolean success); - - /** * Notifies the native side that the printing process is completed. This method should be * called when the process was initiated by the native side (window.print()) */
diff --git a/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java b/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java index 5fa595f..78f1cc7 100644 --- a/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java +++ b/printing/android/java/src/org/chromium/printing/PrintingControllerImpl.java
@@ -15,6 +15,7 @@ import org.chromium.base.Log; import org.chromium.base.ThreadUtils; +import org.chromium.base.VisibleForTesting; import org.chromium.printing.PrintDocumentAdapterWrapper.PdfGenerator; import java.io.IOException; @@ -43,7 +44,8 @@ private static final int PRINTING_STATE_FINISHED = 2; /** The singleton instance for this class. */ - private static PrintingController sInstance; + @VisibleForTesting + protected static PrintingController sInstance; private final String mErrorMessage; @@ -92,7 +94,8 @@ private PrintManagerDelegate mPrintManager; - private PrintingControllerImpl( + @VisibleForTesting + protected PrintingControllerImpl( PrintDocumentAdapterWrapper printDocumentAdapterWrapper, String errorText) { mErrorMessage = errorText; mPrintDocumentAdapterWrapper = printDocumentAdapterWrapper; @@ -306,15 +309,6 @@ public void onFinish() { mPages = null; if (mPrintingContext != null) { - if (mPrintingState != PRINTING_STATE_READY) { - // Note that we are never making an extraneous askUserForSettingsReply call. - // If we are in the middle of a PDF generation from onLayout or onWrite, it means - // the state isn't PRINTING_STATE_READY, so we enter here and make this call (no - // extra). If we complete the PDF generation successfully from onLayout or onWrite, - // we already make the state PRINTING_STATE_READY and call askUserForSettingsReply - // inside pdfWritingDone, thus not entering here. - mPrintingContext.askUserForSettingsReply(false); - } mPrintingContext.updatePrintingContextMap(mFileDescriptor, true); mPrintingContext = null; }
diff --git a/printing/pdf_metafile_skia.cc b/printing/pdf_metafile_skia.cc index 6235d63e..56cc82a3 100644 --- a/printing/pdf_metafile_skia.cc +++ b/printing/pdf_metafile_skia.cc
@@ -5,7 +5,7 @@ #include "printing/pdf_metafile_skia.h" #include <algorithm> -#include <string> +#include <map> #include <utility> #include <vector> @@ -51,54 +51,54 @@ namespace printing { -// TODO(thestig): struct members should not have trailing underscore. struct Page { - Page(SkSize s, sk_sp<cc::PaintRecord> c) : size_(s), content_(std::move(c)) {} - Page(Page&& that) : size_(that.size_), content_(std::move(that.content_)) {} + Page(const SkSize& s, sk_sp<cc::PaintRecord> c) + : size(s), content(std::move(c)) {} + Page(Page&& that) : size(that.size), content(std::move(that.content)) {} Page(const Page&) = default; Page& operator=(const Page&) = default; Page& operator=(Page&& that) { - size_ = that.size_; - content_ = std::move(that.content_); + size = that.size; + content = std::move(that.content); return *this; } - SkSize size_; - sk_sp<cc::PaintRecord> content_; + SkSize size; + sk_sp<cc::PaintRecord> content; }; // TODO(weili): Remove pdf from struct name and field names since it is used for // other formats as well. Also change member variable names to // conform with our style guide. struct PdfMetafileSkiaData { - cc::PaintRecorder recorder_; // Current recording + cc::PaintRecorder recorder; // Current recording - std::vector<Page> pages_; - std::unique_ptr<SkStreamAsset> pdf_data_; - ContentToProxyIdMap subframe_content_info_; - std::map<uint32_t, sk_sp<SkPicture>> subframe_pics_; - int document_cookie_ = 0; + std::vector<Page> pages; + std::unique_ptr<SkStreamAsset> pdf_data; + ContentToProxyIdMap subframe_content_info; + std::map<uint32_t, sk_sp<SkPicture>> subframe_pics; + int document_cookie = 0; // The scale factor is used because Blink occasionally calls // PaintCanvas::getTotalMatrix() even though the total matrix is not as // meaningful for a vector canvas as for a raster canvas. - float scale_factor_; - SkSize size_; - SkiaDocumentType type_; + float scale_factor; + SkSize size; + SkiaDocumentType type; #if defined(OS_MACOSX) - PdfMetafileCg pdf_cg_; + PdfMetafileCg pdf_cg; #endif }; PdfMetafileSkia::PdfMetafileSkia() : data_(std::make_unique<PdfMetafileSkiaData>()) { - data_->type_ = SkiaDocumentType::PDF; + data_->type = SkiaDocumentType::PDF; } PdfMetafileSkia::PdfMetafileSkia(SkiaDocumentType type, int document_cookie) : data_(std::make_unique<PdfMetafileSkiaData>()) { - data_->type_ = type; - data_->document_cookie_ = document_cookie; + data_->type = type; + data_->document_cookie = document_cookie; } PdfMetafileSkia::~PdfMetafileSkia() = default; @@ -112,7 +112,7 @@ // PdfMetafileSkia does. bool PdfMetafileSkia::InitFromData(const void* src_buffer, size_t src_buffer_size) { - data_->pdf_data_ = std::make_unique<SkMemoryStream>( + data_->pdf_data = std::make_unique<SkMemoryStream>( src_buffer, src_buffer_size, true /* copy_data? */); return true; } @@ -123,14 +123,14 @@ DCHECK_GT(page_size.width(), 0); DCHECK_GT(page_size.height(), 0); DCHECK_GT(scale_factor, 0.0f); - if (data_->recorder_.getRecordingCanvas()) + if (data_->recorder.getRecordingCanvas()) FinishPage(); - DCHECK(!data_->recorder_.getRecordingCanvas()); + DCHECK(!data_->recorder.getRecordingCanvas()); float inverse_scale = 1.0 / scale_factor; - cc::PaintCanvas* canvas = data_->recorder_.beginRecording( + cc::PaintCanvas* canvas = data_->recorder.beginRecording( inverse_scale * page_size.width(), inverse_scale * page_size.height()); - // Recording canvas is owned by the data_->recorder_. No ref() necessary. + // Recording canvas is owned by the |data_->recorder|. No ref() necessary. if (content_area != gfx::Rect(page_size)) { canvas->scale(inverse_scale, inverse_scale); SkRect sk_content_area = gfx::RectToSkRect(content_area); @@ -139,8 +139,8 @@ canvas->scale(scale_factor, scale_factor); } - data_->size_ = gfx::SizeFToSkSize(gfx::SizeF(page_size)); - data_->scale_factor_ = scale_factor; + data_->size = gfx::SizeFToSkSize(gfx::SizeF(page_size)); + data_->scale_factor = scale_factor; // We scale the recording canvas's size so that // canvas->getTotalMatrix() returns a value that ignores the scale // factor. We store the scale factor and re-apply it later. @@ -152,42 +152,42 @@ const gfx::Rect& content_area, const float& scale_factor) { StartPage(page_size, content_area, scale_factor); - return data_->recorder_.getRecordingCanvas(); + return data_->recorder.getRecordingCanvas(); } bool PdfMetafileSkia::FinishPage() { - if (!data_->recorder_.getRecordingCanvas()) + if (!data_->recorder.getRecordingCanvas()) return false; - sk_sp<cc::PaintRecord> pic = data_->recorder_.finishRecordingAsPicture(); - if (data_->scale_factor_ != 1.0f) { - cc::PaintCanvas* canvas = data_->recorder_.beginRecording( - data_->size_.width(), data_->size_.height()); - canvas->scale(data_->scale_factor_, data_->scale_factor_); + sk_sp<cc::PaintRecord> pic = data_->recorder.finishRecordingAsPicture(); + if (data_->scale_factor != 1.0f) { + cc::PaintCanvas* canvas = data_->recorder.beginRecording( + data_->size.width(), data_->size.height()); + canvas->scale(data_->scale_factor, data_->scale_factor); canvas->drawPicture(pic); - pic = data_->recorder_.finishRecordingAsPicture(); + pic = data_->recorder.finishRecordingAsPicture(); } - data_->pages_.emplace_back(data_->size_, std::move(pic)); + data_->pages.emplace_back(data_->size, std::move(pic)); return true; } bool PdfMetafileSkia::FinishDocument() { // If we've already set the data in InitFromData, leave it be. - if (data_->pdf_data_) + if (data_->pdf_data) return false; - if (data_->recorder_.getRecordingCanvas()) + if (data_->recorder.getRecordingCanvas()) FinishPage(); SkDynamicMemoryWStream stream; sk_sp<SkDocument> doc; cc::PlaybackParams::CustomDataRasterCallback custom_callback; - switch (data_->type_) { + switch (data_->type) { case SkiaDocumentType::PDF: doc = MakePdfDocument(printing::GetAgent(), &stream); break; case SkiaDocumentType::MSKP: - SkSerialProcs procs = SerializationProcs(&data_->subframe_content_info_); + SkSerialProcs procs = SerializationProcs(&data_->subframe_content_info); doc = SkMakeMultiPictureDocument(&stream, &procs); // It is safe to use base::Unretained(this) because the callback // is only used by |canvas| in the following loop which has shorter @@ -198,55 +198,55 @@ break; } - for (const Page& page : data_->pages_) { + for (const Page& page : data_->pages) { cc::SkiaPaintCanvas canvas( - doc->beginPage(page.size_.width(), page.size_.height())); - canvas.drawPicture(page.content_, custom_callback); + doc->beginPage(page.size.width(), page.size.height())); + canvas.drawPicture(page.content, custom_callback); doc->endPage(); } doc->close(); - data_->pdf_data_ = stream.detachAsStream(); + data_->pdf_data = stream.detachAsStream(); return true; } void PdfMetafileSkia::FinishFrameContent() { // Sanity check to make sure we print the entire frame as a single page // content. - DCHECK_EQ(data_->pages_.size(), 1u); + DCHECK_EQ(data_->pages.size(), 1u); // Also make sure it is in skia multi-picture document format. - DCHECK_EQ(data_->type_, SkiaDocumentType::MSKP); - DCHECK(!data_->pdf_data_); + DCHECK_EQ(data_->type, SkiaDocumentType::MSKP); + DCHECK(!data_->pdf_data); cc::PlaybackParams::CustomDataRasterCallback custom_callback = base::BindRepeating(&PdfMetafileSkia::CustomDataToSkPictureCallback, base::Unretained(this)); - sk_sp<SkPicture> pic = ToSkPicture(data_->pages_[0].content_, - SkRect::MakeSize(data_->pages_[0].size_), + sk_sp<SkPicture> pic = ToSkPicture(data_->pages[0].content, + SkRect::MakeSize(data_->pages[0].size), nullptr, custom_callback); - SkSerialProcs procs = SerializationProcs(&data_->subframe_content_info_); + SkSerialProcs procs = SerializationProcs(&data_->subframe_content_info); SkDynamicMemoryWStream stream; pic->serialize(&stream, &procs); - data_->pdf_data_ = stream.detachAsStream(); + data_->pdf_data = stream.detachAsStream(); } uint32_t PdfMetafileSkia::GetDataSize() const { - if (!data_->pdf_data_) + if (!data_->pdf_data) return 0; - return base::checked_cast<uint32_t>(data_->pdf_data_->getLength()); + return base::checked_cast<uint32_t>(data_->pdf_data->getLength()); } bool PdfMetafileSkia::GetData(void* dst_buffer, uint32_t dst_buffer_size) const { - if (!data_->pdf_data_) + if (!data_->pdf_data) return false; - return WriteAssetToBuffer(data_->pdf_data_.get(), dst_buffer, + return WriteAssetToBuffer(data_->pdf_data.get(), dst_buffer, base::checked_cast<size_t>(dst_buffer_size)); } gfx::Rect PdfMetafileSkia::GetPageBounds(unsigned int page_number) const { - if (page_number < data_->pages_.size()) { - SkSize size = data_->pages_[page_number].size_; + if (page_number < data_->pages.size()) { + SkSize size = data_->pages[page_number].size; return gfx::Rect(gfx::ToRoundedInt(size.width()), gfx::ToRoundedInt(size.height())); } @@ -254,7 +254,7 @@ } unsigned int PdfMetafileSkia::GetPageCount() const { - return base::checked_cast<unsigned int>(data_->pages_.size()); + return base::checked_cast<unsigned int>(data_->pages.size()); } printing::NativeDrawingContext PdfMetafileSkia::context() const { @@ -288,15 +288,15 @@ const CGRect rect, const MacRenderPageParams& params) const { DCHECK_GT(GetDataSize(), 0U); - if (data_->pdf_cg_.GetDataSize() == 0) { + if (data_->pdf_cg.GetDataSize() == 0) { if (GetDataSize() == 0) return false; - size_t length = data_->pdf_data_->getLength(); + size_t length = data_->pdf_data->getLength(); std::vector<uint8_t> buffer(length); - (void)WriteAssetToBuffer(data_->pdf_data_.get(), &buffer[0], length); - data_->pdf_cg_.InitFromData(&buffer[0], length); + (void)WriteAssetToBuffer(data_->pdf_data.get(), &buffer[0], length); + data_->pdf_cg.InitFromData(&buffer[0], length); } - return data_->pdf_cg_.RenderPage(page_number, context, rect, params); + return data_->pdf_cg.RenderPage(page_number, context, rect, params); } #endif @@ -305,9 +305,9 @@ return false; // Calling duplicate() keeps original asset state unchanged. - std::unique_ptr<SkStreamAsset> asset(data_->pdf_data_->duplicate()); + std::unique_ptr<SkStreamAsset> asset(data_->pdf_data->duplicate()); - const size_t kMaximumBufferSize = 1024 * 1024; + static constexpr size_t kMaximumBufferSize = 1024 * 1024; std::vector<char> buffer(std::min(kMaximumBufferSize, asset->getLength())); do { size_t read_size = asset->read(&buffer[0], buffer.size()); @@ -328,16 +328,16 @@ // If we only ever need the metafile for the last page, should we // only keep a handle on one PaintRecord? auto metafile = - std::make_unique<PdfMetafileSkia>(type, data_->document_cookie_); - if (data_->pages_.size() == 0) + std::make_unique<PdfMetafileSkia>(type, data_->document_cookie); + if (data_->pages.size() == 0) return metafile; - if (data_->recorder_.getRecordingCanvas()) // page outstanding + if (data_->recorder.getRecordingCanvas()) // page outstanding return metafile; - metafile->data_->pages_.push_back(data_->pages_.back()); - metafile->data_->subframe_content_info_ = data_->subframe_content_info_; - metafile->data_->subframe_pics_ = data_->subframe_pics_; + metafile->data_->pages.push_back(data_->pages.back()); + metafile->data_->subframe_content_info = data_->subframe_content_info; + metafile->data_->subframe_pics = data_->subframe_pics; if (!metafile->FinishDocument()) // Generate PDF. metafile.reset(); @@ -353,46 +353,46 @@ // Store the map between content id and the proxy id. uint32_t content_id = pic->uniqueID(); - DCHECK(!base::ContainsKey(data_->subframe_content_info_, content_id)); - data_->subframe_content_info_[content_id] = render_proxy_id; + DCHECK(!base::ContainsKey(data_->subframe_content_info, content_id)); + data_->subframe_content_info[content_id] = render_proxy_id; // Store the picture content. - data_->subframe_pics_[content_id] = pic; + data_->subframe_pics[content_id] = pic; return content_id; } int PdfMetafileSkia::GetDocumentCookie() const { - return data_->document_cookie_; + return data_->document_cookie; } const ContentToProxyIdMap& PdfMetafileSkia::GetSubframeContentInfo() const { - return data_->subframe_content_info_; + return data_->subframe_content_info; } void PdfMetafileSkia::AppendPage(const SkSize& page_size, sk_sp<cc::PaintRecord> record) { - data_->pages_.emplace_back(page_size, std::move(record)); + data_->pages.emplace_back(page_size, std::move(record)); } void PdfMetafileSkia::AppendSubframeInfo(uint32_t content_id, int proxy_id, sk_sp<SkPicture> pic_holder) { - data_->subframe_content_info_[content_id] = proxy_id; - data_->subframe_pics_[content_id] = pic_holder; + data_->subframe_content_info[content_id] = proxy_id; + data_->subframe_pics[content_id] = pic_holder; } SkStreamAsset* PdfMetafileSkia::GetPdfData() const { - return data_->pdf_data_.get(); + return data_->pdf_data.get(); } void PdfMetafileSkia::CustomDataToSkPictureCallback(SkCanvas* canvas, uint32_t content_id) { // Check whether this is the one we need to handle. - if (!base::ContainsKey(data_->subframe_content_info_, content_id)) + if (!base::ContainsKey(data_->subframe_content_info, content_id)) return; - auto it = data_->subframe_pics_.find(content_id); - DCHECK(it != data_->subframe_pics_.end()); + auto it = data_->subframe_pics.find(content_id); + DCHECK(it != data_->subframe_pics.end()); // Found the picture, draw it on canvas. sk_sp<SkPicture> pic = it->second;
diff --git a/remoting/client/audio/BUILD.gn b/remoting/client/audio/BUILD.gn index dda19b5..2b72fd01 100644 --- a/remoting/client/audio/BUILD.gn +++ b/remoting/client/audio/BUILD.gn
@@ -11,6 +11,8 @@ "audio_jitter_buffer.cc", "audio_jitter_buffer.h", "audio_playback_sink.h", + "audio_playback_stream.cc", + "audio_playback_stream.h", "audio_player.cc", "audio_player.h", "audio_player_android.cc",
diff --git a/remoting/client/audio/audio_playback_stream.cc b/remoting/client/audio/audio_playback_stream.cc new file mode 100644 index 0000000..211ec9d --- /dev/null +++ b/remoting/client/audio/audio_playback_stream.cc
@@ -0,0 +1,76 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "remoting/client/audio/audio_playback_stream.h" + +#include "base/bind.h" +#include "remoting/client/audio/audio_jitter_buffer.h" +#include "remoting/client/audio/audio_playback_sink.h" + +namespace remoting { + +class AudioPlaybackStream::Core { + public: + explicit Core(std::unique_ptr<AudioPlaybackSink> audio_sink); + ~Core(); + + void AddAudioPacket(std::unique_ptr<AudioPacket> packet); + + private: + void ResetStreamFormat(const AudioStreamFormat& format); + + // |jitter_buffer_| must outlive |audio_sink_|. + std::unique_ptr<AudioJitterBuffer> jitter_buffer_; + std::unique_ptr<AudioPlaybackSink> audio_sink_; + + DISALLOW_COPY_AND_ASSIGN(Core); +}; + +AudioPlaybackStream::Core::Core(std::unique_ptr<AudioPlaybackSink> audio_sink) { + jitter_buffer_ = std::make_unique<AudioJitterBuffer>(base::BindRepeating( + &AudioPlaybackStream::Core::ResetStreamFormat, base::Unretained(this))); + audio_sink_ = std::move(audio_sink); + audio_sink_->SetDataSupplier(jitter_buffer_.get()); +} + +AudioPlaybackStream::Core::~Core() = default; + +void AudioPlaybackStream::Core::AddAudioPacket( + std::unique_ptr<AudioPacket> packet) { + jitter_buffer_->AddAudioPacket(std::move(packet)); +} + +void AudioPlaybackStream::Core::ResetStreamFormat( + const AudioStreamFormat& format) { + audio_sink_->ResetStreamFormat(format); +} + +// AudioPlaybackStream implementations. + +AudioPlaybackStream::AudioPlaybackStream( + std::unique_ptr<AudioPlaybackSink> audio_sink, + scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner) + : audio_task_runner_(audio_task_runner) { + DETACH_FROM_THREAD(thread_checker_); + + core_ = std::make_unique<Core>(std::move(audio_sink)); +} + +AudioPlaybackStream::~AudioPlaybackStream() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + audio_task_runner_->DeleteSoon(FROM_HERE, core_.release()); +} + +void AudioPlaybackStream::ProcessAudioPacket( + std::unique_ptr<AudioPacket> packet, + const base::RepeatingClosure& done) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + audio_task_runner_->PostTaskAndReply( + FROM_HERE, + base::BindOnce(&Core::AddAudioPacket, base::Unretained(core_.get()), + std::move(packet)), + done); +} + +} // namespace remoting
diff --git a/remoting/client/audio/audio_playback_stream.h b/remoting/client/audio/audio_playback_stream.h new file mode 100644 index 0000000..76ff4e8c --- /dev/null +++ b/remoting/client/audio/audio_playback_stream.h
@@ -0,0 +1,54 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef REMOTING_CLIENT_AUDIO_AUDIO_PLAYBACK_STREAM_H_ +#define REMOTING_CLIENT_AUDIO_AUDIO_PLAYBACK_STREAM_H_ + +#include <memory> + +#include "base/macros.h" +#include "base/memory/ref_counted.h" +#include "base/memory/weak_ptr.h" +#include "base/single_thread_task_runner.h" +#include "base/threading/thread_checker.h" +#include "remoting/protocol/audio_stub.h" + +namespace remoting { + +class AudioPlaybackSink; + +// An AudioStub implementation that buffers AudioPackets and feeds them to +// an AudioPlaybackSink. +// AudioPlaybackStream must be used and destroyed on the same thread after it +// is created, while it will use and destroy |audio_sink| on the thread of +// |audio_task_runner|. +class AudioPlaybackStream : public protocol::AudioStub { + public: + // |audio_sink|: The AudioPlaybackSink that receives audio data. + // |audio_task_runner|: The task runner where |audio_sink| will be run. + AudioPlaybackStream( + std::unique_ptr<AudioPlaybackSink> audio_sink, + scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner); + + ~AudioPlaybackStream() override; + + // AudioStub implementations. + void ProcessAudioPacket(std::unique_ptr<AudioPacket> packet, + const base::RepeatingClosure& done) override; + + private: + class Core; + + THREAD_CHECKER(thread_checker_); + + std::unique_ptr<Core> core_; + + scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner_; + + DISALLOW_COPY_AND_ASSIGN(AudioPlaybackStream); +}; + +} // namespace remoting + +#endif // REMOTING_CLIENT_AUDIO_AUDIO_PLAYBACK_STREAM_H_
diff --git a/remoting/client/chromoting_session.cc b/remoting/client/chromoting_session.cc index 6736b978..4576ac4 100644 --- a/remoting/client/chromoting_session.cc +++ b/remoting/client/chromoting_session.cc
@@ -93,7 +93,9 @@ ChromotingClientRuntime* runtime; base::WeakPtr<ChromotingSession::Delegate> delegate; base::WeakPtr<ClientTelemetryLogger> logger; - base::WeakPtr<protocol::AudioStub> audio_player; + std::unique_ptr<protocol::AudioStub> audio_player; + std::unique_ptr<base::WeakPtrFactory<protocol::AudioStub>> + audio_player_weak_factory; std::unique_ptr<protocol::CursorShapeStub> cursor_shape_stub; std::unique_ptr<protocol::VideoRenderer> video_renderer; @@ -435,9 +437,11 @@ ChromotingEvent::ParseOsFromString(session_context_->info.host_os), session_context_->info.host_os_version); - client_.reset(new ChromotingClient(client_context_.get(), this, - session_context_->video_renderer.get(), - session_context_->audio_player)); + // TODO(yuweih): Ideally we should make ChromotingClient and all its + // sub-components (e.g. ConnectionToHost) take raw pointer instead of WeakPtr. + client_.reset(new ChromotingClient( + client_context_.get(), this, session_context_->video_renderer.get(), + session_context_->audio_player_weak_factory->GetWeakPtr())); XmppSignalStrategy::XmppServerConfig xmpp_config; xmpp_config.host = kXmppServer; @@ -582,7 +586,7 @@ base::WeakPtr<ChromotingSession::Delegate> delegate, std::unique_ptr<protocol::CursorShapeStub> cursor_shape_stub, std::unique_ptr<protocol::VideoRenderer> video_renderer, - base::WeakPtr<protocol::AudioStub> audio_player, + std::unique_ptr<protocol::AudioStub> audio_player, const ConnectToHostInfo& info) { DCHECK(delegate); DCHECK(cursor_shape_stub); @@ -601,7 +605,10 @@ session_context_->runtime = runtime_; session_context_->delegate = delegate; session_context_->logger = logger_->GetWeakPtr(); - session_context_->audio_player = audio_player; + session_context_->audio_player = std::move(audio_player); + session_context_->audio_player_weak_factory = + std::make_unique<base::WeakPtrFactory<protocol::AudioStub>>( + session_context_->audio_player.get()); session_context_->cursor_shape_stub = std::move(cursor_shape_stub); session_context_->video_renderer = std::move(video_renderer); session_context_->info = info;
diff --git a/remoting/client/chromoting_session.h b/remoting/client/chromoting_session.h index 7f8b86b..c1fde4af 100644 --- a/remoting/client/chromoting_session.h +++ b/remoting/client/chromoting_session.h
@@ -90,7 +90,7 @@ ChromotingSession(base::WeakPtr<ChromotingSession::Delegate> delegate, std::unique_ptr<protocol::CursorShapeStub> cursor_stub, std::unique_ptr<protocol::VideoRenderer> video_renderer, - base::WeakPtr<protocol::AudioStub> audio_player, + std::unique_ptr<protocol::AudioStub> audio_player, const ConnectToHostInfo& info); ~ChromotingSession() override;
diff --git a/remoting/client/jni/jni_client.cc b/remoting/client/jni/jni_client.cc index 69be331..11cf4a1d 100644 --- a/remoting/client/jni/jni_client.cc +++ b/remoting/client/jni/jni_client.cc
@@ -41,28 +41,21 @@ void JniClient::ConnectToHost(const ConnectToHostInfo& info) { DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); DCHECK(!display_handler_); - DCHECK(!audio_player_); DCHECK(!session_); host_id_ = info.host_id; display_handler_.reset(new JniGlDisplayHandler(java_client_)); - audio_player_.reset(new AudioPlayerAndroid()); - session_.reset(new ChromotingSession( weak_ptr_, display_handler_->CreateCursorShapeStub(), - display_handler_->CreateVideoRenderer(), audio_player_->GetWeakPtr(), - info)); + display_handler_->CreateVideoRenderer(), + std::make_unique<AudioPlayerAndroid>(), info)); session_->Connect(); } void JniClient::DisconnectFromHost() { DCHECK(runtime_->ui_task_runner()->BelongsToCurrentThread()); session_.reset(); - if (audio_player_) { - runtime_->network_task_runner()->DeleteSoon(FROM_HERE, - audio_player_.release()); - } display_handler_.reset(); }
diff --git a/remoting/client/jni/jni_client.h b/remoting/client/jni/jni_client.h index 47745e2..76528fe 100644 --- a/remoting/client/jni/jni_client.h +++ b/remoting/client/jni/jni_client.h
@@ -16,7 +16,6 @@ namespace remoting { -class AudioPlayerAndroid; class ChromotingClientRuntime; class JniGlDisplayHandler; @@ -161,7 +160,6 @@ base::android::ScopedJavaGlobalRef<jobject> java_client_; std::unique_ptr<JniGlDisplayHandler> display_handler_; - std::unique_ptr<AudioPlayerAndroid> audio_player_; std::string host_id_;
diff --git a/remoting/host/pairing_registry_delegate_win_unittest.cc b/remoting/host/pairing_registry_delegate_win_unittest.cc index ab73ecc..590c47a 100644 --- a/remoting/host/pairing_registry_delegate_win_unittest.cc +++ b/remoting/host/pairing_registry_delegate_win_unittest.cc
@@ -4,12 +4,11 @@ #include "remoting/host/pairing_registry_delegate_win.h" -#include <shlwapi.h> - #include "base/guid.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "base/win/registry.h" +#include "base/win/shlwapi.h" #include "testing/gtest/include/gtest/gtest.h" namespace remoting {
diff --git a/remoting/host/win/chromoting_module.h b/remoting/host/win/chromoting_module.h index 78d03a1..ea92270 100644 --- a/remoting/host/win/chromoting_module.h +++ b/remoting/host/win/chromoting_module.h
@@ -5,12 +5,9 @@ #ifndef REMOTING_HOST_WIN_CHROMOTING_MODULE_H_ #define REMOTING_HOST_WIN_CHROMOTING_MODULE_H_ -#include <atlbase.h> -#include <atlcom.h> -#include <atlctl.h> - #include "base/macros.h" #include "base/memory/ref_counted.h" +#include "base/win/atl.h" #include "base/win/scoped_com_initializer.h" // chromoting_lib.h contains MIDL-generated declarations.
diff --git a/remoting/host/win/rdp_client_unittest.cc b/remoting/host/win/rdp_client_unittest.cc index 8f3303e6..10a6b03b 100644 --- a/remoting/host/win/rdp_client_unittest.cc +++ b/remoting/host/win/rdp_client_unittest.cc
@@ -2,10 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// ATL headers have to go first. -#include <atlbase.h> -#include <atlhost.h> - #include <cstdint> #include <string> @@ -16,6 +12,7 @@ #include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "base/single_thread_task_runner.h" +#include "base/win/atl.h" #include "base/win/scoped_com_initializer.h" #include "remoting/base/auto_thread_task_runner.h" #include "remoting/host/screen_resolution.h"
diff --git a/remoting/host/win/rdp_client_window.h b/remoting/host/win/rdp_client_window.h index 0c03c7d..12c7ddcc 100644 --- a/remoting/host/win/rdp_client_window.h +++ b/remoting/host/win/rdp_client_window.h
@@ -5,14 +5,12 @@ #ifndef REMOTING_HOST_WIN_RDP_HOST_WINDOW_H_ #define REMOTING_HOST_WIN_RDP_HOST_WINDOW_H_ -#include <atlbase.h> -#include <atlcom.h> #include <atlcrack.h> -#include <atlctl.h> #include <wrl/client.h> #include "base/memory/ref_counted.h" #include "base/timer/timer.h" +#include "base/win/atl.h" #include "net/base/ip_endpoint.h" #include "remoting/host/screen_resolution.h" // The following header was generated by Visual Studio. We had to check it in
diff --git a/remoting/host/win/rdp_desktop_session.h b/remoting/host/win/rdp_desktop_session.h index bd9b9fc53..6594a50 100644 --- a/remoting/host/win/rdp_desktop_session.h +++ b/remoting/host/win/rdp_desktop_session.h
@@ -5,13 +5,11 @@ #ifndef REMOTING_HOST_WIN_RDP_DESKTOP_SESSION_H_ #define REMOTING_HOST_WIN_RDP_DESKTOP_SESSION_H_ -#include <atlbase.h> -#include <atlcom.h> -#include <atlctl.h> #include <wrl/client.h> #include <memory> +#include "base/win/atl.h" // chromoting_lib.h contains MIDL-generated declarations. #include "remoting/host/win/chromoting_lib.h" #include "remoting/host/win/rdp_client.h"
diff --git a/remoting/ios/session/remoting_client.mm b/remoting/ios/session/remoting_client.mm index b0a4bcbc..255a6d7 100644 --- a/remoting/ios/session/remoting_client.mm +++ b/remoting/ios/session/remoting_client.mm
@@ -11,7 +11,7 @@ #include <memory> #import "ios/third_party/material_components_ios/src/components/Snackbar/src/MaterialSnackbar.h" -#import "remoting/ios/audio/audio_player_ios.h" +#import "remoting/ios/audio/audio_playback_sink_ios.h" #import "remoting/ios/display/gl_display_handler.h" #import "remoting/ios/domain/client_session_details.h" #import "remoting/ios/domain/host_info.h" @@ -19,6 +19,7 @@ #import "remoting/ios/persistence/remoting_preferences.h" #include "base/strings/sys_string_conversions.h" +#include "remoting/client/audio/audio_playback_stream.h" #include "remoting/client/chromoting_client_runtime.h" #include "remoting/client/chromoting_session.h" #include "remoting/client/connect_to_host_info.h" @@ -67,7 +68,6 @@ remoting::GestureInterpreter _gestureInterpreter; remoting::KeyboardInterpreter _keyboardInterpreter; std::unique_ptr<remoting::RendererProxy> _renderer; - std::unique_ptr<remoting::AudioPlayerIos> _audioPlayer; // _session is valid only when the session is connected. std::unique_ptr<remoting::ChromotingSession> _session; @@ -134,7 +134,8 @@ showMessage:[MDCSnackbarMessage messageWithText:@"Using WebRTC"]]; } - _audioPlayer = remoting::AudioPlayerIos::CreateAudioPlayer( + auto audioStream = std::make_unique<remoting::AudioPlaybackStream>( + std::make_unique<remoting::AudioPlaybackSinkIos>(), _runtime->audio_task_runner()); _displayHandler = [[GlDisplayHandler alloc] init]; @@ -142,14 +143,12 @@ _session.reset(new remoting::ChromotingSession( _sessonDelegate->GetWeakPtr(), [_displayHandler CreateCursorShapeStub], - [_displayHandler CreateVideoRenderer], - _audioPlayer->GetAudioStreamConsumer(), info)); + [_displayHandler CreateVideoRenderer], std::move(audioStream), info)); _renderer = [_displayHandler CreateRendererProxy]; _gestureInterpreter.SetContext(_renderer.get(), _session.get()); _keyboardInterpreter.SetContext(_session.get()); _session->Connect(); - _audioPlayer->Start(); } - (void)disconnectFromHost { @@ -157,11 +156,6 @@ _displayHandler = nil; - if (_audioPlayer) { - _audioPlayer->Invalidate(); - _runtime->audio_task_runner()->DeleteSoon(FROM_HERE, - _audioPlayer.release()); - } // This needs to be deleted on the display thread since GlDisplayHandler binds // its WeakPtrFactory to the display thread. // TODO(yuweih): Ideally this constraint can be removed once we allow
diff --git a/rlz/test/rlz_test_helpers.cc b/rlz/test/rlz_test_helpers.cc index 24695e6d..c5e46fcc 100644 --- a/rlz/test/rlz_test_helpers.cc +++ b/rlz/test/rlz_test_helpers.cc
@@ -18,8 +18,8 @@ #include "testing/gtest/include/gtest/gtest.h" #if defined(OS_WIN) -#include <shlwapi.h> #include "base/win/registry.h" +#include "base/win/shlwapi.h" #elif defined(OS_POSIX) #include "base/files/file_path.h" #include "rlz/lib/rlz_value_store.h"
diff --git a/sandbox/win/sandbox_poc/main_ui_window.cc b/sandbox/win/sandbox_poc/main_ui_window.cc index 8576fae..89c1be7 100644 --- a/sandbox/win/sandbox_poc/main_ui_window.cc +++ b/sandbox/win/sandbox_poc/main_ui_window.cc
@@ -11,12 +11,12 @@ #include <stddef.h> #include <time.h> #include <windowsx.h> -#include <atlbase.h> -#include <atlsecurity.h> + #include <algorithm> #include <sstream> #include "base/logging.h" +#include "base/win/atl.h" #include "sandbox/win/sandbox_poc/resource.h" #include "sandbox/win/src/acl.h" #include "sandbox/win/src/sandbox.h"
diff --git a/sandbox/win/src/restricted_token_unittest.cc b/sandbox/win/src/restricted_token_unittest.cc index 6c674d5..6fa8cbd 100644 --- a/sandbox/win/src/restricted_token_unittest.cc +++ b/sandbox/win/src/restricted_token_unittest.cc
@@ -6,12 +6,9 @@ #include "sandbox/win/src/restricted_token.h" -#define _ATL_NO_EXCEPTIONS -#include <atlbase.h> -#include <atlsecurity.h> - #include <vector> +#include "base/win/atl.h" #include "base/win/scoped_handle.h" #include "base/win/windows_version.h" #include "sandbox/win/src/security_capabilities.h"
diff --git a/sandbox/win/src/sid_unittest.cc b/sandbox/win/src/sid_unittest.cc index 5b01d592..35c1314 100644 --- a/sandbox/win/src/sid_unittest.cc +++ b/sandbox/win/src/sid_unittest.cc
@@ -6,11 +6,9 @@ #include "sandbox/win/src/sid.h" -#define _ATL_NO_EXCEPTIONS -#include <atlbase.h> -#include <atlsecurity.h> #include <sddl.h> +#include "base/win/atl.h" #include "base/win/windows_version.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/sandbox/win/tests/validation_tests/suite.cc b/sandbox/win/tests/validation_tests/suite.cc index 39a9ee4..c31389f 100644 --- a/sandbox/win/tests/validation_tests/suite.cc +++ b/sandbox/win/tests/validation_tests/suite.cc
@@ -6,9 +6,9 @@ // It includes the tests that need to be performed inside the // sandbox. -#include <shlwapi.h> #include <stddef.h> +#include "base/win/shlwapi.h" #include "base/win/windows_version.h" #include "sandbox/win/tests/common/controller.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/services/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc b/services/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc index 6d02172..e9ff663 100644 --- a/services/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc +++ b/services/device/generic_sensor/platform_sensor_and_provider_unittest_win.cc
@@ -4,13 +4,13 @@ #include <SensorsApi.h> #include <objbase.h> -#include <propvarutil.h> #include <sensors.h> #include "base/bind.h" #include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "base/win/iunknown_impl.h" +#include "base/win/propvarutil.h" #include "base/win/scoped_propvariant.h" #include "services/device/generic_sensor/fake_platform_sensor_and_provider.h" #include "services/device/generic_sensor/generic_sensor_consts.h"
diff --git a/services/identity/public/cpp/identity_test_environment.cc b/services/identity/public/cpp/identity_test_environment.cc index 85ead3aa..5885b3ab 100644 --- a/services/identity/public/cpp/identity_test_environment.cc +++ b/services/identity/public/cpp/identity_test_environment.cc
@@ -222,6 +222,16 @@ on_access_token_requested_callback_ = std::move(callback); } +IdentityTestEnvironment::AccessTokenRequestState::AccessTokenRequestState() = + default; +IdentityTestEnvironment::AccessTokenRequestState::~AccessTokenRequestState() = + default; +IdentityTestEnvironment::AccessTokenRequestState::AccessTokenRequestState( + AccessTokenRequestState&& other) = default; +IdentityTestEnvironment::AccessTokenRequestState& +IdentityTestEnvironment::AccessTokenRequestState::operator=( + AccessTokenRequestState&& other) = default; + void IdentityTestEnvironment::OnAccessTokenRequested( const std::string& account_id, const std::string& consumer_id, @@ -239,36 +249,56 @@ void IdentityTestEnvironment::HandleOnAccessTokenRequested( std::string account_id) { - if (pending_access_token_requester_ && - *pending_access_token_requester_ != account_id) { - // An access token request came in for a different account than the one for - // which we are waiting. Some unittests make access token requests for - // multiple accounts and interleave their responses in an order different - // from the requests. To accommodate this case, defer the handling of this - // access token request until the next iteration of the run loop, where it - // may then be being waited for. - base::SequencedTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&IdentityTestEnvironment::HandleOnAccessTokenRequested, - base::Unretained(this), account_id)); + if (on_access_token_requested_callback_) { + std::move(on_access_token_requested_callback_).Run(); return; } - pending_access_token_requester_.reset(); + for (auto it = requesters_.begin(); it != requesters_.end(); ++it) { + if (!it->account_id || (it->account_id.value() == account_id)) { + if (it->state == AccessTokenRequestState::kAvailable) + return; + if (it->on_available) + std::move(it->on_available).Run(); + requesters_.erase(it); + return; + } + } - if (on_access_token_requested_callback_) - std::move(on_access_token_requested_callback_).Run(); + // A requests came in for a request for which we are not waiting. Record that + // it's available. + requesters_.emplace_back(); + requesters_.back().state = AccessTokenRequestState::kAvailable; + requesters_.back().account_id = account_id; } void IdentityTestEnvironment::WaitForAccessTokenRequestIfNecessary( - base::Optional<std::string> pending_access_token_requester) { - DCHECK(!pending_access_token_requester_); - pending_access_token_requester_ = std::move(pending_access_token_requester); + base::Optional<std::string> account_id) { + // Handle HandleOnAccessTokenRequested getting called before + // WaitForAccessTokenRequestIfNecessary. + if (account_id) { + for (auto it = requesters_.begin(); it != requesters_.end(); ++it) { + if (it->account_id && it->account_id.value() == account_id.value()) { + // Can't wait twice for same thing. + DCHECK_EQ(AccessTokenRequestState::kAvailable, it->state); + requesters_.erase(it); + return; + } + } + } else { + for (auto it = requesters_.begin(); it != requesters_.end(); ++it) { + if (it->state == AccessTokenRequestState::kAvailable) { + requesters_.erase(it); + return; + } + } + } - DCHECK(!on_access_token_requested_callback_); base::RunLoop run_loop; - on_access_token_requested_callback_ = run_loop.QuitClosure(); - + requesters_.emplace_back(); + requesters_.back().state = AccessTokenRequestState::kPending; + requesters_.back().account_id = std::move(account_id); + requesters_.back().on_available = run_loop.QuitClosure(); run_loop.Run(); }
diff --git a/services/identity/public/cpp/identity_test_environment.h b/services/identity/public/cpp/identity_test_environment.h index 5834dd9..4ad038b7 100644 --- a/services/identity/public/cpp/identity_test_environment.h +++ b/services/identity/public/cpp/identity_test_environment.h
@@ -85,9 +85,9 @@ void SetAutomaticIssueOfAccessTokens(bool grant); // Issues |token| in response to any access token request that either has (a) - // just occurred in the current iteration of the run loop, or (b) will occur - // in the future via a task that was posted in the current iteration of the - // run loop. In the latter case, waits until the access token request occurs. + // already occurred and has not been matched by a previous call to this or + // other WaitFor... method, or (b) will occur in the future. In the latter + // case, waits until the access token request occurs. // NOTE: This method behaves this way to allow IdentityTestEnvironment to be // agnostic with respect to whether access token requests are handled // synchronously or asynchronously in the production code. @@ -99,16 +99,9 @@ const base::Time& expiration); // Issues |token| in response to an access token request for |account_id| that - // either has (a) just occurred in the current iteration of the run loop, or - // (b) will occur in the future via a task that was posted in the current - // iteration of the run loop. In the latter case, waits until the access token - // request occurs. - // NOTE: Any access token request for a *different* account - // that is seen before an access token request for the given account will - // be deferred to be handled on the next iteration of the runloop; this - // behavior accommodates tests that interleave handling of production access - // token requests for multiple accounts in an order different from the order - // in which the requests are made. + // either already occurred and has not been matched by a previous call to this + // or other WaitFor... method , or (b) will occur in the future. In the latter + // case, waits until the access token request occurs. // NOTE: This method behaves this way to allow // IdentityTestEnvironment to be agnostic with respect to whether access token // requests are handled synchronously or asynchronously in the production @@ -119,9 +112,9 @@ const base::Time& expiration); // Issues |error| in response to any access token request that either has (a) - // just occurred in the current iteration of the run loop, or (b) will occur - // in the future via a task that was posted in the current iteration of the - // run loop. In the latter case, waits until the access token request occurs. + // already occurred and has not been matched by a previous call to this or + // other WaitFor... method, or (b) will occur in the future via In the latter + // case, waits until the access token request occurs. // NOTE: This method behaves this way to allow IdentityTestEnvironment to be // agnostic with respect to whether access token requests are handled // synchronously or asynchronously in the production code. @@ -132,16 +125,9 @@ const GoogleServiceAuthError& error); // Issues |error| in response to an access token request for |account_id| that - // either has (a) just occurred in the current iteration of the run loop, or - // (b) will occur in the future via a task that was posted in the current - // iteration of the run loop. In the latter case, waits until the access token - // request occurs. - // NOTE: Any access token request for a *different* account - // that is seen before an access token request for the given account will - // be deferred to be handled on the next iteration of the runloop; this - // behavior accommodates tests that interleave handling of production access - // token requests for multiple accounts in an order different from the order - // in which the requests are made. + // either has (a) already occurred and has not been matched by a previous call + // to this or other WaitFor... method, or (b) will occur in the future. In the + // latter case, waits until the access token request occurs. // NOTE: This method behaves this way to allow // IdentityTestEnvironment to be agnostic with respect to whether access token // requests are handled synchronously or asynchronously in the production @@ -158,6 +144,20 @@ void SetCallbackForNextAccessTokenRequest(base::OnceClosure callback); private: + struct AccessTokenRequestState { + AccessTokenRequestState(); + ~AccessTokenRequestState(); + AccessTokenRequestState(AccessTokenRequestState&& other); + AccessTokenRequestState& operator=(AccessTokenRequestState&& other); + + enum { + kPending, + kAvailable, + } state; + base::Optional<std::string> account_id; + base::OnceClosure on_available; + }; + // IdentityManager::DiagnosticsObserver: void OnAccessTokenRequested( const std::string& account_id, @@ -170,15 +170,16 @@ // |account_id| or |pending_access_token_requester_| is empty. void HandleOnAccessTokenRequested(std::string account_id); - // Sets |pending_access_token_requester_| to - // |pending_access_token_requester| and runs a nested runloop until an access - // token request is observed. + // If a token request for |account_id| (or any account if nullopt) has already + // been made and not matched by a different call, returns immediately. + // Otherwise and runs a nested runloop until a matching access token request + // is observed. void WaitForAccessTokenRequestIfNecessary( - base::Optional<std::string> pending_access_token_requester); + base::Optional<std::string> account_id); std::unique_ptr<IdentityTestEnvironmentInternal> internals_; base::OnceClosure on_access_token_requested_callback_; - base::Optional<std::string> pending_access_token_requester_; + std::vector<AccessTokenRequestState> requesters_; DISALLOW_COPY_AND_ASSIGN(IdentityTestEnvironment); };
diff --git a/services/network/network_context.cc b/services/network/network_context.cc index 78a320b6..a0938893 100644 --- a/services/network/network_context.cc +++ b/services/network/network_context.cc
@@ -249,6 +249,8 @@ GURL* new_url) override { if (!enable_referrers_) request->SetReferrer(std::string()); + if (network_context_->network_service()) + network_context_->network_service()->OnBeforeURLRequest(); } void OnCompletedInternal(net::URLRequest* request,
diff --git a/services/network/network_service.cc b/services/network/network_service.cc index f0c1fc4..76effeb5 100644 --- a/services/network/network_service.cc +++ b/services/network/network_service.cc
@@ -13,6 +13,7 @@ #include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" #include "base/task/post_task.h" +#include "base/timer/timer.h" #include "base/values.h" #include "components/certificate_transparency/sth_distributor.h" #include "components/certificate_transparency/sth_observer.h" @@ -27,11 +28,14 @@ #include "net/log/file_net_log_observer.h" #include "net/log/net_log.h" #include "net/log/net_log_util.h" +#include "net/url_request/url_request_context.h" #include "net/url_request/url_request_context_builder.h" #include "services/network/mojo_net_log.h" #include "services/network/network_context.h" #include "services/network/network_usage_accumulator.h" +#include "services/network/public/cpp/features.h" #include "services/network/public/cpp/network_switches.h" +#include "services/network/url_loader.h" #include "services/network/url_request_context_builder_mojo.h" #if defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL) @@ -50,6 +54,10 @@ NetworkService* g_network_service = nullptr; +// The interval for calls to NetworkService::UpdateLoadStates +constexpr auto kUpdateLoadStatesInterval = + base::TimeDelta::FromMilliseconds(250); + std::unique_ptr<net::NetworkChangeNotifier> CreateNetworkChangeNotifierIfNeeded() { // There is a global singleton net::NetworkChangeNotifier if NetworkService @@ -87,6 +95,26 @@ return std::move(remapped_host_resolver); } +// This is duplicated in content/browser/loader/resource_dispatcher_host_impl.cc +bool LoadInfoIsMoreInteresting(const mojom::LoadInfo& a, + const mojom::LoadInfo& b) { + // Set |*_uploading_size| to be the size of the corresponding upload body if + // it's currently being uploaded. + + uint64_t a_uploading_size = 0; + if (a.load_state == net::LOAD_STATE_SENDING_REQUEST) + a_uploading_size = a.upload_size; + + uint64_t b_uploading_size = 0; + if (b.load_state == net::LOAD_STATE_SENDING_REQUEST) + b_uploading_size = b.upload_size; + + if (a_uploading_size != b_uploading_size) + return a_uploading_size > b_uploading_size; + + return a.load_state > b.load_state; +} + } // namespace NetworkService::NetworkService( @@ -405,6 +433,11 @@ return http_auth_handler_factory_.get(); } +void NetworkService::OnBeforeURLRequest() { + if (base::FeatureList::IsEnabled(features::kNetworkService)) + MaybeStartUpdateLoadInfoTimer(); +} + certificate_transparency::STHReporter* NetworkService::sth_reporter() { return sth_distributor_.get(); } @@ -451,6 +484,92 @@ owned_network_contexts_.erase(it); } +void NetworkService::MaybeStartUpdateLoadInfoTimer() { + if (waiting_on_load_state_ack_ || update_load_info_timer_.IsRunning()) + return; + + bool has_loader = false; + for (auto* network_context : network_contexts_) { + if (!network_context->url_request_context()->url_requests()->empty()) { + has_loader = true; + break; + } + } + + if (!has_loader) + return; + + update_load_info_timer_.Start(FROM_HERE, kUpdateLoadStatesInterval, this, + &NetworkService::UpdateLoadInfo); +} + +void NetworkService::UpdateLoadInfo() { + // For requests from the same {process_id, routing_id} pair, pick the most + // important. For ones from the browser, return all of them. + std::vector<mojom::LoadInfoPtr> infos; + std::map<std::pair<uint32_t, uint32_t>, mojom::LoadInfoPtr> frame_infos; + + for (auto* network_context : network_contexts_) { + for (auto* loader : + *network_context->url_request_context()->url_requests()) { + auto* url_loader = URLLoader::ForRequest(*loader); + if (!url_loader) + continue; + + auto process_id = url_loader->GetProcessId(); + auto routing_id = url_loader->GetRenderFrameId(); + if (routing_id == static_cast<uint32_t>(MSG_ROUTING_NONE)) { + // If there is no routing_id, then the browser can't associate this with + // a page so no need to send. + continue; + } + + auto load_info = mojom::LoadInfo::New(); + load_info->process_id = process_id; + load_info->routing_id = routing_id; + load_info->host = loader->url().host(); + auto load_state = loader->GetLoadState(); + load_info->load_state = static_cast<uint32_t>(load_state.state); + load_info->state_param = std::move(load_state.param); + auto upload_progress = loader->GetUploadProgress(); + load_info->upload_size = upload_progress.size(); + load_info->upload_position = upload_progress.position(); + + if (process_id == 0) { + // Requests from the browser can't be compared to ones from child + // processes, so send them all without looking for the most interesting. + infos.push_back(std::move(load_info)); + continue; + } + + auto key = std::make_pair(process_id, routing_id); + auto existing = frame_infos.find(key); + if (existing == frame_infos.end() || + LoadInfoIsMoreInteresting(*load_info, *existing->second)) { + frame_infos[key] = std::move(load_info); + } + } + } + + for (auto& it : frame_infos) + infos.push_back(std::move(it.second)); + + if (infos.empty()) + return; + + DCHECK(!waiting_on_load_state_ack_); + waiting_on_load_state_ack_ = true; + client_->OnLoadingStateUpdate( + std::move(infos), base::BindOnce(&NetworkService::AckUpdateLoadInfo, + base::Unretained(this))); +} + +void NetworkService::AckUpdateLoadInfo() { + DCHECK(waiting_on_load_state_ack_); + waiting_on_load_state_ack_ = false; + MaybeStartUpdateLoadInfoTimer(); +} + void NetworkService::Bind(mojom::NetworkServiceRequest request) { DCHECK(!binding_.is_bound()); binding_.Bind(std::move(request));
diff --git a/services/network/network_service.h b/services/network/network_service.h index 56121f2..5b7f532 100644 --- a/services/network/network_service.h +++ b/services/network/network_service.h
@@ -14,6 +14,7 @@ #include "base/macros.h" #include "base/memory/scoped_refptr.h" #include "base/optional.h" +#include "base/time/time.h" #include "build/build_config.h" #include "mojo/public/cpp/bindings/binding.h" #include "net/http/http_auth_preferences.h" @@ -147,6 +148,9 @@ // one if needed. net::HttpAuthHandlerFactory* GetHttpAuthHandlerFactory(); + // Notification that a URLLoader is about to start. + void OnBeforeURLRequest(); + bool quic_disabled() const { return quic_disabled_; } bool HasRawHeadersAccess(uint32_t process_id) const; @@ -181,6 +185,19 @@ // context. void OnNetworkContextConnectionClosed(NetworkContext* network_context); + // Starts the timer to call NetworkServiceClient::OnLoadingStateUpdate(), if + // timer isn't already running, |waiting_on_load_state_ack_| is false, and + // there are live URLLoaders. + // Only works when network service is enabled. + void MaybeStartUpdateLoadInfoTimer(); + + // Checks all pending requests and updates the load info if necessary. + void UpdateLoadInfo(); + + // Invoked once the browser has acknowledged receiving the previous LoadInfo. + // Starts timer call UpdateLoadInfo() again, if needed. + void AckUpdateLoadInfo(); + std::unique_ptr<MojoNetLog> owned_net_log_; // TODO(https://crbug.com/767450): Remove this, once Chrome no longer creates // its own NetLog. @@ -237,6 +254,14 @@ std::unique_ptr<certificate_transparency::STHDistributor> sth_distributor_; + // A timer that periodically calls UpdateLoadInfo while there are pending + // loads and not waiting on an ACK from the client for the last sent + // LoadInfo callback. + base::OneShotTimer update_load_info_timer_; + // True if a LoadInfoList has been sent to the client, but has yet to be + // acknowledged. + bool waiting_on_load_state_ack_ = false; + DISALLOW_COPY_AND_ASSIGN(NetworkService); };
diff --git a/services/network/network_service_unittest.cc b/services/network/network_service_unittest.cc index bcb512de..07828d5 100644 --- a/services/network/network_service_unittest.cc +++ b/services/network/network_service_unittest.cc
@@ -967,6 +967,11 @@ NOTREACHED(); } + void OnLoadingStateUpdate(std::vector<mojom::LoadInfoPtr> infos, + OnLoadingStateUpdateCallback callback) override { + NOTREACHED(); + } + private: mojo::Binding<mojom::NetworkServiceClient> binding_;
diff --git a/services/network/proxy_resolving_socket_mojo.cc b/services/network/proxy_resolving_socket_mojo.cc index c9c0542..040dc35e7 100644 --- a/services/network/proxy_resolving_socket_mojo.cc +++ b/services/network/proxy_resolving_socket_mojo.cc
@@ -7,6 +7,7 @@ #include <utility> #include "base/logging.h" +#include "base/optional.h" #include "net/base/net_errors.h" #include "services/network/socket_data_pump.h" @@ -17,7 +18,16 @@ const net::NetworkTrafficAnnotationTag& traffic_annotation) : socket_(std::move(socket)), traffic_annotation_(traffic_annotation) {} -ProxyResolvingSocketMojo::~ProxyResolvingSocketMojo() {} +ProxyResolvingSocketMojo::~ProxyResolvingSocketMojo() { + if (connect_callback_) { + // If |this| is destroyed when connect hasn't completed, tell the consumer + // that request has been aborted. + std::move(connect_callback_) + .Run(net::ERR_ABORTED, base::nullopt, base::nullopt, + mojo::ScopedDataPipeConsumerHandle(), + mojo::ScopedDataPipeProducerHandle()); + } +} void ProxyResolvingSocketMojo::Connect( mojom::ProxyResolvingSocketFactory::CreateProxyResolvingSocketCallback @@ -34,18 +44,6 @@ OnConnectCompleted(result); } -void ProxyResolvingSocketMojo::GetPeerAddress(GetPeerAddressCallback callback) { - DCHECK(socket_); - - net::IPEndPoint peer_addr; - int result = socket_->GetPeerAddress(&peer_addr); - if (result != net::OK) { - std::move(callback).Run(result, base::nullopt); - return; - } - std::move(callback).Run(result, peer_addr); -} - void ProxyResolvingSocketMojo::OnConnectCompleted(int result) { DCHECK(!connect_callback_.is_null()); DCHECK(!socket_data_pump_); @@ -54,9 +52,16 @@ if (result == net::OK) result = socket_->GetLocalAddress(&local_addr); + net::IPEndPoint peer_addr; + // If |socket_| is connected through a proxy, GetPeerAddress returns + // net::ERR_NAME_NOT_RESOLVED. + bool get_peer_address_success = + result == net::OK && (socket_->GetPeerAddress(&peer_addr) == net::OK); + if (result != net::OK) { std::move(connect_callback_) - .Run(result, base::nullopt, mojo::ScopedDataPipeConsumerHandle(), + .Run(result, base::nullopt, base::nullopt, + mojo::ScopedDataPipeConsumerHandle(), mojo::ScopedDataPipeProducerHandle()); return; } @@ -67,7 +72,11 @@ std::move(receive_pipe.producer_handle), std::move(send_pipe.consumer_handle), traffic_annotation_); std::move(connect_callback_) - .Run(net::OK, local_addr, std::move(receive_pipe.consumer_handle), + .Run(net::OK, local_addr, + get_peer_address_success + ? base::make_optional<net::IPEndPoint>(peer_addr) + : base::nullopt, + std::move(receive_pipe.consumer_handle), std::move(send_pipe.producer_handle)); }
diff --git a/services/network/proxy_resolving_socket_mojo.h b/services/network/proxy_resolving_socket_mojo.h index 7b127c5..d90a569 100644 --- a/services/network/proxy_resolving_socket_mojo.h +++ b/services/network/proxy_resolving_socket_mojo.h
@@ -29,9 +29,6 @@ mojom::ProxyResolvingSocketFactory::CreateProxyResolvingSocketCallback callback); - // mojom::ProxyResolvingSocket implementation. - void GetPeerAddress(GetPeerAddressCallback callback) override; - private: void OnConnectCompleted(int net_result);
diff --git a/services/network/proxy_resolving_socket_mojo_unittest.cc b/services/network/proxy_resolving_socket_mojo_unittest.cc index 018a55c..aa8c795 100644 --- a/services/network/proxy_resolving_socket_mojo_unittest.cc +++ b/services/network/proxy_resolving_socket_mojo_unittest.cc
@@ -6,11 +6,13 @@ #include <utility> #include <vector> +#include "base/containers/span.h" #include "base/logging.h" #include "base/macros.h" #include "base/run_loop.h" #include "base/test/bind_test_util.h" #include "base/test/scoped_task_environment.h" +#include "mojo/public/cpp/bindings/strong_binding.h" #include "net/base/net_errors.h" #include "net/base/test_completion_callback.h" #include "net/dns/mock_host_resolver.h" @@ -46,21 +48,23 @@ } // namespace -class ProxyResolvingSocketTest : public testing::Test, - public ::testing::WithParamInterface<bool> { +class ProxyResolvingSocketTestBase { public: - ProxyResolvingSocketTest() - : use_tls_(GetParam()), + ProxyResolvingSocketTestBase(bool use_tls) + : use_tls_(use_tls), scoped_task_environment_( base::test::ScopedTaskEnvironment::MainThreadType::IO) {} - ~ProxyResolvingSocketTest() override {} + ~ProxyResolvingSocketTestBase() {} void Init(const std::string& pac_result) { - // |factory_| depends on |context_with_proxy_|, which will be - // re-initialized. Reset it first, since |context_with_proxy_| must - // outlive |factory_|. - factory_.reset(); + // Init() can be called multiple times in a test. Reset the members for each + // invocation. |context_with_proxy_| must outlive |factory_impl_|, which + // uses the URLRequestContet. + factory_binding_ = nullptr; + factory_impl_ = nullptr; + factory_ptr_.reset(); + context_with_proxy_ = nullptr; mock_client_socket_factory_ = std::make_unique<net::MockClientSocketFactory>(); @@ -70,8 +74,12 @@ context_with_proxy_->set_client_socket_factory( mock_client_socket_factory_.get()); context_with_proxy_->Init(); - factory_ = std::make_unique<ProxyResolvingSocketFactoryMojo>( + + factory_impl_ = std::make_unique<ProxyResolvingSocketFactoryMojo>( context_with_proxy_.get()); + factory_binding_ = + std::make_unique<mojo::Binding<mojom::ProxyResolvingSocketFactory>>( + factory_impl_.get(), mojo::MakeRequest(&factory_ptr_)); } // Reads |num_bytes| from |handle| or reads until an error occurs. Returns the @@ -97,22 +105,26 @@ int CreateSocketSync( mojom::ProxyResolvingSocketRequest request, + net::IPEndPoint* peer_addr_out, const GURL& url, mojo::ScopedDataPipeConsumerHandle* receive_pipe_handle_out, mojo::ScopedDataPipeProducerHandle* send_pipe_handle_out) { base::RunLoop run_loop; int net_error = net::ERR_FAILED; - factory_->CreateProxyResolvingSocket( + factory_ptr_->CreateProxyResolvingSocket( url, use_tls_, net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS), std::move(request), base::BindLambdaForTesting( [&](int result, const base::Optional<net::IPEndPoint>& local_addr, + const base::Optional<net::IPEndPoint>& peer_addr, mojo::ScopedDataPipeConsumerHandle receive_pipe_handle, mojo::ScopedDataPipeProducerHandle send_pipe_handle) { net_error = result; if (net_error == net::OK) EXPECT_NE(0, local_addr.value().port()); + if (peer_addr_out && peer_addr) + *peer_addr_out = peer_addr.value(); *receive_pipe_handle_out = std::move(receive_pipe_handle); *send_pipe_handle_out = std::move(send_pipe_handle); run_loop.Quit(); @@ -127,13 +139,29 @@ bool use_tls() const { return use_tls_; } + mojom::ProxyResolvingSocketFactory* factory() { return factory_ptr_.get(); } + private: const bool use_tls_; base::test::ScopedTaskEnvironment scoped_task_environment_; std::unique_ptr<net::MockClientSocketFactory> mock_client_socket_factory_; std::unique_ptr<TestURLRequestContextWithProxy> context_with_proxy_; - std::unique_ptr<mojom::ProxyResolvingSocketFactory> factory_; + mojom::ProxyResolvingSocketFactoryPtr factory_ptr_; + std::unique_ptr<mojo::Binding<mojom::ProxyResolvingSocketFactory>> + factory_binding_; + std::unique_ptr<ProxyResolvingSocketFactoryMojo> factory_impl_; + DISALLOW_COPY_AND_ASSIGN(ProxyResolvingSocketTestBase); +}; + +class ProxyResolvingSocketTest : public ProxyResolvingSocketTestBase, + public testing::TestWithParam<bool> { + public: + ProxyResolvingSocketTest() : ProxyResolvingSocketTestBase(GetParam()) {} + + ~ProxyResolvingSocketTest() override {} + + private: DISALLOW_COPY_AND_ASSIGN(ProxyResolvingSocketTest); }; @@ -174,27 +202,18 @@ mojom::ProxyResolvingSocketPtr socket; mojo::ScopedDataPipeConsumerHandle client_socket_receive_handle; mojo::ScopedDataPipeProducerHandle client_socket_send_handle; - EXPECT_EQ(net::OK, - CreateSocketSync(mojo::MakeRequest(&socket), kDestination, - &client_socket_receive_handle, - &client_socket_send_handle)); net::IPEndPoint actual_remote_addr; - int net_error = net::ERR_FAILED; - base::RunLoop run_loop; - socket->GetPeerAddress(base::BindLambdaForTesting( - [&](int result, const base::Optional<net::IPEndPoint>& peer_addr) { - net_error = result; - if (net_error == net::OK) - actual_remote_addr = peer_addr.value(); - run_loop.Quit(); - })); - run_loop.Run(); + EXPECT_EQ(net::OK, + CreateSocketSync(mojo::MakeRequest(&socket), &actual_remote_addr, + kDestination, &client_socket_receive_handle, + &client_socket_send_handle)); + // Consume all read data. + base::RunLoop().RunUntilIdle(); if (!is_direct) { - EXPECT_EQ(net::ERR_NAME_NOT_RESOLVED, net_error); + EXPECT_EQ(net::IPEndPoint(), actual_remote_addr); EXPECT_FALSE(socket_data.AllReadDataConsumed()); EXPECT_TRUE(socket_data.AllWriteDataConsumed()); } else { - EXPECT_EQ(net::OK, net_error); EXPECT_EQ(remote_addr.ToString(), actual_remote_addr.ToString()); EXPECT_TRUE(socket_data.AllReadDataConsumed()); EXPECT_FALSE(socket_data.AllWriteDataConsumed()); @@ -229,8 +248,8 @@ mojom::ProxyResolvingSocketPtr socket; mojo::ScopedDataPipeConsumerHandle client_socket_receive_handle; mojo::ScopedDataPipeProducerHandle client_socket_send_handle; - int status = CreateSocketSync(mojo::MakeRequest(&socket), kDestination, - &client_socket_receive_handle, + int status = CreateSocketSync(mojo::MakeRequest(&socket), nullptr, + kDestination, &client_socket_receive_handle, &client_socket_send_handle); if (test.is_direct) { EXPECT_EQ(net::ERR_FAILED, status); @@ -273,9 +292,10 @@ mojo::ScopedDataPipeConsumerHandle client_socket_receive_handle; mojo::ScopedDataPipeProducerHandle client_socket_send_handle; const GURL kDestination("http://example.com"); - EXPECT_EQ(net::OK, CreateSocketSync(mojo::MakeRequest(&socket), kDestination, - &client_socket_receive_handle, - &client_socket_send_handle)); + EXPECT_EQ(net::OK, + CreateSocketSync(mojo::MakeRequest(&socket), nullptr, kDestination, + &client_socket_receive_handle, + &client_socket_send_handle)); // Loop kNumIterations times to test that writes can follow reads, and reads // can follow writes. for (int j = 0; j < kNumIterations; ++j) { @@ -296,4 +316,47 @@ EXPECT_EQ(use_tls(), ssl_data.ConnectDataConsumed()); } +// Tests that exercise logic related to mojo. +class ProxyResolvingSocketMojoTest : public ProxyResolvingSocketTestBase, + public testing::Test { + public: + ProxyResolvingSocketMojoTest() : ProxyResolvingSocketTestBase(false) {} + + ~ProxyResolvingSocketMojoTest() override {} + + private: + DISALLOW_COPY_AND_ASSIGN(ProxyResolvingSocketMojoTest); +}; + +// Tests that when ProxyResolvingSocketPtr is destroyed but not the +// ProxyResolvingSocketFactory, the connect callback is not dropped. +// Regression test for https://crbug.com/862608. +TEST_F(ProxyResolvingSocketMojoTest, SocketDestroyedBeforeConnectCompletes) { + Init("DIRECT"); + std::vector<net::MockRead> reads; + std::vector<net::MockWrite> writes; + + net::StaticSocketDataProvider data_provider(reads, writes); + data_provider.set_connect_data(net::MockConnect(net::ASYNC, net::OK)); + mock_client_socket_factory()->AddSocketDataProvider(&data_provider); + const GURL kDestination("http://example.com"); + mojom::ProxyResolvingSocketPtr socket; + base::RunLoop run_loop; + int net_error = net::OK; + factory()->CreateProxyResolvingSocket( + kDestination, false, + net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS), + mojo::MakeRequest(&socket), + base::BindLambdaForTesting( + [&](int result, const base::Optional<net::IPEndPoint>& local_addr, + const base::Optional<net::IPEndPoint>& peer_addr, + mojo::ScopedDataPipeConsumerHandle receive_pipe_handle, + mojo::ScopedDataPipeProducerHandle send_pipe_handle) { + net_error = result; + })); + socket.reset(); + base::RunLoop().RunUntilIdle(); + EXPECT_EQ(net::ERR_ABORTED, net_error); +} + } // namespace network
diff --git a/services/network/public/cpp/shared_url_loader_factory.cc b/services/network/public/cpp/shared_url_loader_factory.cc index 2262abbb..cb058cc 100644 --- a/services/network/public/cpp/shared_url_loader_factory.cc +++ b/services/network/public/cpp/shared_url_loader_factory.cc
@@ -19,4 +19,8 @@ SharedURLLoaderFactoryInfo::~SharedURLLoaderFactoryInfo() = default; +bool SharedURLLoaderFactory::BypassRedirectChecks() const { + return false; +} + } // namespace network
diff --git a/services/network/public/cpp/shared_url_loader_factory.h b/services/network/public/cpp/shared_url_loader_factory.h index c887dff..a79644e9 100644 --- a/services/network/public/cpp/shared_url_loader_factory.h +++ b/services/network/public/cpp/shared_url_loader_factory.h
@@ -43,6 +43,9 @@ // a single thread hop on any different-thread fetch. virtual std::unique_ptr<SharedURLLoaderFactoryInfo> Clone() = 0; + // If this returns true, any redirect safety checks should be bypassed. + virtual bool BypassRedirectChecks() const; + protected: friend class base::RefCounted<SharedURLLoaderFactory>; ~SharedURLLoaderFactory() override;
diff --git a/services/network/public/mojom/network_service.mojom b/services/network/public/mojom/network_service.mojom index e95cf1d..e2e956e 100644 --- a/services/network/public/mojom/network_service.mojom +++ b/services/network/public/mojom/network_service.mojom
@@ -5,7 +5,8 @@ module network.mojom; import "mojo/public/mojom/base/file.mojom"; -import "mojo/public/mojom/base/file_path.mojom"; +import "mojo/public/mojom/base/file_path.mojom"; +import "mojo/public/mojom/base/string16.mojom"; import "mojo/public/mojom/base/values.mojom"; import "services/network/public/mojom/cookie_manager.mojom"; import "services/network/public/mojom/network_change_manager.mojom"; @@ -40,6 +41,16 @@ OnAuthCredentials(AuthCredentials? credentials); }; +struct LoadInfo { + uint32 process_id; + uint32 routing_id; + string host; + uint32 load_state; // net::LoadState enum + mojo_base.mojom.String16 state_param; + uint64 upload_position; + uint64 upload_size; +}; + // Network service interface to the browser. interface NetworkServiceClient { // Called when we receive an authentication failure. @@ -109,6 +120,11 @@ int32 process_id, int32 routing_id, url.mojom.Url url, url.mojom.Url frame_url, array<CanonicalCookie> cookie_list, bool blocked_by_policy); + + // Called periodically to update the client about progress of the current + // loads. To avoid flooding the client, it has to ack the update before it can + // receive the next update. + OnLoadingStateUpdate(array<LoadInfo> infos) => (); }; // An HTTPS server to send DNS queries to, per the DNS Queries over HTTPS spec.
diff --git a/services/network/public/mojom/proxy_resolving_socket.mojom b/services/network/public/mojom/proxy_resolving_socket.mojom index 18ceb08..59cd312b 100644 --- a/services/network/public/mojom/proxy_resolving_socket.mojom +++ b/services/network/public/mojom/proxy_resolving_socket.mojom
@@ -12,13 +12,6 @@ // and Reads are through the data pipes supplied upon construction. Consumer // can close the socket by destroying the interface pointer. interface ProxyResolvingSocket{ - // Gets the peer address. On success, |net_error| is - // net::OK and |peer_addr| contains the peer address. On failure, - // |peer_addr| is null and |net_error| is a net error code. If socket is - // connected to a proxy, |net_error| will be net::ERR_NAME_NOT_RESOLVED, and - // |peer_addr| will be empty. - GetPeerAddress() => (int32 net_error, net.interfaces.IPEndPoint? peer_addr); - // TODO(xunjieli): Add methods to configure the socket connection and allow // consumers to specify whether they want to disconnect or return the socket // to socket pools. @@ -33,7 +26,12 @@ // connection will be established on top of a TCP connection. On success, // |result| is net::OK. Caller is to use |send_stream| to send data and // |receive_stream| to receive data over the connection. On failure, |result| - // is a network error code. + // is a network error code. |local_addr| contains the local address of the + // socket. |peer_addr| contains the peer address. If socket is connected to a + // proxy, |peer_addr| will be null. + // + // If socket is closed before the callback can be completed, the callback will + // be invoked with net::ERR_ABORTED. // // Any sockets that are created but are yet to be destroyed will be destroyed // when the implementation of this factory goes away. @@ -42,6 +40,7 @@ ProxyResolvingSocket& socket) => (int32 result, net.interfaces.IPEndPoint? local_addr, + net.interfaces.IPEndPoint? peer_addr, handle<data_pipe_consumer>? receive_stream, handle<data_pipe_producer>? send_stream); };
diff --git a/services/network/test/test_network_service_client.cc b/services/network/test/test_network_service_client.cc index f465929..0b3f6d5 100644 --- a/services/network/test/test_network_service_client.cc +++ b/services/network/test/test_network_service_client.cc
@@ -104,4 +104,8 @@ std::move(callback).Run(net::OK, std::move(files)); } +void TestNetworkServiceClient::OnLoadingStateUpdate( + std::vector<mojom::LoadInfoPtr> infos, + OnLoadingStateUpdateCallback callback) {} + } // namespace network
diff --git a/services/network/test/test_network_service_client.h b/services/network/test/test_network_service_client.h index d6b0bf63..6da1408a 100644 --- a/services/network/test/test_network_service_client.h +++ b/services/network/test/test_network_service_client.h
@@ -65,6 +65,8 @@ bool async, const std::vector<base::FilePath>& file_paths, OnFileUploadRequestedCallback callback) override; + void OnLoadingStateUpdate(std::vector<mojom::LoadInfoPtr> infos, + OnLoadingStateUpdateCallback callback) override; private: bool enable_uploads_;
diff --git a/services/network/test/test_url_loader_factory.cc b/services/network/test/test_url_loader_factory.cc index 1faad9cb..9cd09681 100644 --- a/services/network/test/test_url_loader_factory.cc +++ b/services/network/test/test_url_loader_factory.cc
@@ -42,6 +42,7 @@ response.head = head; response.content = content; response.status = status; + response.status.decoded_body_length = content.size(); response.flags = flags; responses_[url] = response; @@ -60,7 +61,6 @@ ResourceResponseHead head = CreateResourceResponseHead(http_status); head.mime_type = "text/html"; URLLoaderCompletionStatus status; - status.decoded_body_length = content.size(); AddResponse(GURL(url), head, content, status); }
diff --git a/services/network/test/test_url_loader_factory_unittest.cc b/services/network/test/test_url_loader_factory_unittest.cc index 5a06088..a9ead38 100644 --- a/services/network/test/test_url_loader_factory_unittest.cc +++ b/services/network/test/test_url_loader_factory_unittest.cc
@@ -41,6 +41,9 @@ EXPECT_TRUE(client->response_body().is_valid()); EXPECT_TRUE( mojo::BlockingCopyToString(client->response_body_release(), &response)); + EXPECT_EQ( + static_cast<size_t>(client->completion_status().decoded_body_length), + response.length()); return response; } @@ -72,6 +75,20 @@ EXPECT_EQ(GetData(&client2), data); } +TEST_F(TestURLLoaderFactoryTest, AddResponseAdvanced) { + std::string url = "http://example.com"; + std::string body = "Happy robot"; + + // Test the full-featured version of AddResponse. + factory()->AddResponse(GURL(url), CreateResourceResponseHead(net::HTTP_OK), + body, URLLoaderCompletionStatus(net::OK)); + StartRequest(url); + client()->RunUntilComplete(); + ASSERT_TRUE(client()->response_head().headers != nullptr); + EXPECT_EQ(net::HTTP_OK, client()->response_head().headers->response_code()); + EXPECT_EQ(body, GetData(client())); +} + TEST_F(TestURLLoaderFactoryTest, AddResponse404) { std::string url = "http://foo"; std::string body = "Sad robot"; @@ -125,7 +142,6 @@ {redirect_info, ResourceResponseHead()}}; URLLoaderCompletionStatus status; std::string content = "foo"; - status.decoded_body_length = content.size(); factory()->AddResponse(url, ResourceResponseHead(), content, status, redirects); StartRequest(url.spec());
diff --git a/services/network/url_loader_unittest.cc b/services/network/url_loader_unittest.cc index 2751de8..c3f8aed 100644 --- a/services/network/url_loader_unittest.cc +++ b/services/network/url_loader_unittest.cc
@@ -1982,6 +1982,11 @@ NOTREACHED(); } + void OnLoadingStateUpdate(std::vector<mojom::LoadInfoPtr> infos, + OnLoadingStateUpdateCallback callback) override { + NOTREACHED(); + } + void set_credentials_response(CredentialsResponse credentials_response) { credentials_response_ = credentials_response; }
diff --git a/services/service_manager/public/cpp/service_context.cc b/services/service_manager/public/cpp/service_context.cc index 87353815..0e54e7f 100644 --- a/services/service_manager/public/cpp/service_context.cc +++ b/services/service_manager/public/cpp/service_context.cc
@@ -113,9 +113,9 @@ void ServiceContext::QuitNow() { if (binding_.is_bound()) binding_.Close(); - if (!quit_closure_.is_null()) { + if (quit_closure_) { // CAUTION: May delete |this|. - base::ResetAndReturn(&quit_closure_).Run(); + std::move(quit_closure_).Run(); } }
diff --git a/services/service_manager/public/cpp/service_runner.cc b/services/service_manager/public/cpp/service_runner.cc index 0f0f5c4..5a05042 100644 --- a/services/service_manager/public/cpp/service_runner.cc +++ b/services/service_manager/public/cpp/service_runner.cc
@@ -69,7 +69,7 @@ } void ServiceRunner::Quit() { - base::RunLoop::QuitCurrentWhenIdleDeprecated(); + context_->QuitNow(); } } // namespace service_manager
diff --git a/services/service_manager/standalone/context.cc b/services/service_manager/standalone/context.cc index 26f4a491..7f51098 100644 --- a/services/service_manager/standalone/context.cc +++ b/services/service_manager/standalone/context.cc
@@ -60,9 +60,11 @@ }; #endif // !defined(OS_IOS) -void OnInstanceQuit(const std::string& name, const Identity& identity) { +void OnInstanceQuit(const std::string& name, + base::RepeatingClosure on_quit, + const Identity& identity) { if (name == identity.name()) - base::RunLoop::QuitCurrentWhenIdleDeprecated(); + on_quit.Run(); } const char kService[] = "service"; @@ -92,14 +94,17 @@ Context::~Context() = default; -void Context::RunCommandLineApplication() { +void Context::RunCommandLineApplication(base::RepeatingClosure on_quit) { base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); if (command_line->HasSwitch(kService)) - Run(command_line->GetSwitchValueASCII(kService)); + Run(command_line->GetSwitchValueASCII(kService), std::move(on_quit)); + else + std::move(on_quit).Run(); } -void Context::Run(const std::string& name) { - service_manager_->SetInstanceQuitCallback(base::Bind(&OnInstanceQuit, name)); +void Context::Run(const std::string& name, base::RepeatingClosure on_quit) { + service_manager_->SetInstanceQuitCallback( + base::BindRepeating(&OnInstanceQuit, name, std::move(on_quit))); std::unique_ptr<ConnectParams> params(new ConnectParams); params->set_source(CreateServiceManagerIdentity());
diff --git a/services/service_manager/standalone/context.h b/services/service_manager/standalone/context.h index cf9de2a..acdb4b8 100644 --- a/services/service_manager/standalone/context.h +++ b/services/service_manager/standalone/context.h
@@ -7,6 +7,7 @@ #include <memory> +#include "base/callback.h" #include "base/macros.h" #include "base/time/time.h" #include "base/values.h" @@ -27,14 +28,15 @@ std::unique_ptr<base::Value> catalog_content); ~Context(); - // Run the application specified on the command line. - void RunCommandLineApplication(); + // Run the application specified on the command line, and run |on_quit| when + // the application instance quits. + void RunCommandLineApplication(base::RepeatingClosure on_quit); ServiceManager* service_manager() { return service_manager_.get(); } private: // Runs the app specified by |name|. - void Run(const std::string& name); + void Run(const std::string& name, base::RepeatingClosure on_quit); std::unique_ptr<ServiceManager> service_manager_; base::Time main_entry_time_;
diff --git a/services/service_manager/tests/connect/connect_test_package.cc b/services/service_manager/tests/connect/connect_test_package.cc index c8d4147..45a4cb1 100644 --- a/services/service_manager/tests/connect/connect_test_package.cc +++ b/services/service_manager/tests/connect/connect_test_package.cc
@@ -148,7 +148,7 @@ void OnConnectionError() { if (bindings_.empty()) - base::RunLoop::QuitCurrentWhenIdleDeprecated(); + context()->QuitNow(); } const std::string title_;
diff --git a/services/service_manager/tests/lifecycle/app_client.cc b/services/service_manager/tests/lifecycle/app_client.cc index 78c72eaa..20804e86 100644 --- a/services/service_manager/tests/lifecycle/app_client.cc +++ b/services/service_manager/tests/lifecycle/app_client.cc
@@ -25,7 +25,7 @@ } bool AppClient::OnServiceManagerConnectionLost() { - base::RunLoop::QuitCurrentWhenIdleDeprecated(); + context()->QuitNow(); return true; }
diff --git a/services/service_manager/tests/lifecycle/package.cc b/services/service_manager/tests/lifecycle/package.cc index 00110c7..ad17e1fb 100644 --- a/services/service_manager/tests/lifecycle/package.cc +++ b/services/service_manager/tests/lifecycle/package.cc
@@ -147,7 +147,7 @@ contexts_.erase(it); id_to_context_.erase(id_it); if (contexts_.empty() && base::RunLoop::IsRunningOnCurrentThread()) - base::RunLoop::QuitCurrentWhenIdleDeprecated(); + context()->QuitNow(); } service_manager::test::AppClient app_client_;
diff --git a/services/service_manager/tests/lifecycle/parent.cc b/services/service_manager/tests/lifecycle/parent.cc index 81690d0..199a8b8 100644 --- a/services/service_manager/tests/lifecycle/parent.cc +++ b/services/service_manager/tests/lifecycle/parent.cc
@@ -17,10 +17,6 @@ namespace { -void QuitLoop(base::RunLoop* loop) { - loop->Quit(); -} - class Parent : public service_manager::Service, public service_manager::test::mojom::Parent { public: @@ -50,12 +46,12 @@ context()->connector()->BindInterface("lifecycle_unittest_app", &lifecycle); { base::RunLoop loop(base::RunLoop::Type::kNestableTasksAllowed); - lifecycle->Ping(base::Bind(&QuitLoop, &loop)); + lifecycle->Ping(loop.QuitClosure()); loop.Run(); } std::move(callback).Run(); } - void Quit() override { base::RunLoop::QuitCurrentWhenIdleDeprecated(); } + void Quit() override { context()->QuitNow(); } service_manager::BinderRegistry registry_; mojo::BindingSet<service_manager::test::mojom::Parent> parent_bindings_;
diff --git a/services/service_manager/tests/service_manager/embedder.cc b/services/service_manager/tests/service_manager/embedder.cc index 2cd33c6..5cc4772c 100644 --- a/services/service_manager/tests/service_manager/embedder.cc +++ b/services/service_manager/tests/service_manager/embedder.cc
@@ -79,7 +79,7 @@ } bool OnServiceManagerConnectionLost() override { - base::RunLoop::QuitCurrentWhenIdleDeprecated(); + context()->QuitNow(); return true; }
diff --git a/services/ui/ime/ime_unittest.cc b/services/ui/ime/ime_unittest.cc index 43f7686..50ac7b8 100644 --- a/services/ui/ime/ime_unittest.cc +++ b/services/ui/ime/ime_unittest.cc
@@ -14,6 +14,7 @@ #include "services/ui/public/interfaces/constants.mojom.h" #include "services/ui/public/interfaces/ime/ime.mojom.h" #include "ui/events/event.h" +#include "ui/events/keycodes/dom/dom_code.h" class TestTextInputClient : public ui::mojom::TextInputClient { public: @@ -103,7 +104,7 @@ ime_driver_->StartSession(std::move(details)); // Send character key event. - ui::KeyEvent char_event('A', ui::VKEY_A, 0); + ui::KeyEvent char_event('A', ui::VKEY_A, ui::DomCode::NONE, 0); EXPECT_TRUE(ProcessKeyEvent(&input_method, ui::Event::Clone(char_event))); std::unique_ptr<ui::Event> received_event = client.WaitUntilInsertChar();
diff --git a/services/ui/public/interfaces/window_tree.mojom b/services/ui/public/interfaces/window_tree.mojom index 3fcfef1..bf8af6fe 100644 --- a/services/ui/public/interfaces/window_tree.mojom +++ b/services/ui/public/interfaces/window_tree.mojom
@@ -364,6 +364,17 @@ // Called by the client to cancel any in progress drag drop operation. This // will result in a change completed for the underlying change. CancelDragDrop(uint64 window_id); + + // Called by the client to start a session of observing the topmost window + // under the cursor or touch point. Once called, OnTopmostWindowChanged() is + // called on the client whenever the topmost window changes. |source| + // specifies what type of located events should be observed (mouse or touch), + // and |window_id| specifies the initial target of the located event. + ObserveTopmostWindow(MoveLoopSource source, uint64 window_id); + + // Called by the client to request stopping the ongoing session of observing + // the topmost window under the cursor. + StopObservingTopmostWindow(); }; // Changes to windows are not sent to the connection that originated the @@ -572,6 +583,14 @@ // |drag_data| passed in via the first message. OnDragDropDone(); + // Called when the topmost window under the cursor/touch changes. The client + // receives at most two IDs for the topmost windows. The first one is for the + // topmost window. The second one is optionally for the second topmost window + // if the first one happens to be the current event target. The second one + // will be used by the client when they want to ignore the event target. + // Each ID can be 0 when the window is not hosted by the client. + OnTopmostWindowChanged(array<uint64> topmost_ids); + // A change initiated from the client has completed. See description of // change ids for details. OnChangeCompleted(uint32 change_id, bool success);
diff --git a/services/ui/ws2/BUILD.gn b/services/ui/ws2/BUILD.gn index e85af2f0..5d31877 100644 --- a/services/ui/ws2/BUILD.gn +++ b/services/ui/ws2/BUILD.gn
@@ -54,6 +54,8 @@ "screen_provider.h", "server_window.cc", "server_window.h", + "topmost_window_observer.cc", + "topmost_window_observer.h", "user_activity_monitor.cc", "user_activity_monitor.h", "window_delegate_impl.cc",
diff --git a/services/ui/ws2/test_change_tracker.cc b/services/ui/ws2/test_change_tracker.cc index bc0e86d..3e16dbc9 100644 --- a/services/ui/ws2/test_change_tracker.cc +++ b/services/ui/ws2/test_change_tracker.cc
@@ -11,6 +11,7 @@ #include "base/strings/stringprintf.h" #include "mojo/public/cpp/bindings/map.h" #include "services/ui/common/util.h" +#include "services/ui/ws2/ids.h" #include "ui/base/cursor/cursor.h" #include "ui/gfx/geometry/point_conversions.h" @@ -176,6 +177,11 @@ WindowIdToString(change.window_id).c_str()); case CHANGE_TYPE_DRAG_DROP_DONE: return "DragDropDone"; + case CHANGE_TYPE_TOPMOST_WINDOW_CHANGED: + return base::StringPrintf( + "TopmostWindowChanged window_id=%s window_id2=%s", + WindowIdToString(change.window_id).c_str(), + WindowIdToString(change.window_id2).c_str()); case CHANGE_TYPE_ON_PERFORM_DRAG_DROP_COMPLETED: return base::StringPrintf( "OnPerformDragDropCompleted id=%d success=%s action=%d", @@ -562,6 +568,18 @@ AddChange(change); } +void TestChangeTracker::OnTopmostWindowChanged( + const std::vector<Id>& topmost_ids) { + DCHECK_LE(topmost_ids.size(), 2u); + Change change; + change.type = CHANGE_TYPE_TOPMOST_WINDOW_CHANGED; + change.window_id = + (topmost_ids.size() > 0) ? topmost_ids[0] : kInvalidTransportId; + change.window_id2 = + (topmost_ids.size() > 1) ? topmost_ids[1] : kInvalidTransportId; + AddChange(change); +} + void TestChangeTracker::OnPerformDragDropCompleted(uint32_t change_id, bool success, uint32_t action_taken) {
diff --git a/services/ui/ws2/test_change_tracker.h b/services/ui/ws2/test_change_tracker.h index b4812b7b..944db16 100644 --- a/services/ui/ws2/test_change_tracker.h +++ b/services/ui/ws2/test_change_tracker.h
@@ -54,6 +54,7 @@ CHANGE_TYPE_DRAG_LEAVE, CHANGE_TYPE_COMPLETE_DROP, CHANGE_TYPE_DRAG_DROP_DONE, + CHANGE_TYPE_TOPMOST_WINDOW_CHANGED, CHANGE_TYPE_ON_PERFORM_DRAG_DROP_COMPLETED, }; @@ -226,6 +227,7 @@ void OnDragLeave(Id widnow_id); void OnCompleteDrop(Id window_id); void OnDragDropDone(); + void OnTopmostWindowChanged(const std::vector<Id>& topmost_ids); void OnPerformDragDropCompleted(uint32_t change_id, bool success, uint32_t action_taken);
diff --git a/services/ui/ws2/test_window_tree_client.cc b/services/ui/ws2/test_window_tree_client.cc index b2189041..388e2c5 100644 --- a/services/ui/ws2/test_window_tree_client.cc +++ b/services/ui/ws2/test_window_tree_client.cc
@@ -278,6 +278,11 @@ tracker_.OnDragDropDone(); } +void TestWindowTreeClient::OnTopmostWindowChanged( + const std::vector<Id>& topmost_ids) { + tracker_.OnTopmostWindowChanged(topmost_ids); +} + void TestWindowTreeClient::OnChangeCompleted(uint32_t change_id, bool success) { tracker_.OnChangeCompleted(change_id, success); }
diff --git a/services/ui/ws2/test_window_tree_client.h b/services/ui/ws2/test_window_tree_client.h index 0b6342ef..8b56c2d 100644 --- a/services/ui/ws2/test_window_tree_client.h +++ b/services/ui/ws2/test_window_tree_client.h
@@ -182,6 +182,7 @@ bool success, uint32_t action_taken) override; void OnDragDropDone() override; + void OnTopmostWindowChanged(const std::vector<Id>& topmost_ids) override; void OnChangeCompleted(uint32_t change_id, bool success) override; void RequestClose(Id window_id) override; void GetScreenProviderObserver(
diff --git a/services/ui/ws2/topmost_window_observer.cc b/services/ui/ws2/topmost_window_observer.cc new file mode 100644 index 0000000..9e81faa --- /dev/null +++ b/services/ui/ws2/topmost_window_observer.cc
@@ -0,0 +1,145 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "services/ui/ws2/topmost_window_observer.h" + +#include "services/ui/ws2/window_service.h" +#include "services/ui/ws2/window_service_delegate.h" +#include "services/ui/ws2/window_tree.h" +#include "ui/aura/window.h" +#include "ui/aura/window_event_dispatcher.h" +#include "ui/aura/window_tree_host.h" +#include "ui/events/event.h" +#include "ui/events/gestures/gesture_recognizer.h" +#include "ui/gfx/geometry/point_f.h" +#include "ui/wm/core/coordinate_conversion.h" + +namespace { + +gfx::Point GetLocationInScreen(const ui::LocatedEvent& event) { + gfx::Point location_in_screen = event.location(); + ::wm::ConvertPointToScreen(static_cast<aura::Window*>(event.target()), + &location_in_screen); + return location_in_screen; +} + +} // namespace + +namespace ui { +namespace ws2 { + +TopmostWindowObserver::TopmostWindowObserver(WindowTree* window_tree, + ui::mojom::MoveLoopSource source, + aura::Window* initial_target) + : window_tree_(window_tree), + source_(source), + last_target_(initial_target), + root_(initial_target->GetRootWindow()) { + root_->AddPreTargetHandler(this, ui::EventTarget::Priority::kSystem); + if (source == ui::mojom::MoveLoopSource::MOUSE) { + last_location_ = + root_->GetHost()->dispatcher()->GetLastMouseLocationInRoot(); + ::wm::ConvertPointToScreen(root_, &last_location_); + } else { + gfx::PointF point; + if (ui::GestureRecognizer::Get()->GetLastTouchPointForTarget(last_target_, + &point)) { + last_location_ = gfx::Point(point.x(), point.y()); + } + ::wm::ConvertPointToScreen(last_target_, &last_location_); + } + UpdateTopmostWindows(); +} + +TopmostWindowObserver::~TopmostWindowObserver() { + root_->RemovePreTargetHandler(this); + if (topmost_) + topmost_->RemoveObserver(this); + if (real_topmost_) + real_topmost_->RemoveObserver(this); +} + +void TopmostWindowObserver::OnMouseEvent(ui::MouseEvent* event) { + CHECK_EQ(ui::EP_PRETARGET, event->phase()); + if (source_ != ui::mojom::MoveLoopSource::MOUSE) + return; + // The event target can change when the dragged browser tab is detached into a + // new window. + last_target_ = static_cast<aura::Window*>(event->target()); + last_location_ = GetLocationInScreen(*event); + UpdateTopmostWindows(); +} + +void TopmostWindowObserver::OnTouchEvent(ui::TouchEvent* event) { + CHECK_EQ(ui::EP_PRETARGET, event->phase()); + if (source_ != ui::mojom::MoveLoopSource::TOUCH) + return; + // The event target can change when the dragged browser tab is detached into a + // new window. + last_target_ = static_cast<aura::Window*>(event->target()); + last_location_ = GetLocationInScreen(*event); + UpdateTopmostWindows(); +} + +void TopmostWindowObserver::OnWindowVisibilityChanged(aura::Window* window, + bool visible) { + if (visible) + return; + if (!window->Contains(topmost_) && !window->Contains(real_topmost_)) + return; + UpdateTopmostWindows(); +} + +void TopmostWindowObserver::OnWindowHierarchyChanged( + const HierarchyChangeParams& params) { + UpdateTopmostWindows(); +} + +void TopmostWindowObserver::OnWindowBoundsChanged( + aura::Window* window, + const gfx::Rect& old_bounds, + const gfx::Rect& new_bounds, + ui::PropertyChangeReason reason) { + gfx::Rect screen_bounds = new_bounds; + ::wm::ConvertRectToScreen(window->parent(), &screen_bounds); + if (!screen_bounds.Contains(last_location_)) + UpdateTopmostWindows(); +} + +void TopmostWindowObserver::UpdateTopmostWindows() { + std::set<aura::Window*> ignore; + ignore.insert(last_target_); + aura::Window* real_topmost = nullptr; + aura::Window* topmost = + window_tree_->window_service()->delegate()->GetTopmostWindowAtPoint( + last_location_, ignore, &real_topmost); + + if (topmost == topmost_ && real_topmost == real_topmost_) + return; + + if (topmost_ != topmost) { + if (topmost_) + topmost_->RemoveObserver(this); + topmost_ = topmost; + if (topmost_) + topmost_->AddObserver(this); + } + if (real_topmost_ != real_topmost) { + if (real_topmost_) + real_topmost_->RemoveObserver(this); + real_topmost_ = real_topmost; + if (real_topmost_) + real_topmost_->RemoveObserver(this); + } + + std::vector<aura::Window*> windows; + if (real_topmost_) + windows.push_back(real_topmost_); + if (topmost_ && topmost_ != real_topmost_) + windows.push_back(topmost_); + window_tree_->SendTopmostWindows(windows); +} + +} // namespace ws2 +} // namespace ui
diff --git a/services/ui/ws2/topmost_window_observer.h b/services/ui/ws2/topmost_window_observer.h new file mode 100644 index 0000000..e8df691 --- /dev/null +++ b/services/ui/ws2/topmost_window_observer.h
@@ -0,0 +1,82 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef SERVICES_UI_WS2_TOPMOST_WINDOW_OBSERVER_H_ +#define SERVICES_UI_WS2_TOPMOST_WINDOW_OBSERVER_H_ + +#include "services/ui/public/interfaces/window_tree.mojom.h" +#include "ui/aura/window_observer.h" +#include "ui/events/event_handler.h" +#include "ui/gfx/geometry/point.h" + +namespace aura { +class Window; +} + +namespace ui { +namespace ws2 { +class WindowTree; + +// TopmostWindowObserver is used to track the topmost window under the cursor or +// touch. It watches a type of located events (mouse or touch) and checks the +// windows under the mouse cursor or touch location. + +// TODO(mukai): support multiple displays. +class TopmostWindowObserver : public ui::EventHandler, + public aura::WindowObserver { + public: + // |source| determines the type of the event, and |initial_target| is the + // initial target of the event. This will report the topmost window under the + // cursor to |window_tree|. + TopmostWindowObserver(WindowTree* window_tree, + ui::mojom::MoveLoopSource source, + aura::Window* initial_target); + ~TopmostWindowObserver() override; + + private: + // ui::EventHandler: + void OnMouseEvent(ui::MouseEvent* event) override; + void OnTouchEvent(ui::TouchEvent* event) override; + + // aura::WindowObserver: + void OnWindowVisibilityChanged(aura::Window* window, bool visible) override; + void OnWindowHierarchyChanged(const HierarchyChangeParams& params) override; + void OnWindowBoundsChanged(aura::Window* window, + const gfx::Rect& old_bounds, + const gfx::Rect& new_bounds, + ui::PropertyChangeReason reason) override; + + // Looks up the windows at |location_in_screen| and sends the windows to the + // client if it's updated. + void UpdateTopmostWindows(); + + WindowTree* window_tree_; + + // The type of the events which should be obsered. + ui::mojom::MoveLoopSource source_; + + // The last target of the event. This is remembered since sometimes the client + // wants to see the topmost window excluding the event target (i.e. dragging + // window). + aura::Window* last_target_; + + // The last location of the event. + gfx::Point last_location_; + + // The topmost window excluding |last_target_| under the cursor/touch. + aura::Window* topmost_ = nullptr; + + // The topmost window (including |last_target_|) under the cursor/touch. + aura::Window* real_topmost_ = nullptr; + + // The attached root window. + aura::Window* root_; + + DISALLOW_COPY_AND_ASSIGN(TopmostWindowObserver); +}; + +} // namespace ws2 +} // namespace ui + +#endif // SERVICES_UI_WS2_TOPMOST_WINDOW_OBSERVER_H_
diff --git a/services/ui/ws2/window_service_delegate.cc b/services/ui/ws2/window_service_delegate.cc index 3dcdbf09..c13db16 100644 --- a/services/ui/ws2/window_service_delegate.cc +++ b/services/ui/ws2/window_service_delegate.cc
@@ -38,5 +38,12 @@ return nullptr; } +aura::Window* WindowServiceDelegate::GetTopmostWindowAtPoint( + const gfx::Point& location_in_screen, + const std::set<aura::Window*>& ignore, + aura::Window** real_topmost) { + return nullptr; +} + } // namespace ws2 } // namespace ui
diff --git a/services/ui/ws2/window_service_delegate.h b/services/ui/ws2/window_service_delegate.h index 10b6045a..f6108476 100644 --- a/services/ui/ws2/window_service_delegate.h +++ b/services/ui/ws2/window_service_delegate.h
@@ -116,6 +116,14 @@ virtual aura::WindowTreeHost* GetWindowTreeHostForDisplayId( int64_t display_id); + // Returns the topmost visible window at the location in screen coordinate, + // excluding |ignore|. |real_topmost| is updated to the topmost visible window + // at the location without excluding |ignore|. + virtual aura::Window* GetTopmostWindowAtPoint( + const gfx::Point& location_in_screen, + const std::set<aura::Window*>& ignore, + aura::Window** real_topmost); + protected: virtual ~WindowServiceDelegate() = default; };
diff --git a/services/ui/ws2/window_tree.cc b/services/ui/ws2/window_tree.cc index e7dc2dfa..0310694 100644 --- a/services/ui/ws2/window_tree.cc +++ b/services/ui/ws2/window_tree.cc
@@ -21,6 +21,7 @@ #include "services/ui/ws2/embedding.h" #include "services/ui/ws2/pointer_watcher.h" #include "services/ui/ws2/server_window.h" +#include "services/ui/ws2/topmost_window_observer.h" #include "services/ui/ws2/window_delegate_impl.h" #include "services/ui/ws2/window_service.h" #include "services/ui/ws2/window_service_delegate.h" @@ -594,6 +595,17 @@ return nullptr; } +void WindowTree::SendTopmostWindows( + const std::vector<aura::Window*>& topmosts) { + DCHECK_NE(connection_type_, ConnectionType::kEmbedding); + std::vector<Id> topmost_ids; + for (auto* window : topmosts) { + topmost_ids.push_back(IsWindowKnown(window) ? TransportIdForWindow(window) + : kInvalidTransportId); + } + window_tree_client_->OnTopmostWindowChanged(topmost_ids); +} + bool WindowTree::NewWindowImpl( const ClientWindowId& client_window_id, const std::map<std::string, std::vector<uint8_t>>& properties) { @@ -1815,5 +1827,36 @@ GetWindowByTransportId(window_id)); } +void WindowTree::ObserveTopmostWindow(ui::mojom::MoveLoopSource source, + Id window_id) { + if (connection_type_ == ConnectionType::kEmbedding) { + DVLOG(1) << "ObserveTopmostWindow failed (access denied)"; + return; + } + DVLOG(3) << "ObserveTopmostWindow id=" + << MakeClientWindowId(window_id).ToString(); + aura::Window* window = GetWindowByTransportId(window_id); + if (!IsClientCreatedWindow(window) || !IsTopLevel(window) || + !window->IsVisible() || topmost_window_observer_) { + DVLOG(1) << "ObserveTopmostWindow failed (invalid window)"; + return; + } + + topmost_window_observer_ = + std::make_unique<TopmostWindowObserver>(this, source, window); +} + +void WindowTree::StopObservingTopmostWindow() { + if (connection_type_ == ConnectionType::kEmbedding) { + DVLOG(1) << "StopObservingTopmostWindow failed (access denied)"; + return; + } + if (!topmost_window_observer_) { + DVLOG(1) << "StopObservingTopmostWindow failed"; + return; + } + topmost_window_observer_.reset(); +} + } // namespace ws2 } // namespace ui
diff --git a/services/ui/ws2/window_tree.h b/services/ui/ws2/window_tree.h index 0e4d12e1..88d5b683 100644 --- a/services/ui/ws2/window_tree.h +++ b/services/ui/ws2/window_tree.h
@@ -38,6 +38,7 @@ class FocusHandler; class PointerWatcher; class ServerWindow; +class TopmostWindowObserver; class WindowService; // WindowTree manages a client connected to the Window Service. WindowTree @@ -96,6 +97,10 @@ // happens). void OnEmbeddingDestroyed(Embedding* embedding); + // Sends the topmost window information to the client. There can be multiple + // windows, as described for OnTopmostWindowChanged() in window_tree.mojom. + void SendTopmostWindows(const std::vector<aura::Window*>& topmosts); + WindowService* window_service() { return window_service_; } ClientWindowId ClientWindowIdForWindow(aura::Window* window); @@ -422,6 +427,9 @@ uint32_t drag_operation, ::ui::mojom::PointerKind source) override; void CancelDragDrop(Id window_id) override; + void ObserveTopmostWindow(ui::mojom::MoveLoopSource source, + Id window_id) override; + void StopObservingTopmostWindow() override; WindowService* window_service_; @@ -487,6 +495,10 @@ // Set while a window move loop is in progress. aura::Window* window_moving_ = nullptr; + // Set while a window move loop is in progress to track the window move + // information. + std::unique_ptr<TopmostWindowObserver> topmost_window_observer_; + // Set while a drag loop is in progress. Id pending_drag_source_window_id_ = kInvalidTransportId;
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h index 53ba3f7..c2d7424 100644 --- a/skia/config/SkUserConfig.h +++ b/skia/config/SkUserConfig.h
@@ -197,8 +197,6 @@ #define SK_SUPPORT_LEGACY_AAA_CHOICE #endif -#define SK_LEGACY_CONVERT_PIXELS_IMPL - ///////////////////////// Imported from BUILD.gn and skia_common.gypi /* In some places Skia can use static initializers for global initialization,
diff --git a/storage/browser/fileapi/file_system_operation.h b/storage/browser/fileapi/file_system_operation.h index 34754e5c..dc8288d 100644 --- a/storage/browser/fileapi/file_system_operation.h +++ b/storage/browser/fileapi/file_system_operation.h
@@ -109,7 +109,7 @@ // longer necessary in the javascript world. // Please see the comment for ShareableFileReference for details. // - using SnapshotFileCallback = base::Callback<void( + using SnapshotFileCallback = base::OnceCallback<void( base::File::Error result, const base::File::Info& file_info, const base::FilePath& platform_path, @@ -383,7 +383,7 @@ // temporary file. Or if the implementaiton already has the local cache // data for |path| it can simply return the path to the cache. virtual void CreateSnapshotFile(const FileSystemURL& path, - const SnapshotFileCallback& callback) = 0; + SnapshotFileCallback callback) = 0; // Copies in a single file from a different filesystem. //
diff --git a/storage/browser/fileapi/file_system_operation_impl.cc b/storage/browser/fileapi/file_system_operation_impl.cc index d43cf07e..a7bc400 100644 --- a/storage/browser/fileapi/file_system_operation_impl.cc +++ b/storage/browser/fileapi/file_system_operation_impl.cc
@@ -277,10 +277,10 @@ void FileSystemOperationImpl::CreateSnapshotFile( const FileSystemURL& url, - const SnapshotFileCallback& callback) { + SnapshotFileCallback callback) { DCHECK(SetPendingOperationType(kOperationCreateSnapshotFile)); async_file_util_->CreateSnapshotFile(std::move(operation_context_), url, - callback); + std::move(callback)); } void FileSystemOperationImpl::CopyInForeignFile(
diff --git a/storage/browser/fileapi/file_system_operation_impl.h b/storage/browser/fileapi/file_system_operation_impl.h index c113e996..cc68390 100644 --- a/storage/browser/fileapi/file_system_operation_impl.h +++ b/storage/browser/fileapi/file_system_operation_impl.h
@@ -78,7 +78,7 @@ const OpenFileCallback& callback) override; void Cancel(const StatusCallback& cancel_callback) override; void CreateSnapshotFile(const FileSystemURL& path, - const SnapshotFileCallback& callback) override; + SnapshotFileCallback callback) override; void CopyInForeignFile(const base::FilePath& src_local_disk_path, const FileSystemURL& dest_url, const StatusCallback& callback) override;
diff --git a/storage/browser/fileapi/file_system_operation_impl_unittest.cc b/storage/browser/fileapi/file_system_operation_impl_unittest.cc index 293423f..bc6eb31 100644 --- a/storage/browser/fileapi/file_system_operation_impl_unittest.cc +++ b/storage/browser/fileapi/file_system_operation_impl_unittest.cc
@@ -203,10 +203,8 @@ FileSystemOperation::SnapshotFileCallback RecordSnapshotFileCallback( const base::Closure& closure, base::File::Error* status) { - return base::Bind(&FileSystemOperationImplTest::DidCreateSnapshotFile, - weak_factory_.GetWeakPtr(), - closure, - status); + return base::BindOnce(&FileSystemOperationImplTest::DidCreateSnapshotFile, + weak_factory_.GetWeakPtr(), closure, status); } void DidFinish(const base::Closure& closure,
diff --git a/storage/browser/fileapi/file_system_operation_runner.cc b/storage/browser/fileapi/file_system_operation_runner.cc index 62f62a0..d035410 100644 --- a/storage/browser/fileapi/file_system_operation_runner.cc +++ b/storage/browser/fileapi/file_system_operation_runner.cc
@@ -367,7 +367,7 @@ OperationID FileSystemOperationRunner::CreateSnapshotFile( const FileSystemURL& url, - const SnapshotFileCallback& callback) { + SnapshotFileCallback callback) { base::File::Error error = base::File::FILE_OK; std::unique_ptr<FileSystemOperation> operation = base::WrapUnique( file_system_context_->CreateFileSystemOperation(url, &error)); @@ -375,14 +375,14 @@ OperationID id = BeginOperation(std::move(operation)); base::AutoReset<bool> beginning(&is_beginning_operation_, true); if (!operation_raw) { - DidCreateSnapshot(id, callback, error, base::File::Info(), base::FilePath(), - nullptr); + DidCreateSnapshot(id, std::move(callback), error, base::File::Info(), + base::FilePath(), nullptr); return id; } PrepareForRead(id, url); operation_raw->CreateSnapshotFile( - url, base::Bind(&FileSystemOperationRunner::DidCreateSnapshot, weak_ptr_, - id, callback)); + url, base::BindOnce(&FileSystemOperationRunner::DidCreateSnapshot, + weak_ptr_, id, std::move(callback))); return id; } @@ -598,7 +598,7 @@ void FileSystemOperationRunner::DidCreateSnapshot( const OperationID id, - const SnapshotFileCallback& callback, + SnapshotFileCallback callback, base::File::Error rv, const base::File::Info& file_info, const base::FilePath& platform_path, @@ -606,12 +606,13 @@ if (is_beginning_operation_) { finished_operations_.insert(id); base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(&FileSystemOperationRunner::DidCreateSnapshot, - weak_ptr_, id, callback, rv, file_info, - platform_path, std::move(file_ref))); + FROM_HERE, + base::BindOnce(&FileSystemOperationRunner::DidCreateSnapshot, weak_ptr_, + id, std::move(callback), rv, file_info, platform_path, + std::move(file_ref))); return; } - callback.Run(rv, file_info, platform_path, std::move(file_ref)); + std::move(callback).Run(rv, file_info, platform_path, std::move(file_ref)); FinishOperation(id); }
diff --git a/storage/browser/fileapi/file_system_operation_runner.h b/storage/browser/fileapi/file_system_operation_runner.h index cf21797..c786c6e25 100644 --- a/storage/browser/fileapi/file_system_operation_runner.h +++ b/storage/browser/fileapi/file_system_operation_runner.h
@@ -157,7 +157,7 @@ // temporary file. Or if the implementaiton already has the local cache // data for |url| it can simply return the url to the cache. OperationID CreateSnapshotFile(const FileSystemURL& url, - const SnapshotFileCallback& callback); + SnapshotFileCallback callback); // Copies in a single file from a different filesystem. // @@ -265,7 +265,7 @@ base::OnceClosure on_close_callback); void DidCreateSnapshot( const OperationID id, - const SnapshotFileCallback& callback, + SnapshotFileCallback callback, base::File::Error rv, const base::File::Info& file_info, const base::FilePath& platform_path,
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json index 2b86716..f55e237b 100644 --- a/testing/buildbot/chromium.android.fyi.json +++ b/testing/buildbot/chromium.android.fyi.json
@@ -1292,7 +1292,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "chrome_public_test_vr_apk" }, @@ -1428,7 +1429,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 2 + "shards": 4 }, "test": "components_unittests" }, @@ -3152,7 +3153,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 5 + "shards": 10 }, "test": "unit_tests" }, @@ -3377,7 +3378,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "webkit_unit_tests" }, @@ -3823,7 +3825,8 @@ "device_type": "coho", "os": "Android" } - ] + ], + "shards": 2 }, "test": "chrome_public_test_vr_apk" }, @@ -3899,7 +3902,7 @@ "os": "Android" } ], - "shards": 2 + "shards": 4 }, "test": "components_unittests" }, @@ -4863,7 +4866,7 @@ "os": "Android" } ], - "shards": 5 + "shards": 10 }, "test": "unit_tests" }, @@ -4988,7 +4991,8 @@ "device_type": "coho", "os": "Android" } - ] + ], + "shards": 2 }, "test": "webkit_unit_tests" }, @@ -5419,7 +5423,8 @@ "device_type": "gce_x86", "os": "Android" } - ] + ], + "shards": 2 }, "test": "chrome_public_test_vr_apk" }, @@ -5495,7 +5500,7 @@ "os": "Android" } ], - "shards": 2 + "shards": 4 }, "test": "components_unittests" }, @@ -6459,7 +6464,7 @@ "os": "Android" } ], - "shards": 5 + "shards": 10 }, "test": "unit_tests" }, @@ -6584,7 +6589,8 @@ "device_type": "gce_x86", "os": "Android" } - ] + ], + "shards": 2 }, "test": "webkit_unit_tests" },
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json index 7bfac0e..e9486db 100644 --- a/testing/buildbot/chromium.android.json +++ b/testing/buildbot/chromium.android.json
@@ -1155,7 +1155,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "chrome_public_test_vr_apk" }, @@ -1286,7 +1287,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 2 + "shards": 4 }, "test": "components_unittests" }, @@ -2888,7 +2889,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 5 + "shards": 10 }, "test": "unit_tests" }, @@ -3103,7 +3104,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "webkit_unit_tests" }, @@ -3941,7 +3943,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 2 + "shards": 4 }, "test": "components_unittests" }, @@ -5627,7 +5629,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 5 + "shards": 10 }, "test": "unit_tests" }, @@ -5847,7 +5849,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "webkit_unit_tests" }, @@ -6573,7 +6576,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "chrome_public_test_vr_apk" }, @@ -6709,7 +6713,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 2 + "shards": 4 }, "test": "components_unittests" }, @@ -8433,7 +8437,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 5 + "shards": 10 }, "test": "unit_tests" }, @@ -8658,7 +8662,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "webkit_unit_tests" }, @@ -9520,7 +9525,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 2 + "shards": 4 }, "test": "components_unittests" }, @@ -11244,7 +11249,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 5 + "shards": 10 }, "test": "unit_tests" }, @@ -11469,7 +11474,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "webkit_unit_tests" }, @@ -12228,7 +12234,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "chrome_public_test_vr_apk" }, @@ -12361,7 +12368,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 2 + "shards": 4 }, "test": "components_unittests" }, @@ -14047,7 +14054,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 5 + "shards": 10 }, "test": "unit_tests" }, @@ -14267,7 +14274,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "webkit_unit_tests" }, @@ -15110,7 +15118,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 2 + "shards": 4 }, "test": "components_unittests" }, @@ -16796,7 +16804,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 5 + "shards": 10 }, "test": "unit_tests" }, @@ -17016,7 +17024,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "webkit_unit_tests" }, @@ -18117,7 +18126,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "chrome_public_test_vr_apk" }, @@ -18247,7 +18257,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 2 + "shards": 4 }, "test": "components_unittests" }, @@ -19850,7 +19860,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 5 + "shards": 10 }, "test": "unit_tests" }, @@ -20065,7 +20075,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "webkit_unit_tests" }, @@ -20836,7 +20847,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "chrome_public_test_vr_apk" }, @@ -20966,7 +20978,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 2 + "shards": 4 }, "test": "components_unittests" }, @@ -22616,7 +22628,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 5 + "shards": 10 }, "test": "unit_tests" }, @@ -22831,7 +22843,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "webkit_unit_tests" },
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json index 31cc347..20e9f978 100644 --- a/testing/buildbot/chromium.clang.json +++ b/testing/buildbot/chromium.clang.json
@@ -5476,7 +5476,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "chrome_public_test_vr_apk" }, @@ -5606,7 +5607,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 2 + "shards": 4 }, "test": "components_unittests" }, @@ -7254,7 +7255,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 5 + "shards": 10 }, "test": "unit_tests" }, @@ -7469,7 +7470,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "webkit_unit_tests" }, @@ -8267,7 +8269,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "chrome_public_test_vr_apk" }, @@ -8397,7 +8400,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 2 + "shards": 4 }, "test": "components_unittests" }, @@ -10045,7 +10048,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 5 + "shards": 10 }, "test": "unit_tests" }, @@ -10260,7 +10263,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "webkit_unit_tests" },
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index b37e3a1..997dee3 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -1036,7 +1036,7 @@ "name": "telemetry_perf_unittests", "swarming": { "can_use_on_swarming_builders": true, - "hard_timeout": 960, + "hard_timeout": 1200, "idempotent": false, "shards": 12 } @@ -1050,7 +1050,7 @@ "name": "telemetry_perf_unittests_viz", "swarming": { "can_use_on_swarming_builders": true, - "hard_timeout": 960, + "hard_timeout": 1200, "idempotent": false, "shards": 12 }
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index 9db267c8..25fb694 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -4726,6 +4726,32 @@ "--browser=release", "--passthrough", "-v", + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough", + "--webgl-conformance-version=2.0.1", + "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json" + ], + "isolate_name": "telemetry_gpu_integration_test", + "name": "webgl2_conformance_gl_passthrough_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:5912", + "os": "Ubuntu", + "pool": "Chrome-GPU" + } + ], + "idempotent": false, + "shards": 20 + } + }, + { + "args": [ + "webgl_conformance", + "--show-stdout", + "--browser=release", + "--passthrough", + "-v", "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", "--webgl-conformance-version=2.0.1", "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json index e85584ae..222a6c1 100644 --- a/testing/buildbot/chromium.memory.json +++ b/testing/buildbot/chromium.memory.json
@@ -645,7 +645,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "chrome_public_test_vr_apk" }, @@ -775,7 +776,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 2 + "shards": 4 }, "test": "components_unittests" }, @@ -2423,7 +2424,7 @@ "name": "shard #${SHARD_INDEX} logcats" } ], - "shards": 5 + "shards": 10 }, "test": "unit_tests" }, @@ -2638,7 +2639,8 @@ ], "name": "shard #${SHARD_INDEX} logcats" } - ] + ], + "shards": 2 }, "test": "webkit_unit_tests" },
diff --git a/testing/buildbot/chromium.perf.fyi.json b/testing/buildbot/chromium.perf.fyi.json index 5d6eb15..f4f9e529 100644 --- a/testing/buildbot/chromium.perf.fyi.json +++ b/testing/buildbot/chromium.perf.fyi.json
@@ -184,6 +184,49 @@ }, { "args": [ + "--gtest-benchmark-name", + "views_perftests", + "--non-telemetry=true", + "--migrated-test=true" + ], + "isolate_name": "views_perftests", + "merge": { + "args": [ + "--service-account-file", + "/creds/service_accounts/service-account-chromium-perf-histograms.json" + ], + "script": "//tools/perf/process_perf_results.py" + }, + "name": "views_perftests", + "override_compile_targets": [ + "views_perftests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:0a2e", + "os": "Mac-10.12", + "pool": "chrome.tests.perf-fyi" + } + ], + "expiration": 7200, + "hard_timeout": 25200, + "ignore_task_failure": false, + "io_timeout": 1800, + "shards": 1, + "upload_test_results": true + }, + "trigger_script": { + "args": [ + "--multiple-dimension-script-verbose", + "True" + ], + "script": "//testing/trigger_scripts/perf_device_trigger.py" + } + }, + { + "args": [ "-v", "--browser=release", "--upload-results", @@ -225,49 +268,6 @@ ], "script": "//testing/trigger_scripts/perf_device_trigger.py" } - }, - { - "args": [ - "--gtest-benchmark-name", - "views_perftests", - "--non-telemetry=true", - "--migrated-test=true" - ], - "isolate_name": "views_perftests", - "merge": { - "args": [ - "--service-account-file", - "/creds/service_accounts/service-account-chromium-perf-histograms.json" - ], - "script": "//tools/perf/process_perf_results.py" - }, - "name": "views_perftests", - "override_compile_targets": [ - "views_perftests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0a2e", - "os": "Mac-10.12", - "pool": "chrome.tests.perf-fyi" - } - ], - "expiration": 7200, - "hard_timeout": 25200, - "ignore_task_failure": false, - "io_timeout": 1800, - "shards": 1, - "upload_test_results": true - }, - "trigger_script": { - "args": [ - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/perf_device_trigger.py" - } } ] },
diff --git a/testing/buildbot/chromium.perf.json b/testing/buildbot/chromium.perf.json index 34980d8f..141c5a0c 100644 --- a/testing/buildbot/chromium.perf.json +++ b/testing/buildbot/chromium.perf.json
@@ -147,6 +147,51 @@ }, { "args": [ + "--gtest-benchmark-name", + "tracing_perftests", + "--non-telemetry=true", + "--migrated-test=true" + ], + "isolate_name": "tracing_perftests", + "merge": { + "args": [ + "--service-account-file", + "/creds/service_accounts/service-account-chromium-perf-histograms.json" + ], + "script": "//tools/perf/process_perf_results.py" + }, + "name": "tracing_perftests", + "override_compile_targets": [ + "tracing_perftests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_os": "KOT49H", + "device_os_flavor": "google", + "device_type": "hammerhead", + "os": "Android", + "pool": "chrome.tests.perf" + } + ], + "expiration": 7200, + "hard_timeout": 25200, + "ignore_task_failure": false, + "io_timeout": 1800, + "shards": 1, + "upload_test_results": true + }, + "trigger_script": { + "args": [ + "--multiple-dimension-script-verbose", + "True" + ], + "script": "//testing/trigger_scripts/perf_device_trigger.py" + } + }, + { + "args": [ "-v", "--browser=android-chromium", "--upload-results", @@ -191,51 +236,6 @@ ], "script": "//testing/trigger_scripts/perf_device_trigger.py" } - }, - { - "args": [ - "--gtest-benchmark-name", - "tracing_perftests", - "--non-telemetry=true", - "--migrated-test=true" - ], - "isolate_name": "tracing_perftests", - "merge": { - "args": [ - "--service-account-file", - "/creds/service_accounts/service-account-chromium-perf-histograms.json" - ], - "script": "//tools/perf/process_perf_results.py" - }, - "name": "tracing_perftests", - "override_compile_targets": [ - "tracing_perftests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "device_os": "KOT49H", - "device_os_flavor": "google", - "device_type": "hammerhead", - "os": "Android", - "pool": "chrome.tests.perf" - } - ], - "expiration": 7200, - "hard_timeout": 25200, - "ignore_task_failure": false, - "io_timeout": 1800, - "shards": 1, - "upload_test_results": true - }, - "trigger_script": { - "args": [ - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/perf_device_trigger.py" - } } ] }, @@ -535,51 +535,6 @@ }, { "args": [ - "-v", - "--browser=release_x64", - "--upload-results", - "--run-ref-build", - "--test-shard-map-filename=win7_nvidia_shard_map.json", - "--assert-gpu-compositing" - ], - "isolate_name": "performance_test_suite", - "merge": { - "args": [ - "--service-account-file", - "C:\\creds\\service_accounts\\service-account-chromium-perf-histograms.json" - ], - "script": "//tools/perf/process_perf_results.py" - }, - "name": "performance_test_suite", - "override_compile_targets": [ - "performance_test_suite" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3", - "os": "Windows-2008ServerR2-SP1", - "pool": "chrome.tests.perf" - } - ], - "expiration": 7200, - "hard_timeout": 25200, - "ignore_task_failure": false, - "io_timeout": 1800, - "shards": 5, - "upload_test_results": true - }, - "trigger_script": { - "args": [ - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/perf_device_trigger.py" - } - }, - { - "args": [ "--gtest-benchmark-name", "validating_command_buffer_perftests", "--non-telemetry=true", @@ -622,6 +577,51 @@ ], "script": "//testing/trigger_scripts/perf_device_trigger.py" } + }, + { + "args": [ + "-v", + "--browser=release_x64", + "--upload-results", + "--run-ref-build", + "--test-shard-map-filename=win7_nvidia_shard_map.json", + "--assert-gpu-compositing" + ], + "isolate_name": "performance_test_suite", + "merge": { + "args": [ + "--service-account-file", + "C:\\creds\\service_accounts\\service-account-chromium-perf-histograms.json" + ], + "script": "//tools/perf/process_perf_results.py" + }, + "name": "performance_test_suite", + "override_compile_targets": [ + "performance_test_suite" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:1cb3", + "os": "Windows-2008ServerR2-SP1", + "pool": "chrome.tests.perf" + } + ], + "expiration": 7200, + "hard_timeout": 25200, + "ignore_task_failure": false, + "io_timeout": 1800, + "shards": 5, + "upload_test_results": true + }, + "trigger_script": { + "args": [ + "--multiple-dimension-script-verbose", + "True" + ], + "script": "//testing/trigger_scripts/perf_device_trigger.py" + } } ] }, @@ -1047,6 +1047,51 @@ }, { "args": [ + "--gtest-benchmark-name", + "tracing_perftests", + "--non-telemetry=true", + "--migrated-test=true" + ], + "isolate_name": "tracing_perftests", + "merge": { + "args": [ + "--service-account-file", + "/creds/service_accounts/service-account-chromium-perf-histograms.json" + ], + "script": "//tools/perf/process_perf_results.py" + }, + "name": "tracing_perftests", + "override_compile_targets": [ + "tracing_perftests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_os": "MMB29Q", + "device_os_flavor": "google", + "device_type": "bullhead", + "os": "Android", + "pool": "chrome.tests.perf" + } + ], + "expiration": 7200, + "hard_timeout": 25200, + "ignore_task_failure": false, + "io_timeout": 1800, + "shards": 1, + "upload_test_results": true + }, + "trigger_script": { + "args": [ + "--multiple-dimension-script-verbose", + "True" + ], + "script": "//testing/trigger_scripts/perf_device_trigger.py" + } + }, + { + "args": [ "-v", "--browser=android-chromium", "--upload-results", @@ -1091,51 +1136,6 @@ ], "script": "//testing/trigger_scripts/perf_device_trigger.py" } - }, - { - "args": [ - "--gtest-benchmark-name", - "tracing_perftests", - "--non-telemetry=true", - "--migrated-test=true" - ], - "isolate_name": "tracing_perftests", - "merge": { - "args": [ - "--service-account-file", - "/creds/service_accounts/service-account-chromium-perf-histograms.json" - ], - "script": "//tools/perf/process_perf_results.py" - }, - "name": "tracing_perftests", - "override_compile_targets": [ - "tracing_perftests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "device_os": "MMB29Q", - "device_os_flavor": "google", - "device_type": "bullhead", - "os": "Android", - "pool": "chrome.tests.perf" - } - ], - "expiration": 7200, - "hard_timeout": 25200, - "ignore_task_failure": false, - "io_timeout": 1800, - "shards": 1, - "upload_test_results": true - }, - "trigger_script": { - "args": [ - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/perf_device_trigger.py" - } } ] }, @@ -1272,6 +1272,49 @@ }, { "args": [ + "--gtest-benchmark-name", + "tracing_perftests", + "--non-telemetry=true", + "--migrated-test=true" + ], + "isolate_name": "tracing_perftests", + "merge": { + "args": [ + "--service-account-file", + "/creds/service_accounts/service-account-chromium-perf-histograms.json" + ], + "script": "//tools/perf/process_perf_results.py" + }, + "name": "tracing_perftests", + "override_compile_targets": [ + "tracing_perftests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "10de:1cb3", + "os": "Ubuntu-14.04", + "pool": "chrome.tests.perf" + } + ], + "expiration": 7200, + "hard_timeout": 25200, + "ignore_task_failure": false, + "io_timeout": 1800, + "shards": 1, + "upload_test_results": true + }, + "trigger_script": { + "args": [ + "--multiple-dimension-script-verbose", + "True" + ], + "script": "//testing/trigger_scripts/perf_device_trigger.py" + } + }, + { + "args": [ "-v", "--browser=release", "--upload-results", @@ -1314,49 +1357,6 @@ ], "script": "//testing/trigger_scripts/perf_device_trigger.py" } - }, - { - "args": [ - "--gtest-benchmark-name", - "tracing_perftests", - "--non-telemetry=true", - "--migrated-test=true" - ], - "isolate_name": "tracing_perftests", - "merge": { - "args": [ - "--service-account-file", - "/creds/service_accounts/service-account-chromium-perf-histograms.json" - ], - "script": "//tools/perf/process_perf_results.py" - }, - "name": "tracing_perftests", - "override_compile_targets": [ - "tracing_perftests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3", - "os": "Ubuntu-14.04", - "pool": "chrome.tests.perf" - } - ], - "expiration": 7200, - "hard_timeout": 25200, - "ignore_task_failure": false, - "io_timeout": 1800, - "shards": 1, - "upload_test_results": true - }, - "trigger_script": { - "args": [ - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/perf_device_trigger.py" - } } ] }, @@ -1584,6 +1584,49 @@ }, { "args": [ + "--gtest-benchmark-name", + "views_perftests", + "--non-telemetry=true", + "--migrated-test=true" + ], + "isolate_name": "views_perftests", + "merge": { + "args": [ + "--service-account-file", + "/creds/service_accounts/service-account-chromium-perf-histograms.json" + ], + "script": "//tools/perf/process_perf_results.py" + }, + "name": "views_perftests", + "override_compile_targets": [ + "views_perftests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "1002:6821", + "os": "Mac-10.13", + "pool": "chrome.tests.perf" + } + ], + "expiration": 7200, + "hard_timeout": 25200, + "ignore_task_failure": false, + "io_timeout": 1800, + "shards": 1, + "upload_test_results": true + }, + "trigger_script": { + "args": [ + "--multiple-dimension-script-verbose", + "True" + ], + "script": "//testing/trigger_scripts/perf_device_trigger.py" + } + }, + { + "args": [ "-v", "--browser=release", "--upload-results", @@ -1625,49 +1668,6 @@ ], "script": "//testing/trigger_scripts/perf_device_trigger.py" } - }, - { - "args": [ - "--gtest-benchmark-name", - "views_perftests", - "--non-telemetry=true", - "--migrated-test=true" - ], - "isolate_name": "views_perftests", - "merge": { - "args": [ - "--service-account-file", - "/creds/service_accounts/service-account-chromium-perf-histograms.json" - ], - "script": "//tools/perf/process_perf_results.py" - }, - "name": "views_perftests", - "override_compile_targets": [ - "views_perftests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "1002:6821", - "os": "Mac-10.13", - "pool": "chrome.tests.perf" - } - ], - "expiration": 7200, - "hard_timeout": 25200, - "ignore_task_failure": false, - "io_timeout": 1800, - "shards": 1, - "upload_test_results": true - }, - "trigger_script": { - "args": [ - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/perf_device_trigger.py" - } } ] }, @@ -1761,6 +1761,49 @@ }, { "args": [ + "--gtest-benchmark-name", + "views_perftests", + "--non-telemetry=true", + "--migrated-test=true" + ], + "isolate_name": "views_perftests", + "merge": { + "args": [ + "--service-account-file", + "C:\\creds\\service_accounts\\service-account-chromium-perf-histograms.json" + ], + "script": "//tools/perf/process_perf_results.py" + }, + "name": "views_perftests", + "override_compile_targets": [ + "views_perftests" + ], + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "gpu": "8086:5912", + "os": "Windows-10", + "pool": "chrome.tests.perf" + } + ], + "expiration": 7200, + "hard_timeout": 25200, + "ignore_task_failure": false, + "io_timeout": 1800, + "shards": 1, + "upload_test_results": true + }, + "trigger_script": { + "args": [ + "--multiple-dimension-script-verbose", + "True" + ], + "script": "//testing/trigger_scripts/perf_device_trigger.py" + } + }, + { + "args": [ "-v", "--browser=release_x64", "--upload-results", @@ -1803,49 +1846,6 @@ ], "script": "//testing/trigger_scripts/perf_device_trigger.py" } - }, - { - "args": [ - "--gtest-benchmark-name", - "views_perftests", - "--non-telemetry=true", - "--migrated-test=true" - ], - "isolate_name": "views_perftests", - "merge": { - "args": [ - "--service-account-file", - "C:\\creds\\service_accounts\\service-account-chromium-perf-histograms.json" - ], - "script": "//tools/perf/process_perf_results.py" - }, - "name": "views_perftests", - "override_compile_targets": [ - "views_perftests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:5912", - "os": "Windows-10", - "pool": "chrome.tests.perf" - } - ], - "expiration": 7200, - "hard_timeout": 25200, - "ignore_task_failure": false, - "io_timeout": 1800, - "shards": 1, - "upload_test_results": true - }, - "trigger_script": { - "args": [ - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/perf_device_trigger.py" - } } ] }
diff --git a/testing/buildbot/filters/mash.browser_tests.filter b/testing/buildbot/filters/mash.browser_tests.filter index 4e582707..7452691 100644 --- a/testing/buildbot/filters/mash.browser_tests.filter +++ b/testing/buildbot/filters/mash.browser_tests.filter
@@ -39,8 +39,6 @@ -BrowserNonClientFrameViewAshTest.AvatarDisplayOnTeleportedWindow/* -BrowserNonClientFrameViewAshTest.HeaderHeightForSnappedBrowserInSplitView/* -BrowserNonClientFrameViewAshTest.ImmersiveModeTopViewInset/* --BrowserNonClientFrameViewAshTest.ToggleTabletModeOnMinimizedWindow/* --BrowserNonClientFrameViewAshTest.ToggleTabletModeRelayout/* -BrowserNonClientFrameViewAshTest.TopViewInset/* # Direct access to ash window frames, tablet mode, overview mode, etc.
diff --git a/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter b/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter index 103ab2ca..329d9e6b5 100644 --- a/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter +++ b/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter
@@ -8,9 +8,7 @@ # Uncategorized timeouts or test failures. -ExtensionDisabledGlobalErrorTest.HigherPermissionsFromSync -ExtensionDisabledGlobalErrorTest.RemoteInstall --ExtensionStorageMonitorTest.HostedAppTemporaryFilesystem -ExtensionUnloadBrowserTest.UnloadWithContentScripts --ProcessManagerBrowserTest.NestedURLNavigationsToExtensionAllowed -ProxySettingsApiTest.ProxyEventsInvalidProxy -RegisterProtocolHandlerBrowserTest.CustomHandler -SubresourceFilterBrowserTest.FailedProvisionalLoadInMainframe @@ -29,14 +27,6 @@ # https://crbug.com/853251 -DomainReliabilityBrowserTest.Upload -# extensions/browser/updater/extension_downloader.cc still uses URLFetcher. -# https://crbug.com/844928 --ExtensionManagementTest.AutoUpdate --ExtensionManagementTest.AutoUpdateDisabledExtensions --ExtensionManagementTest.ExternalPolicyRefresh --ExtensionManagementTest.ExternalUrlUpdate --ExtensionManagementTest.PolicyOverridesUserInstall - # This test fails flakily. Only enable it once # SocketExtensionWithDnsLookupFunction::StartDnsLookup uses the Mojo # HostResolver API. @@ -121,9 +111,6 @@ -DnsProbeBrowserTest.CorrectionsLoadStopped -DnsProbeBrowserTest.NoInternetProbeResultWithSlowBrokenCorrections -# crbug.com/859594 Migrate storage::FileWriterDelegate to use SimpleURLLoader --SBNavigationObserverBrowserTest.DownloadViaHTML5FileApi - # https://bugs.chromium.org/p/chromium/issues/detail?id=789670 -DiceBrowserTest.Reauth -DiceBrowserTest.Signin @@ -159,11 +146,6 @@ # the network service. -ExtensionWebRequestApiTest.WebRequestBlockingSetCookieHeader -# http://crbug.com/868545 -# Network service does not support redirecting subresource requests to schemes -# besides http/https/data. --ExtensionWebRequestApiTest.WebRequestSubresourceRedirects - # http://crbug.com/870588 # Flaky on Win with network service. -ExtensionWebRequestApiTest.WebRequestTestOSDD @@ -197,10 +179,6 @@ # Remove this test when there are no more clients left that use URLFetcher. -VariationsHttpHeadersBrowserTest.TestStrippingHeadersFromInternalRequest -# Fails because of missing support to navigate to filesystem: URLs. -# https://crbug.com/797292 --ProcessManagerBrowserTest.NestedURLDownloadsToExtensionAllowed - # Tests check state of NQE in the browser process, but need to be updated to # watch NQE in the renderer process. # https://crbug.com/819244
diff --git a/testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter b/testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter index e4dffe12..8edb13b 100644 --- a/testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter +++ b/testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter
@@ -37,10 +37,6 @@ # https://crbug.com/827318 -RenderThreadImplBrowserTest.NonResourceDispatchIPCTasksDontGoThroughScheduler -# Network service path needs some way to update the per-WebContents load state. -# https://crbug.com/819663. --WebContentsImplBrowserTest.UpdateLoadState - # NOTE: if adding an exclusion for an existing failure (e.g. additional test for # feature X that is already not working), please add it beside the existing # failures. Otherwise please reach out to network-service-dev@.
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 6ebd10e..2cae6cd 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -262,7 +262,11 @@ 'shards': 20, }, }, - 'chrome_public_test_vr_apk': {}, + 'chrome_public_test_vr_apk': { + 'swarming': { + 'shards': 2, + }, + }, 'chrome_sync_shell_test_apk': {}, 'gl_tests': { # TODO(kbr): these are actually run on many of the GPU bots, which have @@ -538,7 +542,7 @@ 'components_browsertests': {}, 'components_unittests': { 'android_swarming': { - 'shards': 2, + 'shards': 4, }, }, 'content_browsertests': { @@ -586,7 +590,11 @@ 'ui_base_unittests': {}, 'ui_touch_selection_unittests': {}, 'url_unittests': {}, - 'webkit_unit_tests': {}, + 'webkit_unit_tests': { + 'android_swarming': { + 'shards': 2, + }, + }, 'wtf_unittests': {}, }, @@ -597,7 +605,7 @@ 'gfx_unittests': {}, 'unit_tests': { 'android_swarming': { - 'shards': 5, + 'shards': 10, }, }, 'viz_content_browsertests': { @@ -1651,7 +1659,7 @@ '--xvfb', ], 'swarming': { - 'hard_timeout': 960, + 'hard_timeout': 1200, 'idempotent': False, # https://crbug.com/549140 'shards': 12, }, @@ -1663,7 +1671,7 @@ '--extra-browser-args=--enable-features=VizDisplayCompositor', ], 'swarming': { - 'hard_timeout': 960, + 'hard_timeout': 1200, 'idempotent': False, # https://crbug.com/549140 'shards': 12, },
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 464dcbb..9e820f2 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -1374,12 +1374,7 @@ }, 'test_suites': { 'gtest_tests': 'gpu_fyi_linux_release_gtests', - # TODO(kbr): switch this to - # gpu_fyi_win_and_linux_intel_and_nvidia_release_telemetry_tests. Seems - # to have been an oversight that - # webgl2_conformance_gl_passthrough_tests was't running on the Linux - # Intel HD 630 bots. - 'gpu_telemetry_tests': 'gpu_fyi_win_and_linux_release_telemetry_tests', + 'gpu_telemetry_tests': 'gpu_fyi_win_and_linux_intel_and_nvidia_release_telemetry_tests', }, }, 'Linux FYI Release (NVIDIA)': {
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 62ca32c..39fd5b1 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -413,7 +413,7 @@ ], "experiments": [ { - "name": "AudioProcess_LaunchOnStartup_v3", + "name": "AudioProcess_LaunchOnStartup_v6", "params": { "teardown_timeout_s": "0" }, @@ -427,13 +427,28 @@ }, { "platforms": [ - "android", - "chromeos", "linux", "mac" ], "experiments": [ { + "name": "AudioServiceStreams_v6", + "params": { + "teardown_timeout_s": "0" + }, + "enable_features": [ + "AudioServiceAudioStreams" + ] + } + ] + }, + { + "platforms": [ + "android", + "chromeos" + ], + "experiments": [ + { "name": "AudioServiceStreams", "enable_features": [ "AudioServiceAudioStreams" @@ -442,6 +457,27 @@ ] } ], + "AutofillDeleteDisusedData": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillDeleteDisusedAddresses", + "AutofillDeleteDisusedCreditCards" + ] + } + ] + } + ], "AutofillDynamicForms": [ { "platforms": [ @@ -545,10 +581,12 @@ "experiments": [ { "name": "Enabled", - "disable_features": [ + "enable_features": [ "AutofillEnforceMinRequiredFieldsForHeuristics", + "AutofillEnforceMinRequiredFieldsForUpload" + ], + "disable_features": [ "AutofillEnforceMinRequiredFieldsForQuery", - "AutofillEnforceMinRequiredFieldsForUpload", "AutofillRestrictUnownedFieldsToFormlessCheckout" ] } @@ -1350,6 +1388,21 @@ ] } ], + "DirectCompositionPreferNV12Overlays": [ + { + "platforms": [ + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "DirectCompositionPreferNV12Overlays" + ] + } + ] + } + ], "DownloadHomeMoreButton": [ { "platforms": [ @@ -2280,6 +2333,19 @@ ], "experiments": [ { + "//0": "This experiment is used for M69 release rollouts.", + "//1": "The name change is required to update Canary, Dev", + "//2": "and Beta Finch studies that previously used ", + "//3": "NewTabPageAllBirthday_Enabled.", + "name": "NewTabPageM69AllBirthday_Enabled", + "enable_features": [ + "NewTabPageBackgrounds", + "NewTabPageCustomLinks", + "NewTabPageIcons", + "NewTabPageUIMd" + ] + }, + { "name": "NewTabPageM68AllBirthday_Enabled", "enable_features": [ "NewTabPageBackgrounds", @@ -2287,6 +2353,7 @@ ] }, { + "//0": "Deprecated.", "name": "NewTabPageAllBirthday_Enabled", "enable_features": [ "NewTabPageBackgrounds", @@ -2853,6 +2920,28 @@ ] } ], + "PageAlmostIdleAndLocalDB": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "params": { + "mainThreadTaskLoadLowThreshold": "25" + }, + "enable_features": [ + "PageAlmostIdle", + "SiteCharacteristicsDatabase" + ] + } + ] + } + ], "ParallelDownloading": [ { "platforms": [ @@ -3246,14 +3335,11 @@ "name": "FreezeAndDiscardWithUnfreeze", "params": { "ShouldPeriodicallyUnfreeze": "true", - "ShouldProactivelyDiscard": "true", - "mainThreadTaskLoadLowThreshold": "25" + "ShouldProactivelyDiscard": "true" }, "enable_features": [ - "PageAlmostIdle", "PageLifecycle", - "ProactiveTabFreezeAndDiscard", - "SiteCharacteristicsDatabase" + "ProactiveTabFreezeAndDiscard" ] } ]
diff --git a/third_party/.gitignore b/third_party/.gitignore index c5bb272..f93deaf 100644 --- a/third_party/.gitignore +++ b/third_party/.gitignore
@@ -58,6 +58,7 @@ /devtools-node-modules /directxsdk /dom_distiller_js/dist +/dynamicmodule /elfutils/src /errorprone/lib /espresso/lib/
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG index fe5c523..92177cf 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -1,6 +1,7 @@ # These tests currently fail when they run with --enable-blink-features=LayoutNG # See https://crbug.com/591099. + # Non-interoperable behavior not worth to fix. crbug.com/591099 fast/text/apply-start-width-after-skipped-text.html [ Skip ] @@ -62,32 +63,18 @@ crbug.com/591099 animations/rotate-transform-equivalent.html [ Failure ] crbug.com/728378 compositing/culling/tile-occlusion-boundaries.html [ Failure ] crbug.com/591099 compositing/iframes/floating-self-painting-frame.html [ Failure ] +crbug.com/591099 compositing/layer-creation/overlap-animation.html [ Crash Pass ] crbug.com/869265 compositing/layer-creation/stacking-context-overlap-nested.html [ Failure ] crbug.com/591099 css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change.html [ Failure ] crbug.com/591099 css3/flexbox/bug646288.html [ Failure ] crbug.com/591099 css3/flexbox/flex-flow-margins-auto-size.html [ Failure ] crbug.com/591099 css3/flexbox/intrinsic-width-orthogonal-writing-mode.html [ Failure ] crbug.com/591099 css3/flexbox/line-wrapping.html [ Failure ] -crbug.com/591099 css3/flexbox/scrollbars-auto.html [ Failure ] crbug.com/714962 css3/masking/clip-path-reference-box-inline.html [ Failure ] crbug.com/591099 editing/selection/paint-hyphen.html [ Pass ] crbug.com/591099 external/wpt/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html [ Pass ] -crbug.com/591099 external/wpt/WebCryptoAPI/generateKey/failures.worker.html [ Timeout ] -crbug.com/591099 external/wpt/WebCryptoAPI/generateKey/failures_AES-CBC.worker.html [ Timeout ] -crbug.com/591099 external/wpt/WebCryptoAPI/generateKey/failures_AES-CTR.worker.html [ Timeout ] -crbug.com/591099 external/wpt/WebCryptoAPI/generateKey/failures_AES-GCM.worker.html [ Timeout ] -crbug.com/591099 external/wpt/WebCryptoAPI/generateKey/failures_AES-KW.worker.html [ Timeout ] -crbug.com/591099 external/wpt/WebCryptoAPI/generateKey/failures_ECDH.worker.html [ Timeout ] -crbug.com/591099 external/wpt/WebCryptoAPI/generateKey/failures_ECDSA.worker.html [ Timeout ] -crbug.com/591099 external/wpt/WebCryptoAPI/generateKey/failures_HMAC.worker.html [ Timeout ] -crbug.com/591099 external/wpt/WebCryptoAPI/generateKey/failures_RSA-OAEP.worker.html [ Timeout ] -crbug.com/591099 external/wpt/WebCryptoAPI/generateKey/failures_RSA-PSS.worker.html [ Timeout ] -crbug.com/591099 external/wpt/WebCryptoAPI/generateKey/failures_RSASSA-PKCS1-v1_5.worker.html [ Timeout ] -crbug.com/591099 external/wpt/WebCryptoAPI/generateKey/successes.worker.html [ Timeout ] -crbug.com/591099 external/wpt/WebCryptoAPI/import_export/rsa_importKey.worker.html [ Timeout ] -crbug.com/709227 external/wpt/WebCryptoAPI/import_export/symmetric_importKey.worker.html [ Failure ] -crbug.com/591099 external/wpt/background-fetch/get-ids.https.window.html [ Crash Pass ] -crbug.com/591099 external/wpt/background-fetch/get.https.window.html [ Pass ] +crbug.com/591099 external/wpt/background-fetch/get-ids.https.window.html [ Failure ] +crbug.com/591099 external/wpt/background-fetch/get.https.window.html [ Failure ] crbug.com/591099 external/wpt/css/CSS2/floats/floats-line-wrap-shifted-001.html [ Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-in-inline-empty-001.xht [ Pass ] crbug.com/591099 external/wpt/css/CSS2/normal-flow/block-in-inline-empty-004.xht [ Pass ] @@ -326,7 +313,7 @@ crbug.com/591099 external/wpt/picture-in-picture/request-picture-in-picture-twice.html [ Pass ] crbug.com/591099 external/wpt/pointerevents/pointerevent_click_during_capture-manual.html [ Crash Timeout ] crbug.com/591099 external/wpt/quirks/line-height-calculation.html [ Failure ] -crbug.com/591099 external/wpt/requestidlecallback/callback-iframe.html [ Pass ] +crbug.com/591099 external/wpt/requestidlecallback/callback-iframe.html [ Pass Timeout ] crbug.com/591099 external/wpt/requestidlecallback/callback-timeout-when-busy.html [ Timeout ] crbug.com/591099 external/wpt/requestidlecallback/callback-timeout.html [ Timeout ] crbug.com/591099 external/wpt/service-workers/service-worker/navigation-preload/broken-chunked-encoding.https.html [ Failure ] @@ -383,7 +370,7 @@ crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_outline_properties.html [ Failure ] crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_outline_shorthand.html [ Failure ] crbug.com/591099 external/wpt/webvtt/rendering/cues-with-video/processing-model/selectors/cue_function/voice_object/voice_white-space_normal_wrapped.html [ Failure ] -crbug.com/591099 external/wpt/workers/Worker_terminate_event_queue.htm [ Crash Timeout ] +crbug.com/591099 external/wpt/workers/Worker_terminate_event_queue.htm [ Timeout ] crbug.com/591099 external/wpt/workers/baseurl/alpha/worker-in-worker.html [ Pass ] crbug.com/591099 external/wpt/workers/constructors/Worker/same-origin.html [ Timeout ] crbug.com/591099 external/wpt/workers/semantics/interface-objects/004.html [ Failure ] @@ -392,7 +379,6 @@ crbug.com/591099 fast/backgrounds/background-leakage-transforms.html [ Failure ] crbug.com/591099 fast/backgrounds/quirks-mode-line-box-backgrounds.html [ Failure ] crbug.com/591099 fast/block/basic/quirk-percent-height-table-cell.html [ Failure ] -crbug.com/591099 fast/block/block-width-recalc-with-relative-height.html [ Failure ] crbug.com/591099 fast/block/float-avoids-padding-inline-ancestors.html [ Crash ] crbug.com/591099 fast/block/float/nopaint-after-layer-destruction.html [ Failure ] crbug.com/591099 fast/block/float/nopaint-after-layer-destruction2.html [ Failure ] @@ -414,8 +400,6 @@ crbug.com/591099 fast/css-grid-layout/grid-self-baseline-vertical-lr-05.html [ Failure ] crbug.com/591099 fast/css-grid-layout/maximize-tracks-definite-indefinite-width.html [ Failure ] crbug.com/591099 fast/css-grid-layout/percent-padding-margin-resolution-grid-item.html [ Failure ] -crbug.com/591099 fast/css-intrinsic-dimensions/fixed-height-stf-img-block-child-percent-height.html [ Failure ] -crbug.com/591099 fast/css-intrinsic-dimensions/fixed-height-stf-img-inline-child-percent-height.html [ Failure ] crbug.com/591099 fast/css-intrinsic-dimensions/height-positioned.html [ Failure ] crbug.com/807708 fast/css-intrinsic-dimensions/width-avoid-floats.html [ Failure ] crbug.com/591099 fast/css/absolute-inline-alignment-2.html [ Pass ] @@ -430,6 +414,7 @@ crbug.com/591099 fast/events/touch/compositor-touch-hit-rects.html [ Failure ] crbug.com/591099 fast/events/wheel/mainthread-touchpad-fling-latching.html [ Pass ] crbug.com/591099 fast/events/wheel/wheel-scroll-latching-on-scrollbar.html [ Pass ] +crbug.com/591099 fast/inline-block/tricky-baseline.html [ Failure ] crbug.com/591099 fast/inline-block/vertical-align-top-and-bottom-2.html [ Failure ] crbug.com/835484 fast/inline/continuation-outlines-with-layers-2.html [ Failure ] crbug.com/835484 fast/inline/continuation-outlines-with-layers.html [ Failure ] @@ -452,9 +437,8 @@ crbug.com/591099 fast/table/dynamic-descendant-percentage-height.html [ Failure ] crbug.com/591099 fast/table/empty-table-percent-height.html [ Failure ] crbug.com/591099 fast/table/height-percent-test-vertical.html [ Failure ] -crbug.com/591099 fast/table/percent-height-overflow-auto-content-in-cell.html [ Failure Pass ] -crbug.com/591099 fast/table/percent-height-overflow-scroll-content-in-cell.html [ Failure Pass ] -crbug.com/591099 fast/table/percent-height-replaced-content-in-cell.html [ Failure ] +crbug.com/591099 fast/table/percent-height-overflow-auto-content-in-cell.html [ Failure ] +crbug.com/591099 fast/table/percent-height-overflow-scroll-content-in-cell.html [ Failure ] crbug.com/858998 fast/table/table-continuation-outline-paint-crash.html [ Failure ] crbug.com/591099 fast/table/table-display-types-vertical.html [ Failure ] crbug.com/591099 fast/table/unbreakable-images-quirk.html [ Failure ] @@ -496,9 +480,10 @@ crbug.com/591099 http/tests/security/cors-rfc1918/addressspace-document-appcache.https.html [ Crash Failure ] crbug.com/591099 http/tests/security/cors-rfc1918/addressspace-document-csp-appcache.https.html [ Crash Failure Pass ] crbug.com/591099 http/tests/security/setDomainRelaxationForbiddenForURLScheme.html [ Crash ] -crbug.com/591099 idle-callback/test-runner-run-idle-tasks.html [ Pass ] +crbug.com/591099 idle-callback/test-runner-run-idle-tasks.html [ Pass Timeout ] crbug.com/714962 images/color-profile-background-clip-text.html [ Failure ] crbug.com/591099 images/color-profile-image-filter-all.html [ Failure ] +crbug.com/591099 images/color-profile-munsell-adobe-to-srgb.html [ Failure ] crbug.com/714962 inspector-protocol/css/css-get-platform-fonts.js [ Failure ] crbug.com/591099 inspector-protocol/dom-snapshot/dom-snapshot-getSnapshot-pseudo-element.js [ Failure ] crbug.com/714962 inspector-protocol/dom-snapshot/dom-snapshot-getSnapshot-viewport.js [ Failure ] @@ -509,7 +494,6 @@ crbug.com/591099 paint/invalidation/background/background-misaligned.html [ Failure ] crbug.com/591099 paint/invalidation/clip/control-clip.html [ Failure ] crbug.com/591099 paint/invalidation/clip/outline-clip-change.html [ Failure ] -crbug.com/591099 paint/invalidation/compositing/clipping-should-not-repaint-composited-descendants.html [ Failure ] crbug.com/591099 paint/invalidation/compositing/subpixel-offset-scaled-transform-composited.html [ Failure ] crbug.com/591099 paint/invalidation/css-grid-layout/grid-item-change-column-repaint.html [ Failure ] crbug.com/591099 paint/invalidation/css-grid-layout/grid-item-z-index-change-repaint.html [ Failure ] @@ -541,7 +525,6 @@ crbug.com/835484 paint/invalidation/outline/focus-ring-on-inline-continuation-move.html [ Failure ] crbug.com/835484 paint/invalidation/outline/inline-focus.html [ Failure ] crbug.com/835484 paint/invalidation/outline/inline-outline-repaint-2.html [ Failure ] -crbug.com/835484 paint/invalidation/outline/outline-change-continuations.html [ Failure ] crbug.com/835484 paint/invalidation/outline/outline-continuations.html [ Failure ] crbug.com/591099 paint/invalidation/overflow/align-items-overflow-change.html [ Failure ] crbug.com/591099 paint/invalidation/overflow/align-self-overflow-change.html [ Failure ] @@ -557,9 +540,6 @@ crbug.com/591099 paint/invalidation/scroll/repaint-composited-child-in-scrolled-container.html [ Failure ] crbug.com/591099 paint/invalidation/selection/selection-rl.html [ Failure ] crbug.com/591099 paint/invalidation/svg/animated-path-inside-transformed-html.xhtml [ Failure Pass ] -crbug.com/591099 paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-1.html [ Failure ] -crbug.com/591099 paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-2.html [ Failure ] -crbug.com/714962 paint/invalidation/svg/resize-svg-invalidate-children-fixed-size-relative-child.html [ Failure ] crbug.com/591099 paint/invalidation/svg/resize-svg-invalidate-children.html [ Failure ] crbug.com/728378 paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem.html [ Failure ] crbug.com/591099 paint/invalidation/svg/svg-background-partial-redraw.html [ Failure ] @@ -569,10 +549,10 @@ crbug.com/591099 paint/invalidation/window-resize/window-resize-percent-width-height.html [ Failure ] crbug.com/591099 paint/invalidation/window-resize/window-resize-viewport-percent.html [ Failure ] crbug.com/591099 paint/overflow/background-mask-should-be-recorded-full.html [ Failure ] -crbug.com/591099 paint/pagination/pagination-change-clip-crash.html [ Failure ] crbug.com/591099 printing/absolute-position-headers-and-footers.html [ Failure ] crbug.com/591099 printing/iframe-svg-in-object-print.html [ Failure ] crbug.com/591099 scrollbars/auto-scrollbar-fit-content.html [ Failure ] +crbug.com/591099 scrollbars/overflow-scrollbar-combinations.html [ Failure ] crbug.com/591099 storage/indexeddb/mozilla/test_objectStore_openKeyCursor.html [ Pass ] crbug.com/591099 storage/indexeddb/objectstore-cursor.html [ Pass ] crbug.com/591099 svg/custom/object-sizing-no-width-height.xhtml [ Failure ] @@ -602,11 +582,12 @@ crbug.com/591099 virtual/exotic-color-space/ [ Skip ] crbug.com/591099 virtual/feature-policy-vibrate/ [ Skip ] crbug.com/591099 virtual/gpu-rasterization/images/color-profile-image-filter-all.html [ Failure ] +crbug.com/591099 virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb.html [ Failure ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-blending-color-over-image.html [ Pass ] crbug.com/591099 virtual/gpu/fast/canvas/canvas-blending-gradient-over-pattern.html [ Pass Timeout ] crbug.com/591099 virtual/layout_ng/ [ Skip ] crbug.com/824918 virtual/layout_ng_experimental/ [ Skip ] -crbug.com/591099 virtual/mojo-blob-urls/external/wpt/FileAPI/url/sandboxed-iframe.html [ Pass Timeout ] +crbug.com/591099 virtual/mojo-blob-urls/external/wpt/FileAPI/url/sandboxed-iframe.html [ Pass ] crbug.com/591099 virtual/mouseevent_fractional/fast/events/touch/compositor-touch-hit-rects.html [ Failure ] crbug.com/591099 virtual/mouseevent_fractional/fast/events/wheel/mainthread-touchpad-fling-latching.html [ Pass ] crbug.com/591099 virtual/mouseevent_fractional/fast/events/wheel/wheel-scroll-latching-on-scrollbar.html [ Pass ]
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process b/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process index 6d6832e..3b317e5 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process +++ b/third_party/WebKit/LayoutTests/FlagExpectations/site-per-process
@@ -20,16 +20,6 @@ # https://crbug.com/669083: console messages mismatch (origin-only VS full-URI) crbug.com/669083 http/tests/security/frameNavigation/xss-DENIED-top-navigation-without-user-gesture.html [ Failure ] -# https://crbug.com/582245 - no exception, b/c BindingSecurity::shouldAllowAccessTo exits early when |!target|. -crbug.com/582245 external/wpt/x-frame-options/deny.sub.html [ Failure ] -crbug.com/582245 external/wpt/x-frame-options/multiple.sub.html [ Failure ] -crbug.com/582245 external/wpt/x-frame-options/sameorigin.sub.html [ Failure ] -crbug.com/582245 http/tests/security/xss-DENIED-getSVGDocument-iframe.html [ Failure ] -crbug.com/582245 http/tests/security/xss-DENIED-getSVGDocument-object.html [ Failure ] -crbug.com/582245 http/tests/security/xssAuditor/block-does-not-leak-location.html [ Failure ] -crbug.com/582245 http/tests/security/xssAuditor/block-does-not-leak-referrer.html [ Failure ] -crbug.com/582245 http/tests/security/xssAuditor/full-block-script-tag-cross-domain.html [ Failure ] - # https://crbug.com/608015 - node.contentDocument is undefined. crbug.com/608015 http/tests/inspector-protocol/access-inspected-object.js [ Failure Timeout ]
diff --git a/third_party/WebKit/LayoutTests/ImageFirstTests b/third_party/WebKit/LayoutTests/ImageFirstTests index 33a5f71..4562d1e 100644 --- a/third_party/WebKit/LayoutTests/ImageFirstTests +++ b/third_party/WebKit/LayoutTests/ImageFirstTests
@@ -45,6 +45,7 @@ fast/scrolling fast/sub-pixel fast/lists +paint/markers scrollbars external/wpt/html/rendering/replaced-elements/embedded-content-rendering-rules external/wpt/html/rendering/replaced-elements/attributes-for-embedded-content-and-images
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index d89f49a..8f821c2c 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -2510,10 +2510,6 @@ crbug.com/548765 http/tests/devtools/console-fetch-logging.js [ Failure Pass ] -# When BigInts are on by default, these should pass and be removed along with their FlagExpectations. -crbug.com/v8/7486 http/tests/devtools/startup/console/console-format-startup-bigint.js [ Skip ] -crbug.com/v8/7486 http/tests/devtools/console/console-format-bigint.js [ Skip ] - crbug.com/564109 [ Win ] http/tests/webfont/font-display-intervention.html [ Pass Failure Timeout ] crbug.com/399951 http/tests/mime/javascript-mimetype-usecounters.html [ Pass Failure ] @@ -2702,8 +2698,12 @@ crbug.com/870526 external/wpt/notifications/idlharness.https.any.serviceworker.html [ Skip ] crbug.com/870526 external/wpt/payment-handler/idlharness.https.any.serviceworker.html [ Skip ] crbug.com/870526 external/wpt/push-api/idlharness.https.any.serviceworker.html [ Skip ] +crbug.com/870526 external/wpt/budget-api/idlharness.https.any.worker.html [ Skip ] + +crbug.com/873540 external/wpt/budget-api/idlharness.https.any.html [ Timeout Crash ] # ====== New tests from wpt-importer added here ====== +crbug.com/626703 external/wpt/infrastructure/server/secure-context.https.any.serviceworker.html [ Skip ] crbug.com/626703 external/wpt/speech-api/SpeechSynthesis-speak-with-activation-succeeds.html [ Timeout ] crbug.com/626703 external/wpt/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative.html [ Timeout ] crbug.com/626703 external/wpt/svg/painting/reftests/paint-order-001.svg [ Failure ] @@ -3910,6 +3910,10 @@ crbug.com/722943 media/audio-repaint.html [ Skip ] crbug.com/722943 virtual/video-surface-layer/media/audio-repaint.html [ Skip ] +# Sheriff failures 2018-08-13 +crbug.com/873547 [ Mac ] virtual/mouseevent_fractional/fast/events/middleClickAutoscroll-event-fired.html [ Timeout Pass ] +crbug.com/873547 [ Mac ] virtual/user-activation-v2/fast/events/middleClickAutoscroll-event-fired.html [ Timeout Pass ] + crbug.com/715718 external/wpt/media-source/mediasource-activesourcebuffers.html [ Failure Pass ] crbug.com/715718 external/wpt/media-source/mediasource-remove.html [ Failure Pass ] crbug.com/715718 [ Win ] external/wpt/xhr/FormData-append.html [ Failure Pass ] @@ -4701,8 +4705,6 @@ crbug.com/865432 [ Linux ] external/wpt/workers/modules/dedicated-worker-import-blob-url.any.worker.html [ Timeout Pass ] -crbug.com/865755 [ Debug ] virtual/threaded/fast/scroll-behavior/smooth-scroll/mousewheel-scroll.html [ Failure Pass ] - skbug.com/8155 virtual/gpu-rasterization/images/jpeg-yuv-progressive-image.html [ Pass Failure ] skbug.com/8155 virtual/gpu-rasterization/images/rgb-png-with-cmyk-color-profile.html [ Pass Failure ] @@ -4902,3 +4904,4 @@ # Sheriff 2018-08-10 crbug.com/873078 [ Win7 ] device_orientation/motion/detached-frame.html [ Failure Pass ] +crbug.com/872705 [ Mac ] virtual/mouseevent_fractional/fast/events/middleClickAutoscroll-click.html [ Timeout Pass ]
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/add-remove-squashed-layers-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/add-remove-squashed-layers-expected.txt index a79dfb2..3e4f79ed 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/add-remove-squashed-layers-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/add-remove-squashed-layers-expected.txt
@@ -105,12 +105,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", - "reason": "appeared" - } ] } CASE 3, overlap2 gets removed. Since this does not resize the layer, there should only be a repaint of overlap2: @@ -230,12 +224,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", - "reason": "compositing update" - } ] } CASE 5, overlap2 gets added back: @@ -303,16 +291,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", - "reason": "compositing update" - } ] } CASE 6, overlap1 gets added back, and overlap3 gets removed: @@ -385,16 +363,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", - "reason": "compositing update" - } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/invalidations-with-large-negative-margin-inline-content-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/invalidations-with-large-negative-margin-inline-content-expected.txt index 6db5058..97d1db6 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/invalidations-with-large-negative-margin-inline-content-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/invalidations-with-large-negative-margin-inline-content-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='chip'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/repaint-child-of-squashed-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/repaint-child-of-squashed-expected.txt index fdd7d98..dfa767d3 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/repaint-child-of-squashed-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/repaint-child-of-squashed-expected.txt
@@ -103,12 +103,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='inner'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-1-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-1-expected.txt index f894c94..79a78f7 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-1-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-1-expected.txt
@@ -153,28 +153,6 @@ [100, 230, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-b' class='overlapping lime'", - "reason": "compositing update" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-c' class='overlapping cyan'", - "reason": "compositing update" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime'", - "reason": "compositing update" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-e' class='overlapping cyan'", - "reason": "compositing update" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-f' class='overlapping lime'", - "reason": "compositing update" - } ] } CASE 3, scrolling y to 120, no repaints expected: @@ -343,28 +321,6 @@ [100, 320, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-c' class='overlapping cyan'", - "reason": "compositing update" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime'", - "reason": "compositing update" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-e' class='overlapping cyan'", - "reason": "compositing update" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-f' class='overlapping lime'", - "reason": "compositing update" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-g' class='overlapping cyan'", - "reason": "compositing update" - } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-3-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-3-expected.txt index efc1c80..a3e4f5f 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-3-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-3-expected.txt
@@ -228,12 +228,6 @@ [100, 260, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='innerScrolling'", - "reason": "compositing update" - } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-paint-invalidation-fixed-position-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-paint-invalidation-fixed-position-expected.txt index 71b09df0..4b411756 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-paint-invalidation-fixed-position-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-paint-invalidation-fixed-position-expected.txt
@@ -56,12 +56,6 @@ [8, 8, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='foo'", - "reason": "style change" - } ] } { @@ -122,12 +116,6 @@ [8, 8, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='foo'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-repainting-child-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-repainting-child-expected.txt index fd7b7d77..1d57dcd 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-repainting-child-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-repainting-child-expected.txt
@@ -103,12 +103,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='box middle'", - "reason": "style change" - } ] } CASE 3, hovering over the inner div @@ -171,16 +165,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='box middle'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='smallbox'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt index 272b9e9..90e22ab2 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
@@ -103,12 +103,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='box middle'", - "reason": "style change" - } ] } CASE 3, hovering over the inner div @@ -171,16 +165,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='box middle'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='smallbox'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt index b0915ad..f739e97 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt
@@ -92,24 +92,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='forceComposited' class='underneath'", - "reason": "compositing update" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", - "reason": "compositing update" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", - "reason": "compositing update" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", - "reason": "compositing update" - } ] }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squashed-repaints-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squashed-repaints-expected.txt index 90dd524..3060765 100644 --- a/third_party/WebKit/LayoutTests/compositing/squashing/squashed-repaints-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/squashing/squashed-repaints-expected.txt
@@ -105,12 +105,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", - "reason": "style change" - } ] } CASE 3, overlap1 and overlap2 change color: @@ -173,16 +167,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", - "reason": "style change" - } ] } CASE 4, overlap2 and overlap3 change color: @@ -245,16 +229,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", - "reason": "style change" - } ] } CASE 5, overlap3 and overlap1 change color: @@ -317,16 +291,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/css3/blending/svg-blend-not-allowed-expected.html b/third_party/WebKit/LayoutTests/css3/blending/svg-blend-not-allowed-expected.html deleted file mode 100644 index 3ff108d..0000000 --- a/third_party/WebKit/LayoutTests/css3/blending/svg-blend-not-allowed-expected.html +++ /dev/null
@@ -1,11 +0,0 @@ -<!DOCTYPE HTML> -<html> - <body> - <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="30px" style="background: yellow"> - <text x="0" y="20"> - Tspan elements should not blend. This test passes if the last word is - <tspan font-weight="bold" fill="green">GREEN</tspan>. - </text> - </svg> - </body> -</html>
diff --git a/third_party/WebKit/LayoutTests/css3/blending/svg-blend-not-allowed.html b/third_party/WebKit/LayoutTests/css3/blending/svg-blend-not-allowed.html deleted file mode 100644 index b6692bb..0000000 --- a/third_party/WebKit/LayoutTests/css3/blending/svg-blend-not-allowed.html +++ /dev/null
@@ -1,11 +0,0 @@ -<!DOCTYPE HTML> -<html> - <body> - <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="30px" style="background: yellow"> - <text x="0" y="20"> - Tspan elements should not blend. This test passes if the last word is - <tspan font-weight="bold" fill="green" style="mix-blend-mode: difference;">GREEN</tspan>. - </text> - </svg> - </body> -</html>
diff --git a/third_party/WebKit/LayoutTests/css3/blending/svg-blend-tspan-expected.html b/third_party/WebKit/LayoutTests/css3/blending/svg-blend-tspan-expected.html new file mode 100644 index 0000000..8660675 --- /dev/null +++ b/third_party/WebKit/LayoutTests/css3/blending/svg-blend-tspan-expected.html
@@ -0,0 +1,12 @@ +<!DOCTYPE HTML> +<html> + <body> + <div>Tspan elements are graphics elements per the latest SVG spec and should blend.<div> + <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="30px" style="background: yellow"> + <text x="0" y="20"> + This test passes if the last word is + <tspan font-weight="bold" fill="lime">LIME</tspan>. + </text> + </svg> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/css3/blending/svg-blend-tspan.html b/third_party/WebKit/LayoutTests/css3/blending/svg-blend-tspan.html new file mode 100644 index 0000000..acdf352 --- /dev/null +++ b/third_party/WebKit/LayoutTests/css3/blending/svg-blend-tspan.html
@@ -0,0 +1,12 @@ +<!DOCTYPE HTML> +<html> + <body> + <div>Tspan elements are graphics elements per the latest SVG spec and should blend.<div> + <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="30px" style="background: yellow"> + <text x="0" y="20"> + This test passes if the last word is + <tspan font-weight="bold" fill="red" style="mix-blend-mode: difference;">LIME</tspan>. + </text> + </svg> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json index 4564647..41d707e 100644 --- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json +++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -22969,6 +22969,18 @@ {} ] ], + "css/CSS2/positioning/abspos-inline-007.xht": [ + [ + "/css/CSS2/positioning/abspos-inline-007.xht", + [ + [ + "/css/CSS2/positioning/abspos-inline-007-ref.xht", + "==" + ] + ], + {} + ] + ], "css/CSS2/positioning/abspos-overflow-001.xht": [ [ "/css/CSS2/positioning/abspos-overflow-001.xht", @@ -82421,6 +82433,18 @@ {} ] ], + "css/css-writing-modes/relpos-inline-overflowing-block-vrl.html": [ + [ + "/css/css-writing-modes/relpos-inline-overflowing-block-vrl.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/css-writing-modes/row-progression-vlr-003.xht": [ [ "/css/css-writing-modes/row-progression-vlr-003.xht", @@ -96993,6 +97017,30 @@ {} ] ], + "svg/render/reftests/blending-svg-foreign-object.html": [ + [ + "/svg/render/reftests/blending-svg-foreign-object.html", + [ + [ + "/svg/render/reftests/blending-svg-foreign-object-ref.html", + "==" + ] + ], + {} + ] + ], + "svg/render/reftests/blending-svg-root.html": [ + [ + "/svg/render/reftests/blending-svg-root.html", + [ + [ + "/svg/render/reftests/blending-svg-root-ref.html", + "==" + ] + ], + {} + ] + ], "svg/rendering/order/z-index.svg": [ [ "/svg/rendering/order/z-index.svg", @@ -104576,12 +104624,22 @@ {} ] ], - "background-fetch/resources/sw.js": [ + "background-fetch/resources/utils.js": [ [ {} ] ], - "background-fetch/resources/utils.js": [ + "background-fetch/service_workers/sw-helpers.js": [ + [ + {} + ] + ], + "background-fetch/service_workers/sw-update-ui.js": [ + [ + {} + ] + ], + "background-fetch/service_workers/sw.js": [ [ {} ] @@ -105246,6 +105304,11 @@ {} ] ], + "compat/idlharness.window-expected.txt": [ + [ + {} + ] + ], "compat/interfaces.any-expected.txt": [ [ {} @@ -110436,6 +110499,11 @@ {} ] ], + "css/CSS2/positioning/abspos-inline-007-ref.xht": [ + [ + {} + ] + ], "css/CSS2/positioning/abspos-overflow-001-ref.xht": [ [ {} @@ -125996,6 +126064,11 @@ {} ] ], + "css/css-overflow/overflow-shorthand-001-expected.txt": [ + [ + {} + ] + ], "css/css-overflow/reference/input-scrollable-region-001-ref.html": [ [ {} @@ -136966,6 +137039,11 @@ {} ] ], + "css/cssom/overflow-serialization-expected.txt": [ + [ + {} + ] + ], "css/cssom/selectorText-modification-restyle-001-ref.html": [ [ {} @@ -141446,6 +141524,11 @@ {} ] ], + "dom/nodes/DOMImplementation-createDocument-expected.txt": [ + [ + {} + ] + ], "dom/nodes/DOMImplementation-createHTMLDocument.js": [ [ {} @@ -141726,6 +141809,11 @@ {} ] ], + "dom/nodes/Document-createElementNS-expected.txt": [ + [ + {} + ] + ], "dom/nodes/Document-createElementNS.js": [ [ {} @@ -170301,6 +170389,16 @@ {} ] ], + "svg/render/reftests/blending-svg-foreign-object-ref.html": [ + [ + {} + ] + ], + "svg/render/reftests/blending-svg-root-ref.html": [ + [ + {} + ] + ], "svg/rendering/order/z-index-ref.svg": [ [ {} @@ -171066,6 +171164,16 @@ {} ] ], + "url/idlharness.any-expected.txt": [ + [ + {} + ] + ], + "url/idlharness.any.worker-expected.txt": [ + [ + {} + ] + ], "url/interfaces.any-expected.txt": [ [ {} @@ -176486,6 +176594,16 @@ {} ] ], + "xhr/idlharness.any.sharedworker-expected.txt": [ + [ + {} + ] + ], + "xhr/idlharness.any.worker-expected.txt": [ + [ + {} + ] + ], "xhr/no-utf16-json-expected.txt": [ [ {} @@ -185459,6 +185577,12 @@ {} ] ], + "background-fetch/update-ui.https.window.js": [ + [ + "/background-fetch/update-ui.https.window.html", + {} + ] + ], "battery-status/battery-iframe.https.html": [ [ "/battery-status/battery-iframe.https.html", @@ -186897,13 +187021,13 @@ } ] ], - "budget-api/interfaces.any.js": [ + "budget-api/idlharness.https.any.js": [ [ - "/budget-api/interfaces.any.html", + "/budget-api/idlharness.https.any.html", {} ], [ - "/budget-api/interfaces.any.worker.html", + "/budget-api/idlharness.https.any.worker.html", {} ] ], @@ -187063,13 +187187,9 @@ {} ] ], - "compat/interfaces.any.js": [ + "compat/idlharness.window.js": [ [ - "/compat/interfaces.any.html", - {} - ], - [ - "/compat/interfaces.any.worker.html", + "/compat/idlharness.window.html", {} ] ], @@ -214359,9 +214479,9 @@ {} ] ], - "fullscreen/interfaces.html": [ + "fullscreen/idlharness.window.js": [ [ - "/fullscreen/interfaces.html", + "/fullscreen/idlharness.window.html", {} ] ], @@ -217859,6 +217979,12 @@ {} ] ], + "html/rendering/the-css-user-agent-style-sheet-and-presentational-hints/no-help-cursor-on-links.historical.html": [ + [ + "/html/rendering/the-css-user-agent-style-sheet-and-presentational-hints/no-help-cursor-on-links.historical.html", + {} + ] + ], "html/scripting/the-noscript-element/non-html-noscript.html": [ [ "/html/scripting/the-noscript-element/non-html-noscript.html", @@ -227259,6 +227385,24 @@ {} ] ], + "infrastructure/server/context.any.js": [ + [ + "/infrastructure/server/context.any.html", + {} + ], + [ + "/infrastructure/server/context.any.sharedworker.html", + {} + ], + [ + "/infrastructure/server/context.any.worker.html", + {} + ], + [ + "/infrastructure/server/context.https.any.serviceworker.html", + {} + ] + ], "infrastructure/server/order-of-metas.any.js": [ [ "/infrastructure/server/order-of-metas.any.html", @@ -227293,6 +227437,14 @@ {} ], [ + "/infrastructure/server/secure-context.https.any.serviceworker.html", + {} + ], + [ + "/infrastructure/server/secure-context.https.any.sharedworker.html", + {} + ], + [ "/infrastructure/server/secure-context.https.any.worker.html", {} ] @@ -252299,15 +252451,13 @@ {} ] ], - "storage/interfaces.https.html": [ + "storage/idlharness.https.any.js": [ [ - "/storage/interfaces.https.html", + "/storage/idlharness.https.any.html", {} - ] - ], - "storage/interfaces.https.worker.js": [ + ], [ - "/storage/interfaces.https.worker.html", + "/storage/idlharness.https.any.worker.html", {} ] ], @@ -254685,13 +254835,13 @@ {} ] ], - "url/interfaces.any.js": [ + "url/idlharness.any.js": [ [ - "/url/interfaces.any.html", + "/url/idlharness.any.html", {} ], [ - "/url/interfaces.any.worker.html", + "/url/idlharness.any.worker.html", {} ] ], @@ -263291,9 +263441,17 @@ {} ] ], - "xhr/interfaces.html": [ + "xhr/idlharness.any.js": [ [ - "/xhr/interfaces.html", + "/xhr/idlharness.any.html", + {} + ], + [ + "/xhr/idlharness.any.sharedworker.html", + {} + ], + [ + "/xhr/idlharness.any.worker.html", {} ] ], @@ -277686,14 +277844,26 @@ "d93e330118c50918b3205c3ea1e9ea371937aaaf", "support" ], - "background-fetch/resources/sw.js": [ - "c7b6e87115da4051980837838900fee80df9cb27", + "background-fetch/resources/utils.js": [ + "254f2fabb0c8f2db9013286816b7ecd3977f7140", "support" ], - "background-fetch/resources/utils.js": [ - "1602f7a4e12d8470974c706ae3b2e90f8920f854", + "background-fetch/service_workers/sw-helpers.js": [ + "4b917a77e13e2bc7fb4067874292d758886cd876", "support" ], + "background-fetch/service_workers/sw-update-ui.js": [ + "85512e958ce0c5ac1aee365fef241f5699076082", + "support" + ], + "background-fetch/service_workers/sw.js": [ + "bdebd4bf14c3a5dea586ba3df0f6f67ea2c60cd7", + "support" + ], + "background-fetch/update-ui.https.window.js": [ + "4b96fcfd9250f9e394537c639f12301384d6798b", + "testharness" + ], "battery-status/META.yml": [ "088b2c7021bfb7a41d031e38adbdd7460943c948", "support" @@ -278678,14 +278848,14 @@ "a12d36202021ac41551017600278483c4a560c14", "support" ], + "budget-api/idlharness.https.any.js": [ + "3f19ec09fb7d42597054e44ac085d984e8fce0a5", + "testharness" + ], "budget-api/interfaces.any-expected.txt": [ "b90e249c90b6fdc488094cf527fa8796f5d0e62a", "support" ], - "budget-api/interfaces.any.js": [ - "36404f7f6ec3674ae74cd2ea1969b6260dc8f47c", - "testharness" - ], "budget-api/interfaces.any.worker-expected.txt": [ "f7e4f4073ff7a6db3431a829c43c000304e67012", "support" @@ -279118,14 +279288,18 @@ "2d71e7532fc32af61d2410927b6405a9e79279a4", "testharness" ], + "compat/idlharness.window-expected.txt": [ + "ccd43693a0da56061a0ae661c3a31f8ced1c3839", + "support" + ], + "compat/idlharness.window.js": [ + "959b1abe62df6394518a0b9f08d70feda4fd4273", + "testharness" + ], "compat/interfaces.any-expected.txt": [ "8d1338b7eddd82f40b4a97d2371da85c225d35b6", "support" ], - "compat/interfaces.any.js": [ - "b96341f909d00d6d1f3ee244f174dbe576bc0780", - "testharness" - ], "compat/interfaces.any.worker-expected.txt": [ "ec03c693d69bb98735d0235cf84ad797829a1457", "support" @@ -279275,15 +279449,15 @@ "manual" ], "console/idlharness.any-expected.txt": [ - "6aa91b8fcfd8f7956e518e0c90018051ad49bbfa", + "5f99cc10658b9c64483c2def25b2265a38e5b63a", "support" ], "console/idlharness.any.js": [ - "bb3f2248963773fb214a050d7f64c06c631ad8d4", + "16e77b09778a209fd9cd84919b3f9392a9737f3a", "testharness" ], "console/idlharness.any.worker-expected.txt": [ - "6aa91b8fcfd8f7956e518e0c90018051ad49bbfa", + "5f99cc10658b9c64483c2def25b2265a38e5b63a", "support" ], "content-security-policy/META.yml": [ @@ -292050,6 +292224,14 @@ "c7b445070b3baa446741d3561c67fe6e4d89246f", "manual" ], + "css/CSS2/positioning/abspos-inline-007-ref.xht": [ + "e89089d1f5dbb415e9de640963bffde4dff92acf", + "support" + ], + "css/CSS2/positioning/abspos-inline-007.xht": [ + "8973be74bd2f607b08abb9c08148c024ed441d73", + "reftest" + ], "css/CSS2/positioning/abspos-overflow-001-ref.xht": [ "69ee40481d5d49b0f165660e73f4aa6a5509515e", "support" @@ -302683,19 +302865,19 @@ "reftest" ], "css/css-contain/contain-size-002.html": [ - "235ec0441285890c93dffb4ff2bd0872f3f95dd7", + "122275c9a80ef31ea681b6356f49b04a03b4bd13", "reftest" ], "css/css-contain/contain-size-003.html": [ - "a49f582fbed96fab59ab3bce4295ff86c3032c22", + "9d227d5290bc38b103f13cfd76df5dedbfff1c46", "reftest" ], "css/css-contain/contain-size-004.html": [ - "94390f137f15d9667b3d5f105d13881fe7d53ea5", + "81149fd872c45dbf977f45d2c3fe172d48466d67", "reftest" ], "css/css-contain/contain-size-005.html": [ - "dfb0708ceeda5812a7434454f39a360d576597ea", + "52f5beb0bffbcb7459cf48ad8ddbc593a0518b74", "reftest" ], "css/css-contain/contain-size-006.html": [ @@ -319838,8 +320020,12 @@ "574370fc7ff42a7d8ad8b7c883268f6f42d4f094", "testharness" ], + "css/css-overflow/overflow-shorthand-001-expected.txt": [ + "f58feb9d100ce5a2dc3742589321f3d29a567348", + "support" + ], "css/css-overflow/overflow-shorthand-001.html": [ - "a32d1b270f62b9d563ed397c2c4cd6e87b9405e1", + "8a1f3cf67bf866c07103b3287cbc9d4c518018b5", "testharness" ], "css/css-overflow/reference/input-scrollable-region-001-ref.html": [ @@ -342590,6 +342776,10 @@ "53e7792b0bcdb36b7f82bfb2ded741a5ca4df294", "support" ], + "css/css-writing-modes/relpos-inline-overflowing-block-vrl.html": [ + "bd33580a934daf21354db818c3b84e980b8304f8", + "reftest" + ], "css/css-writing-modes/replaced-content-image-002.xht": [ "545b4a4a6ad2c9e0232cc1e8d754b12fa0ccd510", "visual" @@ -345750,8 +345940,12 @@ "a8a6a1b9966526de2d846baf6176880353f84e1a", "testharness" ], + "css/cssom/overflow-serialization-expected.txt": [ + "d62a7a6d00b98f100706c0e68076704fc627f22f", + "support" + ], "css/cssom/overflow-serialization.html": [ - "85952fbd040de03f5082f28ba8116fd4827a1fc3", + "1a0983437785f6605c42c76fb02ce8e9fd322d37", "testharness" ], "css/cssom/preferred-stylesheet-order.html": [ @@ -345811,11 +346005,11 @@ "testharness" ], "css/cssom/shorthand-values-expected.txt": [ - "22199db964c217c3f4a8c712913a435f8fca2f12", + "276477ca7ea097382a21751d10d76873ae57680d", "support" ], "css/cssom/shorthand-values.html": [ - "9211674fd69ddfa32d3bafcf2bc967977eb3ec31", + "d38d61abed89568341403b6e267ab36694dbfea7", "testharness" ], "css/cssom/style-attr-update-across-documents.html": [ @@ -353030,6 +353224,10 @@ "c2882d5007a804e5c0f9ecf307b0367d1ff49aef", "testharness" ], + "dom/nodes/DOMImplementation-createDocument-expected.txt": [ + "8327b640a1ee54acd3418477f6c7a9b7ae19dc7c", + "support" + ], "dom/nodes/DOMImplementation-createDocument.html": [ "3da48c26f9e3c3bed13a43ca0674e05a2b611fd5", "testharness" @@ -353367,15 +353565,19 @@ "testharness" ], "dom/nodes/Document-createElement.html": [ - "e3c4288a4ad551c7b3f269b48a5a734207b39766", + "7fee1051147fee93e5c5b36debe14bcf31aa385d", "testharness" ], + "dom/nodes/Document-createElementNS-expected.txt": [ + "9cfef62741a185e98d80a3228aa78ca9aea0db38", + "support" + ], "dom/nodes/Document-createElementNS.html": [ "6a08de4ca3515d9e59043642c0654dc9a8fc310e", "testharness" ], "dom/nodes/Document-createElementNS.js": [ - "a0cb73e1bef92ce357f50e03c74794ec25a98c2e", + "2492d2317a4089a83e7d8ff2126b449ef771c1ea", "support" ], "dom/nodes/Document-createEvent-expected.txt": [ @@ -360098,8 +360300,8 @@ "ba59db02939bc5ba00825befe4777c66cee64b4c", "support" ], - "fullscreen/interfaces.html": [ - "f6f0dbc8a505896a0e7ec7aca2746bbd5c1eb7d9", + "fullscreen/idlharness.window.js": [ + "dfac9bb005a33ab43911be55a09a3988b0d18ccf", "testharness" ], "fullscreen/model/move-to-fullscreen-iframe-manual.html": [ @@ -370354,6 +370556,10 @@ "3cd7418ba8ea44bc2a643e63d38574c39041de24", "reftest" ], + "html/rendering/the-css-user-agent-style-sheet-and-presentational-hints/no-help-cursor-on-links.historical.html": [ + "b1f13ca36f9fb2849ca6d58904516be7bd17c187", + "testharness" + ], "html/rendering/the-details-element/details-after.html": [ "6bbe67f07c0b267dc9a39ce5885f532815f01171", "reftest" @@ -381038,6 +381244,10 @@ "7c39501c8a2ddcd9ee0405af1df84e259205ab04", "reftest" ], + "infrastructure/server/context.any.js": [ + "edbad936dfe7b37dcd7224e7562e7baf81e8162b", + "testharness" + ], "infrastructure/server/order-of-metas.any.js": [ "13cf63163e3aad97c71982929fbcc27ebf4fd5d1", "testharness" @@ -381059,7 +381269,7 @@ "support" ], "infrastructure/server/secure-context.https.any.js": [ - "6f246bdc6d67a92a6518870542c20d2f8b2b5f5d", + "f4e10e9cdf68ae38bf9ff194ea9f7d2aaaedc7dc", "testharness" ], "infrastructure/server/title.any.js": [ @@ -381151,31 +381361,31 @@ "manual" ], "interfaces/BackgroundSync.idl": [ - "3f9bbca50917a8a3e27d4983fa792b6d2686552e", + "8fdf6c2e4d843b7b8ca2188552da5f396a36626e", "support" ], "interfaces/CSP.idl": [ - "d16c0274f51864f1fd689e3908a72391131f5921", + "a0c3132807cab8537149bfb60331a1b3f77f26b4", "support" ], "interfaces/CSS-Parser-API.idl": [ - "f8f5cdea14cce4940a8616b4d053f73095f007a4", + "4f8ff24928e6da8b566fc4130b523939b78a884d", "support" ], "interfaces/DOM-Parsing.idl": [ - "b24ce10738d8bf36b5a3ed6679b2e4b8d0fb34e5", + "92c8d8cc45b093f682d6a661bd308a551f8a5e77", "support" ], "interfaces/FileAPI.idl": [ - "dc94962ef147935e5be598ed0609845e479e72d4", + "f9cac99b594011a1224a26f14d43f5adabc0fe91", "support" ], "interfaces/IndexedDB.idl": [ - "5d1d405a9b6fdd1ac3e849e1c12aadd056cb481b", + "21f914ac5bef14a50db87f0e773a133678518e10", "support" ], "interfaces/InputDeviceCapabilities.idl": [ - "631a62b86212b61e4919dd3db3742da62271813a", + "79e50aacddb5c403816f6f0ad72e230201b63c0a", "support" ], "interfaces/META.yml": [ @@ -381187,31 +381397,31 @@ "support" ], "interfaces/ResizeObserver.idl": [ - "2835174993c1648c5f8e2a4639727118d62e2d77", + "268216d7e28f80c9239d732585f0644daca62b61", "support" ], "interfaces/SRI.idl": [ - "42cb812276c3a1fe0f10c19856deec3b003c68bb", + "49242df4494949df1b8a60ae4560ff99ecb42a63", "support" ], "interfaces/SVG.idl": [ - "cec20bcccb2d7ee5402f1554471caa7253026b21", + "fdf4f8d88fc7718e1fbe025c3a4148fe1112b1b4", "support" ], "interfaces/WebCryptoAPI.idl": [ - "a6c7bfdf5f98a32533ba95d76fed71dc4cc6dc38", + "7f59b84833b70fb37e92576e1af41614fbbf0c95", "support" ], "interfaces/WebIDL.idl": [ - "62e56d5f08d5044fc3ee79ac3549d7222f4186aa", + "afc6d54bf7bb4ff9e8a1538533ffd1e683fd61cb", "support" ], "interfaces/accelerometer.idl": [ - "07fc457b582a7abb689f923522c65fcce10d27a4", + "70a18e6608890506210540d60cf2ed21156b3572", "support" ], "interfaces/ambient-light.idl": [ - "623852530c2645b51347c82cea8fa72c0cb22f18", + "677eb2db14e5be169983fc5de6d8c14b28b2d456", "support" ], "interfaces/animation-worklet.idl": [ @@ -381219,11 +381429,11 @@ "support" ], "interfaces/appmanifest.idl": [ - "dc57a1479ca3010f6fa86ef46274a452d339d1b5", + "fa1f052e54c38f659bf8362cabf8502020a9283f", "support" ], "interfaces/audio-output.idl": [ - "857874c69ea248e17b3a2a6ba23c13fe096c429c", + "f7a281586d7d86f7d145bdaaf29cd89019a821d7", "support" ], "interfaces/background-fetch.idl": [ @@ -381231,27 +381441,27 @@ "support" ], "interfaces/battery-status.idl": [ - "f3fcf5a8abf201760e2e8cc8499f66cc7e2e436c", + "4102fc8ed43574eff9cfb063f4b03c27ea2b9f04", "support" ], "interfaces/beacon.idl": [ - "0c44727b2685654751d2927f9c384f7e05cc7cf3", + "405e37b4670b59b4ba2fbf6767e690d225ed4983", "support" ], "interfaces/budget-api.idl": [ - "caba22c23688d761adef48dae1b58cc13a3e90ea", + "d8187a48e4146b720298135bdc5f9bbd958425e6", "support" ], "interfaces/clipboard-apis.idl": [ - "f117178bf9731a8f33da624f48530b84f1ca90f4", + "9661b9a8c5bd8fcedea7c2e8f443375aec739780", "support" ], "interfaces/compat.idl": [ - "e674e142d1348afd587b566d86b9390ad8bc56a0", + "f8e52c6a43c78faebd976ff76388bd71d659eefa", "support" ], "interfaces/console.idl": [ - "7f3bdda49f7c4f0b4ae5a87e4a05463da05f0554", + "5be61b3fff2ea9ae713eacf2e96116ca72d132fa", "support" ], "interfaces/cookie-store.idl": [ @@ -381259,43 +381469,43 @@ "support" ], "interfaces/cors-rfc1918.idl": [ - "d7f133c8dd6e1656f82c077d9795714827b9c869", + "e47968af1433a9b1708a8b347c08269c61a826ad", "support" ], "interfaces/credential-management.idl": [ - "29a0bcde9ddd6629c7bf05757cea45c831fe9a6b", + "8de3d61883881c449449a370aeebb1aa5cbc7c97", "support" ], "interfaces/csp-embedded-enforcement.idl": [ - "57d276da4bf41e5f47dd903411a748c3c6ebfd79", + "141f258c4ed0e6b2a95e70a127283db8908252ab", "support" ], "interfaces/css-animations.idl": [ - "804917872e1fd13cb9edaee693d4e011fcd7b79e", + "62e856de47bc6e14c36e90cf0ab27ba7172a8ab4", "support" ], "interfaces/css-conditional.idl": [ - "f3357deaf2511c5d36ba92723461fb14b832574c", + "c7e5e2d9ed09e0853399c9b90dac6f3db31b716a", "support" ], "interfaces/css-counter-styles.idl": [ - "437dd5859385f5a17f9b9b2509b8f50eeb42a717", + "8f68b3558a70c048374db93974dee4679490cb2d", "support" ], "interfaces/css-font-loading.idl": [ - "9f2f252c5b63c159d9680de46a932bfa4335bf11", + "8971cf9e5ceaf5c69da2bdffb711e4787e439e8b", "support" ], "interfaces/css-fonts.idl": [ - "ff2d83e9468c743993c9b4a1ecf3fab09684dc16", + "5d455840cb9d7c11ded238805002179567aab1df", "support" ], "interfaces/css-images.idl": [ - "29ff2de2d9dac38494a4e2b7cfc6dfc2947f16c1", + "9ca4592e89506a44701dca800fbed32538894145", "support" ], "interfaces/css-masking.idl": [ - "5f4ed3d8922e30ab3ddb714d185c6e6f794e5a29", + "09d74fcbaa1d5eed6257f471f42a031edf8b009a", "support" ], "interfaces/css-paint-api.idl": [ @@ -381303,31 +381513,31 @@ "support" ], "interfaces/css-properties-values-api.idl": [ - "12544faf5051cd77fdd9d74a81a89db9cdc63a6d", + "766d646c8d65e320736b9c2bd3582c23c5b54f08", "support" ], "interfaces/css-pseudo.idl": [ - "cbe6954dd91e8a7a579840d14b8cc7695592c592", + "705ac37dc0845e60641cd9cd53a7a80e870140c5", "support" ], "interfaces/css-regions.idl": [ - "23d01fa1c91539c443b2227df6a89e377b65a393", + "d6598e4fcc9af51d8f57298c0a2e031c28d4b212", "support" ], "interfaces/css-transitions.idl": [ - "54dd701233a71187c8b675ebbf7336f852a7cace", + "969716a271008a079fb73a7692aba4b5ce4b6012", "support" ], "interfaces/css-typed-om.idl": [ - "81881ca59f5cb7a287e66b861f18a17fd36c4beb", + "f6d4739737f39fcb791431dfc21b9c34e3d78cb1", "support" ], "interfaces/cssom-view.idl": [ - "f9407f8700beea9d5ab07fbb42f63f97e39942b9", + "10b5e90dd05d10ba8b07f018b723171fe421d026", "support" ], "interfaces/cssom.idl": [ - "27d09c6b0d02ef47b0a2037280a50939188411dd", + "b0d28806a07b543f42dc3de49d8c9e685ad6cea7", "support" ], "interfaces/dedicated-workers.idl": [ @@ -381339,15 +381549,15 @@ "support" ], "interfaces/encoding.idl": [ - "d03929c62005870ae2a5a2718374c7364ec86103", + "62e785062c64f4887718874995e34c74e3d12cd2", "support" ], "interfaces/encrypted-media.idl": [ - "583804d24cd5306932ac3a9ad446d6083b44f9b2", + "9407c0cc342c692dfdeaa6c818aaf24ff3a13334", "support" ], "interfaces/entries-api.idl": [ - "894cdcbceaa9834b8c90db155e1220482dfcc015", + "56828b5e34f063a3274d544ae27b03bea39c756a", "support" ], "interfaces/feature-policy.idl": [ @@ -381355,47 +381565,47 @@ "support" ], "interfaces/fetch.idl": [ - "e65b90887799ac8ea3d3e9cbde053d76466bd704", + "e612b2cadff8afef85b3bafc25de248dfd40af1c", "support" ], "interfaces/filter-effects.idl": [ - "7854a8fdde207892c53f927e3f99bf44e9fc9c01", + "98d01b546b78101e109ca18bb3db17bc3dfd2793", "support" ], "interfaces/fullscreen.idl": [ - "7b193c37494543f8b0db4d9aea9e8e3b7c7b6212", + "909b11cfc5bc3511c2cda95ea7317242e945146f", "support" ], "interfaces/gamepad.idl": [ - "94b8ff8cea671d2755b63c75259905136ee09ae9", + "499b7cb2296d4b0283d47b7744a41e654c432bf3", "support" ], "interfaces/generic-sensor.idl": [ - "b926fccfdfec89604ca6c582b0826c20c4b815d3", + "bd1649649fe483b00d9cd69634c50d365bf19564", "support" ], "interfaces/geolocation-API.idl": [ - "ae1b33281c8833971cabe9ffb3ab37c065251fc0", + "17d1bbfa8c9739066136306f176c134ac66f0995", "support" ], "interfaces/geolocation-sensor.idl": [ - "28bc4d15ea571290fe9e48e7c136bc3684e08660", + "185985c4426dc7b53275add4ae6301bd5b5b9344", "support" ], "interfaces/geometry.idl": [ - "8e057047db53832d0976414190a73eebb0b23f47", + "44099a008485870b349367658704fad2135b87eb", "support" ], "interfaces/gyroscope.idl": [ - "cbc81fd6697557a4fe06090ec6351385539d2d36", + "1b1eb6080fcdf3f7a5ae285e817ceb0ab03cfffc", "support" ], "interfaces/hr-time.idl": [ - "565edd1574ed7165a00c23345f2ea584f07b7686", + "622a3d30fa94a03534f2c82c1fc18b33d6854356", "support" ], "interfaces/html-media-capture.idl": [ - "712e1ef9d2e43a901b2b2fd6570c6bd33061fd88", + "cb51facdd7dd90e8b3b5ba5d30fe638c3d22c8b5", "support" ], "interfaces/html.idl": [ @@ -381403,95 +381613,95 @@ "support" ], "interfaces/image-capture.idl": [ - "9060a5d260bb68509a1709abf5c3ed59027293ce", + "35282c3f365d5528b77ae263eb10899091ec2691", "support" ], "interfaces/input-events.idl": [ - "5a76e3df1b2e66e36470781f407c8080f70fdddc", + "5a6d604c9328be5419afccf400308c2629893ecc", "support" ], "interfaces/intersection-observer.idl": [ - "dd985857e5ded5a80e782744bcdc408ad5bd4902", + "63e282e32e183725cc857fa84598e4f83a82f4ce", "support" ], "interfaces/keyboard-lock.idl": [ - "de86b3ca38839202b4b31e055cfb6e18591b7857", + "bfc5ea3b209e05b82854e7f55538ab8fed3d5adf", "support" ], "interfaces/keyboard-map.idl": [ - "1d1ddad1d290e39b93545bcf34f8d99e55932bf4", + "45c5c7c55056eaf28b2c461fd63d2c7aaf28d622", "support" ], "interfaces/longtasks.idl": [ - "ce433568ee600f02cc5df4ba6512e58ef98af798", + "5c2aa4c8a8e634a3be51fae47df84de99b12e357", "support" ], "interfaces/magnetometer.idl": [ - "5839955446fafc91d9bd63d1549d7bc2e7afe499", + "695f73a31be3fa0f9a8d4a7fab35f1435865d72b", "support" ], "interfaces/media-capabilities.idl": [ - "0bba702ce3c8683baca527f16132a5ac62dd656d", + "e853a2978175c17a7a038d95d39f9b62179b075d", "support" ], "interfaces/media-source.idl": [ - "825a1e1c8acdbad1d51e0b8e8863ff36bed8585d", + "6cf2b5a38e86fcb656bb05a0e9f7d7656295d89c", "support" ], "interfaces/mediacapture-depth.idl": [ - "2ac0dcf83f5afb227f24c9063d738dd22e941fe9", + "0c8ae4157ba81d0d826bd440a9d92c7d25e5ae54", "support" ], "interfaces/mediacapture-fromelement.idl": [ - "96a92fe9dc7a6bab8a17e69280d4d0ba938e5521", + "9a5cca8c761f8dbaad70ae60968d2af447f37c9d", "support" ], "interfaces/mediacapture-streams.idl": [ - "695f317656f7b21211a6642714128d05cd018173", + "e0b27f5b9a45ce98e58299a390fd6bd35d9427f6", "support" ], "interfaces/mediasession.idl": [ - "378af7beb3cf20086cec84840286f5e2a33f850c", + "060dfccc99379e3bae9a7e4d39beafa307b98e05", "support" ], "interfaces/mediastream-recording.idl": [ - "ad3974d839ba5ec99365dcd0b156ba1e508198ed", + "42dfb4d307e139541069e98af17e757c9916b23f", "support" ], "interfaces/navigation-timing.idl": [ - "6c021847c039e69e8a88fc1555f02b84a9280fbd", + "89bb9238943a1e375c514ae6ff08ccdede13311e", "support" ], "interfaces/netinfo.idl": [ - "d382fed17bd67ec1cc41287a711ffc5b024280a0", + "fbf5dd9bf2b6a87d7aa565daa3f6873b8dda9ea2", "support" ], "interfaces/notifications.idl": [ - "5043f859cc27314c5c36753506cdbfed694fc5a3", + "14e38515c929e2fc25a2abe0d61e928da4950214", "support" ], "interfaces/orientation-event.idl": [ - "88dba12d08fe65b1474994cbc0d15a71504e6300", + "47ad41b70da0e2fe9c748978fc0b64bae629341e", "support" ], "interfaces/orientation-sensor.idl": [ - "22846ce3ca7d7e8325915a8f1cb52d97bb8467f4", + "cc65fe9b49721b63b9d38e7bc563a1f43822b87d", "support" ], "interfaces/page-visibility.idl": [ - "6551f944a2611e10ffebb80dfa217b392bdce26a", + "db66a0a1afe241703239474ca95b9e55d1b4b34b", "support" ], "interfaces/paint-timing.idl": [ - "f9938dd1c68a34076bf137f6f7ef52e04f1df1f7", + "ca3a8e2269e42194eb916946a3b5b9bf570cb4d7", "support" ], "interfaces/payment-handler.idl": [ - "eb54a6c25cb788f2e0590cb0d5d94aa87385ceb7", + "68e7d2887b5ea0af36f1b9307f741cb25aefd67f", "support" ], "interfaces/payment-method-basic-card.idl": [ - "dee137bcb0e2e32c810f6d2c81ccac4187899a1d", + "fb7a5d3b1d9bebcdf487dc8413aec101a4957916", "support" ], "interfaces/payment-request.idl": [ @@ -381499,79 +381709,79 @@ "support" ], "interfaces/performance-timeline.idl": [ - "479fa0ee515e172551e66d9a71f37598cf9dc095", + "54816b8e4dfc0a12e0491764c33619721ebde0a3", "support" ], "interfaces/permissions.idl": [ - "7fec46d25cf175390524b681cdbec7b0b76c89b9", + "029cae4640ee8c61d8fac21e89e168f25a5da5f0", "support" ], "interfaces/picture-in-picture.idl": [ - "6feee4b6ea8d50e9ec572a6786c8fd9b4b8f80da", + "52f9fba43ba7f705b01614399cbf3f127a215fd4", "support" ], "interfaces/pointerevents-extension.idl": [ - "e3f284d2a59f53f6127f7d146b8759918431d859", + "2a7660e911d11aaa87dc20f1509146ba5b6e6a39", "support" ], "interfaces/pointerevents.idl": [ - "b95c7ec12ac6319cebb9ba64eeae4d9dd0c621fc", + "b26666dd1ecc1dddc4de216d7c562704826301e4", "support" ], "interfaces/pointerlock.idl": [ - "356f23aba40f5d32e8952ffe594e1b120112af81", + "a5041c3b97ceed2c6e322b7bf4756eedeab32123", "support" ], "interfaces/presentation-api.idl": [ - "2d97afcb6d7d598f48fe0d8cef99ad4c50196452", + "ec9a6cb1178c7b13794af757e721d6dc01fd3135", "support" ], "interfaces/proximity.idl": [ - "5416752c31de2d0f7a3b72941e24a0030d98599c", + "9ffee1983f0444c673782e4513841150c2a25885", "support" ], "interfaces/push-api.idl": [ - "be970887b4de77c05203fa16dc373d5ac36ad269", + "d878950685885db84c375427d013a10d9b430a6c", "support" ], "interfaces/referrer-policy.idl": [ - "04193aef279c9c8e0cb060d715d91c66045aaf17", + "5af1fa085ccc8cb4c42b4c8285545c884f7cbaf0", "support" ], "interfaces/remote-playback.idl": [ - "0bb6f1c86022bc066ecfcafab9376e9255c3a265", + "82489f9a820161a71a890c03d3c1b933099e035f", "support" ], "interfaces/requestidlecallback.idl": [ - "72a32cc188200761e80bb1b35f21f3a86b0839fe", + "c7631a117e3a441797382a02eb41835ea0f04727", "support" ], "interfaces/resource-timing.idl": [ - "d500e42e860b94614c0efeeb0b46d2ad7e8d79f9", + "19de7d8fdff462867f755a99d8b1bb817b02787b", "support" ], "interfaces/screen-capture.idl": [ - "0c53f3ae7b33d94d7d910f3b5b1d05a28239e157", + "fd2fd5699b46ae9c283d59383c2365926c375766", "support" ], "interfaces/screen-orientation.idl": [ - "c3d267a479600e83e4782e4a80126e3c4467920f", + "063ee46b3eaceeb0ebb8998660659fabfb7682b8", "support" ], "interfaces/scroll-animations.idl": [ - "b8a8781f130345d09ceb3cf064ce02ef1cd1c96a", + "26efe8a85872dbe24e75e6b133c4dd27a1abbb07", "support" ], "interfaces/secure-contexts.idl": [ - "27034035747147b5b460d6ee782e060cfa58b2f5", + "3952d466ea2cf17b9c40e99e932983482f97e51e", "support" ], "interfaces/selection-api.idl": [ - "622e064c826b3d25618e0bd6041e4297f9939d78", + "086fc3faf097bbc435994710456a3d46bf1d2806", "support" ], "interfaces/server-timing.idl": [ - "9566d1f7ef4e11d6d6b7a87ee55c0b61d5c3a55e", + "7003d01591b97542a9c3facbc50b76b27b7420ea", "support" ], "interfaces/service-workers.idl": [ @@ -381579,7 +381789,7 @@ "support" ], "interfaces/shape-detection-api.idl": [ - "e348a282e353caac1d0bb93e453e06031b1aca75", + "d249ad3abecd545507843c8b050d89b66f38c8b5", "support" ], "interfaces/speech-api.idl": [ @@ -381587,63 +381797,63 @@ "support" ], "interfaces/storage.idl": [ - "a1ad440d60e04902f494ecaced1fceb8560adc5c", + "794dfe7c762a98b5d2dd8263d73bd0c94dfd2498", "support" ], "interfaces/touch-events.idl": [ - "4e456ecce04a5f8fb19a7be5ae0d9e5bd69a1ec1", + "3bf649e1b261af4c9a2e06e27c1bfd2a0cac8928", "support" ], "interfaces/uievents.idl": [ - "872f7b943e89660d3491bcb176dd1976ce21dc0f", + "b6d31e33c5eaa32c34652783a9f501e5d921cb2a", "support" ], "interfaces/url.idl": [ - "642e1ec46c8e57b579900f7cd10e99a8f80d552e", + "92259f0c3bbdc5f9a5868512d4909d9e08969e7d", "support" ], "interfaces/user-timing.idl": [ - "e91a31115b596326e55da3c9ccd141b2b5e7275a", + "969b280cc33f40cc6947d6c137ba09e39485b661", "support" ], "interfaces/vibration.idl": [ - "2cac333a4dcdb11d56a4457a31941d924911853d", + "a24bf9a4c276d452ef4c61163cf02cd773e990a1", "support" ], "interfaces/wake-lock.idl": [ - "62ca49757b1cc22c4e61f4910b156815ce4ec720", + "4fe48dab92deaa7cd48c1cc4fc8dc7b262ec1855", "support" ], "interfaces/wasm-js-api.idl": [ - "e02ba8be686d6f9aee7953f85ea77d836513d6ae", + "26f5467517a01b37828fa4898613802816fbe54e", "support" ], "interfaces/web-animations.idl": [ - "a68224b17684bd43309bef57e7ad835f5f324a3a", + "6e18ebf1500c5caf090f01b2b01a7857bef4596e", "support" ], "interfaces/web-bluetooth.idl": [ - "069f2becc10faf23e4ae3f4d02d7f1e3b0806106", + "b376978d9ebc3a311cf2b71182597da58515fa5d", "support" ], "interfaces/web-nfc.idl": [ - "52cc53f0e1c48de190ea03a7eee1c77317897a30", + "ba67441bf665019103cda2ae71f1c2f4ae1d3740", "support" ], "interfaces/web-share.idl": [ - "0b36b9df90683103e8bdb3707522c83f9d5789f2", + "92fd392044e86b8460fc9017034fb2b9ee6e1c59", "support" ], "interfaces/webaudio.idl": [ - "1750df8547db73ffe06d1c3e87f34fbcc7c49dcb", + "ff688b05cccfd22d9b7f40be4f3a2e2ab38b44d8", "support" ], "interfaces/webauthn.idl": [ - "330c9c317d2cc4472ff18b1fddb2bfb56c0249a4", + "6f88f216776077778283133b516e32c908aded57", "support" ], "interfaces/webdriver.idl": [ - "b5ff8a9db576c8afbe3746cd41370965c06219ee", + "9fc65be0ee8284b3d643af97409e6dc85fe28c68", "support" ], "interfaces/webgl1.idl": [ @@ -381655,11 +381865,11 @@ "support" ], "interfaces/webmidi.idl": [ - "883c99386d721db291df7919d149c908721b43f6", + "33a2dba36879cc77b5e1038913f2569ffae14596", "support" ], "interfaces/webrtc-stats.idl": [ - "a4a2e5152e3c96a5efa26893ed34856ebe5348c0", + "16df4f11bf053403548b8143ffc2e97e466137f6", "support" ], "interfaces/webrtc.idl": [ @@ -381667,23 +381877,23 @@ "support" ], "interfaces/webusb.idl": [ - "8b6b064f5dc45751da07476ef2c05390a23a2d79", + "20827ca7c0ae4d4f97a5110afc6dce0894116bfd", "support" ], "interfaces/webvtt.idl": [ - "c48af511eb0260e34f3530457257d5eaaf879f57", + "2ad3dc09d73dbbf5b75fb85ce9a2105d93cc31e7", "support" ], "interfaces/webxr.idl": [ - "4e805a507c2ed25e68d49bb05354d51d9eec29e8", + "0323723fa749025dd8ff8ed2f9c0da897c486ce7", "support" ], "interfaces/worklets.idl": [ - "6d501d09f9c3f685d8359ef0d2fa4141391b381c", + "e01a8e3ecb4f7046292426c6fcc8c1048306bc7d", "support" ], "interfaces/xhr.idl": [ - "e26d1a8fff223271a90f94f7de3bc8b1fa83ba15", + "0bf83aeafa74be42d2dd73a7f704450660e3fcb2", "support" ], "intersection-observer/META.yml": [ @@ -406158,12 +406368,8 @@ "6018a8d5ecb29b6c011b20a3afb38669e41f9323", "testharness" ], - "storage/interfaces.https.html": [ - "dc8d3737af0e715198898a8e353e4c60d1ffefa3", - "testharness" - ], - "storage/interfaces.https.worker.js": [ - "c4f6ecec5c22e498ee9375d5a44e07ec41231171", + "storage/idlharness.https.any.js": [ + "1bf3b2f93f54213a26cb6708888bc95004c227e2", "testharness" ], "storage/opaque-origin.https.html": [ @@ -408074,6 +408280,22 @@ "f77800e686cee3007fb7c40574c61b22d65217ef", "reftest" ], + "svg/render/reftests/blending-svg-foreign-object-ref.html": [ + "5eedf1d38a9972649444c2eac74fd9f7ed246fac", + "support" + ], + "svg/render/reftests/blending-svg-foreign-object.html": [ + "9ff6827f13abbfe90cc5c538006c953d0b8e2a61", + "reftest" + ], + "svg/render/reftests/blending-svg-root-ref.html": [ + "a73cc086b99853fd244298b87cbd132c5ef097e8", + "support" + ], + "svg/render/reftests/blending-svg-root.html": [ + "f3fdaed990aa8c06efbe89d6f0d6adc95323e075", + "reftest" + ], "svg/rendering/order/z-index-ref.svg": [ "955f465ece3132da0bdd1e3b832e97db84f22b55", "support" @@ -409426,14 +409648,22 @@ "f0d00a1a71c4075b3094d9e630618f4e577575bf", "support" ], + "url/idlharness.any-expected.txt": [ + "3cd0f106cd5ebb1f945f0c38f2cf8a08cbb054cf", + "support" + ], + "url/idlharness.any.js": [ + "5417417f2968ff0820a2f17ab44bc943712405f1", + "testharness" + ], + "url/idlharness.any.worker-expected.txt": [ + "3cd0f106cd5ebb1f945f0c38f2cf8a08cbb054cf", + "support" + ], "url/interfaces.any-expected.txt": [ "af5ea1a2ebe35c371d47bfa6c08cc311c1900de3", "support" ], - "url/interfaces.any.js": [ - "a83c44354ce5f1e558d5f09fa0e5589582149f0c", - "testharness" - ], "url/interfaces.any.worker-expected.txt": [ "af5ea1a2ebe35c371d47bfa6c08cc311c1900de3", "support" @@ -409639,7 +409869,7 @@ "testharness" ], "user-timing/measure.html": [ - "b021b6706afbf40f59ba1bbc743f4f4e57ea4f66", + "dbafe1fe5e1aa3ee5af273f295fd0d61179eece1", "testharness" ], "user-timing/measure_associated_with_navigation_timing.html": [ @@ -409655,7 +409885,7 @@ "testharness" ], "user-timing/measure_navigation_timing.html": [ - "ff8fb60c227078ab96eddbaee26c6c3b1fa3a9d4", + "dc1b724d6260acb1045d3fda458a66546fe3fe12", "testharness" ], "user-timing/measure_syntax_err.any.js": [ @@ -410631,7 +410861,7 @@ "testharness" ], "web-locks/META.yml": [ - "d54d4f23e137a6c6ac2a40d943fafae5dea66758", + "e85934f2bd5c86ae1666ece1ec67b26664587cdd", "support" ], "web-locks/OWNERS": [ @@ -410639,11 +410869,11 @@ "support" ], "web-locks/README.md": [ - "6179646ac5a3c063bee945688370c05fe9bad10c", + "b5e4ca22ba49d43ef513595c5f5decee3c70aee5", "support" ], "web-locks/acquire.tentative.https.html": [ - "7a87c4594e750a96858ca46b15eb0d0d080ca469", + "55af33f3d812771c1bd781778c61a0e036914c0d", "testharness" ], "web-locks/clientids.tentative.https-expected.txt": [ @@ -410651,23 +410881,23 @@ "support" ], "web-locks/clientids.tentative.https.html": [ - "6d46cce5fc8e3580efa7cafb1b38d9b108ede11f", + "91765477a12718016bc9c56ccee50cff8ca4cdf7", "testharness" ], "web-locks/frames.tentative.https.html": [ - "9b2d5ea7b923b8a68f7f80545fe2bd21714c75e1", + "a23a465d114cecaacadf907e83354f480ad3b533", "testharness" ], "web-locks/held.tentative.https.html": [ - "d5aaf8b45f1fe4108cd5cea1f934519b0135aed2", + "ed76a0ec6c45b46f356b9a6ac7f8b186e73f74e8", "testharness" ], "web-locks/ifAvailable.tentative.https.html": [ - "715ce4839ae64b6f43092b293068876f82065152", + "d61889ff97dbe07d93e5a712df36bb31c15e6777", "testharness" ], "web-locks/interfaces-serviceworker.tentative.https.html": [ - "fcff067f34f06b75775cb9923603ac5a44959898", + "e73515a4cca0c927b128974cd531fefac365c4bc", "testharness" ], "web-locks/interfaces.idl": [ @@ -410679,43 +410909,43 @@ "testharness" ], "web-locks/lock-attributes.tentative.https.html": [ - "4e7221ad6cea5315ad1776213983581272aea2bb", + "3b7963e5a9af29ac03b5bb8d0aa524702090c569", "testharness" ], "web-locks/mode-exclusive.tentative.https.html": [ - "1b7613919309911c5cfb96986fcf6c5bc7f410f9", + "e1ec72ba31aa76d0ed8e5e7e441f85ac0d5dd7c6", "testharness" ], "web-locks/mode-mixed.tentative.https.html": [ - "28718e993597e90f76e66a5962a697473e4a8eb4", + "ffe9609ba92a82cb20ef4f457f0f575573386d6f", "testharness" ], "web-locks/mode-shared.tentative.https.html": [ - "5cc9ffb13c0510b60e40ce365c7a44dea65ce790", + "40266e7b6ec160163df1d57bf2766846774470c0", "testharness" ], "web-locks/non-secure-context.tentative.html": [ - "7b909df4a82c574d2db5612b437b10678003530c", + "b678e33ad7d81dc7188cd815fecf841d5a838cbe", "testharness" ], "web-locks/opaque-origin.tentative.https.html": [ - "ad83a2f90482c3dcdd4f42931f3c41b4e6eecbf6", + "637aba11fac0f0adf4c5122ee1700532c7ef98d1", "testharness" ], "web-locks/query-empty.tentative.https.html": [ - "e572e58e3ebbbcb05e5a81946a209b44c756f8c4", + "780a2a734a6cd8e0c899d5d5e530135a92bfdbd6", "testharness" ], "web-locks/query-order.tentative.https.html": [ - "95197e4191b4e10dd3bc59acb6844f2cd2498110", + "004687dd9c2c5f52064848792f01d1fdadad0282", "testharness" ], "web-locks/query.tentative.https.html": [ - "19810829e5c1b467b419a891e00ff95c53c3616d", + "7388675a00c85fcf7c76b04e5a4be59c0cb0942a", "testharness" ], "web-locks/resource-names.tentative.https.html": [ - "93ce02c4d591d9dc8d094e81ca1ccb3833377e4b", + "aebf759b8fa1e361d62a235fa8847eaaa5890b29", "testharness" ], "web-locks/resources/helpers.js": [ @@ -410743,19 +410973,19 @@ "support" ], "web-locks/secure-context.tentative.https.html": [ - "d9e65a214df00c4c88b08dbee760570028944027", + "7adeeb443545b34b412e1607126461769b65d221", "testharness" ], "web-locks/signal.tentative.https.html": [ - "4d293a99bee9aed839a7f4a79ede34c1a4f9920e", + "41af19815d32f75a33d8b1d3dd07de7c024c3b9a", "testharness" ], "web-locks/steal.tentative.https.html": [ - "ce785398bdd4cf6aaa2b7142edb134e59bc73aa6", + "f9fd42d01d865d23d9e58ebf18bc2a9cd539bd71", "testharness" ], "web-locks/workers.tentative.https.html": [ - "4ec54027defe8da04f8e2083f8e97582b6127571", + "eb2c9482ff8c78bcc351f6897c852f786894a9cd", "testharness" ], "web-nfc/META.yml": [ @@ -414643,7 +414873,7 @@ "support" ], "webusb/resources/usb-helpers.js": [ - "e5e011aed2f4a9e4400f414d9514b50a40b6db00", + "504038fd39b298b541e5262373eaf9fb3cacfb1e", "support" ], "webusb/usb-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [ @@ -419810,10 +420040,18 @@ "1cb82348a9d6f3be34da762267cce7389f715f7c", "testharness" ], - "xhr/interfaces.html": [ - "eb4babf67805d1d65bcbc44c6dcc1cb3ca793695", + "xhr/idlharness.any.js": [ + "bc9d18a0922e3c173d35022194c0409d95ae953d", "testharness" ], + "xhr/idlharness.any.sharedworker-expected.txt": [ + "a14ecbacf4a567da4aa2c3e806a85f569db9fad6", + "support" + ], + "xhr/idlharness.any.worker-expected.txt": [ + "a14ecbacf4a567da4aa2c3e806a85f569db9fad6", + "support" + ], "xhr/loadstart-and-state.html": [ "6804845b3ba0e52ee407fc7e8036ce905283751c", "testharness"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/background-fetch/resources/utils.js b/third_party/WebKit/LayoutTests/external/wpt/background-fetch/resources/utils.js index 8087f95..dbe0419 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/background-fetch/resources/utils.js +++ b/third_party/WebKit/LayoutTests/external/wpt/background-fetch/resources/utils.js
@@ -14,14 +14,14 @@ }); } -// Registers the instrumentation Service Worker located at "resources/sw.js" +// Registers the |name| instrumentation Service Worker located at "service_workers/" // with a scope unique to the test page that's running, and waits for it to be // activated. The Service Worker will be unregistered automatically. // // Depends on /service-workers/service-worker/resources/test-helpers.sub.js -async function registerAndActivateServiceWorker(test) { - const script = 'resources/sw.js'; - const scope = 'resources/scope' + location.pathname; +async function registerAndActivateServiceWorker(test, name) { + const script = `service_workers/${name}`; + const scope = 'service_workers/scope' + location.pathname; let serviceWorkerRegistration = await service_worker_unregister_and_register(test, script, scope); @@ -35,10 +35,13 @@ // Creates a Promise test for |func| given the |description|. The |func| will be // executed with the `backgroundFetch` object of an activated Service Worker // Registration. -function backgroundFetchTest(func, description) { +// |workerName| is the name of the service worker file in the service_workers +// directory to register. +function backgroundFetchTest(func, description, workerName = 'sw.js') { promise_test(async t => { - const serviceWorkerRegistration = await registerAndActivateServiceWorker(t); - serviceWorkerRegistration.active.postMessage(null /* unused */); + const serviceWorkerRegistration = + await registerAndActivateServiceWorker(t, workerName); + serviceWorkerRegistration.active.postMessage(null); assert_equals(await getMessageFromServiceWorker(), 'ready');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/background-fetch/service_workers/sw-helpers.js b/third_party/WebKit/LayoutTests/external/wpt/background-fetch/service_workers/sw-helpers.js new file mode 100644 index 0000000..ff51f22 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/background-fetch/service_workers/sw-helpers.js
@@ -0,0 +1,12 @@ +// The source to post setup and completion results to. +let source = null; + +function sendMessageToDocument(msg) { + source.postMessage(msg); +} + +// Notify the document that the SW is registered and ready. +self.addEventListener('message', event => { + source = event.source; + sendMessageToDocument('ready'); +});
diff --git a/third_party/WebKit/LayoutTests/external/wpt/background-fetch/service_workers/sw-update-ui.js b/third_party/WebKit/LayoutTests/external/wpt/background-fetch/service_workers/sw-update-ui.js new file mode 100644 index 0000000..ae0ed09 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/background-fetch/service_workers/sw-update-ui.js
@@ -0,0 +1,22 @@ +importScripts('sw-helpers.js'); + +async function updateUI(event) { + let updateParams = []; + switch (event.id) { + case 'update-once': + updateParams = [{title: 'Title1'}]; + break; + case 'update-twice': + updateParams = [{title: 'Title1'}, {title: 'Title2'}]; + break; + } + + return Promise.all(updateParams.map(param => event.updateUI(param))) + .then(() => 'update success') + .catch(e => e.message); +} + +self.addEventListener('backgroundfetched', event => { + event.waitUntil(updateUI(event) + .then(update => sendMessageToDocument({ type: event.type, update }))) +});
diff --git a/third_party/WebKit/LayoutTests/external/wpt/background-fetch/resources/sw.js b/third_party/WebKit/LayoutTests/external/wpt/background-fetch/service_workers/sw.js similarity index 68% rename from third_party/WebKit/LayoutTests/external/wpt/background-fetch/resources/sw.js rename to third_party/WebKit/LayoutTests/external/wpt/background-fetch/service_workers/sw.js index 8ac3f4c..34ea5d4f 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/background-fetch/resources/sw.js +++ b/third_party/WebKit/LayoutTests/external/wpt/background-fetch/service_workers/sw.js
@@ -1,4 +1,4 @@ -let source = null; +importScripts('sw-helpers.js'); async function getFetchResult(settledFetch) { if (!settledFetch.response) @@ -11,14 +11,9 @@ }; } -self.addEventListener('message', event => { - source = event.source; - source.postMessage('ready'); -}); - self.addEventListener('backgroundfetched', event => { event.waitUntil( event.fetches.values() .then(fetches => Promise.all(fetches.map(fetch => getFetchResult(fetch)))) - .then(results => source.postMessage({ type: event.type, results }))); + .then(results => sendMessageToDocument({ type: event.type, results }))); });
diff --git a/third_party/WebKit/LayoutTests/external/wpt/background-fetch/update-ui.https.window.js b/third_party/WebKit/LayoutTests/external/wpt/background-fetch/update-ui.https.window.js new file mode 100644 index 0000000..d561267 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/background-fetch/update-ui.https.window.js
@@ -0,0 +1,32 @@ +// META: script=/service-workers/service-worker/resources/test-helpers.sub.js +// META: script=resources/utils.js +'use strict'; + +// Covers functionality provided by BackgroundFetchUpdateEvent.updateUI(). +// +// https://wicg.github.io/background-fetch/#backgroundfetchupdateuievent + +const swName = 'sw-update-ui.js'; + +backgroundFetchTest(async (test, backgroundFetch) => { + const registrationId = 'update-once'; + const registration = + await backgroundFetch.fetch(registrationId, 'resources/feature-name.txt'); + assert_equals(registration.id, registrationId); + + const message = await getMessageFromServiceWorker(); + assert_equals(message.update, 'update success'); + +}, 'Background Fetch updateUI resolves', swName); + + +backgroundFetchTest(async (test, backgroundFetch) => { + const registrationId = 'update-twice'; + const registration = + await backgroundFetch.fetch(registrationId, 'resources/feature-name.txt'); + assert_equals(registration.id, registrationId); + + const message = await getMessageFromServiceWorker(); + assert_equals(message.update, 'updateUI may only be called once.'); + +}, 'Background Fetch updateUI called twice fails', swName);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/budget-api/idlharness.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/budget-api/idlharness.https.any.js new file mode 100644 index 0000000..335c7a60a --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/budget-api/idlharness.https.any.js
@@ -0,0 +1,24 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +'use strict'; + +// See https://wicg.github.io/budget-api/ + +idl_test( + ['budget-api'], + ['html'], + async idl_array => { + idl_array.add_objects({ BudgetService: ['navigator.budget'] }); + if (self.Window) { + idl_array.add_objects({ Navigator: ['navigator'] }); + } else { + idl_array.add_objects({ WorkerNavigator: ['navigator'] }); + } + const budgetStates = await navigator.budget.getBudget(); + if (budgetStates.length) { + self.budgetState = budgetStates[0]; + idl_array.add_objects({ BudgetState: ['budgetState'] }); + } + } +);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/budget-api/interfaces.any.js b/third_party/WebKit/LayoutTests/external/wpt/budget-api/interfaces.any.js deleted file mode 100644 index 5a87b3f8..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/budget-api/interfaces.any.js +++ /dev/null
@@ -1,19 +0,0 @@ -// META: script=/resources/WebIDLParser.js -// META: script=/resources/idlharness.js - -'use strict'; - -// See https://wicg.github.io/budget-api/ - -promise_test(async () => { - const html = await fetch('/interfaces/html.idl').then(r => r.text()); - const workers = await fetch('/interfaces/dedicated-workers.idl').then(r => r.text()); - const idl = await fetch('/interfaces/budget-api.idl').then(r => r.text()); - - const idlArray = new IdlArray(); - idlArray.add_idls(idl); - idlArray.add_dependency_idls(html); - idlArray.add_dependency_idls(workers); - idlArray.test(); - done(); -}, 'budget-api interfaces.');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/compat/idlharness.window-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/compat/idlharness.window-expected.txt new file mode 100644 index 0000000..0104eb3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/compat/idlharness.window-expected.txt
@@ -0,0 +1,13 @@ +This is a testharness.js-based test. +PASS idl_test setup +PASS Partial interface Window: original interface defined +PASS Partial interface HTMLBodyElement: original interface defined +FAIL HTMLBodyElement interface: attribute onorientationchange assert_true: The prototype object must have a property "onorientationchange" expected true got false +FAIL HTMLBodyElement interface: document.body must inherit property "onorientationchange" with the proper type assert_inherits: property "onorientationchange" not found in prototype chain +FAIL Window interface: attribute orientation assert_own_property: The global object must have a property "orientation" expected property "orientation" missing +FAIL Window interface: attribute onorientationchange assert_own_property: The global object must have a property "onorientationchange" expected property "onorientationchange" missing +FAIL Window interface: window must inherit property "orientation" with the proper type assert_own_property: expected property "orientation" missing +FAIL Window interface: window must inherit property "onorientationchange" with the proper type assert_own_property: expected property "onorientationchange" missing +PASS WorkerGlobalScope interface: existence and properties of interface object +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/compat/idlharness.window.js b/third_party/WebKit/LayoutTests/external/wpt/compat/idlharness.window.js new file mode 100644 index 0000000..91793af7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/compat/idlharness.window.js
@@ -0,0 +1,17 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +'use strict'; + +// https://compat.spec.whatwg.org/ + +idl_test( + ['compat'], + ['html', 'dom'], + idl_array => { + idl_array.add_objects({ + Window: ['window'], + HTMLBodyElement: ['document.body'], + }); + } +);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/compat/interfaces.any.js b/third_party/WebKit/LayoutTests/external/wpt/compat/interfaces.any.js deleted file mode 100644 index 1b87c90..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/compat/interfaces.any.js +++ /dev/null
@@ -1,17 +0,0 @@ -// META: script=/resources/WebIDLParser.js -// META: script=/resources/idlharness.js - -'use strict'; - -// https://compat.spec.whatwg.org/ - -promise_test(async () => { - const idl = await fetch('/interfaces/compat.idl').then(r => r.text()); - const idlArray = new IdlArray(); - idlArray.add_untested_idls('interface Window {};'); - idlArray.add_untested_idls('interface EventTarget{};'); - idlArray.add_untested_idls('interface HTMLBodyElement{};'); - idlArray.add_idls(idl); - idlArray.test(); - done(); -}, 'compat interfaces.');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/console/idlharness.any-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/console/idlharness.any-expected.txt index b38fd27..1c02b8e70 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/console/idlharness.any-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/console/idlharness.any-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -PASS console interfaces +PASS idl_test setup FAIL console namespace: operation assert(boolean, any...) assert_equals: operation has wrong .length expected 0 but got 1 FAIL console namespace: operation clear() assert_equals: operation has wrong .length expected 0 but got 1 FAIL console namespace: operation debug(any...) assert_equals: operation has wrong .length expected 0 but got 1
diff --git a/third_party/WebKit/LayoutTests/external/wpt/console/idlharness.any.js b/third_party/WebKit/LayoutTests/external/wpt/console/idlharness.any.js index 114564f..1e7ba76e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/console/idlharness.any.js +++ b/third_party/WebKit/LayoutTests/external/wpt/console/idlharness.any.js
@@ -3,12 +3,7 @@ // https://console.spec.whatwg.org/ -promise_test(async () => { - const srcs = ['console']; - const [idl] = await Promise.all( - srcs.map(i => fetch(`/interfaces/${i}.idl`).then(r => r.text()))); - - const idl_array = new IdlArray(); - idl_array.add_idls(idl); - idl_array.test(); -}, 'console interfaces'); +idl_test( + ['console'], + [] // no deps +);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/console/idlharness.any.worker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/console/idlharness.any.worker-expected.txt index b38fd27..1c02b8e70 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/console/idlharness.any.worker-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/console/idlharness.any.worker-expected.txt
@@ -1,5 +1,5 @@ This is a testharness.js-based test. -PASS console interfaces +PASS idl_test setup FAIL console namespace: operation assert(boolean, any...) assert_equals: operation has wrong .length expected 0 but got 1 FAIL console namespace: operation clear() assert_equals: operation has wrong .length expected 0 but got 1 FAIL console namespace: operation debug(any...) assert_equals: operation has wrong .length expected 0 but got 1
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/CSS2/positioning/abspos-inline-007-ref.xht b/third_party/WebKit/LayoutTests/external/wpt/css/CSS2/positioning/abspos-inline-007-ref.xht new file mode 100644 index 0000000..7f80605 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/CSS2/positioning/abspos-inline-007-ref.xht
@@ -0,0 +1,70 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>reference for abspos-inline-007</title> + <style type="text/css"> + .block-container { + font: 20px Ahem; + height: 20px; + position: relative; + top: -1px; + } + .inline-container { + position: relative; + border: 1px solid black; + display: inline-block; + } + .parent-block { + display: inline-block; + width: 30px; + height: 10px; + } + .abspos { + position: absolute; + width: 10px; + height: 10px; + background-color: green; + display: inline-block; + vertical-align: baseline; + } + .br { + right: 0; + bottom: 0; + } + .tl { + top: 0; + left: 0; + } + .filler { + display: inline-block; + width: 30px; + height: 10px; + } + + </style> + </head> + <body> + <div class="block-container"> + x + <div class="inline-container"> + tl + <div class="abspos tl"></div> + <div class="parent-block"></div> + <div class="filler"></div> + </div>x + <div class="inline-container"> + br + <div class="abspos br"></div> + <div class="parent-block"></div> + <div class="filler"></div> + </div>x + <div class="inline-container"> + static + <div class="abspos" style="position:static"></div><div class="parent-block"></div> + <div class="filler" style="width: 20px;"></div> + </div> + </div> +<p>Tests abspos positioning of an Element that 1) has an inline containing +block, and 2) is not a child of the inline containing block, but a descendant.</p> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/CSS2/positioning/abspos-inline-007.xht b/third_party/WebKit/LayoutTests/external/wpt/css/CSS2/positioning/abspos-inline-007.xht new file mode 100644 index 0000000..7e5880b --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/CSS2/positioning/abspos-inline-007.xht
@@ -0,0 +1,74 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>CSS Test: Absolutely positioned descendants in inlines</title> + <link rel="author" title="Aleks Totic" href="mailto:atotic@chromium.org"/> + <link rel="help" href="http://www.w3.org/TR/CSS21/visuren.html#comp-abspos" /> + <link rel="match" href="abspos-inline-007-ref.xht" /> + <style type="text/css"> + .block-container { + position: relative; + font: 20px Ahem; + } + .inline-container { + position: relative; + border: 1px solid black; + } + .parent-block { + display: inline-block; + width: 30px; + height: 10px; + } + .abspos { + position: absolute; + width: 10px; + height: 10px; + background-color: green; + } + .br { + right: 0; + bottom: 0; + } + .tl { + top: 0; + left: 0; + } + .filler { + display: inline-block; + width: 30px; + height: 10px; + } + + </style> + </head> + <body> + <div class="block-container"> + x + <span class="inline-container"> + tl + <div class="parent-block"> + <div class="abspos tl"></div> + </div> + <div class="filler"></div> + </span> + x + <span class="inline-container"> + br + <div class="parent-block"> + <div class="abspos br"></div> + </div> + <div class="filler"></div> + </span> + x + <span class="inline-container"> + static + <div class="parent-block"> + <div class="abspos"></div> + </div> + <div class="filler"></div> + </span> + </div> +<p>Tests abspos positioning of an Element that 1) has an inline containing +block, and 2) is not a child of the inline containing block, but a descendant.</p> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-002.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-002.html index 490fd6a..bfc6401 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-002.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-002.html
@@ -4,7 +4,7 @@ <title>CSS-contain test: size containment on ruby-base</title> <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net"> <meta name=flags content=""> - <meta name=assert content="size containment does not to apply ruby-base, which is an internatl ruby element"> + <meta name=assert content="size containment does not to apply ruby-base, which is an internal ruby element"> <link rel="match" href="../reference/pass_if_pass_below.html"> <link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-size"> <link rel=help href="https://drafts.csswg.org/css-display-3/#internal-ruby-element">
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-003.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-003.html index e767e2148..1bce52c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-003.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-003.html
@@ -4,7 +4,7 @@ <title>CSS-contain test: size containment on ruby-base-container</title> <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net"> <meta name=flags content=""> - <meta name=assert content="size containment does not to apply ruby-base-container, which is an internatl ruby element"> + <meta name=assert content="size containment does not to apply ruby-base-container, which is an internal ruby element"> <link rel="match" href="../reference/pass_if_pass_below.html"> <link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-size"> <link rel=help href="https://drafts.csswg.org/css-display-3/#internal-ruby-element">
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-004.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-004.html index b0433106..58277ce1 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-004.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-004.html
@@ -4,7 +4,7 @@ <title>CSS-contain test: size containment on ruby-text-container</title> <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net"> <meta name=flags content=""> - <meta name=assert content="size containment does not to apply ruby-text-container, which is an internatl ruby element"> + <meta name=assert content="size containment does not to apply ruby-text-container, which is an internal ruby element"> <link rel="match" href="reference/contain-size-004-ref.html"> <link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-size"> <link rel=help href="https://drafts.csswg.org/css-display-3/#internal-ruby-element">
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-005.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-005.html index 9e35a85a..139f8a9 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-005.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-contain/contain-size-005.html
@@ -4,7 +4,7 @@ <title>CSS-contain test: size containment on ruby-text</title> <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net"> <meta name=flags content=""> - <meta name=assert content="size containment does not to apply ruby-text, which is an internatl ruby element"> + <meta name=assert content="size containment does not to apply ruby-text, which is an internal ruby element"> <link rel="match" href="reference/contain-size-005-ref.html"> <link rel=help href="https://drafts.csswg.org/css-contain-1/#containment-size"> <link rel=help href="https://drafts.csswg.org/css-display-3/#internal-ruby-element">
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-overflow/overflow-shorthand-001-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/css/css-overflow/overflow-shorthand-001-expected.txt new file mode 100644 index 0000000..3eb5d7c --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-overflow/overflow-shorthand-001-expected.txt
@@ -0,0 +1,19 @@ +This is a testharness.js-based test. +PASS overflow: auto auto works +FAIL overflow: hidden auto works assert_equals: expected "hidden auto" but got "auto hidden" +FAIL overflow: scroll auto works assert_equals: expected "scroll auto" but got "auto scroll" +FAIL overflow: visible auto works assert_equals: expected "visible auto" but got "auto visible" +FAIL overflow: auto hidden works assert_equals: expected "auto hidden" but got "hidden auto" +PASS overflow: hidden hidden works +FAIL overflow: scroll hidden works assert_equals: expected "scroll hidden" but got "hidden scroll" +FAIL overflow: visible hidden works assert_equals: expected "visible hidden" but got "hidden visible" +FAIL overflow: auto scroll works assert_equals: expected "auto scroll" but got "scroll auto" +FAIL overflow: hidden scroll works assert_equals: expected "hidden scroll" but got "scroll hidden" +PASS overflow: scroll scroll works +FAIL overflow: visible scroll works assert_equals: expected "visible scroll" but got "scroll visible" +FAIL overflow: auto visible works assert_equals: expected "auto visible" but got "visible auto" +FAIL overflow: hidden visible works assert_equals: expected "hidden visible" but got "visible hidden" +FAIL overflow: scroll visible works assert_equals: expected "scroll visible" but got "visible scroll" +PASS overflow: visible visible works +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-overflow/overflow-shorthand-001.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-overflow/overflow-shorthand-001.html index f425636..d922e90 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-overflow/overflow-shorthand-001.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-overflow/overflow-shorthand-001.html
@@ -8,15 +8,15 @@ <div id="test-div"></div> <script> let div = document.getElementById("test-div"); -function testOverflowShorthand(x, y) { +function testOverflowShorthand(y, x) { test(function() { div.style.overflowX = x; div.style.overflowY = y; let expectedX = getComputedStyle(div).overflowX; let expectedY = getComputedStyle(div).overflowY; - let expectedComputedSerialization = expectedX == expectedY ? expectedX : `${expectedX} ${expectedY}`; - let expectedSpecifiedSerialization = x == y ? x : `${x} ${y}`; + let expectedComputedSerialization = expectedX == expectedY ? expectedX : `${expectedY} ${expectedX}`; + let expectedSpecifiedSerialization = x == y ? x : `${y} ${x}`; assert_equals(div.style.overflow, expectedSpecifiedSerialization); assert_equals(getComputedStyle(div).overflow, expectedComputedSerialization); @@ -25,18 +25,18 @@ div.style.overflowY = ""; assert_equals(div.style.overflow, ""); - div.style.overflow = `${x} ${y}`; + div.style.overflow = `${y} ${x}`; assert_equals(div.style.overflow, expectedSpecifiedSerialization); assert_equals(div.style.overflowX, x); assert_equals(div.style.overflowY, y); assert_equals(getComputedStyle(div).overflow, expectedComputedSerialization); assert_equals(getComputedStyle(div).overflowX, expectedX); assert_equals(getComputedStyle(div).overflowY, expectedY); - }, `overflow: ${x} ${y} works`); + }, `overflow: ${y} ${x} works`); } let OVERFLOW_VALUES = [ "auto", "hidden", "scroll", "visible" ]; for (let x of OVERFLOW_VALUES) for (let y of OVERFLOW_VALUES) - testOverflowShorthand(x, y); + testOverflowShorthand(y, x); </script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-writing-modes/relpos-inline-overflowing-block-vrl.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-writing-modes/relpos-inline-overflowing-block-vrl.html new file mode 100644 index 0000000..ea075c3 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-writing-modes/relpos-inline-overflowing-block-vrl.html
@@ -0,0 +1,12 @@ +<!DOCTYPE html> +<title>vertical-rl, relatively positioned inline in block that overflows smaller parent</title> +<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#vertical-layout" title="7.1. Principles of Layout in Vertical Writing Modes"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht" /> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="position:relative; writing-mode:vertical-rl; width:100px; height:100px; background:green;"> + <div style="position:absolute; right:0; top:0; width:0.5em; height:1em; background:red;"></div> + <div style="width:200px;"> + <span style="position:relative; color:green; background:green;">XXX</span> + </div> +</div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/cssom/overflow-serialization-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/css/cssom/overflow-serialization-expected.txt new file mode 100644 index 0000000..a66d1900d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/cssom/overflow-serialization-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL CSSOM - Overflow shorthand serialization assert_equals: Overflow-x/y longhands with different keywords should serialize correctly. expected "overflow: hidden scroll;" but got "overflow: scroll hidden;" +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/cssom/overflow-serialization.html b/third_party/WebKit/LayoutTests/external/wpt/css/cssom/overflow-serialization.html index 136b8ab..2911c8d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/cssom/overflow-serialization.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/cssom/overflow-serialization.html
@@ -22,7 +22,7 @@ assert_equals(styleSheet.cssRules[1].style.cssText, "overflow: hidden;", "Single value overflow with non-CSS-wide keyword should serialize correctly."); assert_equals(styleSheet.cssRules[2].style.cssText, "overflow: initial;", "Overflow-x/y longhands with same CSS-wide keyword should serialize correctly."); assert_equals(styleSheet.cssRules[3].style.cssText, "overflow: scroll;", "Overflow-x/y longhands with same non-CSS-wide keyword should serialize correctly."); - assert_equals(styleSheet.cssRules[4].style.cssText, "overflow: scroll hidden;", "Overflow-x/y longhands with different keywords should serialize correctly."); + assert_equals(styleSheet.cssRules[4].style.cssText, "overflow: hidden scroll;", "Overflow-x/y longhands with different keywords should serialize correctly."); var div = document.createElement('div'); div.style.overflow = "inherit"; @@ -42,7 +42,7 @@ div.style.overflowX = "scroll"; div.style.overflowY = "hidden"; - assert_equals(div.style.overflow, "scroll hidden", "Overflow-x/y longhands with different keywords should serialize correctly."); + assert_equals(div.style.overflow, "hidden scroll", "Overflow-x/y longhands with different keywords should serialize correctly."); }); </script> </head>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/cssom/shorthand-values-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/css/cssom/shorthand-values-expected.txt index a25fe09..9f10c8b8 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/cssom/shorthand-values-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/css/cssom/shorthand-values-expected.txt
@@ -10,7 +10,7 @@ FAIL The serialization of border: 1px; border-top-color: red; should be canonical. assert_equals: expected "border-width: 1px; border-top-color: red;" but got "border-width: 1px; border-style: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: initial; border-image: initial; border-top-color: red;" PASS The serialization of border: solid; border-style: dotted should be canonical. PASS The serialization of border-width: 1px; should be canonical. -PASS The serialization of overflow-x: scroll; overflow-y: hidden; should be canonical. +FAIL The serialization of overflow-x: scroll; overflow-y: hidden; should be canonical. assert_equals: expected "overflow: hidden scroll;" but got "overflow: scroll hidden;" PASS The serialization of overflow-x: scroll; overflow-y: scroll; should be canonical. PASS The serialization of outline-width: 2px; outline-style: dotted; outline-color: blue; should be canonical. PASS The serialization of margin-top: 1px; margin-right: 2px; margin-bottom: 3px; margin-left: 4px; should be canonical.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/cssom/shorthand-values.html b/third_party/WebKit/LayoutTests/external/wpt/css/cssom/shorthand-values.html index d8d7f53..1e4d93a 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/css/cssom/shorthand-values.html +++ b/third_party/WebKit/LayoutTests/external/wpt/css/cssom/shorthand-values.html
@@ -32,7 +32,7 @@ 'border: 1px; border-top-color: red;': 'border-width: 1px; border-top-color: red;', 'border: solid; border-style: dotted': 'border: dotted;', 'border-width: 1px;': 'border-width: 1px;', - 'overflow-x: scroll; overflow-y: hidden;': 'overflow: scroll hidden;', + 'overflow-x: scroll; overflow-y: hidden;': 'overflow: hidden scroll;', 'overflow-x: scroll; overflow-y: scroll;': 'overflow: scroll;', 'outline-width: 2px; outline-style: dotted; outline-color: blue;': 'outline: blue dotted 2px;', 'margin-top: 1px; margin-right: 2px; margin-bottom: 3px; margin-left: 4px;': 'margin: 1px 2px 3px 4px;',
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/DOMImplementation-createDocument-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/DOMImplementation-createDocument-expected.txt new file mode 100644 index 0000000..3d3d959 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/DOMImplementation-createDocument-expected.txt
@@ -0,0 +1,406 @@ +This is a testharness.js-based test. +Found 402 tests; 393 PASS, 9 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS DOMImplementation.createDocument(namespace, qualifiedName, doctype) +PASS createDocument test: null,null,null,null +PASS createDocument test: metadata for null,null,null +PASS createDocument test: characterSet aliases for null,null,null +PASS createDocument test: null,undefined,null,null +PASS createDocument test: metadata for null,undefined,null +PASS createDocument test: characterSet aliases for null,undefined,null +PASS createDocument test: null,"foo",null,null +PASS createDocument test: metadata for null,"foo",null +PASS createDocument test: characterSet aliases for null,"foo",null +PASS createDocument test: null,"1foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"f1oo",null,null +PASS createDocument test: metadata for null,"f1oo",null +PASS createDocument test: characterSet aliases for null,"f1oo",null +PASS createDocument test: null,"foo1",null,null +PASS createDocument test: metadata for null,"foo1",null +PASS createDocument test: characterSet aliases for null,"foo1",null +FAIL createDocument test: null,"ெfoo",null,null Failed to execute 'createDocument' on 'DOMImplementation': The qualified name provided ('ெfoo') contains the invalid name-start character 'ெ'. +FAIL createDocument test: metadata for null,"ெfoo",null Failed to execute 'createDocument' on 'DOMImplementation': The qualified name provided ('ெfoo') contains the invalid name-start character 'ெ'. +FAIL createDocument test: characterSet aliases for null,"ெfoo",null Failed to execute 'createDocument' on 'DOMImplementation': The qualified name provided ('ெfoo') contains the invalid name-start character 'ெ'. +PASS createDocument test: null,";foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"}foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"f}oo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"foo}",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"\ufffffoo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"f\uffffoo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"foo\uffff",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"<foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"foo>",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"<foo>",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"f<oo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"^^",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"fo o",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"-foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,".foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,":foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"f:oo",null,"NAMESPACE_ERR" +PASS createDocument test: null,"foo:",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"f:o:o",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,":",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: null,"xml",null,null +PASS createDocument test: metadata for null,"xml",null +PASS createDocument test: characterSet aliases for null,"xml",null +PASS createDocument test: null,"xmlns",null,"NAMESPACE_ERR" +PASS createDocument test: null,"xmlfoo",null,null +PASS createDocument test: metadata for null,"xmlfoo",null +PASS createDocument test: characterSet aliases for null,"xmlfoo",null +PASS createDocument test: null,"xml:foo",null,"NAMESPACE_ERR" +PASS createDocument test: null,"xmlns:foo",null,"NAMESPACE_ERR" +PASS createDocument test: null,"xmlfoo:bar",null,"NAMESPACE_ERR" +PASS createDocument test: null,"null:xml",null,"NAMESPACE_ERR" +PASS createDocument test: "",null,null,null +PASS createDocument test: metadata for "",null,null +PASS createDocument test: characterSet aliases for "",null,null +PASS createDocument test: "",":foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "","f:oo",null,"NAMESPACE_ERR" +PASS createDocument test: "","foo:",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: undefined,null,null,null +PASS createDocument test: metadata for undefined,null,null +PASS createDocument test: characterSet aliases for undefined,null,null +PASS createDocument test: undefined,undefined,null,null +PASS createDocument test: metadata for undefined,undefined,null +PASS createDocument test: characterSet aliases for undefined,undefined,null +PASS createDocument test: undefined,"foo",null,null +PASS createDocument test: metadata for undefined,"foo",null +PASS createDocument test: characterSet aliases for undefined,"foo",null +PASS createDocument test: undefined,"1foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: undefined,"f1oo",null,null +PASS createDocument test: metadata for undefined,"f1oo",null +PASS createDocument test: characterSet aliases for undefined,"f1oo",null +PASS createDocument test: undefined,"foo1",null,null +PASS createDocument test: metadata for undefined,"foo1",null +PASS createDocument test: characterSet aliases for undefined,"foo1",null +PASS createDocument test: undefined,":foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: undefined,"f:oo",null,"NAMESPACE_ERR" +PASS createDocument test: undefined,"foo:",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: undefined,"f::oo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: undefined,"xml",null,null +PASS createDocument test: metadata for undefined,"xml",null +PASS createDocument test: characterSet aliases for undefined,"xml",null +PASS createDocument test: undefined,"xmlns",null,"NAMESPACE_ERR" +PASS createDocument test: undefined,"xmlfoo",null,null +PASS createDocument test: metadata for undefined,"xmlfoo",null +PASS createDocument test: characterSet aliases for undefined,"xmlfoo",null +PASS createDocument test: undefined,"xml:foo",null,"NAMESPACE_ERR" +PASS createDocument test: undefined,"xmlns:foo",null,"NAMESPACE_ERR" +PASS createDocument test: undefined,"xmlfoo:bar",null,"NAMESPACE_ERR" +PASS createDocument test: "http://example.com/","foo",null,null +PASS createDocument test: metadata for "http://example.com/","foo",null +PASS createDocument test: characterSet aliases for "http://example.com/","foo",null +PASS createDocument test: "http://example.com/","1foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","<foo>",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","fo<o",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","-foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/",".foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","f1oo",null,null +PASS createDocument test: metadata for "http://example.com/","f1oo",null +PASS createDocument test: characterSet aliases for "http://example.com/","f1oo",null +PASS createDocument test: "http://example.com/","foo1",null,null +PASS createDocument test: metadata for "http://example.com/","foo1",null +PASS createDocument test: characterSet aliases for "http://example.com/","foo1",null +PASS createDocument test: "http://example.com/",":foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","f:oo",null,null +PASS createDocument test: metadata for "http://example.com/","f:oo",null +PASS createDocument test: characterSet aliases for "http://example.com/","f:oo",null +PASS createDocument test: "http://example.com/","f:o:o",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","foo:",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","f::oo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","a:0",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","0:a",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","a:_",null,null +PASS createDocument test: metadata for "http://example.com/","a:_",null +PASS createDocument test: characterSet aliases for "http://example.com/","a:_",null +FAIL createDocument test: "http://example.com/","a:ெ",null,null Failed to execute 'createDocument' on 'DOMImplementation': The qualified name provided ('a:ெ') contains the invalid name-start character 'ெ'. +FAIL createDocument test: metadata for "http://example.com/","a:ெ",null Failed to execute 'createDocument' on 'DOMImplementation': The qualified name provided ('a:ெ') contains the invalid name-start character 'ெ'. +FAIL createDocument test: characterSet aliases for "http://example.com/","a:ெ",null Failed to execute 'createDocument' on 'DOMImplementation': The qualified name provided ('a:ெ') contains the invalid name-start character 'ெ'. +PASS createDocument test: "http://example.com/","a:;",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","a:̀",null,"INVALID_CHARACTER_ERR" +FAIL createDocument test: "http://example.com/","ெ:a",null,null Failed to execute 'createDocument' on 'DOMImplementation': The qualified name provided ('ெ:a') contains the invalid name-start character 'ெ'. +FAIL createDocument test: metadata for "http://example.com/","ெ:a",null Failed to execute 'createDocument' on 'DOMImplementation': The qualified name provided ('ெ:a') contains the invalid name-start character 'ெ'. +FAIL createDocument test: characterSet aliases for "http://example.com/","ெ:a",null Failed to execute 'createDocument' on 'DOMImplementation': The qualified name provided ('ெ:a') contains the invalid name-start character 'ெ'. +PASS createDocument test: "http://example.com/","̀:a",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/",";:a",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","a:aெ",null,null +PASS createDocument test: metadata for "http://example.com/","a:aெ",null +PASS createDocument test: characterSet aliases for "http://example.com/","a:aெ",null +PASS createDocument test: "http://example.com/","aெ:a",null,null +PASS createDocument test: metadata for "http://example.com/","aெ:a",null +PASS createDocument test: characterSet aliases for "http://example.com/","aெ:a",null +PASS createDocument test: "http://example.com/","xml:test",null,"NAMESPACE_ERR" +PASS createDocument test: "http://example.com/","xmlns:test",null,"NAMESPACE_ERR" +PASS createDocument test: "http://example.com/","test:xmlns",null,null +PASS createDocument test: metadata for "http://example.com/","test:xmlns",null +PASS createDocument test: characterSet aliases for "http://example.com/","test:xmlns",null +PASS createDocument test: "http://example.com/","xmlns",null,"NAMESPACE_ERR" +PASS createDocument test: "http://example.com/","_:_",null,null +PASS createDocument test: metadata for "http://example.com/","_:_",null +PASS createDocument test: characterSet aliases for "http://example.com/","_:_",null +PASS createDocument test: "http://example.com/","_:h0",null,null +PASS createDocument test: metadata for "http://example.com/","_:h0",null +PASS createDocument test: characterSet aliases for "http://example.com/","_:h0",null +PASS createDocument test: "http://example.com/","_:test",null,null +PASS createDocument test: metadata for "http://example.com/","_:test",null +PASS createDocument test: characterSet aliases for "http://example.com/","_:test",null +PASS createDocument test: "http://example.com/","l_:_",null,null +PASS createDocument test: metadata for "http://example.com/","l_:_",null +PASS createDocument test: characterSet aliases for "http://example.com/","l_:_",null +PASS createDocument test: "http://example.com/","ns:_0",null,null +PASS createDocument test: metadata for "http://example.com/","ns:_0",null +PASS createDocument test: characterSet aliases for "http://example.com/","ns:_0",null +PASS createDocument test: "http://example.com/","ns:a0",null,null +PASS createDocument test: metadata for "http://example.com/","ns:a0",null +PASS createDocument test: characterSet aliases for "http://example.com/","ns:a0",null +PASS createDocument test: "http://example.com/","ns0:test",null,null +PASS createDocument test: metadata for "http://example.com/","ns0:test",null +PASS createDocument test: characterSet aliases for "http://example.com/","ns0:test",null +PASS createDocument test: "http://example.com/","a.b:c",null,null +PASS createDocument test: metadata for "http://example.com/","a.b:c",null +PASS createDocument test: characterSet aliases for "http://example.com/","a.b:c",null +PASS createDocument test: "http://example.com/","a-b:c",null,null +PASS createDocument test: metadata for "http://example.com/","a-b:c",null +PASS createDocument test: characterSet aliases for "http://example.com/","a-b:c",null +PASS createDocument test: "http://example.com/","xml",null,null +PASS createDocument test: metadata for "http://example.com/","xml",null +PASS createDocument test: characterSet aliases for "http://example.com/","xml",null +PASS createDocument test: "http://example.com/","XMLNS",null,null +PASS createDocument test: metadata for "http://example.com/","XMLNS",null +PASS createDocument test: characterSet aliases for "http://example.com/","XMLNS",null +PASS createDocument test: "http://example.com/","xmlfoo",null,null +PASS createDocument test: metadata for "http://example.com/","xmlfoo",null +PASS createDocument test: characterSet aliases for "http://example.com/","xmlfoo",null +PASS createDocument test: "http://example.com/","xml:foo",null,"NAMESPACE_ERR" +PASS createDocument test: "http://example.com/","XML:foo",null,null +PASS createDocument test: metadata for "http://example.com/","XML:foo",null +PASS createDocument test: characterSet aliases for "http://example.com/","XML:foo",null +PASS createDocument test: "http://example.com/","xmlns:foo",null,"NAMESPACE_ERR" +PASS createDocument test: "http://example.com/","XMLNS:foo",null,null +PASS createDocument test: metadata for "http://example.com/","XMLNS:foo",null +PASS createDocument test: characterSet aliases for "http://example.com/","XMLNS:foo",null +PASS createDocument test: "http://example.com/","xmlfoo:bar",null,null +PASS createDocument test: metadata for "http://example.com/","xmlfoo:bar",null +PASS createDocument test: characterSet aliases for "http://example.com/","xmlfoo:bar",null +PASS createDocument test: "http://example.com/","prefix::local",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:{",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:}",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:~",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:'",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:!",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:@",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:#",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:$",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:%",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:^",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:&",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:*",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:(",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:)",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:+",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:=",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:[",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:]",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:\\",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:/",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:;",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:`",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:<",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:>",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:,",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:a ",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://example.com/","namespaceURI:\"",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "/","foo",null,null +PASS createDocument test: metadata for "/","foo",null +PASS createDocument test: characterSet aliases for "/","foo",null +PASS createDocument test: "/","1foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "/","f1oo",null,null +PASS createDocument test: metadata for "/","f1oo",null +PASS createDocument test: characterSet aliases for "/","f1oo",null +PASS createDocument test: "/","foo1",null,null +PASS createDocument test: metadata for "/","foo1",null +PASS createDocument test: characterSet aliases for "/","foo1",null +PASS createDocument test: "/",":foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "/","f:oo",null,null +PASS createDocument test: metadata for "/","f:oo",null +PASS createDocument test: characterSet aliases for "/","f:oo",null +PASS createDocument test: "/","foo:",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "/","xml",null,null +PASS createDocument test: metadata for "/","xml",null +PASS createDocument test: characterSet aliases for "/","xml",null +PASS createDocument test: "/","xmlns",null,"NAMESPACE_ERR" +PASS createDocument test: "/","xmlfoo",null,null +PASS createDocument test: metadata for "/","xmlfoo",null +PASS createDocument test: characterSet aliases for "/","xmlfoo",null +PASS createDocument test: "/","xml:foo",null,"NAMESPACE_ERR" +PASS createDocument test: "/","xmlns:foo",null,"NAMESPACE_ERR" +PASS createDocument test: "/","xmlfoo:bar",null,null +PASS createDocument test: metadata for "/","xmlfoo:bar",null +PASS createDocument test: characterSet aliases for "/","xmlfoo:bar",null +PASS createDocument test: "http://www.w3.org/XML/1998/namespace","foo",null,null +PASS createDocument test: metadata for "http://www.w3.org/XML/1998/namespace","foo",null +PASS createDocument test: characterSet aliases for "http://www.w3.org/XML/1998/namespace","foo",null +PASS createDocument test: "http://www.w3.org/XML/1998/namespace","1foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://www.w3.org/XML/1998/namespace","f1oo",null,null +PASS createDocument test: metadata for "http://www.w3.org/XML/1998/namespace","f1oo",null +PASS createDocument test: characterSet aliases for "http://www.w3.org/XML/1998/namespace","f1oo",null +PASS createDocument test: "http://www.w3.org/XML/1998/namespace","foo1",null,null +PASS createDocument test: metadata for "http://www.w3.org/XML/1998/namespace","foo1",null +PASS createDocument test: characterSet aliases for "http://www.w3.org/XML/1998/namespace","foo1",null +PASS createDocument test: "http://www.w3.org/XML/1998/namespace",":foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://www.w3.org/XML/1998/namespace","f:oo",null,null +PASS createDocument test: metadata for "http://www.w3.org/XML/1998/namespace","f:oo",null +PASS createDocument test: characterSet aliases for "http://www.w3.org/XML/1998/namespace","f:oo",null +PASS createDocument test: "http://www.w3.org/XML/1998/namespace","foo:",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://www.w3.org/XML/1998/namespace","xml",null,null +PASS createDocument test: metadata for "http://www.w3.org/XML/1998/namespace","xml",null +PASS createDocument test: characterSet aliases for "http://www.w3.org/XML/1998/namespace","xml",null +PASS createDocument test: "http://www.w3.org/XML/1998/namespace","xmlns",null,"NAMESPACE_ERR" +PASS createDocument test: "http://www.w3.org/XML/1998/namespace","xmlfoo",null,null +PASS createDocument test: metadata for "http://www.w3.org/XML/1998/namespace","xmlfoo",null +PASS createDocument test: characterSet aliases for "http://www.w3.org/XML/1998/namespace","xmlfoo",null +PASS createDocument test: "http://www.w3.org/XML/1998/namespace","xml:foo",null,null +PASS createDocument test: metadata for "http://www.w3.org/XML/1998/namespace","xml:foo",null +PASS createDocument test: characterSet aliases for "http://www.w3.org/XML/1998/namespace","xml:foo",null +PASS createDocument test: "http://www.w3.org/XML/1998/namespace","xmlns:foo",null,"NAMESPACE_ERR" +PASS createDocument test: "http://www.w3.org/XML/1998/namespace","xmlfoo:bar",null,null +PASS createDocument test: metadata for "http://www.w3.org/XML/1998/namespace","xmlfoo:bar",null +PASS createDocument test: characterSet aliases for "http://www.w3.org/XML/1998/namespace","xmlfoo:bar",null +PASS createDocument test: "http://www.w3.org/XML/1998/namespaces","xml:foo",null,"NAMESPACE_ERR" +PASS createDocument test: "http://www.w3.org/xml/1998/namespace","xml:foo",null,"NAMESPACE_ERR" +PASS createDocument test: "http://www.w3.org/2000/xmlns/","foo",null,"NAMESPACE_ERR" +PASS createDocument test: "http://www.w3.org/2000/xmlns/","1foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://www.w3.org/2000/xmlns/","f1oo",null,"NAMESPACE_ERR" +PASS createDocument test: "http://www.w3.org/2000/xmlns/","foo1",null,"NAMESPACE_ERR" +PASS createDocument test: "http://www.w3.org/2000/xmlns/",":foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://www.w3.org/2000/xmlns/","f:oo",null,"NAMESPACE_ERR" +PASS createDocument test: "http://www.w3.org/2000/xmlns/","foo:",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "http://www.w3.org/2000/xmlns/","xml",null,"NAMESPACE_ERR" +PASS createDocument test: "http://www.w3.org/2000/xmlns/","xmlns",null,null +PASS createDocument test: metadata for "http://www.w3.org/2000/xmlns/","xmlns",null +PASS createDocument test: characterSet aliases for "http://www.w3.org/2000/xmlns/","xmlns",null +PASS createDocument test: "http://www.w3.org/2000/xmlns/","xmlfoo",null,"NAMESPACE_ERR" +PASS createDocument test: "http://www.w3.org/2000/xmlns/","xml:foo",null,"NAMESPACE_ERR" +PASS createDocument test: "http://www.w3.org/2000/xmlns/","xmlns:foo",null,null +PASS createDocument test: metadata for "http://www.w3.org/2000/xmlns/","xmlns:foo",null +PASS createDocument test: characterSet aliases for "http://www.w3.org/2000/xmlns/","xmlns:foo",null +PASS createDocument test: "http://www.w3.org/2000/xmlns/","xmlfoo:bar",null,"NAMESPACE_ERR" +PASS createDocument test: "http://www.w3.org/2000/xmlns/","foo:xmlns",null,"NAMESPACE_ERR" +PASS createDocument test: "foo:","foo",null,null +PASS createDocument test: metadata for "foo:","foo",null +PASS createDocument test: characterSet aliases for "foo:","foo",null +PASS createDocument test: "foo:","1foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "foo:","f1oo",null,null +PASS createDocument test: metadata for "foo:","f1oo",null +PASS createDocument test: characterSet aliases for "foo:","f1oo",null +PASS createDocument test: "foo:","foo1",null,null +PASS createDocument test: metadata for "foo:","foo1",null +PASS createDocument test: characterSet aliases for "foo:","foo1",null +PASS createDocument test: "foo:",":foo",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "foo:","f:oo",null,null +PASS createDocument test: metadata for "foo:","f:oo",null +PASS createDocument test: characterSet aliases for "foo:","f:oo",null +PASS createDocument test: "foo:","foo:",null,"INVALID_CHARACTER_ERR" +PASS createDocument test: "foo:","xml",null,null +PASS createDocument test: metadata for "foo:","xml",null +PASS createDocument test: characterSet aliases for "foo:","xml",null +PASS createDocument test: "foo:","xmlns",null,"NAMESPACE_ERR" +PASS createDocument test: "foo:","xmlfoo",null,null +PASS createDocument test: metadata for "foo:","xmlfoo",null +PASS createDocument test: characterSet aliases for "foo:","xmlfoo",null +PASS createDocument test: "foo:","xml:foo",null,"NAMESPACE_ERR" +PASS createDocument test: "foo:","xmlns:foo",null,"NAMESPACE_ERR" +PASS createDocument test: "foo:","xmlfoo:bar",null,null +PASS createDocument test: metadata for "foo:","xmlfoo:bar",null +PASS createDocument test: characterSet aliases for "foo:","xmlfoo:bar",null +PASS createDocument test: null,null,false,object "TypeError" +PASS createDocument test: null,"",null,null +PASS createDocument test: metadata for null,"",null +PASS createDocument test: characterSet aliases for null,"",null +PASS createDocument test: undefined,null,undefined,null +PASS createDocument test: metadata for undefined,null,undefined +PASS createDocument test: characterSet aliases for undefined,null,undefined +PASS createDocument test: undefined,undefined,undefined,null +PASS createDocument test: metadata for undefined,undefined,undefined +PASS createDocument test: characterSet aliases for undefined,undefined,undefined +PASS createDocument test: undefined,"",undefined,null +PASS createDocument test: metadata for undefined,"",undefined +PASS createDocument test: characterSet aliases for undefined,"",undefined +PASS createDocument test: "http://example.com/",null,null,null +PASS createDocument test: metadata for "http://example.com/",null,null +PASS createDocument test: characterSet aliases for "http://example.com/",null,null +PASS createDocument test: "http://example.com/","",null,null +PASS createDocument test: metadata for "http://example.com/","",null +PASS createDocument test: characterSet aliases for "http://example.com/","",null +PASS createDocument test: "/",null,null,null +PASS createDocument test: metadata for "/",null,null +PASS createDocument test: characterSet aliases for "/",null,null +PASS createDocument test: "/","",null,null +PASS createDocument test: metadata for "/","",null +PASS createDocument test: characterSet aliases for "/","",null +PASS createDocument test: "http://www.w3.org/XML/1998/namespace",null,null,null +PASS createDocument test: metadata for "http://www.w3.org/XML/1998/namespace",null,null +PASS createDocument test: characterSet aliases for "http://www.w3.org/XML/1998/namespace",null,null +PASS createDocument test: "http://www.w3.org/XML/1998/namespace","",null,null +PASS createDocument test: metadata for "http://www.w3.org/XML/1998/namespace","",null +PASS createDocument test: characterSet aliases for "http://www.w3.org/XML/1998/namespace","",null +PASS createDocument test: "http://www.w3.org/2000/xmlns/",null,null,null +PASS createDocument test: metadata for "http://www.w3.org/2000/xmlns/",null,null +PASS createDocument test: characterSet aliases for "http://www.w3.org/2000/xmlns/",null,null +PASS createDocument test: "http://www.w3.org/2000/xmlns/","",null,null +PASS createDocument test: metadata for "http://www.w3.org/2000/xmlns/","",null +PASS createDocument test: characterSet aliases for "http://www.w3.org/2000/xmlns/","",null +PASS createDocument test: "foo:",null,null,null +PASS createDocument test: metadata for "foo:",null,null +PASS createDocument test: characterSet aliases for "foo:",null,null +PASS createDocument test: "foo:","",null,null +PASS createDocument test: metadata for "foo:","",null +PASS createDocument test: characterSet aliases for "foo:","",null +PASS createDocument test: null,null,DocumentType node <!DOCTYPE foo>,null +PASS createDocument test: metadata for null,null,DocumentType node <!DOCTYPE foo> +PASS createDocument test: characterSet aliases for null,null,DocumentType node <!DOCTYPE foo> +PASS createDocument test: null,null,DocumentType node <!DOCTYPE html>,null +PASS createDocument test: metadata for null,null,DocumentType node <!DOCTYPE html> +PASS createDocument test: characterSet aliases for null,null,DocumentType node <!DOCTYPE html> +PASS createDocument test: null,null,DocumentType node <!DOCTYPE bar>,null +PASS createDocument test: metadata for null,null,DocumentType node <!DOCTYPE bar> +PASS createDocument test: characterSet aliases for null,null,DocumentType node <!DOCTYPE bar> +PASS createDocument test: null,null,DocumentType node <!DOCTYPE baz>,null +PASS createDocument test: metadata for null,null,DocumentType node <!DOCTYPE baz> +PASS createDocument test: characterSet aliases for null,null,DocumentType node <!DOCTYPE baz> +PASS createDocument test: null,null,DocumentType node <!DOCTYPE quz>,null +PASS createDocument test: metadata for null,null,DocumentType node <!DOCTYPE quz> +PASS createDocument test: characterSet aliases for null,null,DocumentType node <!DOCTYPE quz> +PASS createDocument test: null,"foo",DocumentType node <!DOCTYPE foo>,null +PASS createDocument test: metadata for null,"foo",DocumentType node <!DOCTYPE foo> +PASS createDocument test: characterSet aliases for null,"foo",DocumentType node <!DOCTYPE foo> +PASS createDocument test: "foo",null,DocumentType node <!DOCTYPE foo>,null +PASS createDocument test: metadata for "foo",null,DocumentType node <!DOCTYPE foo> +PASS createDocument test: characterSet aliases for "foo",null,DocumentType node <!DOCTYPE foo> +PASS createDocument test: "foo","bar",DocumentType node <!DOCTYPE foo>,null +PASS createDocument test: metadata for "foo","bar",DocumentType node <!DOCTYPE foo> +PASS createDocument test: characterSet aliases for "foo","bar",DocumentType node <!DOCTYPE foo> +PASS createDocument test: "http://www.w3.org/1999/xhtml","",null,null +PASS createDocument test: metadata for "http://www.w3.org/1999/xhtml","",null +PASS createDocument test: characterSet aliases for "http://www.w3.org/1999/xhtml","",null +PASS createDocument test: "http://www.w3.org/2000/svg","",null,null +PASS createDocument test: metadata for "http://www.w3.org/2000/svg","",null +PASS createDocument test: characterSet aliases for "http://www.w3.org/2000/svg","",null +PASS createDocument test: "http://www.w3.org/1998/Math/MathML","",null,null +PASS createDocument test: metadata for "http://www.w3.org/1998/Math/MathML","",null +PASS createDocument test: characterSet aliases for "http://www.w3.org/1998/Math/MathML","",null +PASS createDocument test: null,"html",null,null +PASS createDocument test: metadata for null,"html",null +PASS createDocument test: characterSet aliases for null,"html",null +PASS createDocument test: null,"svg",null,null +PASS createDocument test: metadata for null,"svg",null +PASS createDocument test: characterSet aliases for null,"svg",null +PASS createDocument test: null,"math",null,null +PASS createDocument test: metadata for null,"math",null +PASS createDocument test: characterSet aliases for null,"math",null +PASS createDocument test: null,"",DocumentType node <!DOCTYPE html -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd> +PASS createDocument test: null,"",DocumentType node <!DOCTYPE svg -//W3C//DTD SVG 1.1//EN http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd> +PASS createDocument test: null,"",DocumentType node <!DOCTYPE math -//W3C//DTD MathML 2.0//EN http://www.w3.org/Math/DTD/mathml2/mathml2.dtd> +PASS createDocument with missing arguments +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement.html b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement.html index bacaff0f..a749627 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement.html +++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElement.html
@@ -77,7 +77,7 @@ "1foo", "1:foo", "fo o", - "\u0BC6foo", + "\u0300foo", "}foo", "f}oo", "foo}", @@ -90,7 +90,7 @@ "f<oo", "-foo", ".foo", - "\u0BC6", + "\u0300", ] var xmlIframe = document.querySelector('[src="/common/dummy.xml"]');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElementNS-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElementNS-expected.txt new file mode 100644 index 0000000..7607f27 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElementNS-expected.txt
@@ -0,0 +1,600 @@ +This is a testharness.js-based test. +Found 596 tests; 587 PASS, 9 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS createElementNS test in HTML document: null,null,null +PASS createElementNS test in XML document: null,null,null +PASS createElementNS test in XHTML document: null,null,null +PASS createElementNS test in HTML document: null,undefined,null +PASS createElementNS test in XML document: null,undefined,null +PASS createElementNS test in XHTML document: null,undefined,null +PASS createElementNS test in HTML document: null,"foo",null +PASS createElementNS test in XML document: null,"foo",null +PASS createElementNS test in XHTML document: null,"foo",null +PASS createElementNS test in HTML document: null,"1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"f1oo",null +PASS createElementNS test in XML document: null,"f1oo",null +PASS createElementNS test in XHTML document: null,"f1oo",null +PASS createElementNS test in HTML document: null,"foo1",null +PASS createElementNS test in XML document: null,"foo1",null +PASS createElementNS test in XHTML document: null,"foo1",null +FAIL createElementNS test in HTML document: null,"ெfoo",null Failed to execute 'createElementNS' on 'Document': The qualified name provided ('ெfoo') contains the invalid name-start character 'ெ'. +FAIL createElementNS test in XML document: null,"ெfoo",null Failed to execute 'createElementNS' on 'Document': The qualified name provided ('ெfoo') contains the invalid name-start character 'ெ'. +FAIL createElementNS test in XHTML document: null,"ெfoo",null Failed to execute 'createElementNS' on 'Document': The qualified name provided ('ெfoo') contains the invalid name-start character 'ெ'. +PASS createElementNS test in HTML document: null,";foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,";foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,";foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"}foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"}foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"}foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"f}oo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"f}oo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"f}oo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"foo}","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"foo}","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"foo}","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"\ufffffoo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"\ufffffoo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"\ufffffoo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"f\uffffoo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"f\uffffoo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"f\uffffoo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"foo\uffff","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"foo\uffff","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"foo\uffff","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"<foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"<foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"<foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"foo>","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"foo>","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"foo>","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"<foo>","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"<foo>","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"<foo>","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"f<oo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"f<oo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"f<oo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"^^","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"^^","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"^^","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"fo o","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"fo o","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"fo o","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"-foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"-foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"-foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,".foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,".foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,".foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"f:oo","NAMESPACE_ERR" +PASS createElementNS test in XML document: null,"f:oo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: null,"f:oo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: null,"foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"f:o:o","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"f:o:o","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"f:o:o","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,":","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,":","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,":","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"xml",null +PASS createElementNS test in XML document: null,"xml",null +PASS createElementNS test in XHTML document: null,"xml",null +PASS createElementNS test in HTML document: null,"xmlns","NAMESPACE_ERR" +PASS createElementNS test in XML document: null,"xmlns","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: null,"xmlns","NAMESPACE_ERR" +PASS createElementNS test in HTML document: null,"xmlfoo",null +PASS createElementNS test in XML document: null,"xmlfoo",null +PASS createElementNS test in XHTML document: null,"xmlfoo",null +PASS createElementNS test in HTML document: null,"xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XML document: null,"xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: null,"xml:foo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: null,"xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in XML document: null,"xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: null,"xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: null,"xmlfoo:bar","NAMESPACE_ERR" +PASS createElementNS test in XML document: null,"xmlfoo:bar","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: null,"xmlfoo:bar","NAMESPACE_ERR" +PASS createElementNS test in HTML document: null,"null:xml","NAMESPACE_ERR" +PASS createElementNS test in XML document: null,"null:xml","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: null,"null:xml","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "",null,null +PASS createElementNS test in XML document: "",null,null +PASS createElementNS test in XHTML document: "",null,null +PASS createElementNS test in HTML document: "",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "","f:oo","NAMESPACE_ERR" +PASS createElementNS test in XML document: "","f:oo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "","f:oo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: undefined,null,null +PASS createElementNS test in XML document: undefined,null,null +PASS createElementNS test in XHTML document: undefined,null,null +PASS createElementNS test in HTML document: undefined,undefined,null +PASS createElementNS test in XML document: undefined,undefined,null +PASS createElementNS test in XHTML document: undefined,undefined,null +PASS createElementNS test in HTML document: undefined,"foo",null +PASS createElementNS test in XML document: undefined,"foo",null +PASS createElementNS test in XHTML document: undefined,"foo",null +PASS createElementNS test in HTML document: undefined,"1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: undefined,"1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: undefined,"1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: undefined,"f1oo",null +PASS createElementNS test in XML document: undefined,"f1oo",null +PASS createElementNS test in XHTML document: undefined,"f1oo",null +PASS createElementNS test in HTML document: undefined,"foo1",null +PASS createElementNS test in XML document: undefined,"foo1",null +PASS createElementNS test in XHTML document: undefined,"foo1",null +PASS createElementNS test in HTML document: undefined,":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: undefined,":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: undefined,":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: undefined,"f:oo","NAMESPACE_ERR" +PASS createElementNS test in XML document: undefined,"f:oo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: undefined,"f:oo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: undefined,"foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: undefined,"foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: undefined,"foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: undefined,"f::oo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: undefined,"f::oo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: undefined,"f::oo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: undefined,"xml",null +PASS createElementNS test in XML document: undefined,"xml",null +PASS createElementNS test in XHTML document: undefined,"xml",null +PASS createElementNS test in HTML document: undefined,"xmlns","NAMESPACE_ERR" +PASS createElementNS test in XML document: undefined,"xmlns","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: undefined,"xmlns","NAMESPACE_ERR" +PASS createElementNS test in HTML document: undefined,"xmlfoo",null +PASS createElementNS test in XML document: undefined,"xmlfoo",null +PASS createElementNS test in XHTML document: undefined,"xmlfoo",null +PASS createElementNS test in HTML document: undefined,"xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XML document: undefined,"xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: undefined,"xml:foo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: undefined,"xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in XML document: undefined,"xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: undefined,"xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: undefined,"xmlfoo:bar","NAMESPACE_ERR" +PASS createElementNS test in XML document: undefined,"xmlfoo:bar","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: undefined,"xmlfoo:bar","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://example.com/","foo",null +PASS createElementNS test in XML document: "http://example.com/","foo",null +PASS createElementNS test in XHTML document: "http://example.com/","foo",null +PASS createElementNS test in HTML document: "http://example.com/","1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","<foo>","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","<foo>","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","<foo>","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","fo<o","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","fo<o","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","fo<o","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","-foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","-foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","-foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/",".foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/",".foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/",".foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","f1oo",null +PASS createElementNS test in XML document: "http://example.com/","f1oo",null +PASS createElementNS test in XHTML document: "http://example.com/","f1oo",null +PASS createElementNS test in HTML document: "http://example.com/","foo1",null +PASS createElementNS test in XML document: "http://example.com/","foo1",null +PASS createElementNS test in XHTML document: "http://example.com/","foo1",null +PASS createElementNS test in HTML document: "http://example.com/",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","f:oo",null +PASS createElementNS test in XML document: "http://example.com/","f:oo",null +PASS createElementNS test in XHTML document: "http://example.com/","f:oo",null +PASS createElementNS test in HTML document: "http://example.com/","f:o:o","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","f:o:o","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","f:o:o","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","f::oo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","f::oo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","f::oo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","a:0","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","a:0","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","a:0","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","0:a","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","0:a","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","0:a","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","a:_",null +PASS createElementNS test in XML document: "http://example.com/","a:_",null +PASS createElementNS test in XHTML document: "http://example.com/","a:_",null +FAIL createElementNS test in HTML document: "http://example.com/","a:ெ",null Failed to execute 'createElementNS' on 'Document': The qualified name provided ('a:ெ') contains the invalid name-start character 'ெ'. +FAIL createElementNS test in XML document: "http://example.com/","a:ெ",null Failed to execute 'createElementNS' on 'Document': The qualified name provided ('a:ெ') contains the invalid name-start character 'ெ'. +FAIL createElementNS test in XHTML document: "http://example.com/","a:ெ",null Failed to execute 'createElementNS' on 'Document': The qualified name provided ('a:ெ') contains the invalid name-start character 'ெ'. +PASS createElementNS test in HTML document: "http://example.com/","a:;","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","a:;","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","a:;","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","a:̀","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","a:̀","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","a:̀","INVALID_CHARACTER_ERR" +FAIL createElementNS test in HTML document: "http://example.com/","ெ:a",null Failed to execute 'createElementNS' on 'Document': The qualified name provided ('ெ:a') contains the invalid name-start character 'ெ'. +FAIL createElementNS test in XML document: "http://example.com/","ெ:a",null Failed to execute 'createElementNS' on 'Document': The qualified name provided ('ெ:a') contains the invalid name-start character 'ெ'. +FAIL createElementNS test in XHTML document: "http://example.com/","ெ:a",null Failed to execute 'createElementNS' on 'Document': The qualified name provided ('ெ:a') contains the invalid name-start character 'ெ'. +PASS createElementNS test in HTML document: "http://example.com/","̀:a","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","̀:a","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","̀:a","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/",";:a","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/",";:a","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/",";:a","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","a:aெ",null +PASS createElementNS test in XML document: "http://example.com/","a:aெ",null +PASS createElementNS test in XHTML document: "http://example.com/","a:aெ",null +PASS createElementNS test in HTML document: "http://example.com/","aெ:a",null +PASS createElementNS test in XML document: "http://example.com/","aெ:a",null +PASS createElementNS test in XHTML document: "http://example.com/","aெ:a",null +PASS createElementNS test in HTML document: "http://example.com/","xml:test","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://example.com/","xml:test","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","xml:test","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://example.com/","xmlns:test","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://example.com/","xmlns:test","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","xmlns:test","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://example.com/","test:xmlns",null +PASS createElementNS test in XML document: "http://example.com/","test:xmlns",null +PASS createElementNS test in XHTML document: "http://example.com/","test:xmlns",null +PASS createElementNS test in HTML document: "http://example.com/","xmlns","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://example.com/","xmlns","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","xmlns","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://example.com/","_:_",null +PASS createElementNS test in XML document: "http://example.com/","_:_",null +PASS createElementNS test in XHTML document: "http://example.com/","_:_",null +PASS createElementNS test in HTML document: "http://example.com/","_:h0",null +PASS createElementNS test in XML document: "http://example.com/","_:h0",null +PASS createElementNS test in XHTML document: "http://example.com/","_:h0",null +PASS createElementNS test in HTML document: "http://example.com/","_:test",null +PASS createElementNS test in XML document: "http://example.com/","_:test",null +PASS createElementNS test in XHTML document: "http://example.com/","_:test",null +PASS createElementNS test in HTML document: "http://example.com/","l_:_",null +PASS createElementNS test in XML document: "http://example.com/","l_:_",null +PASS createElementNS test in XHTML document: "http://example.com/","l_:_",null +PASS createElementNS test in HTML document: "http://example.com/","ns:_0",null +PASS createElementNS test in XML document: "http://example.com/","ns:_0",null +PASS createElementNS test in XHTML document: "http://example.com/","ns:_0",null +PASS createElementNS test in HTML document: "http://example.com/","ns:a0",null +PASS createElementNS test in XML document: "http://example.com/","ns:a0",null +PASS createElementNS test in XHTML document: "http://example.com/","ns:a0",null +PASS createElementNS test in HTML document: "http://example.com/","ns0:test",null +PASS createElementNS test in XML document: "http://example.com/","ns0:test",null +PASS createElementNS test in XHTML document: "http://example.com/","ns0:test",null +PASS createElementNS test in HTML document: "http://example.com/","a.b:c",null +PASS createElementNS test in XML document: "http://example.com/","a.b:c",null +PASS createElementNS test in XHTML document: "http://example.com/","a.b:c",null +PASS createElementNS test in HTML document: "http://example.com/","a-b:c",null +PASS createElementNS test in XML document: "http://example.com/","a-b:c",null +PASS createElementNS test in XHTML document: "http://example.com/","a-b:c",null +PASS createElementNS test in HTML document: "http://example.com/","xml",null +PASS createElementNS test in XML document: "http://example.com/","xml",null +PASS createElementNS test in XHTML document: "http://example.com/","xml",null +PASS createElementNS test in HTML document: "http://example.com/","XMLNS",null +PASS createElementNS test in XML document: "http://example.com/","XMLNS",null +PASS createElementNS test in XHTML document: "http://example.com/","XMLNS",null +PASS createElementNS test in HTML document: "http://example.com/","xmlfoo",null +PASS createElementNS test in XML document: "http://example.com/","xmlfoo",null +PASS createElementNS test in XHTML document: "http://example.com/","xmlfoo",null +PASS createElementNS test in HTML document: "http://example.com/","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://example.com/","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://example.com/","XML:foo",null +PASS createElementNS test in XML document: "http://example.com/","XML:foo",null +PASS createElementNS test in XHTML document: "http://example.com/","XML:foo",null +PASS createElementNS test in HTML document: "http://example.com/","xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://example.com/","xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://example.com/","XMLNS:foo",null +PASS createElementNS test in XML document: "http://example.com/","XMLNS:foo",null +PASS createElementNS test in XHTML document: "http://example.com/","XMLNS:foo",null +PASS createElementNS test in HTML document: "http://example.com/","xmlfoo:bar",null +PASS createElementNS test in XML document: "http://example.com/","xmlfoo:bar",null +PASS createElementNS test in XHTML document: "http://example.com/","xmlfoo:bar",null +PASS createElementNS test in HTML document: "http://example.com/","prefix::local","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","prefix::local","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","prefix::local","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:{","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:{","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:{","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:}","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:}","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:}","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:~","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:~","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:~","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:'","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:'","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:'","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:!","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:!","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:!","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:@","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:@","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:@","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:#","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:#","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:#","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:$","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:$","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:$","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:%","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:%","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:%","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:^","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:^","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:^","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:&","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:&","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:&","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:*","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:*","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:*","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:(","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:(","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:(","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:)","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:)","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:)","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:+","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:+","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:+","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:=","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:=","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:=","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:[","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:[","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:[","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:]","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:]","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:]","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:\\","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:\\","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:\\","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:/","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:/","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:/","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:;","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:;","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:;","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:`","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:`","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:`","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:<","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:<","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:<","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:>","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:>","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:>","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:,","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:,","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:,","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:a ","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:a ","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:a ","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/","namespaceURI:\"","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","namespaceURI:\"","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","namespaceURI:\"","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "/","foo",null +PASS createElementNS test in XML document: "/","foo",null +PASS createElementNS test in XHTML document: "/","foo",null +PASS createElementNS test in HTML document: "/","1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "/","1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "/","1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "/","f1oo",null +PASS createElementNS test in XML document: "/","f1oo",null +PASS createElementNS test in XHTML document: "/","f1oo",null +PASS createElementNS test in HTML document: "/","foo1",null +PASS createElementNS test in XML document: "/","foo1",null +PASS createElementNS test in XHTML document: "/","foo1",null +PASS createElementNS test in HTML document: "/",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "/",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "/",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "/","f:oo",null +PASS createElementNS test in XML document: "/","f:oo",null +PASS createElementNS test in XHTML document: "/","f:oo",null +PASS createElementNS test in HTML document: "/","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "/","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "/","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "/","xml",null +PASS createElementNS test in XML document: "/","xml",null +PASS createElementNS test in XHTML document: "/","xml",null +PASS createElementNS test in HTML document: "/","xmlns","NAMESPACE_ERR" +PASS createElementNS test in XML document: "/","xmlns","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "/","xmlns","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "/","xmlfoo",null +PASS createElementNS test in XML document: "/","xmlfoo",null +PASS createElementNS test in XHTML document: "/","xmlfoo",null +PASS createElementNS test in HTML document: "/","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XML document: "/","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "/","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "/","xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in XML document: "/","xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "/","xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "/","xmlfoo:bar",null +PASS createElementNS test in XML document: "/","xmlfoo:bar",null +PASS createElementNS test in XHTML document: "/","xmlfoo:bar",null +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespace","foo",null +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","foo",null +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespace","foo",null +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespace","1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespace","1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespace","f1oo",null +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","f1oo",null +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespace","f1oo",null +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespace","foo1",null +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","foo1",null +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespace","foo1",null +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespace",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespace",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespace","f:oo",null +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","f:oo",null +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespace","f:oo",null +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespace","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespace","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespace","xml",null +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","xml",null +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespace","xml",null +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespace","xmlns","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","xmlns","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespace","xmlns","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespace","xmlfoo",null +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","xmlfoo",null +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespace","xmlfoo",null +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespace","xml:foo",null +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","xml:foo",null +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespace","xml:foo",null +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespace","xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespace","xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespace","xmlfoo:bar",null +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","xmlfoo:bar",null +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespace","xmlfoo:bar",null +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespaces","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespaces","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespaces","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/xml/1998/namespace","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/xml/1998/namespace","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/xml/1998/namespace","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/","foo","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","foo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/","foo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/","1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/","1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/","f1oo","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","f1oo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/","f1oo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/","foo1","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","foo1","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/","foo1","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/","f:oo","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","f:oo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/","f:oo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/","xml","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","xml","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/","xml","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/","xmlns",null +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","xmlns",null +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/","xmlns",null +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/","xmlfoo","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","xmlfoo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/","xmlfoo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/","xmlns:foo",null +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","xmlns:foo",null +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/","xmlns:foo",null +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/","xmlfoo:bar","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","xmlfoo:bar","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/","xmlfoo:bar","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/","foo:xmlns","NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","foo:xmlns","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/","foo:xmlns","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "foo:","foo",null +PASS createElementNS test in XML document: "foo:","foo",null +PASS createElementNS test in XHTML document: "foo:","foo",null +PASS createElementNS test in HTML document: "foo:","1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "foo:","1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "foo:","1foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "foo:","f1oo",null +PASS createElementNS test in XML document: "foo:","f1oo",null +PASS createElementNS test in XHTML document: "foo:","f1oo",null +PASS createElementNS test in HTML document: "foo:","foo1",null +PASS createElementNS test in XML document: "foo:","foo1",null +PASS createElementNS test in XHTML document: "foo:","foo1",null +PASS createElementNS test in HTML document: "foo:",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "foo:",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "foo:",":foo","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "foo:","f:oo",null +PASS createElementNS test in XML document: "foo:","f:oo",null +PASS createElementNS test in XHTML document: "foo:","f:oo",null +PASS createElementNS test in HTML document: "foo:","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "foo:","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "foo:","foo:","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "foo:","xml",null +PASS createElementNS test in XML document: "foo:","xml",null +PASS createElementNS test in XHTML document: "foo:","xml",null +PASS createElementNS test in HTML document: "foo:","xmlns","NAMESPACE_ERR" +PASS createElementNS test in XML document: "foo:","xmlns","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "foo:","xmlns","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "foo:","xmlfoo",null +PASS createElementNS test in XML document: "foo:","xmlfoo",null +PASS createElementNS test in XHTML document: "foo:","xmlfoo",null +PASS createElementNS test in HTML document: "foo:","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XML document: "foo:","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "foo:","xml:foo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "foo:","xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in XML document: "foo:","xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "foo:","xmlns:foo","NAMESPACE_ERR" +PASS createElementNS test in HTML document: "foo:","xmlfoo:bar",null +PASS createElementNS test in XML document: "foo:","xmlfoo:bar",null +PASS createElementNS test in XHTML document: "foo:","xmlfoo:bar",null +PASS createElementNS test in HTML document: "","","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "","","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "","","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: null,"","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: null,"","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: null,"","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: undefined,"","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: undefined,"","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: undefined,"","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://example.com/",null,null +PASS createElementNS test in XML document: "http://example.com/",null,null +PASS createElementNS test in XHTML document: "http://example.com/",null,null +PASS createElementNS test in HTML document: "http://example.com/","","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://example.com/","","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://example.com/","","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "/",null,null +PASS createElementNS test in XML document: "/",null,null +PASS createElementNS test in XHTML document: "/",null,null +PASS createElementNS test in HTML document: "/","","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "/","","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "/","","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespace",null,null +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace",null,null +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespace",null,null +PASS createElementNS test in HTML document: "http://www.w3.org/XML/1998/namespace","","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/XML/1998/namespace","","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/XML/1998/namespace","","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/",null,"NAMESPACE_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/",null,"NAMESPACE_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/",null,"NAMESPACE_ERR" +PASS createElementNS test in HTML document: "http://www.w3.org/2000/xmlns/","","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "http://www.w3.org/2000/xmlns/","","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "http://www.w3.org/2000/xmlns/","","INVALID_CHARACTER_ERR" +PASS createElementNS test in HTML document: "foo:",null,null +PASS createElementNS test in XML document: "foo:",null,null +PASS createElementNS test in XHTML document: "foo:",null,null +PASS createElementNS test in HTML document: "foo:","","INVALID_CHARACTER_ERR" +PASS createElementNS test in XML document: "foo:","","INVALID_CHARACTER_ERR" +PASS createElementNS test in XHTML document: "foo:","","INVALID_CHARACTER_ERR" +PASS Lower-case HTML element without a prefix +PASS Lower-case HTML element with a prefix +PASS Lower-case non-HTML element without a prefix +PASS Lower-case non-HTML element with a prefix +PASS Upper-case HTML element without a prefix +PASS Upper-case HTML element with a prefix +PASS Upper-case non-HTML element without a prefix +PASS Upper-case non-HTML element with a prefix +PASS null namespace +PASS undefined namespace +PASS empty string namespace +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElementNS.js b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElementNS.js index bf5e12c..2cf2948 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElementNS.js +++ b/third_party/WebKit/LayoutTests/external/wpt/dom/nodes/Document-createElementNS.js
@@ -10,7 +10,8 @@ [null, "1foo", "INVALID_CHARACTER_ERR"], [null, "f1oo", null], [null, "foo1", null], - [null, "\u0BC6foo", "INVALID_CHARACTER_ERR"], + [null, "\u0BC6foo", null], + [null, "\u037Efoo", "INVALID_CHARACTER_ERR"], [null, "}foo", "INVALID_CHARACTER_ERR"], [null, "f}oo", "INVALID_CHARACTER_ERR"], [null, "foo}", "INVALID_CHARACTER_ERR"], @@ -73,8 +74,12 @@ ["http://example.com/", "a:0", "INVALID_CHARACTER_ERR"], ["http://example.com/", "0:a", "INVALID_CHARACTER_ERR"], ["http://example.com/", "a:_", null], - ["http://example.com/", "a:\u0BC6", "INVALID_CHARACTER_ERR"], - ["http://example.com/", "\u0BC6:a", "INVALID_CHARACTER_ERR"], + ["http://example.com/", "a:\u0BC6", null], + ["http://example.com/", "a:\u037E", "INVALID_CHARACTER_ERR"], + ["http://example.com/", "a:\u0300", "INVALID_CHARACTER_ERR"], + ["http://example.com/", "\u0BC6:a", null], + ["http://example.com/", "\u0300:a", "INVALID_CHARACTER_ERR"], + ["http://example.com/", "\u037E:a", "INVALID_CHARACTER_ERR"], ["http://example.com/", "a:a\u0BC6", null], ["http://example.com/", "a\u0BC6:a", null], ["http://example.com/", "xml:test", "NAMESPACE_ERR"],
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fullscreen/idlharness.window.js b/third_party/WebKit/LayoutTests/external/wpt/fullscreen/idlharness.window.js new file mode 100644 index 0000000..a60b7fe --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/fullscreen/idlharness.window.js
@@ -0,0 +1,15 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +'use strict'; + +idl_test( + ['fullscreen'], + ['dom', 'html'], + idl_array => { + idl_array.add_objects({ + Document: ['new Document'], + Element: ['document.createElementNS(null, "test")'], + }); + } +);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fullscreen/interfaces.html b/third_party/WebKit/LayoutTests/external/wpt/fullscreen/interfaces.html deleted file mode 100644 index 79174cd2..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/fullscreen/interfaces.html +++ /dev/null
@@ -1,31 +0,0 @@ -<!DOCTYPE html> -<title>Fullscreen IDL tests</title> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/resources/WebIDLParser.js></script> -<script src=/resources/idlharness.js></script> -<script> -"use strict"; - -function doTest([dom, fullscreen]) { - var idlArray = new IdlArray(); - idlArray.add_untested_idls(dom); - idlArray.add_untested_idls('interface EventHandler {};'); - idlArray.add_idls(fullscreen); - idlArray.add_objects({ - Document: ['new Document'], - Element: ['document.createElementNS(null, "test")'], - }); - idlArray.test(); -} - -function fetchText(url) { - return fetch(url).then((response) => response.text()); -} - -promise_test(() => { - return Promise.all(["/interfaces/dom.idl", - "/interfaces/fullscreen.idl"].map(fetchText)) - .then(doTest); -}, "Test driver"); -</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/the-css-user-agent-style-sheet-and-presentational-hints/no-help-cursor-on-links.historical.html b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/the-css-user-agent-style-sheet-and-presentational-hints/no-help-cursor-on-links.historical.html new file mode 100644 index 0000000..82aa08d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/the-css-user-agent-style-sheet-and-presentational-hints/no-help-cursor-on-links.historical.html
@@ -0,0 +1,50 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>link with rel="help" cursor tests</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<link rel="help" href="https://html.spec.whatwg.org/#phrasing-content-3"> +<link rel="help" href="https://github.com/whatwg/html/pull/3902"> + +<div id="log"></div> + +<a href="/common/blank.html?unvisited" rel="help" id="unvisited">unvisited</a> +<a href="/common/blank.html?willbevisited" rel="help" id="willbevisited">will be visited</a> + +<script> +"use strict"; + + +test(() => { + const el = document.querySelector("#unvisited"); + const style = window.getComputedStyle(el); + + assert_equals(style.cursor, "pointer"); +},"Unvisited help links must have pointer cursor, not help cursor"); + + +// This test is kind of dubious. Browsers don't allow you to distinguish visited and unvisited links +// from script, for privacy reasons. So we can't really be sure that loading the iframe would make +// the link count as visited. Manually running this test turns the link purple in some browsers, +// but leaves it blue in others. Even then it's not clear whether it turned purple before or after +// the onload; this test assumes that once the iframe onload fires, it counts as visited, which +// may not be justified even in the purple-turning browsers. +// +// Still, the test doesn't really hurt. At worst it's redundant with the above. +// +// If someone comes up with a better way of testing this (i.e. something that truly guarantees that +// the link will count as "visited" for UA stylesheet purposes), then please submit a PR. +async_test(t => { + const el = document.querySelector("#willbevisited"); + + const iframe = document.createElement("iframe"); + iframe.src = el.href; + iframe.onload = t.step_func_done(() => { + const style = window.getComputedStyle(el); + assert_equals(style.cursor, "pointer"); + }); + + document.body.appendChild(iframe); +}, "Visited help links must have pointer cursor, not help cursor"); +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/server/context.any.js b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/server/context.any.js new file mode 100644 index 0000000..8ee168b7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/server/context.any.js
@@ -0,0 +1,13 @@ +// META: global=window,dedicatedworker,sharedworker,serviceworker +test(t => { + // Test for object that's only exposed in serviceworker + if (self.clients) { + assert_true(self.isSecureContext); + assert_equals(location.protocol, "https:"); + } else { + assert_false(self.isSecureContext); + assert_equals(location.protocol, "http:"); + } +}); + +done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/server/secure-context.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/server/secure-context.https.any.js index 99f6c4c..626fa70 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/infrastructure/server/secure-context.https.any.js +++ b/third_party/WebKit/LayoutTests/external/wpt/infrastructure/server/secure-context.https.any.js
@@ -1,3 +1,4 @@ +// META: global=window,dedicatedworker,sharedworker,serviceworker test(() => { assert_true(self.isSecureContext); }, "Use of .https file name flag implies secure context");
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/BackgroundSync.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/BackgroundSync.idl index 214d3a58..f84faf7 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/BackgroundSync.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/BackgroundSync.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Web Background Synchronization" spec. -// See: https://wicg.github.io/BackgroundSync/spec/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Web Background Synchronization (https://wicg.github.io/BackgroundSync/spec/) partial interface ServiceWorkerRegistration { readonly attribute SyncManager sync;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/CSP.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/CSP.idl index 03d4306e..64cba00 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/CSP.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/CSP.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Content Security Policy Level 3" spec. -// See: https://w3c.github.io/webappsec-csp/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Content Security Policy Level 3 (https://w3c.github.io/webappsec-csp/) enum SecurityPolicyViolationEventDisposition { "enforce", "report"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/CSS-Parser-API.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/CSS-Parser-API.idl index 0ef9b23..57ee7b73 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/CSS-Parser-API.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/CSS-Parser-API.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CSS Parser API" spec. -// See: https://wicg.github.io/CSS-Parser-API/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CSS Parser API (https://wicg.github.io/CSS-Parser-API/) typedef (DOMString or ReadableStream) CSSStringSource; typedef (DOMString or CSSStyleValue or CSSParserValue) CSSToken;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/DOM-Parsing.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/DOM-Parsing.idl index 83a8fe16..f3a13342 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/DOM-Parsing.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/DOM-Parsing.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "DOM Parsing and Serialization" spec. -// See: https://w3c.github.io/DOM-Parsing/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: DOM Parsing and Serialization (https://w3c.github.io/DOM-Parsing/) [Constructor, Exposed=Window] interface DOMParser {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/FileAPI.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/FileAPI.idl index 42e51d0..1fd6bac 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/FileAPI.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/FileAPI.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "File API" spec. -// See: https://w3c.github.io/FileAPI/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: File API (https://w3c.github.io/FileAPI/) [Constructor(optional sequence<BlobPart> blobParts, optional BlobPropertyBag options),
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/IndexedDB.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/IndexedDB.idl index 2aa6e2c..3982d11 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/IndexedDB.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/IndexedDB.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Indexed Database API 3.0" spec. -// See: https://w3c.github.io/IndexedDB/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Indexed Database API 3.0 (https://w3c.github.io/IndexedDB/) [Exposed=(Window,Worker)] interface IDBRequest : EventTarget {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/InputDeviceCapabilities.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/InputDeviceCapabilities.idl index 868d8171..17f74b6 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/InputDeviceCapabilities.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/InputDeviceCapabilities.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Input Device Capabilities" spec. -// See: https://wicg.github.io/InputDeviceCapabilities/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Input Device Capabilities (https://wicg.github.io/InputDeviceCapabilities/) [Constructor(optional InputDeviceCapabilitiesInit deviceInitDict)] interface InputDeviceCapabilities {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/ResizeObserver.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/ResizeObserver.idl index a75a11c..fc56faf4 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/ResizeObserver.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/ResizeObserver.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Resize Observer 1" spec. -// See: https://wicg.github.io/ResizeObserver/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Resize Observer 1 (https://wicg.github.io/ResizeObserver/) [Constructor(ResizeObserverCallback callback), Exposed=Window]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/SRI.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/SRI.idl index 2d0d21f..3abb66c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/SRI.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/SRI.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Subresource Integrity" spec. -// See: https://w3c.github.io/webappsec-subresource-integrity/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Subresource Integrity (https://w3c.github.io/webappsec-subresource-integrity/) partial interface HTMLLinkElement { attribute DOMString integrity;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/SVG.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/SVG.idl index 1c34e47..2ab3741 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/SVG.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/SVG.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Scalable Vector Graphics (SVG) 2" spec. -// See: https://svgwg.org/svg2-draft/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Scalable Vector Graphics (SVG) 2 (https://svgwg.org/svg2-draft/) [Exposed=Window] interface SVGElement : Element {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/WebCryptoAPI.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/WebCryptoAPI.idl index 0405119..0b515fc 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/WebCryptoAPI.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/WebCryptoAPI.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Web Cryptography API" spec. -// See: https://w3c.github.io/webcrypto/Overview.html +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Web Cryptography API (https://w3c.github.io/webcrypto/Overview.html) partial interface mixin WindowOrWorkerGlobalScope { readonly attribute Crypto crypto;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/WebIDL.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/WebIDL.idl index 2dc5212..aa8d5ba 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/WebIDL.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/WebIDL.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Web IDL" spec. -// See: https://heycam.github.io/webidl/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Web IDL (https://heycam.github.io/webidl/) typedef (Int8Array or Int16Array or Int32Array or Uint8Array or Uint16Array or Uint32Array or Uint8ClampedArray or
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/accelerometer.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/accelerometer.idl index aa1a840..8be7d09 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/accelerometer.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/accelerometer.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Accelerometer" spec. -// See: https://w3c.github.io/accelerometer/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Accelerometer (https://w3c.github.io/accelerometer/) [Constructor(optional AccelerometerSensorOptions options), SecureContext, Exposed=Window]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/ambient-light.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/ambient-light.idl index 46c89ee8..e861cc5 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/ambient-light.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/ambient-light.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Ambient Light Sensor" spec. -// See: https://w3c.github.io/ambient-light/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Ambient Light Sensor (https://w3c.github.io/ambient-light/) [Constructor(optional SensorOptions sensorOptions), SecureContext, Exposed=Window] interface AmbientLightSensor : Sensor {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/appmanifest.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/appmanifest.idl index 273b4f0..a55db279 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/appmanifest.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/appmanifest.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Web App Manifest" spec. -// See: https://w3c.github.io/manifest/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Web App Manifest (https://w3c.github.io/manifest/) enum AppBannerPromptOutcome { "accepted",
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/audio-output.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/audio-output.idl index c1869ab..c8efd4e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/audio-output.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/audio-output.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Audio Output Devices API" spec. -// See: https://w3c.github.io/mediacapture-output/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Audio Output Devices API (https://w3c.github.io/mediacapture-output/) partial interface HTMLMediaElement { readonly attribute DOMString sinkId;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/battery-status.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/battery-status.idl index fca24cd..1dcaabb0 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/battery-status.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/battery-status.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Battery Status API" spec. -// See: https://w3c.github.io/battery/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Battery Status API (https://w3c.github.io/battery/) partial interface Navigator { Promise<BatteryManager> getBattery();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/beacon.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/beacon.idl index 66344856..c5e3465c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/beacon.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/beacon.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Beacon" spec. -// See: https://w3c.github.io/beacon/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Beacon (https://w3c.github.io/beacon/) partial interface Navigator { boolean sendBeacon(USVString url, optional BodyInit? data = null);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/budget-api.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/budget-api.idl index 957e8f2..fc86f41 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/budget-api.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/budget-api.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Web Budget API" spec. -// See: https://wicg.github.io/budget-api/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Web Budget API (https://wicg.github.io/budget-api/) [Exposed=Window] partial interface Navigator {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/clipboard-apis.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/clipboard-apis.idl index 2fb5ab4..e48ca6a 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/clipboard-apis.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/clipboard-apis.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Clipboard API and events" spec. -// See: https://w3c.github.io/clipboard-apis/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Clipboard API and events (https://w3c.github.io/clipboard-apis/) dictionary ClipboardEventInit : EventInit { DataTransfer? clipboardData = null;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/compat.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/compat.idl index a0dbc789..fe77a2f 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/compat.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/compat.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Compatibility Standard" spec. -// See: https://compat.spec.whatwg.org/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Compatibility Standard (https://compat.spec.whatwg.org/) partial interface Window { readonly attribute short orientation;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/console.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/console.idl index 32729ec..5313071 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/console.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/console.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Console Standard" spec. -// See: https://console.spec.whatwg.org/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Console Standard (https://console.spec.whatwg.org/) [Exposed=(Window,Worker,Worklet)] namespace console { // but see namespace object requirements below
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/cors-rfc1918.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/cors-rfc1918.idl index f00d4fa..6b3954f 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/cors-rfc1918.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/cors-rfc1918.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CORS and RFC1918" spec. -// See: https://wicg.github.io/cors-rfc1918/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CORS and RFC1918 (https://wicg.github.io/cors-rfc1918/) enum AddressSpace { "local", "private", "public" };
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/credential-management.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/credential-management.idl index 7c3a928a..c60fa4e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/credential-management.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/credential-management.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Credential Management Level 1" spec. -// See: https://w3c.github.io/webappsec-credential-management/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Credential Management Level 1 (https://w3c.github.io/webappsec-credential-management/) [Exposed=Window, SecureContext] interface Credential {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/csp-embedded-enforcement.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/csp-embedded-enforcement.idl index 7d752eb..a213fe1 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/csp-embedded-enforcement.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/csp-embedded-enforcement.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Content Security Policy: Embedded Enforcement" spec. -// See: https://w3c.github.io/webappsec-csp/embedded/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Content Security Policy: Embedded Enforcement (https://w3c.github.io/webappsec-csp/embedded/) partial interface HTMLIFrameElement { [CEReactions] attribute DOMString csp;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-animations.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-animations.idl index 8511f8e7..cd5f601 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-animations.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-animations.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CSS Animations Level 1" spec. -// See: https://drafts.csswg.org/css-animations/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CSS Animations Level 1 (https://drafts.csswg.org/css-animations/) [Exposed=Window, Constructor(CSSOMString type, optional AnimationEventInit animationEventInitDict)]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-conditional.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-conditional.idl index bfc384db3..8f928ad4 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-conditional.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-conditional.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CSS Conditional Rules Module Level 3" spec. -// See: https://drafts.csswg.org/css-conditional-3/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CSS Conditional Rules Module Level 3 (https://drafts.csswg.org/css-conditional-3/) partial interface CSSRule { const unsigned short SUPPORTS_RULE = 12;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-counter-styles.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-counter-styles.idl index b1c3663..5ed4d61 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-counter-styles.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-counter-styles.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CSS Counter Styles Level 3" spec. -// See: https://drafts.csswg.org/css-counter-styles/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CSS Counter Styles Level 3 (https://drafts.csswg.org/css-counter-styles/) partial interface CSSRule { const unsigned short COUNTER_STYLE_RULE = 11;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-font-loading.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-font-loading.idl index 3b5a2bc..c2ef551 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-font-loading.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-font-loading.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CSS Font Loading Module Level 3" spec. -// See: https://drafts.csswg.org/css-font-loading/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CSS Font Loading Module Level 3 (https://drafts.csswg.org/css-font-loading/) typedef (ArrayBuffer or ArrayBufferView) BinaryData;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-fonts.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-fonts.idl index 7cb29f2..1256e6c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-fonts.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-fonts.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CSS Fonts Module Level 4" spec. -// See: https://drafts.csswg.org/css-fonts-4/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CSS Fonts Module Level 4 (https://drafts.csswg.org/css-fonts-4/) [Exposed=Window] interface CSSFontFaceRule : CSSRule {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-images.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-images.idl index 0dbac1c..6067701 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-images.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-images.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CSS Images Module Level 4" spec. -// See: https://drafts.csswg.org/css-images-4/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CSS Images Module Level 4 (https://drafts.csswg.org/css-images-4/) partial namespace CSS { // [SameObject] readonly attribute Map elementSources;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-masking.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-masking.idl index 726e0a0..80f908d4 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-masking.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-masking.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CSS Masking Module Level 1" spec. -// See: https://drafts.fxtf.org/css-masking-1/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CSS Masking Module Level 1 (https://drafts.fxtf.org/css-masking-1/) interface SVGClipPathElement : SVGElement { readonly attribute SVGAnimatedEnumeration clipPathUnits;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-properties-values-api.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-properties-values-api.idl index a151ae9..4ba38970e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-properties-values-api.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-properties-values-api.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CSS Properties and Values API Level 1" spec. -// See: https://drafts.css-houdini.org/css-properties-values-api-1/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CSS Properties and Values API Level 1 (https://drafts.css-houdini.org/css-properties-values-api-1/) dictionary PropertyDescriptor { required DOMString name;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-pseudo.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-pseudo.idl index 957c019..e16e66d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-pseudo.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-pseudo.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CSS Pseudo-Elements Module Level 4" spec. -// See: https://drafts.csswg.org/css-pseudo-4/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CSS Pseudo-Elements Module Level 4 (https://drafts.csswg.org/css-pseudo-4/) [Exposed=Window] interface CSSPseudoElement {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-regions.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-regions.idl index 546c21ad..1e23960 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-regions.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-regions.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CSS Regions Module Level 1" spec. -// See: https://drafts.csswg.org/css-regions/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CSS Regions Module Level 1 (https://drafts.csswg.org/css-regions/) partial interface Document { readonly attribute NamedFlowMap namedFlows;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-transitions.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-transitions.idl index 478318d9..20669f4 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-transitions.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-transitions.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CSS Transitions" spec. -// See: https://drafts.csswg.org/css-transitions/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CSS Transitions (https://drafts.csswg.org/css-transitions/) [Exposed=Window, Constructor(CSSOMString type, optional TransitionEventInit transitionEventInitDict)]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-typed-om.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-typed-om.idl index fa20d2d..3b2a9698 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-typed-om.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/css-typed-om.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CSS Typed OM Level 1" spec. -// See: https://drafts.css-houdini.org/css-typed-om-1/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CSS Typed OM Level 1 (https://drafts.css-houdini.org/css-typed-om-1/) [Exposed=(Window, Worker, PaintWorklet, LayoutWorklet)] interface CSSStyleValue {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/cssom-view.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/cssom-view.idl index 62be504..0213a40 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/cssom-view.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/cssom-view.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CSSOM View Module" spec. -// See: https://drafts.csswg.org/cssom-view/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CSSOM View Module (https://drafts.csswg.org/cssom-view/) enum ScrollBehavior { "auto", "instant", "smooth" };
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/cssom.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/cssom.idl index 510fa4d..7d9536d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/cssom.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/cssom.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "CSS Object Model (CSSOM)" spec. -// See: https://drafts.csswg.org/cssom/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: CSS Object Model (CSSOM) (https://drafts.csswg.org/cssom/) typedef USVString CSSOMString;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/encoding.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/encoding.idl index 7788464..7d55ce7 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/encoding.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/encoding.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Encoding Standard" spec. -// See: https://encoding.spec.whatwg.org/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Encoding Standard (https://encoding.spec.whatwg.org/) dictionary TextDecoderOptions { boolean fatal = false;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/encrypted-media.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/encrypted-media.idl index 8c2e8d2..61e8693 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/encrypted-media.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/encrypted-media.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Encrypted Media Extensions" spec. -// See: https://w3c.github.io/encrypted-media/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Encrypted Media Extensions (https://w3c.github.io/encrypted-media/) [Exposed=Window] partial interface Navigator {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/entries-api.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/entries-api.idl index 3e5b63c..71e80c7 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/entries-api.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/entries-api.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "File and Directory Entries API" spec. -// See: https://wicg.github.io/entries-api/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: File and Directory Entries API (https://wicg.github.io/entries-api/) partial interface File { readonly attribute USVString webkitRelativePath;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/fetch.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/fetch.idl index ec68a6d..e86a282 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/fetch.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/fetch.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Fetch Standard" spec. -// See: https://fetch.spec.whatwg.org/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Fetch Standard (https://fetch.spec.whatwg.org/) typedef (sequence<sequence<ByteString>> or record<ByteString, ByteString>) HeadersInit;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/filter-effects.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/filter-effects.idl index 8ea9a86b..16e6f0a 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/filter-effects.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/filter-effects.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Filter Effects Module Level 1" spec. -// See: https://drafts.fxtf.org/filter-effects/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Filter Effects Module Level 1 (https://drafts.fxtf.org/filter-effects/) interface SVGFilterElement : SVGElement { readonly attribute SVGAnimatedEnumeration filterUnits;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/fullscreen.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/fullscreen.idl index 4b75bcd..604dd3fe 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/fullscreen.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/fullscreen.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Fullscreen API Standard" spec. -// See: https://fullscreen.spec.whatwg.org/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Fullscreen API Standard (https://fullscreen.spec.whatwg.org/) partial interface Element { Promise<void> requestFullscreen();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/gamepad.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/gamepad.idl index 9fed140..c0dee67b 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/gamepad.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/gamepad.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Gamepad" spec. -// See: https://w3c.github.io/gamepad/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Gamepad (https://w3c.github.io/gamepad/) [Exposed=Window] interface Gamepad {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/generic-sensor.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/generic-sensor.idl index 34505a6..fd794cb1 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/generic-sensor.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/generic-sensor.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Generic Sensor API" spec. -// See: https://w3c.github.io/sensors/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Generic Sensor API (https://w3c.github.io/sensors/) [SecureContext, Exposed=Window] interface Sensor : EventTarget {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/geolocation-API.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/geolocation-API.idl index c36fb8b..8bb3dd7 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/geolocation-API.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/geolocation-API.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Geolocation API Specification 2nd Edition" spec. -// See: https://www.w3.org/TR/geolocation-API/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Geolocation API Specification 2nd Edition (https://www.w3.org/TR/geolocation-API/) partial interface Navigator { readonly attribute Geolocation geolocation;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/geolocation-sensor.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/geolocation-sensor.idl index 7ee6239..40a1647 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/geolocation-sensor.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/geolocation-sensor.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Geolocation Sensor" spec. -// See: https://wicg.github.io/geolocation-sensor/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Geolocation Sensor (https://wicg.github.io/geolocation-sensor/) [Constructor(optional GeolocationSensorOptions options), SecureContext, Exposed=Window] interface GeolocationSensor : Sensor {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/geometry.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/geometry.idl index b91eb64..733a111 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/geometry.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/geometry.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Geometry Interfaces Module Level 1" spec. -// See: https://drafts.fxtf.org/geometry/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Geometry Interfaces Module Level 1 (https://drafts.fxtf.org/geometry/) [Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0, optional unrestricted double z = 0, optional unrestricted double w = 1),
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/gyroscope.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/gyroscope.idl index 66303fe2..d71fd367 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/gyroscope.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/gyroscope.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Gyroscope" spec. -// See: https://w3c.github.io/gyroscope/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Gyroscope (https://w3c.github.io/gyroscope/) [Constructor(optional GyroscopeSensorOptions sensorOptions), SecureContext, Exposed=Window] interface Gyroscope : Sensor {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/hr-time.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/hr-time.idl index ca15cf8..33d602cf 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/hr-time.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/hr-time.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "High Resolution Time Level 2" spec. -// See: https://w3c.github.io/hr-time/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: High Resolution Time Level 2 (https://w3c.github.io/hr-time/) typedef double DOMHighResTimeStamp;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/html-media-capture.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/html-media-capture.idl index a398330..3a8c1216 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/html-media-capture.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/html-media-capture.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "HTML Media Capture" spec. -// See: https://w3c.github.io/html-media-capture/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: HTML Media Capture (https://w3c.github.io/html-media-capture/) partial interface HTMLInputElement { [CEReactions] attribute DOMString capture;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/image-capture.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/image-capture.idl index 740475d..424e447 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/image-capture.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/image-capture.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "MediaStream Image Capture" spec. -// See: https://w3c.github.io/mediacapture-image/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: MediaStream Image Capture (https://w3c.github.io/mediacapture-image/) [Exposed=Window, Constructor(MediaStreamTrack videoTrack)] interface ImageCapture {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/input-events.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/input-events.idl index be27636..970bd12 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/input-events.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/input-events.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Input Events Level 1" spec. -// See: https://rawgit.com/w3c/input-events/v1/index.html +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Input Events Level 1 (https://rawgit.com/w3c/input-events/v1/index.html) partial interface InputEvent { readonly attribute DOMString inputType;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/intersection-observer.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/intersection-observer.idl index 83c5d90..b48e1cb 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/intersection-observer.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/intersection-observer.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Intersection Observer" spec. -// See: https://w3c.github.io/IntersectionObserver/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Intersection Observer (https://w3c.github.io/IntersectionObserver/) callback IntersectionObserverCallback = void (sequence<IntersectionObserverEntry> entries, IntersectionObserver observer);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/keyboard-lock.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/keyboard-lock.idl index 4ffffd4..90812ae8 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/keyboard-lock.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/keyboard-lock.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Keyboard Lock" spec. -// See: https://w3c.github.io/keyboard-lock/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Keyboard Lock (https://w3c.github.io/keyboard-lock/) partial interface Navigator { [SecureContext, SameObject] readonly attribute Keyboard keyboard;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/keyboard-map.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/keyboard-map.idl index 3d472361..70aaaffd 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/keyboard-map.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/keyboard-map.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Keyboard Map" spec. -// See: https://wicg.github.io/keyboard-map/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Keyboard Map (https://wicg.github.io/keyboard-map/) [Exposed=Window] partial interface Navigator {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/longtasks.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/longtasks.idl index 8671b17..21bb1dd 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/longtasks.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/longtasks.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Long Tasks API 1" spec. -// See: https://w3c.github.io/longtasks/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Long Tasks API 1 (https://w3c.github.io/longtasks/) interface PerformanceLongTaskTiming : PerformanceEntry { readonly attribute FrozenArray<TaskAttributionTiming> attribution;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/magnetometer.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/magnetometer.idl index 7a558f8..bcc8d4be 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/magnetometer.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/magnetometer.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Magnetometer" spec. -// See: https://w3c.github.io/magnetometer/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Magnetometer (https://w3c.github.io/magnetometer/) [Constructor(optional MagnetometerSensorOptions sensorOptions), SecureContext, Exposed=Window]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/media-capabilities.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/media-capabilities.idl index 05b505d..816949c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/media-capabilities.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/media-capabilities.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Media Capabilities" spec. -// See: https://wicg.github.io/media-capabilities/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Media Capabilities (https://wicg.github.io/media-capabilities/) dictionary MediaConfiguration { VideoConfiguration video;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/media-source.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/media-source.idl index 5e9663a..1d3c02d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/media-source.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/media-source.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Media Source Extensions™" spec. -// See: https://w3c.github.io/media-source/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Media Source Extensions™ (https://w3c.github.io/media-source/) enum ReadyState { "closed",
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediacapture-depth.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediacapture-depth.idl index d28c3cf8..63e839c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediacapture-depth.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediacapture-depth.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Media Capture Depth Stream Extensions" spec. -// See: https://w3c.github.io/mediacapture-depth/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Media Capture Depth Stream Extensions (https://w3c.github.io/mediacapture-depth/) partial dictionary MediaTrackSupportedConstraints { // Apply to both depth stream track and color stream track:
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediacapture-fromelement.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediacapture-fromelement.idl index 003bcb4c..fad2f83 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediacapture-fromelement.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediacapture-fromelement.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Media Capture from DOM Elements" spec. -// See: https://w3c.github.io/mediacapture-fromelement/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Media Capture from DOM Elements (https://w3c.github.io/mediacapture-fromelement/) partial interface HTMLMediaElement { MediaStream captureStream();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediacapture-streams.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediacapture-streams.idl index 1d943ea..b2dc9904 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediacapture-streams.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediacapture-streams.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Media Capture and Streams" spec. -// See: https://w3c.github.io/mediacapture-main/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Media Capture and Streams (https://w3c.github.io/mediacapture-main/) [Exposed=Window, Constructor,
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediasession.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediasession.idl index 3c6935c..7169deed 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediasession.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediasession.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Media Session Standard" spec. -// See: https://wicg.github.io/mediasession/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Media Session Standard (https://wicg.github.io/mediasession/) [Exposed=Window] partial interface Navigator {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediastream-recording.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediastream-recording.idl index 9d28ea2..5bf661e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediastream-recording.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/mediastream-recording.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "MediaStream Recording" spec. -// See: https://w3c.github.io/mediacapture-record/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: MediaStream Recording (https://w3c.github.io/mediacapture-record/) [Exposed=Window, Constructor(MediaStream stream, optional MediaRecorderOptions options)]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/navigation-timing.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/navigation-timing.idl index 7b6f75d..7e76a35 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/navigation-timing.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/navigation-timing.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Navigation Timing Level 2" spec. -// See: https://w3c.github.io/navigation-timing/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Navigation Timing Level 2 (https://w3c.github.io/navigation-timing/) [Exposed=Window] interface PerformanceNavigationTiming : PerformanceResourceTiming {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/netinfo.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/netinfo.idl index 8fd0bba..191e956 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/netinfo.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/netinfo.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Network Information API" spec. -// See: https://wicg.github.io/netinfo/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Network Information API (https://wicg.github.io/netinfo/) enum ConnectionType { "bluetooth",
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/notifications.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/notifications.idl index 2524933d..459d96b 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/notifications.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/notifications.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Notifications API Standard" spec. -// See: https://notifications.spec.whatwg.org/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Notifications API Standard (https://notifications.spec.whatwg.org/) [Constructor(DOMString title, optional NotificationOptions options), Exposed=(Window,Worker)]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/orientation-event.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/orientation-event.idl index 5f874186..bfeca7a 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/orientation-event.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/orientation-event.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "DeviceOrientation Event Specification" spec. -// See: https://w3c.github.io/deviceorientation/spec-source-orientation.html +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: DeviceOrientation Event Specification (https://w3c.github.io/deviceorientation/spec-source-orientation.html) partial interface Window { attribute EventHandler ondeviceorientation;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/orientation-sensor.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/orientation-sensor.idl index cbc3b1a..49acba9e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/orientation-sensor.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/orientation-sensor.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Orientation Sensor" spec. -// See: https://w3c.github.io/orientation-sensor/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Orientation Sensor (https://w3c.github.io/orientation-sensor/) typedef (Float32Array or Float64Array or DOMMatrix) RotationMatrixType;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/page-visibility.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/page-visibility.idl index 6a20eb4..28fda2c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/page-visibility.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/page-visibility.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Page Visibility Level 2" spec. -// See: https://w3c.github.io/page-visibility/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Page Visibility Level 2 (https://w3c.github.io/page-visibility/) enum VisibilityState { "hidden", "visible", "prerender"
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/paint-timing.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/paint-timing.idl index 88ca6c7..a8f065a 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/paint-timing.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/paint-timing.idl
@@ -1,6 +1,6 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Paint Timing 1" spec. -// See: https://w3c.github.io/paint-timing/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Paint Timing 1 (https://w3c.github.io/paint-timing/) interface PerformancePaintTiming : PerformanceEntry {};
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/payment-handler.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/payment-handler.idl index a9e3525..9f10d7e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/payment-handler.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/payment-handler.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Payment Handler API" spec. -// See: https://w3c.github.io/payment-handler/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Payment Handler API (https://w3c.github.io/payment-handler/) partial interface ServiceWorkerRegistration { [SameObject] readonly attribute PaymentManager paymentManager;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/payment-method-basic-card.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/payment-method-basic-card.idl index 3ed8b5a..00d6ad1 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/payment-method-basic-card.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/payment-method-basic-card.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Payment Method: Basic Card" spec. -// See: https://w3c.github.io/payment-method-basic-card/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Payment Method: Basic Card (https://w3c.github.io/payment-method-basic-card/) dictionary BasicCardRequest { sequence<DOMString> supportedNetworks;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/performance-timeline.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/performance-timeline.idl index 0ff9cdc..2ec82476b 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/performance-timeline.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/performance-timeline.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Performance Timeline Level 2" spec. -// See: https://w3c.github.io/performance-timeline/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Performance Timeline Level 2 (https://w3c.github.io/performance-timeline/) partial interface Performance { PerformanceEntryList getEntries();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/permissions.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/permissions.idl index 9b088b27..579019d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/permissions.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/permissions.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Permissions" spec. -// See: https://w3c.github.io/permissions/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Permissions (https://w3c.github.io/permissions/) dictionary PermissionDescriptor { required PermissionName name;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/picture-in-picture.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/picture-in-picture.idl index 78a5ae7..dd379c8 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/picture-in-picture.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/picture-in-picture.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Picture-in-Picture" spec. -// See: https://wicg.github.io/picture-in-picture/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Picture-in-Picture (https://wicg.github.io/picture-in-picture/) partial interface HTMLVideoElement { [NewObject] Promise<PictureInPictureWindow> requestPictureInPicture();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/pointerevents-extension.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/pointerevents-extension.idl index f4f2de3..1eb486d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/pointerevents-extension.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/pointerevents-extension.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "PointerEvents - Level 2 - Extensions" spec. -// See: https://w3c.github.io/pointerevents/extension.html +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: PointerEvents - Level 2 - Extensions (https://w3c.github.io/pointerevents/extension.html) partial dictionary PointerEventInit { sequence<PointerEvent> coalescedEvents = [];
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/pointerevents.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/pointerevents.idl index be4fdd51..da822bba0 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/pointerevents.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/pointerevents.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Pointer Events" spec. -// See: https://w3c.github.io/pointerevents/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Pointer Events (https://w3c.github.io/pointerevents/) dictionary PointerEventInit : MouseEventInit { long pointerId = 0;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/pointerlock.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/pointerlock.idl index a4fd9ce1..fca676d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/pointerlock.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/pointerlock.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Pointer Lock 2.0" spec. -// See: https://w3c.github.io/pointerlock/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Pointer Lock 2.0 (https://w3c.github.io/pointerlock/) partial interface Element { void requestPointerLock();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/presentation-api.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/presentation-api.idl index 14bbbdf9..6ce0f56 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/presentation-api.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/presentation-api.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Presentation API" spec. -// See: https://w3c.github.io/presentation-api/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Presentation API (https://w3c.github.io/presentation-api/) partial interface Navigator { [SecureContext, SameObject] readonly attribute Presentation presentation;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/proximity.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/proximity.idl index b77baa9..3b0d240 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/proximity.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/proximity.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Proximity Sensor" spec. -// See: https://w3c.github.io/proximity/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Proximity Sensor (https://w3c.github.io/proximity/) [Constructor(optional SensorOptions sensorOptions), SecureContext, Exposed=Window] interface ProximitySensor : Sensor {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/push-api.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/push-api.idl index fe7331d6..e0bc5ec9 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/push-api.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/push-api.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Push API" spec. -// See: https://w3c.github.io/push-api/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Push API (https://w3c.github.io/push-api/) [SecureContext] partial interface ServiceWorkerRegistration {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/referrer-policy.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/referrer-policy.idl index 2f5dab3..962f7143 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/referrer-policy.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/referrer-policy.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Referrer Policy" spec. -// See: https://w3c.github.io/webappsec-referrer-policy/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Referrer Policy (https://w3c.github.io/webappsec-referrer-policy/) enum ReferrerPolicy { "",
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/remote-playback.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/remote-playback.idl index 8cea3f41..8321e59 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/remote-playback.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/remote-playback.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Remote Playback API" spec. -// See: https://w3c.github.io/remote-playback/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Remote Playback API (https://w3c.github.io/remote-playback/) [Exposed=Window] interface RemotePlayback : EventTarget {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/requestidlecallback.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/requestidlecallback.idl index 6144781..812cc0e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/requestidlecallback.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/requestidlecallback.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Cooperative Scheduling of Background Tasks" spec. -// See: https://w3c.github.io/requestidlecallback/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Cooperative Scheduling of Background Tasks (https://w3c.github.io/requestidlecallback/) partial interface Window { unsigned long requestIdleCallback(IdleRequestCallback callback, optional IdleRequestOptions options);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/resource-timing.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/resource-timing.idl index 2668f91..fc14253f5e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/resource-timing.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/resource-timing.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Resource Timing Level 2" spec. -// See: https://w3c.github.io/resource-timing/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Resource Timing Level 2 (https://w3c.github.io/resource-timing/) [Exposed=(Window,Worker)] interface PerformanceResourceTiming : PerformanceEntry {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/screen-capture.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/screen-capture.idl index ae96a3c..668f4588 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/screen-capture.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/screen-capture.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Screen Capture" spec. -// See: https://w3c.github.io/mediacapture-screen-share/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Screen Capture (https://w3c.github.io/mediacapture-screen-share/) partial interface Navigator { Promise<MediaStream> getDisplayMedia(optional MediaStreamConstraints constraints);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/screen-orientation.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/screen-orientation.idl index 7420248..2304cc2 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/screen-orientation.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/screen-orientation.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "The Screen Orientation API" spec. -// See: https://w3c.github.io/screen-orientation/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: The Screen Orientation API (https://w3c.github.io/screen-orientation/) partial interface Screen { [SameObject] readonly attribute ScreenOrientation orientation;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/scroll-animations.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/scroll-animations.idl index 5529cfa..4e4f962 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/scroll-animations.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/scroll-animations.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Scroll-linked Animations" spec. -// See: https://wicg.github.io/scroll-animations/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Scroll-linked Animations (https://wicg.github.io/scroll-animations/) enum ScrollDirection { "auto",
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/secure-contexts.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/secure-contexts.idl index 15bf275..c4a3eca 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/secure-contexts.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/secure-contexts.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Secure Contexts" spec. -// See: https://w3c.github.io/webappsec-secure-contexts/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Secure Contexts (https://w3c.github.io/webappsec-secure-contexts/) partial interface WindowOrWorkerGlobalScope { readonly attribute boolean isSecureContext;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/selection-api.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/selection-api.idl index 6e814ea..b639517 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/selection-api.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/selection-api.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Selection API" spec. -// See: https://w3c.github.io/selection-api/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Selection API (https://w3c.github.io/selection-api/) interface Selection { readonly attribute Node? anchorNode;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/server-timing.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/server-timing.idl index 8f5cf61..bf7488d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/server-timing.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/server-timing.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Server Timing" spec. -// See: https://w3c.github.io/server-timing/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Server Timing (https://w3c.github.io/server-timing/) [Exposed=(Window,Worker)] interface PerformanceServerTiming {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/shape-detection-api.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/shape-detection-api.idl index 8f80098..dbdf022e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/shape-detection-api.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/shape-detection-api.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Accelerated Shape Detection in Images" spec. -// See: https://wicg.github.io/shape-detection-api/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Accelerated Shape Detection in Images (https://wicg.github.io/shape-detection-api/) [Exposed=(Window,Worker), Constructor(optional FaceDetectorOptions faceDetectorOptions)]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/storage.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/storage.idl index 33ce213b..2960324 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/storage.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/storage.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Storage Standard" spec. -// See: https://storage.spec.whatwg.org/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Storage Standard (https://storage.spec.whatwg.org/) [SecureContext] interface mixin NavigatorStorage {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/touch-events.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/touch-events.idl index 097b0e9..0bedbf89 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/touch-events.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/touch-events.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Touch Events - Level 2" spec. -// See: https://w3c.github.io/touch-events/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Touch Events - Level 2 (https://w3c.github.io/touch-events/) enum TouchType { "direct",
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/uievents.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/uievents.idl index 5e2a1871..ba618d7c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/uievents.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/uievents.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "UI Events" spec. -// See: https://w3c.github.io/uievents/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: UI Events (https://w3c.github.io/uievents/) [Constructor(DOMString type, optional UIEventInit eventInitDict), Exposed=Window] interface UIEvent : Event {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/url.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/url.idl index f1a6276..998052d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/url.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/url.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "URL Standard" spec. -// See: https://url.spec.whatwg.org/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: URL Standard (https://url.spec.whatwg.org/) [Constructor(USVString url, optional USVString base), Exposed=(Window,Worker),
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/user-timing.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/user-timing.idl index 74139c6..60b22776 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/user-timing.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/user-timing.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "User Timing Level 2" spec. -// See: https://w3c.github.io/user-timing/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: User Timing Level 2 (https://w3c.github.io/user-timing/) partial interface Performance { void mark(DOMString markName);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/vibration.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/vibration.idl index 758ffda..f4191d9 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/vibration.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/vibration.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Vibration API (Second Edition)" spec. -// See: https://w3c.github.io/vibration/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Vibration API (Second Edition) (https://w3c.github.io/vibration/) typedef (unsigned long or sequence<unsigned long>) VibratePattern;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/wake-lock.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/wake-lock.idl index 384468a..ac8b70c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/wake-lock.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/wake-lock.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Wake Lock API" spec. -// See: https://w3c.github.io/wake-lock/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Wake Lock API (https://w3c.github.io/wake-lock/) enum WakeLockType { "screen", "system" };
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/wasm-js-api.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/wasm-js-api.idl index 646fcf0..04c817d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/wasm-js-api.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/wasm-js-api.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "WebAssembly JavaScript Interface" spec. -// See: https://webassembly.github.io/spec/js-api/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: WebAssembly JavaScript Interface (https://webassembly.github.io/spec/js-api/) dictionary WebAssemblyInstantiatedSource { required Module module;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-animations.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-animations.idl index b0c6b64..2e66d6f 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-animations.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-animations.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Web Animations" spec. -// See: https://w3c.github.io/web-animations/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Web Animations (https://w3c.github.io/web-animations/) [Exposed=Window] interface AnimationTimeline {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-bluetooth.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-bluetooth.idl index f8f039e..d372f02 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-bluetooth.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-bluetooth.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Web Bluetooth" spec. -// See: https://webbluetoothcg.github.io/web-bluetooth/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Web Bluetooth (https://webbluetoothcg.github.io/web-bluetooth/) dictionary BluetoothDataFilterInit { BufferSource dataPrefix;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-nfc.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-nfc.idl index fca52e88..cdb0e756 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-nfc.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-nfc.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Web NFC API" spec. -// See: https://w3c.github.io/web-nfc/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Web NFC API (https://w3c.github.io/web-nfc/) dictionary NFCMessage { sequence<NFCRecord> records;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-share.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-share.idl index 176cc57..36ffa43 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-share.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/web-share.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Web Share API" spec. -// See: https://wicg.github.io/web-share/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Web Share API (https://wicg.github.io/web-share/) partial interface Navigator { [SecureContext] Promise<void> share(optional ShareData data);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webaudio.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webaudio.idl index 0ea32e50..14bb62b8 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webaudio.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webaudio.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Web Audio API" spec. -// See: https://webaudio.github.io/web-audio-api/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Web Audio API (https://webaudio.github.io/web-audio-api/) enum AudioContextState { "suspended",
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webauthn.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webauthn.idl index 1347986..becf8dd 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webauthn.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webauthn.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Web Authentication: An API for accessing Public Key Credentials - Level 1" spec. -// See: https://w3c.github.io/webauthn/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Web Authentication: An API for accessing Public Key Credentials - Level 1 (https://w3c.github.io/webauthn/) [SecureContext, Exposed=Window] interface PublicKeyCredential : Credential {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webdriver.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webdriver.idl index 10343d91..00dc148 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webdriver.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webdriver.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "WebDriver" spec. -// See: https://w3c.github.io/webdriver/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: WebDriver (https://w3c.github.io/webdriver/) Navigator includes NavigatorAutomationInformation;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webmidi.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webmidi.idl index bc5c3b79..769433b1 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webmidi.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webmidi.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Web MIDI API" spec. -// See: http://webaudio.github.io/web-midi-api/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Web MIDI API (http://webaudio.github.io/web-midi-api/) partial interface Navigator { Promise<MIDIAccess> requestMIDIAccess(optional MIDIOptions options);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webrtc-stats.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webrtc-stats.idl index 0b2474a5..ee5cce40 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webrtc-stats.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webrtc-stats.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Identifiers for WebRTC's Statistics API" spec. -// See: https://w3c.github.io/webrtc-stats/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Identifiers for WebRTC's Statistics API (https://w3c.github.io/webrtc-stats/) dictionary RTCStats { DOMHighResTimeStamp timestamp;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webusb.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webusb.idl index edbbf03..fcca851b 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webusb.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webusb.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "WebUSB API" spec. -// See: https://wicg.github.io/webusb/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: WebUSB API (https://wicg.github.io/webusb/) dictionary USBDeviceFilter { unsigned short vendorId;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webvtt.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webvtt.idl index 7032fce..81a23a35 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webvtt.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webvtt.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "WebVTT: The Web Video Text Tracks Format" spec. -// See: https://w3c.github.io/webvtt/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: WebVTT: The Web Video Text Tracks Format (https://w3c.github.io/webvtt/) enum AutoKeyword { "auto" }; typedef (double or AutoKeyword) LineAndPositionSetting;
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webxr.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webxr.idl index 2b90859..563c4e0 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/webxr.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/webxr.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "WebXR Device API" spec. -// See: https://immersive-web.github.io/webxr/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: WebXR Device API (https://immersive-web.github.io/webxr/) [SecureContext, Exposed=Window] interface XR : EventTarget { // Methods
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/worklets.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/worklets.idl index 1c93fe5..22d04d1 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/worklets.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/worklets.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "Worklets Level 1" spec. -// See: https://drafts.css-houdini.org/worklets/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: Worklets Level 1 (https://drafts.css-houdini.org/worklets/) [Exposed=Worklet] interface WorkletGlobalScope {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/interfaces/xhr.idl b/third_party/WebKit/LayoutTests/external/wpt/interfaces/xhr.idl index 559b5537..27660bf 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/interfaces/xhr.idl +++ b/third_party/WebKit/LayoutTests/external/wpt/interfaces/xhr.idl
@@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT -// Content of this file was automatically extracted from the -// "XMLHttpRequest Standard" spec. -// See: https://xhr.spec.whatwg.org/ +// Content was automatically extracted by Reffy into reffy-reports +// (https://github.com/tidoust/reffy-reports) +// Source: XMLHttpRequest Standard (https://xhr.spec.whatwg.org/) [Exposed=(Window,DedicatedWorker,SharedWorker)] interface XMLHttpRequestEventTarget : EventTarget {
diff --git a/third_party/WebKit/LayoutTests/external/wpt/storage/idlharness.https.any.js b/third_party/WebKit/LayoutTests/external/wpt/storage/idlharness.https.any.js new file mode 100644 index 0000000..0ce4d5a0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/storage/idlharness.https.any.js
@@ -0,0 +1,17 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +'use strict'; + +idl_test( + ['storage'], + ['html'], + idl_array => { + idl_array.add_objects({ StorageManager: ['navigator.storage'] }); + if (self.Window) { + idl_array.add_objects({ Navigator: ['navigator'] }); + } else { + idl_array.add_objects({ WorkerNavigator: ['navigator'] }); + } + } +);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/storage/interfaces.https.html b/third_party/WebKit/LayoutTests/external/wpt/storage/interfaces.https.html deleted file mode 100644 index 4e79ae2..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/storage/interfaces.https.html +++ /dev/null
@@ -1,30 +0,0 @@ -<!doctype html> -<meta charset=utf-8> -<title>Storage API IDL tests</title> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="/resources/WebIDLParser.js"></script> -<script src="/resources/idlharness.js"></script> - -<script> -'use strict'; -promise_test(t => { - return fetch('/interfaces/storage.idl') - .then(response => response.text()) - .then(idls => { - var idl_array = new IdlArray(); - - idl_array.add_untested_idls('interface Navigator {};'); - idl_array.add_untested_idls('[Exposed=Worker] interface WorkerNavigator {};'); - - idl_array.add_idls(idls); - - idl_array.add_objects({ - StorageManager: ['navigator.storage'] - }); - - idl_array.test(); - t.done(); - }); -}, 'Storage API IDL test'); -</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/storage/interfaces.https.worker.js b/third_party/WebKit/LayoutTests/external/wpt/storage/interfaces.https.worker.js deleted file mode 100644 index c0d9e03..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/storage/interfaces.https.worker.js +++ /dev/null
@@ -1,26 +0,0 @@ -'use strict'; - -importScripts('/resources/testharness.js'); -importScripts('/resources/WebIDLParser.js', '/resources/idlharness.js'); - -promise_test(t => { - return fetch('/interfaces/storage.idl') - .then(response => response.text()) - .then(idls => { - var idl_array = new IdlArray(); - - idl_array.add_untested_idls('interface Navigator {};'); - idl_array.add_untested_idls('[Exposed=Worker] interface WorkerNavigator {};'); - - idl_array.add_idls(idls); - - idl_array.add_objects({ - StorageManager: ['navigator.storage'] - }); - - idl_array.test(); - t.done(); - }); -}, 'Storage API IDL test'); - -done();
diff --git a/third_party/WebKit/LayoutTests/external/wpt/svg/render/reftests/blending-svg-foreign-object-ref.html b/third_party/WebKit/LayoutTests/external/wpt/svg/render/reftests/blending-svg-foreign-object-ref.html new file mode 100644 index 0000000..021be358 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/svg/render/reftests/blending-svg-foreign-object-ref.html
@@ -0,0 +1,9 @@ +<!DOCTYPE html> +<div style="background: green"> + <div>Expected: a black square on green background.</div> + <svg style="height: 200px"> + <foreignObject> + <div style="width: 200px; height: 200px; background: black"></div> + </foreignObject> + </svg> +</div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/svg/render/reftests/blending-svg-foreign-object.html b/third_party/WebKit/LayoutTests/external/wpt/svg/render/reftests/blending-svg-foreign-object.html new file mode 100644 index 0000000..24f87ae5 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/svg/render/reftests/blending-svg-foreign-object.html
@@ -0,0 +1,12 @@ +<!DOCTYPE html> +<title>'mix-blend-mode' for <svg:foreignObject></title> +<link rel="help" href="https://www.w3.org/TR/SVG2/render.html#PaintersModel"> +<link rel="match" href="blending-svg-foreign-object-ref.html"> +<div style="background: green"> + <div>Expected: a black square on green background.</div> + <svg style="width: 200px; height: 200px"> + <foreignObject style="mix-blend-mode: multiply"> + <div style="width: 200px; height: 200px; background: red"></div> + </foreignObject> + </svg> +</div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/svg/render/reftests/blending-svg-root-ref.html b/third_party/WebKit/LayoutTests/external/wpt/svg/render/reftests/blending-svg-root-ref.html new file mode 100644 index 0000000..35f278c --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/svg/render/reftests/blending-svg-root-ref.html
@@ -0,0 +1,6 @@ +<!DOCTYPE html> +<div style="background: green"> + <div>Expected: a black square on green background.</div> + <svg style="width: 200px; height: 200px; background: black"> + </svg> +</div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/svg/render/reftests/blending-svg-root.html b/third_party/WebKit/LayoutTests/external/wpt/svg/render/reftests/blending-svg-root.html new file mode 100644 index 0000000..7cbf68d --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/svg/render/reftests/blending-svg-root.html
@@ -0,0 +1,9 @@ +<!DOCTYPE html> +<title>'mix-blend-mode' for <svg></title> +<link rel="help" href="https://www.w3.org/TR/SVG2/render.html#PaintersModel"> +<link rel="match" href="blending-svg-root-ref.html"> +<div style="background: green"> + <div>Expected: a black square on green background.</div> + <svg style="mix-blend-mode: multiply; width: 200px; height: 200px; background: red"> + </svg> +</div>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/url/idlharness.any-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/url/idlharness.any-expected.txt new file mode 100644 index 0000000..dae5324 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/url/idlharness.any-expected.txt
@@ -0,0 +1,82 @@ +This is a testharness.js-based test. +Found 78 tests; 75 PASS, 3 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS idl_test setup +PASS URL interface: existence and properties of interface object +PASS URL interface object length +PASS URL interface object name +PASS URL interface: legacy window alias +PASS URL interface: existence and properties of interface prototype object +PASS URL interface: existence and properties of interface prototype object's "constructor" property +PASS URL interface: existence and properties of interface prototype object's @@unscopables property +PASS URL interface: attribute href +PASS URL interface: stringifier +PASS URL interface: attribute origin +PASS URL interface: attribute protocol +PASS URL interface: attribute username +PASS URL interface: attribute password +PASS URL interface: attribute host +PASS URL interface: attribute hostname +PASS URL interface: attribute port +PASS URL interface: attribute pathname +PASS URL interface: attribute search +PASS URL interface: attribute searchParams +PASS URL interface: attribute hash +FAIL URL interface: operation toJSON() assert_own_property: interface prototype object missing non-static operation expected property "toJSON" missing +PASS URL must be primary interface of new URL("http://foo") +PASS Stringification of new URL("http://foo") +PASS URL interface: new URL("http://foo") must inherit property "href" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "origin" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "protocol" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "username" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "password" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "host" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "hostname" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "port" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "pathname" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "search" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "searchParams" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "hash" with the proper type +FAIL URL interface: new URL("http://foo") must inherit property "toJSON()" with the proper type assert_inherits: property "toJSON" not found in prototype chain +FAIL Test toJSON operation of URL memberHolderObject.toJSON is not a function +PASS URLSearchParams interface: existence and properties of interface object +PASS URLSearchParams interface object length +PASS URLSearchParams interface object name +PASS URLSearchParams interface: existence and properties of interface prototype object +PASS URLSearchParams interface: existence and properties of interface prototype object's "constructor" property +PASS URLSearchParams interface: existence and properties of interface prototype object's @@unscopables property +PASS URLSearchParams interface: operation append(USVString, USVString) +PASS URLSearchParams interface: operation delete(USVString) +PASS URLSearchParams interface: operation get(USVString) +PASS URLSearchParams interface: operation getAll(USVString) +PASS URLSearchParams interface: operation has(USVString) +PASS URLSearchParams interface: operation set(USVString, USVString) +PASS URLSearchParams interface: operation sort() +PASS Testing Symbol.iterator property of iterable interface URLSearchParams +PASS Testing pair iterable interface URLSearchParams +PASS URLSearchParams interface: stringifier +PASS URLSearchParams interface: operation entries() +PASS URLSearchParams interface: operation keys() +PASS URLSearchParams interface: operation values() +PASS URLSearchParams interface: operation forEach(function, any) +PASS URLSearchParams must be primary interface of new URLSearchParams("hi=there&thank=you") +PASS Stringification of new URLSearchParams("hi=there&thank=you") +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "append(USVString, USVString)" with the proper type +PASS URLSearchParams interface: calling append(USVString, USVString) on new URLSearchParams("hi=there&thank=you") with too few arguments must throw TypeError +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "delete(USVString)" with the proper type +PASS URLSearchParams interface: calling delete(USVString) on new URLSearchParams("hi=there&thank=you") with too few arguments must throw TypeError +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "get(USVString)" with the proper type +PASS URLSearchParams interface: calling get(USVString) on new URLSearchParams("hi=there&thank=you") with too few arguments must throw TypeError +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "getAll(USVString)" with the proper type +PASS URLSearchParams interface: calling getAll(USVString) on new URLSearchParams("hi=there&thank=you") with too few arguments must throw TypeError +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "has(USVString)" with the proper type +PASS URLSearchParams interface: calling has(USVString) on new URLSearchParams("hi=there&thank=you") with too few arguments must throw TypeError +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "set(USVString, USVString)" with the proper type +PASS URLSearchParams interface: calling set(USVString, USVString) on new URLSearchParams("hi=there&thank=you") with too few arguments must throw TypeError +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "sort()" with the proper type +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "entries()" with the proper type +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "keys()" with the proper type +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "values()" with the proper type +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "forEach(function, any)" with the proper type +PASS URLSearchParams interface: calling forEach(function, any) on new URLSearchParams("hi=there&thank=you") with too few arguments must throw TypeError +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/url/idlharness.any.js b/third_party/WebKit/LayoutTests/external/wpt/url/idlharness.any.js new file mode 100644 index 0000000..4a0e52f --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/url/idlharness.any.js
@@ -0,0 +1,13 @@ +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +idl_test( + ['url'], + [], // no deps + idl_array => { + idl_array.add_objects({ + URL: ['new URL("http://foo")'], + URLSearchParams: ['new URLSearchParams("hi=there&thank=you")'] + }); + } +);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/url/idlharness.any.worker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/url/idlharness.any.worker-expected.txt new file mode 100644 index 0000000..dae5324 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/url/idlharness.any.worker-expected.txt
@@ -0,0 +1,82 @@ +This is a testharness.js-based test. +Found 78 tests; 75 PASS, 3 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS idl_test setup +PASS URL interface: existence and properties of interface object +PASS URL interface object length +PASS URL interface object name +PASS URL interface: legacy window alias +PASS URL interface: existence and properties of interface prototype object +PASS URL interface: existence and properties of interface prototype object's "constructor" property +PASS URL interface: existence and properties of interface prototype object's @@unscopables property +PASS URL interface: attribute href +PASS URL interface: stringifier +PASS URL interface: attribute origin +PASS URL interface: attribute protocol +PASS URL interface: attribute username +PASS URL interface: attribute password +PASS URL interface: attribute host +PASS URL interface: attribute hostname +PASS URL interface: attribute port +PASS URL interface: attribute pathname +PASS URL interface: attribute search +PASS URL interface: attribute searchParams +PASS URL interface: attribute hash +FAIL URL interface: operation toJSON() assert_own_property: interface prototype object missing non-static operation expected property "toJSON" missing +PASS URL must be primary interface of new URL("http://foo") +PASS Stringification of new URL("http://foo") +PASS URL interface: new URL("http://foo") must inherit property "href" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "origin" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "protocol" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "username" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "password" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "host" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "hostname" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "port" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "pathname" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "search" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "searchParams" with the proper type +PASS URL interface: new URL("http://foo") must inherit property "hash" with the proper type +FAIL URL interface: new URL("http://foo") must inherit property "toJSON()" with the proper type assert_inherits: property "toJSON" not found in prototype chain +FAIL Test toJSON operation of URL memberHolderObject.toJSON is not a function +PASS URLSearchParams interface: existence and properties of interface object +PASS URLSearchParams interface object length +PASS URLSearchParams interface object name +PASS URLSearchParams interface: existence and properties of interface prototype object +PASS URLSearchParams interface: existence and properties of interface prototype object's "constructor" property +PASS URLSearchParams interface: existence and properties of interface prototype object's @@unscopables property +PASS URLSearchParams interface: operation append(USVString, USVString) +PASS URLSearchParams interface: operation delete(USVString) +PASS URLSearchParams interface: operation get(USVString) +PASS URLSearchParams interface: operation getAll(USVString) +PASS URLSearchParams interface: operation has(USVString) +PASS URLSearchParams interface: operation set(USVString, USVString) +PASS URLSearchParams interface: operation sort() +PASS Testing Symbol.iterator property of iterable interface URLSearchParams +PASS Testing pair iterable interface URLSearchParams +PASS URLSearchParams interface: stringifier +PASS URLSearchParams interface: operation entries() +PASS URLSearchParams interface: operation keys() +PASS URLSearchParams interface: operation values() +PASS URLSearchParams interface: operation forEach(function, any) +PASS URLSearchParams must be primary interface of new URLSearchParams("hi=there&thank=you") +PASS Stringification of new URLSearchParams("hi=there&thank=you") +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "append(USVString, USVString)" with the proper type +PASS URLSearchParams interface: calling append(USVString, USVString) on new URLSearchParams("hi=there&thank=you") with too few arguments must throw TypeError +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "delete(USVString)" with the proper type +PASS URLSearchParams interface: calling delete(USVString) on new URLSearchParams("hi=there&thank=you") with too few arguments must throw TypeError +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "get(USVString)" with the proper type +PASS URLSearchParams interface: calling get(USVString) on new URLSearchParams("hi=there&thank=you") with too few arguments must throw TypeError +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "getAll(USVString)" with the proper type +PASS URLSearchParams interface: calling getAll(USVString) on new URLSearchParams("hi=there&thank=you") with too few arguments must throw TypeError +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "has(USVString)" with the proper type +PASS URLSearchParams interface: calling has(USVString) on new URLSearchParams("hi=there&thank=you") with too few arguments must throw TypeError +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "set(USVString, USVString)" with the proper type +PASS URLSearchParams interface: calling set(USVString, USVString) on new URLSearchParams("hi=there&thank=you") with too few arguments must throw TypeError +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "sort()" with the proper type +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "entries()" with the proper type +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "keys()" with the proper type +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "values()" with the proper type +PASS URLSearchParams interface: new URLSearchParams("hi=there&thank=you") must inherit property "forEach(function, any)" with the proper type +PASS URLSearchParams interface: calling forEach(function, any) on new URLSearchParams("hi=there&thank=you") with too few arguments must throw TypeError +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/url/interfaces.any.js b/third_party/WebKit/LayoutTests/external/wpt/url/interfaces.any.js deleted file mode 100644 index dbbbca41..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/url/interfaces.any.js +++ /dev/null
@@ -1,15 +0,0 @@ -// META: script=/resources/WebIDLParser.js -// META: script=/resources/idlharness.js - -promise_test(async() => { - const text = await fetch('/interfaces/url.idl') - .then(response => response.text()); - const idlArray = new IdlArray(); - idlArray.add_idls(text); - idlArray.add_objects({ - URL: ['new URL("http://foo")'], - URLSearchParams: ['new URLSearchParams("hi=there&thank=you")'] - }); - idlArray.test(); - done(); -}, 'Test driver');
diff --git a/third_party/WebKit/LayoutTests/external/wpt/user-timing/measure.html b/third_party/WebKit/LayoutTests/external/wpt/user-timing/measure.html index 8f2a618..d114ecd 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/user-timing/measure.html +++ b/third_party/WebKit/LayoutTests/external/wpt/user-timing/measure.html
@@ -76,7 +76,7 @@ function onload_test() { - // test for existance of User Timing and Performance Timeline interface + // test for existence of User Timing and Performance Timeline interface if (!has_required_interfaces()) { test_true(false,
diff --git a/third_party/WebKit/LayoutTests/external/wpt/user-timing/measure_navigation_timing.html b/third_party/WebKit/LayoutTests/external/wpt/user-timing/measure_navigation_timing.html index fa472fd3..d6480d27a 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/user-timing/measure_navigation_timing.html +++ b/third_party/WebKit/LayoutTests/external/wpt/user-timing/measure_navigation_timing.html
@@ -73,7 +73,7 @@ function onload_test() { - // test for existance of User Timing and Performance Timeline interface + // test for existence of User Timing and Performance Timeline interface if (!has_required_interfaces()) { test_true(false,
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/META.yml b/third_party/WebKit/LayoutTests/external/wpt/web-locks/META.yml index 39acca8..24e7d28 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/META.yml +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/META.yml
@@ -1,4 +1,4 @@ -spec: https://inexorabletash.github.io/web-locks/ +spec: https://wicg.github.io/web-locks/ suggested_reviewers: - inexorabletash - pwnall
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/README.md b/third_party/WebKit/LayoutTests/external/wpt/web-locks/README.md index e8091f8..8ff534e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/README.md +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/README.md
@@ -1,5 +1,5 @@ This directory contains a test suite for the proposed Web Locks API. -Explainer: https://github.com/inexorabletash/web-locks +Explainer: https://github.com/WICG/web-locks/ -Spec: https://inexorabletash.github.io/web-locks/ +Spec: https://wicg.github.io/web-locks/
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/acquire.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/acquire.tentative.https.html index 3c360ab..65bf0e4 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/acquire.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/acquire.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: navigator.locks.request method</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/helpers.js"></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/clientids.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/clientids.tentative.https.html index 8a99d7d..9ce4c4e9 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/clientids.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/clientids.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: Client IDs in query() vs. Service Worker</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/frames.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/frames.tentative.https.html index 366a7ea..7d8383c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/frames.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/frames.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: Frames</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/helpers.js"></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/held.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/held.tentative.https.html index ccf7c0b..aecbbd3 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/held.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/held.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: Lock held until callback result resolves</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/helpers.js"></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/ifAvailable.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/ifAvailable.tentative.https.html index ee190b2b..2b6e1ff 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/ifAvailable.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/ifAvailable.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: ifAvailable option</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/helpers.js"></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/interfaces-serviceworker.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/interfaces-serviceworker.tentative.https.html index ea2a3d7..ca4d7685 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/interfaces-serviceworker.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/interfaces-serviceworker.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: WebIDL tests in service worker</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/lock-attributes.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/lock-attributes.tentative.https.html index e0c1c5b3..89ffec41 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/lock-attributes.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/lock-attributes.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: Lock Attributes</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/mode-exclusive.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/mode-exclusive.tentative.https.html index 7769ca5e..8c6005d04 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/mode-exclusive.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/mode-exclusive.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: Exclusive Mode</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/mode-mixed.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/mode-mixed.tentative.https.html index ac8f365..0ce058364 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/mode-mixed.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/mode-mixed.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: Mixed Modes</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/mode-shared.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/mode-shared.tentative.https.html index cac3a57..309ee57b 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/mode-shared.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/mode-shared.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: Shared Mode</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/non-secure-context.tentative.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/non-secure-context.tentative.html index 328e451..568eb30e 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/non-secure-context.tentative.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/non-secure-context.tentative.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: API not available in non-secure context</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/opaque-origin.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/opaque-origin.tentative.https.html index 7abae82..589c2a7c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/opaque-origin.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/opaque-origin.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: Opaque origins</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/query-empty.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/query-empty.tentative.https.html index a6133218..38fed37 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/query-empty.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/query-empty.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: navigator.locks.query method - no locks held</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/helpers.js"></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/query-order.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/query-order.tentative.https.html index 25ac10a..e4fb7c5 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/query-order.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/query-order.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: navigator.locks.query ordering</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/helpers.js"></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/query.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/query.tentative.https.html index 77d37f3..218e984 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/query.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/query.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: navigator.locks.query method</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/helpers.js"></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/resource-names.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/resource-names.tentative.https.html index 1dfe11d5..d4ac743 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/resource-names.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/resource-names.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: Resources DOMString edge cases</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/secure-context.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/secure-context.tentative.https.html index b5b6fea..a90b55d 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/secure-context.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/secure-context.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: API requires secure context</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/signal.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/signal.tentative.https.html index 94f07a52..a070bde2 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/signal.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/signal.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: AbortSignal integration</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/helpers.js"></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/steal.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/steal.tentative.https.html index b796c24..169d849 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/steal.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/steal.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: steal option</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/helpers.js"></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/web-locks/workers.tentative.https.html b/third_party/WebKit/LayoutTests/external/wpt/web-locks/workers.tentative.https.html index 1e69919..04af72c 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/web-locks/workers.tentative.https.html +++ b/third_party/WebKit/LayoutTests/external/wpt/web-locks/workers.tentative.https.html
@@ -1,7 +1,7 @@ <!DOCTYPE html> <meta charset=utf-8> <title>Web Locks API: Workers</title> -<link rel=help href="https://github.com/inexorabletash/web-locks"> +<link rel=help href="https://wicg.github.io/web-locks/"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/helpers.js"></script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/xhr/idlharness.any.js b/third_party/WebKit/LayoutTests/external/wpt/xhr/idlharness.any.js new file mode 100644 index 0000000..f36f0ce --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/xhr/idlharness.any.js
@@ -0,0 +1,20 @@ +// META: global=sharedworker +// META: script=/resources/WebIDLParser.js +// META: script=/resources/idlharness.js + +idl_test( + ['xhr'], + ['dom', 'html'], + idl_array => { + idl_array.add_objects({ + XMLHttpRequest: ['new XMLHttpRequest()'], + XMLHttpRequestUpload: ['(new XMLHttpRequest()).upload'], + FormData: ['new FormData()'], + ProgressEvent: ['new ProgressEvent("type")'], + }); + if (self.Window) { + self.form = document.createElement('form'); + idl_array.add_objects({ FormData: ['new FormData(form)'] }); + } + } +);
diff --git a/third_party/WebKit/LayoutTests/external/wpt/xhr/idlharness.any.sharedworker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/xhr/idlharness.any.sharedworker-expected.txt new file mode 100644 index 0000000..a388bd7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/xhr/idlharness.any.sharedworker-expected.txt
@@ -0,0 +1,174 @@ +This is a testharness.js-based test. +Found 170 tests; 168 PASS, 2 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS idl_test setup +PASS XMLHttpRequestEventTarget interface: existence and properties of interface object +PASS XMLHttpRequestEventTarget interface object length +PASS XMLHttpRequestEventTarget interface object name +PASS XMLHttpRequestEventTarget interface: existence and properties of interface prototype object +PASS XMLHttpRequestEventTarget interface: existence and properties of interface prototype object's "constructor" property +PASS XMLHttpRequestEventTarget interface: existence and properties of interface prototype object's @@unscopables property +PASS XMLHttpRequestEventTarget interface: attribute onloadstart +PASS XMLHttpRequestEventTarget interface: attribute onprogress +PASS XMLHttpRequestEventTarget interface: attribute onabort +PASS XMLHttpRequestEventTarget interface: attribute onerror +PASS XMLHttpRequestEventTarget interface: attribute onload +PASS XMLHttpRequestEventTarget interface: attribute ontimeout +PASS XMLHttpRequestEventTarget interface: attribute onloadend +PASS XMLHttpRequestUpload interface: existence and properties of interface object +PASS XMLHttpRequestUpload interface object length +PASS XMLHttpRequestUpload interface object name +PASS XMLHttpRequestUpload interface: existence and properties of interface prototype object +PASS XMLHttpRequestUpload interface: existence and properties of interface prototype object's "constructor" property +PASS XMLHttpRequestUpload interface: existence and properties of interface prototype object's @@unscopables property +PASS XMLHttpRequestUpload must be primary interface of (new XMLHttpRequest()).upload +PASS Stringification of (new XMLHttpRequest()).upload +PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onloadstart" with the proper type +PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onprogress" with the proper type +PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onabort" with the proper type +PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onerror" with the proper type +PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onload" with the proper type +PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "ontimeout" with the proper type +PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onloadend" with the proper type +PASS XMLHttpRequest interface: existence and properties of interface object +PASS XMLHttpRequest interface object length +PASS XMLHttpRequest interface object name +PASS XMLHttpRequest interface: existence and properties of interface prototype object +PASS XMLHttpRequest interface: existence and properties of interface prototype object's "constructor" property +PASS XMLHttpRequest interface: existence and properties of interface prototype object's @@unscopables property +PASS XMLHttpRequest interface: attribute onreadystatechange +PASS XMLHttpRequest interface: constant UNSENT on interface object +PASS XMLHttpRequest interface: constant UNSENT on interface prototype object +PASS XMLHttpRequest interface: constant OPENED on interface object +PASS XMLHttpRequest interface: constant OPENED on interface prototype object +PASS XMLHttpRequest interface: constant HEADERS_RECEIVED on interface object +PASS XMLHttpRequest interface: constant HEADERS_RECEIVED on interface prototype object +PASS XMLHttpRequest interface: constant LOADING on interface object +PASS XMLHttpRequest interface: constant LOADING on interface prototype object +PASS XMLHttpRequest interface: constant DONE on interface object +PASS XMLHttpRequest interface: constant DONE on interface prototype object +PASS XMLHttpRequest interface: attribute readyState +PASS XMLHttpRequest interface: operation open(ByteString, USVString) +PASS XMLHttpRequest interface: operation open(ByteString, USVString, boolean, USVString, USVString) +PASS XMLHttpRequest interface: operation setRequestHeader(ByteString, ByteString) +PASS XMLHttpRequest interface: attribute timeout +PASS XMLHttpRequest interface: attribute withCredentials +PASS XMLHttpRequest interface: attribute upload +PASS XMLHttpRequest interface: operation send([object Object],[object Object]) +PASS XMLHttpRequest interface: operation abort() +PASS XMLHttpRequest interface: attribute responseURL +PASS XMLHttpRequest interface: attribute status +PASS XMLHttpRequest interface: attribute statusText +PASS XMLHttpRequest interface: operation getResponseHeader(ByteString) +PASS XMLHttpRequest interface: operation getAllResponseHeaders() +PASS XMLHttpRequest interface: operation overrideMimeType(DOMString) +PASS XMLHttpRequest interface: attribute responseType +PASS XMLHttpRequest interface: attribute response +PASS XMLHttpRequest interface: attribute responseText +FAIL XMLHttpRequest interface: member responseXML assert_false: The prototype object must not have a property "responseXML" expected false got true +PASS XMLHttpRequest must be primary interface of new XMLHttpRequest() +PASS Stringification of new XMLHttpRequest() +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "onreadystatechange" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "UNSENT" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "OPENED" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "HEADERS_RECEIVED" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "LOADING" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "DONE" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "readyState" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "open(ByteString, USVString)" with the proper type +PASS XMLHttpRequest interface: calling open(ByteString, USVString) on new XMLHttpRequest() with too few arguments must throw TypeError +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "open(ByteString, USVString, boolean, USVString, USVString)" with the proper type +PASS XMLHttpRequest interface: calling open(ByteString, USVString, boolean, USVString, USVString) on new XMLHttpRequest() with too few arguments must throw TypeError +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "setRequestHeader(ByteString, ByteString)" with the proper type +PASS XMLHttpRequest interface: calling setRequestHeader(ByteString, ByteString) on new XMLHttpRequest() with too few arguments must throw TypeError +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "timeout" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "withCredentials" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "upload" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "send([object Object],[object Object])" with the proper type +PASS XMLHttpRequest interface: calling send([object Object],[object Object]) on new XMLHttpRequest() with too few arguments must throw TypeError +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "abort()" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "responseURL" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "status" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "statusText" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "getResponseHeader(ByteString)" with the proper type +PASS XMLHttpRequest interface: calling getResponseHeader(ByteString) on new XMLHttpRequest() with too few arguments must throw TypeError +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "getAllResponseHeaders()" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "overrideMimeType(DOMString)" with the proper type +PASS XMLHttpRequest interface: calling overrideMimeType(DOMString) on new XMLHttpRequest() with too few arguments must throw TypeError +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "responseType" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "response" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "responseText" with the proper type +FAIL XMLHttpRequest interface: new XMLHttpRequest() must not have property "responseXML" assert_false: expected false got true +PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onloadstart" with the proper type +PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onprogress" with the proper type +PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onabort" with the proper type +PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onerror" with the proper type +PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onload" with the proper type +PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "ontimeout" with the proper type +PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onloadend" with the proper type +PASS FormData interface: existence and properties of interface object +PASS FormData interface object length +PASS FormData interface object name +PASS FormData interface: existence and properties of interface prototype object +PASS FormData interface: existence and properties of interface prototype object's "constructor" property +PASS FormData interface: existence and properties of interface prototype object's @@unscopables property +PASS FormData interface: operation append(USVString, USVString) +PASS FormData interface: operation append(USVString, Blob, USVString) +PASS FormData interface: operation delete(USVString) +PASS FormData interface: operation get(USVString) +PASS FormData interface: operation getAll(USVString) +PASS FormData interface: operation has(USVString) +PASS FormData interface: operation set(USVString, USVString) +PASS FormData interface: operation set(USVString, Blob, USVString) +PASS Testing Symbol.iterator property of iterable interface FormData +PASS Testing pair iterable interface FormData +PASS FormData interface: operation entries() +PASS FormData interface: operation keys() +PASS FormData interface: operation values() +PASS FormData interface: operation forEach(function, any) +PASS FormData must be primary interface of new FormData() +PASS Stringification of new FormData() +PASS FormData interface: new FormData() must inherit property "append(USVString, USVString)" with the proper type +PASS FormData interface: calling append(USVString, USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "append(USVString, Blob, USVString)" with the proper type +PASS FormData interface: calling append(USVString, Blob, USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "delete(USVString)" with the proper type +PASS FormData interface: calling delete(USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "get(USVString)" with the proper type +PASS FormData interface: calling get(USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "getAll(USVString)" with the proper type +PASS FormData interface: calling getAll(USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "has(USVString)" with the proper type +PASS FormData interface: calling has(USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "set(USVString, USVString)" with the proper type +PASS FormData interface: calling set(USVString, USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "set(USVString, Blob, USVString)" with the proper type +PASS FormData interface: calling set(USVString, Blob, USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "entries()" with the proper type +PASS FormData interface: new FormData() must inherit property "keys()" with the proper type +PASS FormData interface: new FormData() must inherit property "values()" with the proper type +PASS FormData interface: new FormData() must inherit property "forEach(function, any)" with the proper type +PASS FormData interface: calling forEach(function, any) on new FormData() with too few arguments must throw TypeError +PASS ProgressEvent interface: existence and properties of interface object +PASS ProgressEvent interface object length +PASS ProgressEvent interface object name +PASS ProgressEvent interface: existence and properties of interface prototype object +PASS ProgressEvent interface: existence and properties of interface prototype object's "constructor" property +PASS ProgressEvent interface: existence and properties of interface prototype object's @@unscopables property +PASS ProgressEvent interface: attribute lengthComputable +PASS ProgressEvent interface: attribute loaded +PASS ProgressEvent interface: attribute total +PASS ProgressEvent must be primary interface of new ProgressEvent("type") +PASS Stringification of new ProgressEvent("type") +PASS ProgressEvent interface: new ProgressEvent("type") must inherit property "lengthComputable" with the proper type +PASS ProgressEvent interface: new ProgressEvent("type") must inherit property "loaded" with the proper type +PASS ProgressEvent interface: new ProgressEvent("type") must inherit property "total" with the proper type +PASS Node interface: existence and properties of interface object +PASS Document interface: existence and properties of interface object +PASS DocumentType interface: existence and properties of interface object +PASS DocumentFragment interface: existence and properties of interface object +PASS ShadowRoot interface: existence and properties of interface object +PASS Element interface: existence and properties of interface object +PASS CharacterData interface: existence and properties of interface object +PASS Text interface: existence and properties of interface object +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/xhr/idlharness.any.worker-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/xhr/idlharness.any.worker-expected.txt new file mode 100644 index 0000000..a388bd7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/xhr/idlharness.any.worker-expected.txt
@@ -0,0 +1,174 @@ +This is a testharness.js-based test. +Found 170 tests; 168 PASS, 2 FAIL, 0 TIMEOUT, 0 NOTRUN. +PASS idl_test setup +PASS XMLHttpRequestEventTarget interface: existence and properties of interface object +PASS XMLHttpRequestEventTarget interface object length +PASS XMLHttpRequestEventTarget interface object name +PASS XMLHttpRequestEventTarget interface: existence and properties of interface prototype object +PASS XMLHttpRequestEventTarget interface: existence and properties of interface prototype object's "constructor" property +PASS XMLHttpRequestEventTarget interface: existence and properties of interface prototype object's @@unscopables property +PASS XMLHttpRequestEventTarget interface: attribute onloadstart +PASS XMLHttpRequestEventTarget interface: attribute onprogress +PASS XMLHttpRequestEventTarget interface: attribute onabort +PASS XMLHttpRequestEventTarget interface: attribute onerror +PASS XMLHttpRequestEventTarget interface: attribute onload +PASS XMLHttpRequestEventTarget interface: attribute ontimeout +PASS XMLHttpRequestEventTarget interface: attribute onloadend +PASS XMLHttpRequestUpload interface: existence and properties of interface object +PASS XMLHttpRequestUpload interface object length +PASS XMLHttpRequestUpload interface object name +PASS XMLHttpRequestUpload interface: existence and properties of interface prototype object +PASS XMLHttpRequestUpload interface: existence and properties of interface prototype object's "constructor" property +PASS XMLHttpRequestUpload interface: existence and properties of interface prototype object's @@unscopables property +PASS XMLHttpRequestUpload must be primary interface of (new XMLHttpRequest()).upload +PASS Stringification of (new XMLHttpRequest()).upload +PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onloadstart" with the proper type +PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onprogress" with the proper type +PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onabort" with the proper type +PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onerror" with the proper type +PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onload" with the proper type +PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "ontimeout" with the proper type +PASS XMLHttpRequestEventTarget interface: (new XMLHttpRequest()).upload must inherit property "onloadend" with the proper type +PASS XMLHttpRequest interface: existence and properties of interface object +PASS XMLHttpRequest interface object length +PASS XMLHttpRequest interface object name +PASS XMLHttpRequest interface: existence and properties of interface prototype object +PASS XMLHttpRequest interface: existence and properties of interface prototype object's "constructor" property +PASS XMLHttpRequest interface: existence and properties of interface prototype object's @@unscopables property +PASS XMLHttpRequest interface: attribute onreadystatechange +PASS XMLHttpRequest interface: constant UNSENT on interface object +PASS XMLHttpRequest interface: constant UNSENT on interface prototype object +PASS XMLHttpRequest interface: constant OPENED on interface object +PASS XMLHttpRequest interface: constant OPENED on interface prototype object +PASS XMLHttpRequest interface: constant HEADERS_RECEIVED on interface object +PASS XMLHttpRequest interface: constant HEADERS_RECEIVED on interface prototype object +PASS XMLHttpRequest interface: constant LOADING on interface object +PASS XMLHttpRequest interface: constant LOADING on interface prototype object +PASS XMLHttpRequest interface: constant DONE on interface object +PASS XMLHttpRequest interface: constant DONE on interface prototype object +PASS XMLHttpRequest interface: attribute readyState +PASS XMLHttpRequest interface: operation open(ByteString, USVString) +PASS XMLHttpRequest interface: operation open(ByteString, USVString, boolean, USVString, USVString) +PASS XMLHttpRequest interface: operation setRequestHeader(ByteString, ByteString) +PASS XMLHttpRequest interface: attribute timeout +PASS XMLHttpRequest interface: attribute withCredentials +PASS XMLHttpRequest interface: attribute upload +PASS XMLHttpRequest interface: operation send([object Object],[object Object]) +PASS XMLHttpRequest interface: operation abort() +PASS XMLHttpRequest interface: attribute responseURL +PASS XMLHttpRequest interface: attribute status +PASS XMLHttpRequest interface: attribute statusText +PASS XMLHttpRequest interface: operation getResponseHeader(ByteString) +PASS XMLHttpRequest interface: operation getAllResponseHeaders() +PASS XMLHttpRequest interface: operation overrideMimeType(DOMString) +PASS XMLHttpRequest interface: attribute responseType +PASS XMLHttpRequest interface: attribute response +PASS XMLHttpRequest interface: attribute responseText +FAIL XMLHttpRequest interface: member responseXML assert_false: The prototype object must not have a property "responseXML" expected false got true +PASS XMLHttpRequest must be primary interface of new XMLHttpRequest() +PASS Stringification of new XMLHttpRequest() +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "onreadystatechange" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "UNSENT" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "OPENED" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "HEADERS_RECEIVED" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "LOADING" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "DONE" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "readyState" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "open(ByteString, USVString)" with the proper type +PASS XMLHttpRequest interface: calling open(ByteString, USVString) on new XMLHttpRequest() with too few arguments must throw TypeError +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "open(ByteString, USVString, boolean, USVString, USVString)" with the proper type +PASS XMLHttpRequest interface: calling open(ByteString, USVString, boolean, USVString, USVString) on new XMLHttpRequest() with too few arguments must throw TypeError +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "setRequestHeader(ByteString, ByteString)" with the proper type +PASS XMLHttpRequest interface: calling setRequestHeader(ByteString, ByteString) on new XMLHttpRequest() with too few arguments must throw TypeError +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "timeout" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "withCredentials" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "upload" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "send([object Object],[object Object])" with the proper type +PASS XMLHttpRequest interface: calling send([object Object],[object Object]) on new XMLHttpRequest() with too few arguments must throw TypeError +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "abort()" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "responseURL" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "status" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "statusText" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "getResponseHeader(ByteString)" with the proper type +PASS XMLHttpRequest interface: calling getResponseHeader(ByteString) on new XMLHttpRequest() with too few arguments must throw TypeError +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "getAllResponseHeaders()" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "overrideMimeType(DOMString)" with the proper type +PASS XMLHttpRequest interface: calling overrideMimeType(DOMString) on new XMLHttpRequest() with too few arguments must throw TypeError +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "responseType" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "response" with the proper type +PASS XMLHttpRequest interface: new XMLHttpRequest() must inherit property "responseText" with the proper type +FAIL XMLHttpRequest interface: new XMLHttpRequest() must not have property "responseXML" assert_false: expected false got true +PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onloadstart" with the proper type +PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onprogress" with the proper type +PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onabort" with the proper type +PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onerror" with the proper type +PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onload" with the proper type +PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "ontimeout" with the proper type +PASS XMLHttpRequestEventTarget interface: new XMLHttpRequest() must inherit property "onloadend" with the proper type +PASS FormData interface: existence and properties of interface object +PASS FormData interface object length +PASS FormData interface object name +PASS FormData interface: existence and properties of interface prototype object +PASS FormData interface: existence and properties of interface prototype object's "constructor" property +PASS FormData interface: existence and properties of interface prototype object's @@unscopables property +PASS FormData interface: operation append(USVString, USVString) +PASS FormData interface: operation append(USVString, Blob, USVString) +PASS FormData interface: operation delete(USVString) +PASS FormData interface: operation get(USVString) +PASS FormData interface: operation getAll(USVString) +PASS FormData interface: operation has(USVString) +PASS FormData interface: operation set(USVString, USVString) +PASS FormData interface: operation set(USVString, Blob, USVString) +PASS Testing Symbol.iterator property of iterable interface FormData +PASS Testing pair iterable interface FormData +PASS FormData interface: operation entries() +PASS FormData interface: operation keys() +PASS FormData interface: operation values() +PASS FormData interface: operation forEach(function, any) +PASS FormData must be primary interface of new FormData() +PASS Stringification of new FormData() +PASS FormData interface: new FormData() must inherit property "append(USVString, USVString)" with the proper type +PASS FormData interface: calling append(USVString, USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "append(USVString, Blob, USVString)" with the proper type +PASS FormData interface: calling append(USVString, Blob, USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "delete(USVString)" with the proper type +PASS FormData interface: calling delete(USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "get(USVString)" with the proper type +PASS FormData interface: calling get(USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "getAll(USVString)" with the proper type +PASS FormData interface: calling getAll(USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "has(USVString)" with the proper type +PASS FormData interface: calling has(USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "set(USVString, USVString)" with the proper type +PASS FormData interface: calling set(USVString, USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "set(USVString, Blob, USVString)" with the proper type +PASS FormData interface: calling set(USVString, Blob, USVString) on new FormData() with too few arguments must throw TypeError +PASS FormData interface: new FormData() must inherit property "entries()" with the proper type +PASS FormData interface: new FormData() must inherit property "keys()" with the proper type +PASS FormData interface: new FormData() must inherit property "values()" with the proper type +PASS FormData interface: new FormData() must inherit property "forEach(function, any)" with the proper type +PASS FormData interface: calling forEach(function, any) on new FormData() with too few arguments must throw TypeError +PASS ProgressEvent interface: existence and properties of interface object +PASS ProgressEvent interface object length +PASS ProgressEvent interface object name +PASS ProgressEvent interface: existence and properties of interface prototype object +PASS ProgressEvent interface: existence and properties of interface prototype object's "constructor" property +PASS ProgressEvent interface: existence and properties of interface prototype object's @@unscopables property +PASS ProgressEvent interface: attribute lengthComputable +PASS ProgressEvent interface: attribute loaded +PASS ProgressEvent interface: attribute total +PASS ProgressEvent must be primary interface of new ProgressEvent("type") +PASS Stringification of new ProgressEvent("type") +PASS ProgressEvent interface: new ProgressEvent("type") must inherit property "lengthComputable" with the proper type +PASS ProgressEvent interface: new ProgressEvent("type") must inherit property "loaded" with the proper type +PASS ProgressEvent interface: new ProgressEvent("type") must inherit property "total" with the proper type +PASS Node interface: existence and properties of interface object +PASS Document interface: existence and properties of interface object +PASS DocumentType interface: existence and properties of interface object +PASS DocumentFragment interface: existence and properties of interface object +PASS ShadowRoot interface: existence and properties of interface object +PASS Element interface: existence and properties of interface object +PASS CharacterData interface: existence and properties of interface object +PASS Text interface: existence and properties of interface object +Harness: the test ran to completion. +
diff --git a/third_party/WebKit/LayoutTests/external/wpt/xhr/interfaces.html b/third_party/WebKit/LayoutTests/external/wpt/xhr/interfaces.html deleted file mode 100644 index cc98075d..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/xhr/interfaces.html +++ /dev/null
@@ -1,44 +0,0 @@ -<!doctype html> -<meta charset=utf-8> -<title>XMLHttpRequest IDL tests</title> -<script src=/resources/testharness.js></script> -<script src=/resources/testharnessreport.js></script> -<script src=/resources/WebIDLParser.js></script> -<script src=/resources/idlharness.js></script> - -<h1>XMLHttpRequest IDL tests</h1> -<div id=log></div> - -<script type=text/plain class=untested> -[TreatNonCallableAsNull] -callback EventHandlerNonNull = any (Event event); -typedef EventHandlerNonNull? EventHandler; -</script> -<script> -"use strict"; -var form = document.createElement("form"); -var idlArray = new IdlArray(); - -function doTest([domIdl, xhrIdl]) { - idlArray.add_untested_idls(domIdl); - var untestedIdl = document.querySelector("script.untested").textContent; - idlArray.add_untested_idls(untestedIdl); - idlArray.add_idls(xhrIdl); - idlArray.add_objects({ - XMLHttpRequest: ['new XMLHttpRequest()'], - XMLHttpRequestUpload: ['(new XMLHttpRequest()).upload'], - FormData: ['new FormData()', 'new FormData(form)'] - }); - idlArray.test(); -} - -function fetchText(url) { - return fetch(url).then(response => response.text()); -} - -promise_test(() => { - return Promise.all(["/interfaces/dom.idl", - "/interfaces/xhr.idl"].map(fetchText)) - .then(doTest); -}, "Test driver"); -</script>
diff --git a/third_party/WebKit/LayoutTests/fast/scroll-behavior/smooth-scroll/mousewheel-scroll.html b/third_party/WebKit/LayoutTests/fast/scroll-behavior/smooth-scroll/mousewheel-scroll.html index ed5e4f0..1a83f77 100644 --- a/third_party/WebKit/LayoutTests/fast/scroll-behavior/smooth-scroll/mousewheel-scroll.html +++ b/third_party/WebKit/LayoutTests/fast/scroll-behavior/smooth-scroll/mousewheel-scroll.html
@@ -27,15 +27,19 @@ SPEED_INSTANT); // 40px per tick. - await waitFor( () => {return document.scrollingElement.scrollTop == 40 && - document.scrollingElement.scrollLeft == 40;}); + await waitFor( () => { + return approx_equals(document.scrollingElement.scrollTop, 40, 2) && + approx_equals(document.scrollingElement.scrollLeft, 40, 2); + }); // Undo the last tick in each direction to reset the scroll state before // starting the second test. await smoothScroll(1 * px_per_tick, x, y, source, 'upleft', SPEED_INSTANT); - await waitFor( () => {return document.scrollingElement.scrollTop == 0 && - document.scrollingElement.scrollLeft == 0;}); + await waitFor( () => { + return approx_equals(document.scrollingElement.scrollTop, 0, 2) && + approx_equals(document.scrollingElement.scrollLeft, 0, 2); + }); }, "This test ensures that consecutive mouse wheel ticks diagonally " + "scroll to the right offset. The main purpose of this test is to " + @@ -60,8 +64,10 @@ SPEED_INSTANT); // 40px per tick. - await waitFor( () => {return document.scrollingElement.scrollTop == 80 && - document.scrollingElement.scrollLeft == 80;}); + await waitFor( () => { + return approx_equals(document.scrollingElement.scrollTop, 80, 4) && + approx_equals(document.scrollingElement.scrollLeft, 80, 4); + }); }, "This test ensures that consecutive mouse wheel ticks vertically or " + "horizontally scroll to the right offset. The main purpose of this " + "test is to ensure that smooth scrolling on the compositor works as " +
diff --git a/third_party/WebKit/LayoutTests/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt index e316a3fc..cd63144 100644 --- a/third_party/WebKit/LayoutTests/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt
@@ -46,12 +46,6 @@ [11, 0, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='test'", - "reason": "geometry" - } ] } 10.6px,12.4px,10.4px: @@ -102,12 +96,6 @@ [11, 0, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='test'", - "reason": "geometry" - } ] } 10.4px,12.6px,10.6px: @@ -158,12 +146,6 @@ [10, 0, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='test'", - "reason": "geometry" - } ] } 10.6px,12.6px,10.6px: @@ -214,12 +196,6 @@ [11, 0, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='test'", - "reason": "geometry" - } ] } 10.4px,12.4px,10.4px: @@ -270,12 +246,6 @@ [10, 0, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='test'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/fast/text-autosizing/nested-em-line-height-zoomed-expected.html b/third_party/WebKit/LayoutTests/fast/text-autosizing/nested-em-line-height-zoomed-expected.html new file mode 100644 index 0000000..52a7a369 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/text-autosizing/nested-em-line-height-zoomed-expected.html
@@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html> +<head> + +<meta name="viewport" content="width=800"> +<style> +html { font-size: 16px; } +body { width: 800px; margin: 0; overflow: hidden; } +</style> + +<script> + eventSender.setPageZoomFactor(2); +</script> +</head> +<body> + +<div style="font-size: 2.5rem; line-height: 1"> + When this text is autosized to 40px, the line heights of the nested inline elements below should increase in strict proportion. + <b>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</b> + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + <b><i>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</i></b> + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. +</div> + +</body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/fast/text-autosizing/nested-em-line-height-zoomed.html b/third_party/WebKit/LayoutTests/fast/text-autosizing/nested-em-line-height-zoomed.html new file mode 100644 index 0000000..c2bf084 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/text-autosizing/nested-em-line-height-zoomed.html
@@ -0,0 +1,28 @@ +<!DOCTYPE html> +<html> +<head> + +<meta name="viewport" content="width=800"> +<style> +html { font-size: 16px; } +body { width: 800px; margin: 0; overflow: hidden; } +</style> + +<script src="resources/autosizingTest.js"></script> +<script> + eventSender.setPageZoomFactor(2); +</script> + +</head> +<body> + +<div style="line-height: 1em"> + When this text is autosized to 40px, the line heights of the nested inline elements below should increase in strict proportion. + <b>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</b> + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + <b><i>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</i></b> + Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. +</div> + +</body> +</html> \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/compositing/squashing/selection-repaint-with-gaps-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/compositing/squashing/selection-repaint-with-gaps-expected.txt index 0b66e64..6aeeb02 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/compositing/squashing/selection-repaint-with-gaps-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/compositing/squashing/selection-repaint-with-gaps-expected.txt
@@ -56,16 +56,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'lorem'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment 'ipsum'", - "reason": "selection" - } ] } { @@ -136,24 +126,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'lorem'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment 'ipsum'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment 'lorem'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment 'ipsum'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-child-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-child-expected.txt index 96927ae..e77b326 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-child-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-child-expected.txt
@@ -103,12 +103,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV class='box middle'", - "reason": "style change" - } ] } CASE 3, hovering over the inner div @@ -171,16 +165,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV class='box middle'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='smallbox'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt index c743c57..538d10f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
@@ -103,12 +103,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV class='box middle'", - "reason": "style change" - } ] } CASE 3, hovering over the inner div @@ -171,16 +165,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV class='box middle'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='smallbox'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt index cb8e9d8..2effe06 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt
@@ -46,16 +46,6 @@ [11, 0, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV id='container'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='test'", - "reason": "subtree" - } ] } 10.6px,12.4px,10.4px: @@ -106,16 +96,6 @@ [11, 0, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV id='container'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='test'", - "reason": "subtree" - } ] } 10.4px,12.6px,10.6px: @@ -166,16 +146,6 @@ [10, 0, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV id='container'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='test'", - "reason": "subtree" - } ] } 10.6px,12.6px,10.6px: @@ -226,16 +196,6 @@ [11, 0, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV id='container'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='test'", - "reason": "subtree" - } ] } 10.4px,12.4px,10.4px: @@ -286,16 +246,6 @@ [10, 0, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV id='container'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/background/background-resize-height-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/background/background-resize-height-expected.txt index 2440419..d6583ad 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/background/background-resize-height-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/background/background-resize-height-expected.txt
@@ -307,96 +307,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='container'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test image'", - "reason": "incremental" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test image size-cover'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test image size-contain'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test image fixed-height'", - "reason": "incremental" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test image percent-height'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test image top'", - "reason": "incremental" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test image bottom'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test image center'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test image no-repeat'", - "reason": "incremental" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test image repeat-space'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test image repeat-round'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test generated'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test generated size-cover'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test generated size-contain'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test generated percent-height'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test generated top'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test generated bottom'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test generated center'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test generated no-repeat'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test generated repeat-space'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='test generated repeat-round'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/block-layout-inline-children-replaced-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/block-layout-inline-children-replaced-expected.txt index 049ca3ba..d71077c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/block-layout-inline-children-replaced-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/block-layout-inline-children-replaced-expected.txt
@@ -34,16 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='target' class='target'", - "reason": "subtree" - }, - { - "object": "LayoutImage IMG", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/block-no-inflow-children-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/block-no-inflow-children-expected.txt index f5e3b73c3..4354dd5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/block-no-inflow-children-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/block-no-inflow-children-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='target'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'La la la la'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/box/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/box/box-inline-resize-expected.txt index 7da9edd..7c309040f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/box/box-inline-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/box/box-inline-resize-expected.txt
@@ -34,40 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutDeprecatedFlexibleBox DIV id='about-container'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG id='foo'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow H2", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Chromium'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/box/hover-pseudo-borders-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/box/hover-pseudo-borders-expected.txt index cfe1b38..a618d12 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/box/hover-pseudo-borders-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/box/hover-pseudo-borders-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV class='hitregion'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) \u003Cpseudo:after\u003E", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt index f56303b..f99be9c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN id='target'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'Text'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-3509-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-3509-expected.txt index 4424b74b..bece1d3f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-3509-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-3509-expected.txt
@@ -39,20 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='im'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\u00A0'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-5699-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-5699-expected.txt index 4ce0944..e7cc49e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-5699-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-5699-expected.txt
@@ -39,28 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow P", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\u00A0'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Hello'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-6278-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-6278-expected.txt index 9bfcd53..5bf2fb40 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-6278-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-6278-expected.txt
@@ -139,68 +139,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD id='col1'", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Curabitur pretium, quam quis semper'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'malesuada, est libero feugiat libero,'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'vel fringilla orci nibh sed neque.'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Quisque eu nulla non nisi molestie'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'accumsan. Etiam tellus urna, laoreet'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'ac, laoreet non, suscipit sed, sapien.'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Phasellus vehicula, sem at posuere'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'vehicula, augue nibh molestie nisl,'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'nec ullamcorper lacus ante vulputate'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'pede.'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-6473-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-6473-expected.txt index 2d18ac2..53ba972 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-6473-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-6473-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutNGBlockFlow DIV id='allcontent'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) P", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'SUCCESS'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-7235-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-7235-expected.txt index 393b305..ae0ad79 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-7235-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/bugzilla-7235-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline (relative positioned) SPAN id='p'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\u00A0'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='t'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/clip/clipped-relative-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/clip/clipped-relative-expected.txt index 0a9a3f2e..bb84dbd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/clip/clipped-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/clip/clipped-relative-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV id='i'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='inner'", - "reason": "subtree" - }, - { - "object": "LayoutImage IMG", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt index db4867f..12b0f20 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV id='shiftMe'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) (floating) DIV class='imgContainer'", - "reason": "subtree" - }, - { - "object": "LayoutImage IMG", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-added-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-added-expected.txt index 4a0cc22..a182ed6c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-added-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-added-expected.txt
@@ -47,16 +47,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='container'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='fixed'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-added-individual-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-added-individual-expected.txt index 4a0cc22..a182ed6c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-added-individual-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-added-individual-expected.txt
@@ -47,16 +47,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='container'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='fixed'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-removed-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-removed-expected.txt index c9784c8..a3e1272 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-removed-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-removed-expected.txt
@@ -48,16 +48,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='container'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='fixed'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-removed-individual-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-removed-individual-expected.txt index e59ed70a..0760b24 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-removed-individual-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/containing-block-removed-individual-expected.txt
@@ -49,16 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='container'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='fixed'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt index 2b563d9c..534046b7 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt
@@ -62,28 +62,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'test1'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/invalidations-with-large-negative-margin-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/invalidations-with-large-negative-margin-expected.txt index 6f8a5958..1f0690f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/invalidations-with-large-negative-margin-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/invalidations-with-large-negative-margin-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='chip'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt index 1329cd73..96d09b1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt
@@ -56,24 +56,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='container'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (relative positioned) DIV class='mv-tile'", - "reason": "compositing update" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (relative positioned) DIV class='mv-tile'", - "reason": "compositing update" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt index 3c75076..7c1e87d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt
@@ -57,20 +57,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='container'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) SPAN class='child'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) SPAN class='child embiggen'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/should-invoke-deferred-compositing-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/should-invoke-deferred-compositing-expected.txt index 4bee064..bf47ba4e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/should-invoke-deferred-compositing-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/should-invoke-deferred-compositing-expected.txt
@@ -33,16 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='container' class='composited box'", - "reason": "subtree" - }, - { - "object": "LayoutHTMLCanvas (positioned) CANVAS", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt index ca525e4..280a6df 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt
@@ -90,12 +90,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='content'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt index 5f04b1ca..4a6a6ab 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt
@@ -37,12 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='content'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/text-color-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/text-color-change-expected.txt index 865d426c..896186d2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/text-color-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/text-color-change-expected.txt
@@ -79,336 +79,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' Text'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/text-match-highlight-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/text-match-highlight-expected.txt index c104ca6..4599584 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/text-match-highlight-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/text-match-highlight-expected.txt
@@ -59,52 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "NGPhysicalTextFragment 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "NGPhysicalTextFragment 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "NGPhysicalTextFragment 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "NGPhysicalTextFragment 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'Can you findme in this boring text?'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'Findme in a typewriter!'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'Findme on a path! Did you findme?'", - "reason": "DocumentMarker change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt index c893c28..b1f107d6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt
@@ -69,60 +69,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'CONTENT'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'CONTENT'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'CONTENT'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'CONTENT'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'CONTENT'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'CONTENT'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'CONTENT'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'CONTENT'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'CONTENT'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'CONTENT'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'CONTENT'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'CONTENT'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'CONTENT'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/crbug-371640-3-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/crbug-371640-3-expected.txt index a75284f8..b39a980 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/crbug-371640-3-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/crbug-371640-3-expected.txt
@@ -34,32 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='wrapper'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV id='container'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (floating) DIV id='keep_outer' class='outer'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV id='keep_inner'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='abs_pos'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV id='keep_child'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/details-open-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/details-open-repaint-expected.txt index 28c308760..99f1314 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/details-open-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/details-open-repaint-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutDetailsMarker DIV id='details-marker'", - "reason": "full" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='details-content'", - "reason": "appeared" - }, - { - "object": "LayoutTextControl INPUT", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-content-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-content-change-expected.txt index 8e2cdc1..84118f6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-content-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-content-change-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutFlexibleBox DIV id='container'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-content-distribution-change-grid-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-content-distribution-change-grid-expected.txt index 633ca46a..e89f9cb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-content-distribution-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-content-distribution-change-grid-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutGrid DIV id='container'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-items-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-items-change-expected.txt index e9ac63f2..6f7b59b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-items-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-items-change-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutFlexibleBox DIV id='container'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-self-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-self-change-expected.txt index cdc2e2e..5b2742f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-self-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-self-change-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutFlexibleBox DIV class='flex'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-self-change-grid-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-self-change-grid-expected.txt index 5e36446..36dc60b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-self-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/align-self-change-grid-expected.txt
@@ -49,24 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutGrid DIV id='container'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item1'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item2'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item3'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/justify-content-distribution-change-grid-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/justify-content-distribution-change-grid-expected.txt index 9dd34e6a..1d54b2239 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/justify-content-distribution-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/justify-content-distribution-change-grid-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutGrid DIV id='container'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/justify-self-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/justify-self-change-expected.txt index 12837d9..c48744a9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/justify-self-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/justify-self-change-expected.txt
@@ -49,24 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutGrid DIV id='container'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item1'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item2'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item3'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/remove-inline-block-descendant-of-flex-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/remove-inline-block-descendant-of-flex-expected.txt index b522134..c5998c4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/remove-inline-block-descendant-of-flex-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/remove-inline-block-descendant-of-flex-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='inline-block-2' class='item'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-column-reverse-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-column-reverse-expected.txt index 192cbb1..ec2c74c1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-column-reverse-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-column-reverse-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutFlexibleBox DIV id='flexbox'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV id='blue' class='flex-item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-during-resize-no-flex-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-during-resize-no-flex-expected.txt index b92e491..f2ba8126 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-during-resize-no-flex-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-during-resize-no-flex-expected.txt
@@ -49,24 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutFlexibleBox DIV class='flexbox'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV id='flex-item-1' class='flex-item width'", - "reason": "incremental" - }, - { - "object": "LayoutNGBlockFlow DIV class='flex-item'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='flex-item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-expected.txt index d7e849c..c1cccda 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-expected.txt
@@ -169,80 +169,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutFlexibleBox DIV id='flexbox'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV id='left'", - "reason": "incremental" - }, - { - "object": "LayoutNGBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow P", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet.'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula.'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'", - "reason": "subtree" - }, - { - "object": "LayoutFlexibleBox DIV id='flexbox'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV id='left'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow P", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet.'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula.'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-on-layout-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-on-layout-expected.txt index 7f72a8a..76e5d2ac 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-on-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-on-layout-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV class='item'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (floating) DIV class='state'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-opacity-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-opacity-change-expected.txt index 662f6f8..78e6eed 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-opacity-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-opacity-change-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutFlexibleBox DIV class='flex'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV id='target' class='item'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-rtl-column-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-rtl-column-expected.txt index 1ac9e7d..7759773 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-rtl-column-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/flexbox/repaint-rtl-column-expected.txt
@@ -59,40 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutFlexibleBox DIV id='flexbox'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV id='left'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutFlexibleBox DIV id='flexbox'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV id='left'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/float-in-new-block-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/float-in-new-block-with-layout-delta-expected.txt index b725bfb..921f4da 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/float-in-new-block-with-layout-delta-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/float-in-new-block-with-layout-delta-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='target'", - "reason": "appeared" - }, - { - "object": "LayoutNGBlockFlow (floating) DIV", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/float-move-during-layout-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/float-move-during-layout-expected.txt index 7c8fe9a..279be4f7 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/float-move-during-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/float-move-during-layout-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='s'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/gradients-em-stops-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/gradients-em-stops-repaint-expected.txt index 1018afe1..2249e2cb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/gradients-em-stops-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/gradients-em-stops-repaint-expected.txt
@@ -49,32 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV class='em-units'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV id='box3' class='box'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='indicator'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment ' '", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV id='box4' class='box'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='indicator'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/image/percent-size-image-resize-container-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/image/percent-size-image-resize-container-expected.txt index ea1e9ed..199314d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/image/percent-size-image-resize-container-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/image/percent-size-image-resize-container-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV", - "reason": "subtree" - }, - { - "object": "LayoutImage (positioned) IMG", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/inline-block-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/inline-block-resize-expected.txt index 64b70a97..36cc7cd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/inline-block-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/inline-block-resize-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV id='target'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/inline-color-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/inline-color-change-expected.txt index fcf7c6b..cd0d2b4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/inline-color-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/inline-color-change-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN id='target'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/inline-reflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/inline-reflow-expected.txt index 52cb0f6..28e9da91 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/inline-reflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/inline-reflow-expected.txt
@@ -154,60 +154,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='div1' class='container'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'A A A A A AA AA'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'AA AA AAA AAA'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'AAA AAAA AAAA'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'AAAAA AAAAA'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'AAAAAA AAAAAAA'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'AAAAAA AAAAA'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'AAAAA AAAA AAAA'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'AAA AAA AAA AA'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'AA AA AA A A A'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'A A'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='div2' class='container'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'A A A A A'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/insert-frame-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/insert-frame-expected.txt index 5eed7b0..95a6f6b1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/insert-frame-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/insert-frame-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutIFrame IFRAME", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt index 1dc88b4..f85a293 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
@@ -37,40 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='container'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='absolute'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow P", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'This test checks that switching opacity'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'invalidates the full subtree.'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow P", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'This text should be visible in the'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'output.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/invisible-objects-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/invisible-objects-expected.txt deleted file mode 100644 index 023fcd3..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/invisible-objects-expected.txt +++ /dev/null
@@ -1,32 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF" - } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'is invisible'", - "reason": "subtree" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/line-flow-with-floats-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/line-flow-with-floats-2-expected.txt index 4de5d2e..0692436b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/line-flow-with-floats-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/line-flow-with-floats-2-expected.txt
@@ -364,160 +364,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow P", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'The chief difficulty Alice found at first was in managing'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'her flamingo: she succeeded in getting its body tucked'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'away, comfortably enough, under her arm, with its legs'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'hanging down, but generally, just as she had got its'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'neck nicely straightened out, and was going to give the'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'hedgehog a blow with its head, it '", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'would'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment ' twist itself round and'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'look up in her face, with such a puzzled expression that she'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'could not help bursting out laughing: and when she had got its'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'head down, and was going to '", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'begin again, it was very'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'provoking to find that the hedgehog had unrolled itself, and was'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'in the act of crawling away: besides all this, there was generally'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'a ridge or furrow in the way wherever she wanted to send the'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'hedgehog to, and, as the doubled-up soldiers were always'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'getting up and walking off to other parts of the ground, Alice'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'soon came to the conclusion that it was a very '", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (floating) SPAN id='blueFloat'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'difficult'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'game indeed.'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'The players all played at once without waiting'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (floating) SPAN id='greenFloat'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'for turns, quarrelling all the while, and fighting'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'for the hedgehogs; and in a very short time '", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'the Queen'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'was in a furious passion, and went stamping about, and'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'shouting \u2018Off with his head!\u2019 or \u2018Off with her head!\u2019'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'about once in a minute.'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Alice began to feel very uneasy: to be sure, she had not as yet'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'had any dispute with the Queen, but she knew that it might'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'become of me? They\u2019re dreadfully fond of beheading people'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'here; the great wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/line-flow-with-floats-8-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/line-flow-with-floats-8-expected.txt index 9426ed1f..bc4e148 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/line-flow-with-floats-8-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/line-flow-with-floats-8-expected.txt
@@ -359,160 +359,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow P", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'The chief difficulty Alice found at first was in managing'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'her flamingo: she succeeded in getting its body tucked'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'away, comfortably enough, under her arm, with its legs'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'hanging down, but generally, just as she had got its'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'neck nicely straightened out, and was going to give the'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'hedgehog a blow with its head, it '", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'would'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment ' twist itself round and'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'look up in her face, with such a puzzled expression that she'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'could not help bursting out laughing: and when she had got its'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'head down, and was going to '", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'begin again, it was very'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'provoking to find that the hedgehog had unrolled itself, and was'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'in the act of crawling away: besides all this, there was generally'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'a ridge or furrow in the way wherever she wanted to send the'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'hedgehog to, and, as the doubled-up soldiers were always'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'getting up and walking off to other parts of the ground, Alice'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'soon came to the conclusion that it was a very '", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'difficult game'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'indeed.'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'The players all played at once without waiting '", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (floating) SPAN id='greenFloat'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'for turns,'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'quarrelling all the while, and fighting for the hedgehogs;'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'and in a very short time '", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'the Queen'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment ' was in a furious'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'passion, and went stamping about, and shouting \u2018Off'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'with his head!\u2019 or \u2018Off with her head!\u2019 about once in a'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'minute.'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Alice began to feel very uneasy: to be sure, she had not as yet'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'had any dispute with the Queen, but she knew that it might'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'become of me? They\u2019re dreadfully fond of beheading people'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'here; the great wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/lines-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/lines-with-layout-delta-expected.txt index 0441e3b..06d32f20 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/lines-with-layout-delta-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/lines-with-layout-delta-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV id='target'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'PASS'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/list-marker-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/list-marker-2-expected.txt index 4a41914..a99cd790 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/list-marker-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/list-marker-2-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGListItem LI", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGListMarker (anonymous)", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\u2022 '", - "reason": "subtree" - }, - { - "object": "LayoutImage IMG id='target'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/make-children-non-inline-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/make-children-non-inline-expected.txt index 4465d55..95e79bc 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/make-children-non-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/make-children-non-inline-expected.txt
@@ -114,92 +114,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutNGBlockFlow DIV", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (anonymous)", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment 'Word,'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment 'words,'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment 'more words.'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment 'I could'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment 'write a book'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "appeared" - }, - { - "object": "LayoutNGBlockFlow DIV id='target'", - "reason": "appeared" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (anonymous)", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment 'about all the stuff'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment 'that comes'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment 'after'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment 'the break.'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/mix-blend-mode-separate-stacking-context-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/mix-blend-mode-separate-stacking-context-expected.txt index 7db456d..0999cc6b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/mix-blend-mode-separate-stacking-context-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/mix-blend-mode-separate-stacking-context-expected.txt
@@ -74,44 +74,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) (floating) DIV", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (floating) DIV id='first'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) (floating) DIV", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (floating) DIV id='second'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) (floating) DIV", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (floating) DIV id='third'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) (floating) DIV id='fourth'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/multicol/multicol-resize-with-rule-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/multicol/multicol-resize-with-rule-expected.txt deleted file mode 100644 index 05829761..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/multicol/multicol-resize-with-rule-expected.txt +++ /dev/null
@@ -1,43 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "paintInvalidations": [ - { - "object": "LayoutMultiColumnSet (anonymous)", - "rect": [8, 8, 600, 200], - "reason": "geometry" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='columns'", - "reason": "geometry" - }, - { - "object": "LayoutMultiColumnSet (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutMultiColumnSet (anonymous)", - "reason": "geometry" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/multicol/multicol-with-text-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/multicol/multicol-with-text-expected.txt index 50f00cbe..2487e74 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/multicol/multicol-with-text-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/multicol/multicol-with-text-expected.txt
@@ -24,72 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='mc'", - "reason": "geometry" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "incremental" - }, - { - "object": "RootInlineBox", - "reason": "incremental" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "appeared" - }, - { - "object": "LayoutMultiColumnSet (anonymous)", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/non-text-link-invalidation-optimization-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/non-text-link-invalidation-optimization-expected.txt index 300d8c0a..e4b4e21c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/non-text-link-invalidation-optimization-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
@@ -49,32 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'This test '", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' passes if '", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'only'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' text is invalidated and '", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' no '", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment ' images.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/outline/outline-containing-image-in-non-standard-mode-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/outline/outline-containing-image-in-non-standard-mode-expected.txt index bafed54..da48626 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/outline/outline-containing-image-in-non-standard-mode-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/outline/outline-containing-image-in-non-standard-mode-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "outline" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN id='target'", - "reason": "subtree" - }, - { - "object": "LayoutImage IMG", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/clipped-overflow-visible-subtree-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/clipped-overflow-visible-subtree-expected.txt index c95cc5d2..0f8bb196a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/clipped-overflow-visible-subtree-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/clipped-overflow-visible-subtree-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/content-into-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/content-into-overflow-expected.txt index 1d5dcff..866c59a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/content-into-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/content-into-overflow-expected.txt
@@ -39,32 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutNGBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV", - "reason": "appeared" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (floating) DIV id='main-content'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV id='target3'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/fixed-position-transparency-with-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/fixed-position-transparency-with-overflow-expected.txt index 6c6a510..a3c7680 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/fixed-position-transparency-with-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/fixed-position-transparency-with-overflow-expected.txt
@@ -34,16 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV id='container' class='relative blue'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/float-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/float-overflow-expected.txt index 7590e4a..3ee6ef35 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/float-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/float-overflow-expected.txt
@@ -569,304 +569,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "subtree" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "subtree" - }, - { - "object": "LayoutTableRow TR", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV class='outer'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/float-overflow-right-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/float-overflow-right-expected.txt index 79d1273..38d59d5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/float-overflow-right-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/float-overflow-right-expected.txt
@@ -569,304 +569,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "subtree" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "subtree" - }, - { - "object": "LayoutTableRow TR", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV class='outer'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/inline-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/inline-overflow-expected.txt index a7e9eb5b..df3fbdb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/inline-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/inline-overflow-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'A\u00A0\u00A0B'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt index 30faea16..5dc90bf 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'A\u00A0\u00A0B'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt index 6cb3d50e..89bfe3c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'A\u00A0\u00A0B'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/line-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/line-overflow-expected.txt index cdf3d1a7..6d25268 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/line-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/line-overflow-expected.txt
@@ -109,52 +109,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Cras faucibus. Nunc'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'adipiscing, enim in scelerisque'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'convallis, augue '", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline SPAN id='t'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'purus'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment ' eleifend'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'lacus, at sagittis eros leo'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'pulvinar velit. Integer'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'sollicitudin nisi ut urna blandit'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'convallis.'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/negative-text-indent-with-overflow-hidden-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/negative-text-indent-with-overflow-hidden-expected.txt index 6db84ae..c757d61 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/negative-text-indent-with-overflow-hidden-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/negative-text-indent-with-overflow-hidden-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='target' class='changed'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/overflow-into-content-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/overflow-into-content-expected.txt index 124509b..d477de19 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/overflow-into-content-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/overflow/overflow-into-content-expected.txt
@@ -39,28 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutNGBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV", - "reason": "disappeared" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (floating) DIV id='main-content'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt index d9d3bac..bcf09c4f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='inner-target'", - "reason": "appeared" - }, - { - "object": "NGPhysicalTextFragment 'abc'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/absolute-margin-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/absolute-margin-change-repaint-expected.txt index cb09a85..58a93fc 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/absolute-margin-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/absolute-margin-change-repaint-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV id='container'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-change-containing-block-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-change-containing-block-expected.txt index e1f9051a..1f44c86 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-change-containing-block-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-change-containing-block-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutNGBlockFlow BODY", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='container' class='fixed blue'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-moved-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-moved-expected.txt index c1d9945..3a00ae56 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-moved-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-moved-expected.txt
@@ -39,20 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='fixed red'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/align-content-position-change-grid-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/align-content-position-change-grid-expected.txt index ac12646..63be65b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/align-content-position-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/align-content-position-change-grid-expected.txt
@@ -54,24 +54,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutGrid DIV id='container'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt index eaa53d1..27bd1762 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt
@@ -44,28 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='target'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) SPAN", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'the quick brown fox jumped over the lazy dog'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) SPAN", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'the quick brown fox jumped over the lazy dog'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/containing-block-position-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/containing-block-position-change-expected.txt index def7cd3..47bdeea0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/containing-block-position-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/containing-block-position-change-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV id='t'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/fixed-to-relative-position-with-absolute-child-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/fixed-to-relative-position-with-absolute-child-expected.txt index cd204fb1..60fd460 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/fixed-to-relative-position-with-absolute-child-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/fixed-to-relative-position-with-absolute-child-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutNGBlockFlow BODY", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV id='container' class='fixed blue'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/inline-relative-positioned-expected.txt index 888f96d..e442014 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/inline-relative-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/inline-relative-positioned-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline (relative positioned) SPAN", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='target'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'a'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/justify-content-position-change-grid-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/justify-content-position-change-grid-expected.txt index 3ddd864..9f2edef 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/justify-content-position-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/justify-content-position-change-grid-expected.txt
@@ -54,24 +54,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutGrid DIV id='container'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/layout-state-only-positioned-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/layout-state-only-positioned-expected.txt index 96bceb6..54dfa775 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/layout-state-only-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/layout-state-only-positioned-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='q'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/layout-state-relative-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/layout-state-relative-expected.txt index b86a37fe..cade5a7 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/layout-state-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/layout-state-relative-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV id='target'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'PASS'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt index 19d8579..09e8cb1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline (relative positioned) SPAN", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline (relative positioned) SPAN id='target'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'x'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/positioned-document-element-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/positioned-document-element-expected.txt index a3083508..385babf 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/positioned-document-element-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/positioned-document-element-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) HTML class='changed'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow P", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Tests that the entire viewport is painted with a floated html element.'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt index 67c6cb1..d3e14cd8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt
@@ -39,28 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='great-grandparent'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Target'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt index 9f49ad7..77be0180 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt
@@ -29,32 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV id='container'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) UL id='list'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGListItem (positioned) LI", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGListMarker (anonymous)", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\u2022 '", - "reason": "subtree" - }, - { - "object": "LayoutImage IMG", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt index 3ba7d72..179ee1ac 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt
@@ -30,20 +30,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline (relative positioned) DIV id='block'", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment 'When this layer moves it shouldn't generate a repaint rect.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/push-block-with-first-line-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/push-block-with-first-line-expected.txt index ab525cd..1d053c6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/push-block-with-first-line-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/push-block-with-first-line-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutNGBlockFlow DIV id='spacer'", - "reason": "appeared" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV class='test'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline (anonymous)", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'JOCULAR'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/quotes-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/quotes-expected.txt index 9740861..e0d2e56 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/quotes-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/quotes-expected.txt
@@ -49,32 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline \u003Cpseudo:before\u003E", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '{'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'quote 2'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline \u003Cpseudo:after\u003E", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '}'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/reflection-redraw-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/reflection-redraw-expected.txt index 77a300c..2c1a5e8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/reflection-redraw-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/reflection-redraw-expected.txt
@@ -79,56 +79,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'The color of this'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'text in the reflection'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'should be green'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'The color of this'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'text in the reflection'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'should be green'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'The color of this'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'text in the reflection'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'should be green'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'The color of this'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'text in the reflection'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'should be green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/reflection-with-rotation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/reflection-with-rotation-expected.txt index e7f48e1f..2993677a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/reflection-with-rotation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/reflection-with-rotation-expected.txt
@@ -39,16 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='target'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'PASS'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-lacur-with-reflection-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-lacur-with-reflection-expected.txt index 17dffad..fd0de80 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-lacur-with-reflection-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-lacur-with-reflection-expected.txt
@@ -42,20 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='moveMe' class='fixed clipped'", - "reason": "full" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green reflected'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='absolute red'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt index 119e02c4..fd0de80 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt
@@ -42,16 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green reflected'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='absolute red'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/remove-inline-after-layout-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/remove-inline-after-layout-expected.txt index e3e7171..997a52b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/remove-inline-after-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/remove-inline-after-layout-expected.txt
@@ -49,24 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment ' '", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/remove-inline-layer-after-layout-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/remove-inline-layer-after-layout-expected.txt index 1211a7b..6a6e765 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/remove-inline-layer-after-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/remove-inline-layer-after-layout-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment ' '", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt index 8f87759a..34f9fbe5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'paragraph 1'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt index b0bb565..42a308e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) BODY", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='container'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (relative positioned) DIV", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'There should only be one copy of this text.'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-after-scroll-expected.txt index ad7fb0f..f732076 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-after-scroll-expected.txt
@@ -47,20 +47,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='red fixed'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='t' class='green absolute'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absclute-position-scrolled-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absclute-position-scrolled-expected.txt index 3a39cfb..534c162 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absclute-position-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absclute-position-scrolled-expected.txt
@@ -37,20 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='container' class='relative'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt index 3a39cfb..534c162 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt
@@ -37,20 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='container' class='relative'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt index 8bc102a2..d6df640 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
@@ -37,12 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'Text Text Text Text Text Text Text Text Text Text Text Text Text'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt index 5dcb804..f2555d0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
@@ -42,12 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutNGBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt index 46310fac..5315e639 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='target'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'after'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt index 655338a7..dc02775b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='target'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'after'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt index 674c1fc..a91b26a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='target'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'after'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt index ea3fb48..665c7cd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='target'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment ' PASS .'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt index 5aa67ae..6796361d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt
@@ -88,16 +88,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='block'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt index ba3ba7b8..046b972 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt
@@ -59,48 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow BODY", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow P", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'You should see both vertical and horizontal scrollbars.'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow P", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'This is the test for '", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Bug 36461 - No vertical scrollbar after the CSS class change'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '.'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-delete-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-delete-expected.txt index 513c801..8b61d75 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-delete-expected.txt
@@ -29,56 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='t'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Passed'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/resize-scrollable-iframe-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/resize-scrollable-iframe-expected.txt index c13f542c..cd255b0b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/resize-scrollable-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/resize-scrollable-iframe-expected.txt
@@ -44,48 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "LayoutIFrame IFRAME id='iframe'", - "reason": "subtree" - }, - { - "object": "LayoutView #document", - "reason": "subtree" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutNGBlockFlow HTML", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt index 9812a57..246901d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt
@@ -42,28 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (floating) DIV class='right'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='scrollpanel'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (relative positioned) DIV class='container'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (relative positioned) DIV id='ul'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt index 09b841ae..88fc71d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt
@@ -37,16 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='moveMe' class='fixed clipped'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt index f94bc1fb..12b4dc507 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
@@ -42,16 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='absolute red'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt index 33a86b4..42404bd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt
@@ -42,16 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green'", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='absolute red'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-transformed-layer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-transformed-layer-expected.txt index 31221993..ab85e0a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-transformed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-transformed-layer-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='moveMe' class='absolute clipped rotated'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green'", - "reason": "style change" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='absolute red'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scrolled-iframe-scrollbar-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scrolled-iframe-scrollbar-change-expected.txt deleted file mode 100644 index caf40f8..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/scroll/scrolled-iframe-scrollbar-change-expected.txt +++ /dev/null
@@ -1,29 +0,0 @@ -{ - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow BODY class='noScroll'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='container'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='overlay'", - "reason": "subtree" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt index 06b6412f9..3a8a499 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'xx'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment 'y'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt index 35cc3e02..976d307 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'xx'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment 'y'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt index f86e016..241bf07 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'xx'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment 'y'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt index 8880ba4..9434d15b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'xx'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment 'y'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt index cbafa9e..f632d2a3 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'a'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment 'b'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt index f9f3673a..b0ae257 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt
@@ -314,244 +314,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment '\u898B'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u8A18\u4E8B'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u304C\u3069\u3053\u306B'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3042\u3063\u305F\u304B'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u5FD8'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u308C\u3066\u3057\u307E\u3063\u305F'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u7D4C\u9A13'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u306F\u3042\u308A\u307E\u3059\u304B'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u306A\u3089'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u30BF\u30A4\u30C8\u30EB'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3068'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u30A2\u30C9\u30EC\u30B9'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3060\u3051\u3067\u306A\u304F\u3001'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u8A2A\u554F'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3057\u305F'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u306E'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u30B3\u30F3\u30C6\u30F3\u30C4'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u304B\u3089\u3082'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u691C\u7D22'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u898B'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3064\u3051\u305F\u3059'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3070\u3089\u3057\u3044'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u8A18\u4E8B'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u5FD8'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u308C\u3066\u3057\u307E'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3063\u305F'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u7D4C\u9A13'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u306F\u3042\u308A\u307E\u3059\u304B'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment ' '", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u306A\u3089'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u30BF\u30A4\u30C8\u30EB'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3068'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u30A2'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u30C9\u30EC\u30B9'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3060\u3051\u3067\u306A\u304F\u3001'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u8A2A\u554F'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3057\u305F'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u306E'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u30B3\u30F3\u30C6\u30F3\u30C4'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u304B\u3089\u3082'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u691C\u7D22'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3059\u3002'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u8A2A\u554F'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3057\u305F'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u306E'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u30B3\u30F3\u30C6\u30F3\u30C4'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u304B'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3089\u3082'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u691C\u7D22'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u898B'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selected-replaced-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selected-replaced-expected.txt index f591d20b..2fc08bb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selected-replaced-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selected-replaced-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "LayoutImage (relative positioned) IMG id='test' class='moved'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.txt index 3b62c4eb..23e3a8f5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.txt
@@ -59,40 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'Foo'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment 'Bar'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment 'Bazz'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-clear-after-move-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-clear-after-move-expected.txt deleted file mode 100644 index bcc5b98..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-clear-after-move-expected.txt +++ /dev/null
@@ -1,35 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "paintInvalidations": [ - { - "object": "LayoutImage IMG", - "rect": [100, 300, 50, 50], - "reason": "selection" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutImage IMG", - "reason": "selection" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-clear-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-clear-expected.txt index e594f7b7..f4113aee 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-clear-expected.txt
@@ -44,32 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutNGBlockFlow DIV id='root'", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='firstLine'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\u00A0'", - "reason": "selection" - }, - { - "object": "NGPhysicalTextFragment '\u00A0'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\n'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt index 6ce5deb..8b4edbc 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPaintFragment", - "reason": "selection" - }, - { - "object": "NGPaintFragment", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-within-composited-scroller-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-within-composited-scroller-expected.txt index 393f5ea..516fd53 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-within-composited-scroller-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
@@ -79,12 +79,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'test'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt index 795aada..a413880 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'Should have blue, not gray, highlight'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt index 9374f35..02da8dd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'Should have green background'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/subtree-root-skipped-expected.txt index 58bc92e..d62bef6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/subtree-root-skipped-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/subtree-root-skipped-expected.txt
@@ -49,44 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "LayoutTextControl INPUT id='input'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='selection'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Selection is here'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='div'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt index 2c6f16a..84b34ed5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt
@@ -49,24 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow div id='contentBox'", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGContainer g", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/add-background-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/add-background-property-on-root-expected.txt index 96d6abac..010e22c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/add-background-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/add-background-property-on-root-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "background" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/add-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/add-outline-property-on-root-expected.txt index e64dccd..2989f9e5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/add-outline-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/add-outline-property-on-root-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt index c68dcc8..1aa9090 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt
@@ -49,32 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "full" - }, - { - "object": "LayoutSVGText text id='text'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'This is some text'", - "reason": "geometry" - }, - { - "object": "LayoutSVGImage image id='image'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers-expected.txt index d585d1eb..25cdc77 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers-expected.txt
@@ -44,32 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutEmbeddedObject OBJECT", - "reason": "subtree" - }, - { - "object": "LayoutView #document", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt index 5431409..913902a9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt
@@ -49,64 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutEmbeddedObject OBJECT", - "reason": "subtree" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutView #document", - "reason": "subtree" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow HTML", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutEmbeddedObject OBJECT", - "reason": "subtree" - }, - { - "object": "LayoutView #document", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt index 5431409..913902a9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt
@@ -49,64 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutEmbeddedObject OBJECT", - "reason": "subtree" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutView #document", - "reason": "subtree" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow HTML", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutEmbeddedObject OBJECT", - "reason": "subtree" - }, - { - "object": "LayoutView #document", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size-expected.txt index d6b6fcb7..1750a47 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size-expected.txt
@@ -44,32 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow div id='contentBox'", - "reason": "subtree" - }, - { - "object": "LayoutEmbeddedObject object", - "reason": "subtree" - }, - { - "object": "LayoutView #document", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect", - "reason": "subtree" - }, - { - "object": "LayoutSVGEllipse circle", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/overflow-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/overflow-repaint-expected.txt deleted file mode 100644 index b067c160..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/overflow-repaint-expected.txt +++ /dev/null
@@ -1,43 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "paintInvalidations": [ - { - "object": "LayoutSVGRoot svg id='svg'", - "rect": [8, 108, 100, 100], - "reason": "chunk appeared" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg id='svg'", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect", - "reason": "subtree" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-content-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-content-expected.txt index b7a8f34c..697f1cd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-content-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-content-expected.txt
@@ -39,20 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow div id='contentBox'", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect id='targetRect'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt index 5b81a0d..b4f0ce0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt
@@ -59,20 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow div id='contentBox'", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGEllipse circle", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt index 477ab886..a614a650 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt
@@ -39,28 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow div id='contentBox'", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGContainer use", - "reason": "subtree" - }, - { - "object": "LayoutSVGContainer g id='targetUse'", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect id='targetRect'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-image-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-image-expected.txt index 85dd1a0..47af164 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-image-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-image-expected.txt
@@ -39,20 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow div id='contentBox'", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGImage image", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-inner-svg-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-inner-svg-expected.txt index f036e14a..00da7a5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-inner-svg-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-inner-svg-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow div id='contentBox'", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGViewportContainer svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGPath path", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt index 72d3d42..de82b6bb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt
@@ -49,36 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow div id='contentBox'", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGContainer use", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect id='targetRect'", - "reason": "subtree" - }, - { - "object": "LayoutSVGContainer use", - "reason": "subtree" - }, - { - "object": "LayoutSVGContainer g id='targetUse'", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect id='targetRect1'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt index 4b4d6b78..3c8a60d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt
@@ -39,32 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow div id='contentBox'", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGContainer use", - "reason": "subtree" - }, - { - "object": "LayoutSVGViewportContainer svg id='targetSymbol'", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt index b36c330d..5a9dbe2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt
@@ -39,28 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow div id='contentBox'", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGContainer use", - "reason": "subtree" - }, - { - "object": "LayoutSVGViewportContainer svg id='gamesBorder'", - "reason": "subtree" - }, - { - "object": "LayoutSVGPath path", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt index c12e665..16083937 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt
@@ -39,28 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow div id='contentBox'", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGContainer use", - "reason": "subtree" - }, - { - "object": "LayoutSVGViewportContainer svg id='gamesBorder'", - "reason": "subtree" - }, - { - "object": "LayoutSVGPath path", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/remove-background-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/remove-background-property-on-root-expected.txt index 6051434..14ec7ce 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/remove-background-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/remove-background-property-on-root-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV", - "reason": "background" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/remove-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/remove-outline-property-on-root-expected.txt index 93436b0..447b0443 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/remove-outline-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/remove-outline-property-on-root-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "subtree" - }, - { - "object": "LayoutSVGRect rect", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/resize-svg-invalidate-children-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/resize-svg-invalidate-children-2-expected.txt deleted file mode 100644 index b8416e2..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/resize-svg-invalidate-children-2-expected.txt +++ /dev/null
@@ -1,60 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "LayoutSVGRoot svg", - "bounds": [600, 400], - "paintInvalidations": [ - { - "object": "LayoutSVGRoot svg", - "rect": [50, 0, 500, 400], - "reason": "paint property change" - }, - { - "object": "LayoutSVGRoot svg", - "rect": [0, 120, 200, 160], - "reason": "paint property change" - } - ], - "transform": 1 - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='target'", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/scale-change-huge-geometry-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/scale-change-huge-geometry-expected.txt deleted file mode 100644 index 3ff43b4..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/scale-change-huge-geometry-expected.txt +++ /dev/null
@@ -1,56 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "paintInvalidations": [ - { - "object": "LayoutSVGViewportContainer svg id='huge-symbol'", - "rect": [8, 8, 25, 25], - "reason": "paint property change" - }, - { - "object": "LayoutSVGViewportContainer svg id='huge-symbol'", - "rect": [8, 8, 20, 20], - "reason": "paint property change" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg id='svg'", - "reason": "subtree" - }, - { - "object": "LayoutSVGContainer use", - "reason": "subtree" - }, - { - "object": "LayoutSVGViewportContainer svg id='huge-symbol'", - "reason": "subtree" - }, - { - "object": "LayoutSVGPath path", - "reason": "subtree" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/svg-image-change-content-size-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/svg-image-change-content-size-expected.txt index 82b75e2..d16d1e6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/svg-image-change-content-size-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/svg-image-change-content-size-expected.txt
@@ -34,16 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow div id='contentBox'", - "reason": "subtree" - }, - { - "object": "LayoutImage img", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/use-setAttribute-crash-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/use-setAttribute-crash-expected.txt deleted file mode 100644 index 2d003fdd..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/svg/use-setAttribute-crash-expected.txt +++ /dev/null
@@ -1,56 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "paintInvalidations": [ - { - "object": "LayoutSVGEllipse svg:circle id='circle'", - "rect": [27, 27, 62, 62], - "reason": "chunk appeared" - }, - { - "object": "LayoutSVGEllipse svg:circle id='circle'", - "rect": [51, 51, 14, 14], - "reason": "chunk disappeared" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow body", - "reason": "subtree" - }, - { - "object": "LayoutSVGRoot svg:svg id='svg'", - "reason": "subtree" - }, - { - "object": "LayoutSVGContainer svg:use id='use'", - "reason": "subtree" - }, - { - "object": "LayoutSVGViewportContainer svg id='symbol'", - "reason": "subtree" - }, - { - "object": "LayoutSVGEllipse svg:circle id='circle'", - "reason": "subtree" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/border-collapse-change-collapse-to-separate-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/border-collapse-change-collapse-to-separate-expected.txt index 34e15353..f874a3dd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/border-collapse-change-collapse-to-separate-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/border-collapse-change-collapse-to-separate-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='table'", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutNGTableCell TD", - "reason": "style change" - }, - { - "object": "LayoutNGTableCell TD", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/border-collapse-change-separate-to-collapse-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/border-collapse-change-separate-to-collapse-expected.txt index 162f2c1..fa672e44 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/border-collapse-change-separate-to-collapse-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/border-collapse-change-separate-to-collapse-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='table'", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutNGTableCell TD", - "reason": "style change" - }, - { - "object": "LayoutNGTableCell TD", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt index d94f2b5..afde41c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt
@@ -39,20 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable (relative positioned) TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutNGTableCell TD id='foo'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/collapsed-border-cell-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/collapsed-border-cell-resize-expected.txt deleted file mode 100644 index 6f24c59e..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/collapsed-border-cell-resize-expected.txt +++ /dev/null
@@ -1,43 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "paintInvalidations": [ - { - "object": "LayoutTableRow TR", - "rect": [8, 8, 104, 204], - "reason": "geometry" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD id='target'", - "reason": "incremental" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-expected.txt index c248188..409c27a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-expected.txt
@@ -29,16 +29,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt index 14f2346..5f075d4b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt
@@ -29,16 +29,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-span-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-span-expected.txt index c928082..e1fd9dc7 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-span-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-span-expected.txt
@@ -34,16 +34,6 @@ "position": [133, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt index 5af5f13..7995869 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt
@@ -34,16 +34,6 @@ "position": [133, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-colgroup-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-colgroup-expected.txt index 4c0c5aa..cab1d39 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-colgroup-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-colgroup-expected.txt
@@ -29,16 +29,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COLGROUP id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt index eaad2eaa..01e218da 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt
@@ -29,16 +29,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COLGROUP id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-composited-row-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-composited-row-expected.txt index 77e48e4..abe1674 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-composited-row-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-composited-row-expected.txt
@@ -35,12 +35,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt index 6e2264e..f0044b8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt
@@ -35,12 +35,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-expected.txt index 27e4e62..a816919 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-expected.txt
@@ -29,12 +29,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt index 2680307..cbe2e05 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt
@@ -40,12 +40,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt index 501a148..9c7a729 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt
@@ -40,12 +40,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-expected.txt index 8df78fd7f..c8d31214 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-expected.txt
@@ -35,12 +35,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt index 40d9017..e1e8e1c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt
@@ -35,12 +35,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-row-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-row-expected.txt index 1c50619a..0c4b0d26 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-row-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/composited-table-row-expected.txt
@@ -30,12 +30,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-cell-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-cell-expected.txt index aea1c8fd..ad6e3a1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-cell-expected.txt
@@ -42,24 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable (positioned) TABLE", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell (anonymous)", - "reason": "appeared" - }, - { - "object": "LayoutNGBlockFlow (positioned) TD id='moveMe' class='fixed'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-expected.txt index cc2df731..7ccc55f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-expected.txt
@@ -52,28 +52,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable (positioned) TABLE", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell (anonymous)", - "reason": "appeared" - }, - { - "object": "LayoutNGBlockFlow (positioned) TD id='moveMe' class='fixed'", - "reason": "appeared" - }, - { - "object": "LayoutNGBlockFlow (relative positioned) DIV class='green'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt index 91e5be4..b558f886 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt
@@ -42,24 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable (positioned) TABLE", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell (anonymous)", - "reason": "appeared" - }, - { - "object": "LayoutNGBlockFlow (positioned) TD id='moveMe' class='fixed'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/invalidate-cell-in-row-with-offset-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/invalidate-cell-in-row-with-offset-expected.txt index 06fd34f..f36816d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/invalidate-cell-in-row-with-offset-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/invalidate-cell-in-row-with-offset-expected.txt
@@ -41,12 +41,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutNGTableCell TD id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/repaint-table-row-in-composited-document-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/repaint-table-row-in-composited-document-expected.txt index fcc1a930..452baed 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/repaint-table-row-in-composited-document-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/repaint-table-row-in-composited-document-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD id='target'", - "reason": "incremental" - }, - { - "object": "LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt index 1cae6ed..ec37fdcc 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt
@@ -54,36 +54,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "incremental" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'ROW1'", - "reason": "subtree" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'ROW2'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt index b4ee007b..5e05214 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'MIDDLE'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/resize-table-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/resize-table-row-repaint-expected.txt index a3037fe..4eabd0a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/resize-table-row-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/resize-table-row-repaint-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment 'MIDDLE'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-cell-move-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-cell-move-expected.txt index 490e90c1..34d08d2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-cell-move-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-cell-move-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD", - "reason": "appeared" - }, - { - "object": "LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD", - "reason": "disappeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-collapsed-border-expected.txt index b60fa99..c0d3760 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-collapsed-border-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-collapsed-border-expected.txt
@@ -144,128 +144,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='t'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTable TABLE", - "reason": "full" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Lorem'", - "reason": "subtree" - }, - { - "object": "LayoutTableRow TR id='r'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\u00A0'", - "reason": "subtree" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'sit amet'", - "reason": "subtree" - }, - { - "object": "LayoutTable TABLE", - "reason": "full" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='r2'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment '\u00A0'", - "reason": "subtree" - }, - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Lorem'", - "reason": "subtree" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD id='d3'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'ipsum dolor'", - "reason": "subtree" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'sit amet'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-row-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-row-expected.txt deleted file mode 100644 index 6a57b6b8..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-row-expected.txt +++ /dev/null
@@ -1,43 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "paintInvalidations": [ - { - "object": "LayoutTableRow TR id='target' class='green'", - "rect": [8, 10, 106, 100], - "reason": "style change" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='target' class='green'", - "reason": "style change" - }, - { - "object": "LayoutNGTableCell TD", - "reason": "geometry" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-section-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-section-overflow-expected.txt index 93d8aed..5b9c798e6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-section-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-section-overflow-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutNGBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-section-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-section-repaint-expected.txt index 73da095..d1dcfd11 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-section-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-section-repaint-expected.txt
@@ -109,76 +109,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCaption CAPTION id='caption1' class='blue half'", - "reason": "disappeared" - }, - { - "object": "LayoutNGTableCell TD class='red half'", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD class='green half'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD", - "reason": "disappeared" - }, - { - "object": "LayoutNGBlockFlow DIV id='top' class='blue half'", - "reason": "disappeared" - }, - { - "object": "LayoutNGTableCell TD class='red half'", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD class='green half'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD class='green half'", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD class='red half'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD class='half'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD class='half'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-shrink-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-shrink-row-repaint-expected.txt index d3fdfec..75f5d45 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-shrink-row-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/table/table-shrink-row-repaint-expected.txt
@@ -234,116 +234,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutNGTableCell TD id='resizeMe'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment '2'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment '3'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment '4'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment '5'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment '6'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment '7'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment '8'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment '9'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment '10'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment '11'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment '12'", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGTableCell TD", - "reason": "geometry" - }, - { - "object": "NGPhysicalTextFragment '13'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/text-append-dirty-lines-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/text-append-dirty-lines-expected.txt index 6fb569d..9ff61e6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/text-append-dirty-lines-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/text-append-dirty-lines-expected.txt
@@ -89,40 +89,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow P id='target'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse placerat. Morbi tristique. Mauris eu lacus sed felis'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'pellentesque cursus. Proin vitae nulla. Vivamus in ipsum. Etiam mi. Nam malesuada purus in sem. Sed eget elit vel erat'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'laoreet feugiat. Phasellus mollis pulvinar mi. Etiam ut neque sed eros egestas laoreet. Vestibulum ullamcorper, nulla non'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'feugiat molestie, mi lorem bibendum leo, ac gravida orci nunc nec nulla. Nunc nunc lorem, rhoncus et, rutrum ac,'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'fermentum ut, tortor. Sed rhoncus. Quisque enim metus, luctus tincidunt, vestibulum eu, vestibulum eu, libero. Mauris'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'sagittis aliquam nunc. Nullam pharetra molestie eros. Donec tempus purus ut ligula. Phasellus non nisl. Etiam eu mauris.'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'Curabitur a velit.'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/text-match-document-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/text-match-document-change-expected.txt index b705847..d21e8cb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/text-match-document-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/text-match-document-change-expected.txt
@@ -39,20 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='to-be-changed'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'After change'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/transform/invalidation-with-scale-transform-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/transform/invalidation-with-scale-transform-expected.txt index 476e6839..8eac3af 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/transform/invalidation-with-scale-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/transform/invalidation-with-scale-transform-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='zoom' class='zoom-div'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV id='target'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/transform/transform-inline-layered-child-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/transform/transform-inline-layered-child-expected.txt index c5cc1b08..2d37eacb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/transform/transform-inline-layered-child-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/transform/transform-inline-layered-child-expected.txt
@@ -29,84 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow (positioned) DIV id='box'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline (relative positioned) SPAN id='child'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline (relative positioned) SPAN id='child'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline (relative positioned) SPAN id='child'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline (relative positioned) SPAN id='child'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline (relative positioned) SPAN id='child'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline (relative positioned) SPAN id='child'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline (relative positioned) SPAN id='child'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline (relative positioned) SPAN id='child'", - "reason": "style change" - }, - { - "object": "NGPhysicalBoxFragment LayoutInline (relative positioned) SPAN id='child'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'A B C'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'D E F'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'G H I'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'J K L'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'M N O'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'P Q R'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'S T U'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'V W X'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'Y Z'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/transform/transform-layout-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/transform/transform-layout-repaint-expected.txt index 65a56aa..e96fb00 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/transform/transform-layout-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/transform/transform-layout-repaint-expected.txt
@@ -39,16 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='target'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'PASS'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align-length1-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align-length1-expected.txt index 7e32106..a3bd7154 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align-length1-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align-length1-expected.txt
@@ -44,24 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='other'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV id='target'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='other'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align-length2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align-length2-expected.txt index 4c91014..92cc31e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align-length2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align-length2-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='other'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV id='target'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='other'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align1-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align1-expected.txt index 4e7d3f78..fcd19e9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align1-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align1-expected.txt
@@ -44,24 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='other'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV id='target'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='other'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align2-expected.txt index 8be18b85..89f3873 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-align2-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='other'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV id='target'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow DIV class='other'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-rl-as-paint-container-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-rl-as-paint-container-expected.txt index 216d494..dfb202b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-rl-as-paint-container-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/vertical-rl-as-paint-container-expected.txt
@@ -45,24 +45,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "NGPhysicalTextFragment 'Lorem ipsum dolor'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'sit amet,'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'consectetur'", - "reason": "style change" - }, - { - "object": "NGPhysicalTextFragment 'adipiscing elit.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-centered-inline-under-fixed-pos-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-centered-inline-under-fixed-pos-expected.txt index 9d8fe7f..5d62e69 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-centered-inline-under-fixed-pos-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-centered-inline-under-fixed-pos-expected.txt
@@ -39,32 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='container'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV class='parent'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (relative positioned) DIV class='child'", - "reason": "subtree" - } ] } { @@ -108,32 +82,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='container'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV class='parent'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (relative positioned) DIV class='child'", - "reason": "subtree" - } ] } { @@ -187,32 +135,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='container'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV class='parent'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (relative positioned) DIV class='child'", - "reason": "subtree" - } ] } { @@ -261,32 +183,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV class='container'", - "reason": "subtree" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV class='parent'", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (relative positioned) DIV class='child'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-positioned-bottom-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-positioned-bottom-expected.txt index 2a195de..4d6bce5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-positioned-bottom-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-positioned-bottom-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV", - "reason": "subtree" - } ] } { @@ -75,24 +57,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV", - "reason": "subtree" - } ] } { @@ -131,24 +95,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV", - "reason": "subtree" - } ] } { @@ -182,24 +128,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-positioned-percent-top-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-positioned-percent-top-expected.txt index 452890c..404f488 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-positioned-percent-top-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-positioned-percent-top-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV", - "reason": "subtree" - } ] } { @@ -75,24 +57,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV", - "reason": "subtree" - } ] } { @@ -131,24 +95,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV", - "reason": "subtree" - } ] } { @@ -182,24 +128,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "LayoutNGBlockFlow (positioned) DIV", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt index 4dd819e..4531371 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
@@ -37,76 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'AAAA'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'BBBB'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'CCCC'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'DDDD'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'EEEE'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'FFFF'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'GGGG'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'HHHH'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'IIII JJJJ'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'KKKK'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'LLLL'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'MMMM'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'NNNN'", - "reason": "subtree" - } ] } { @@ -148,76 +78,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'AAAA'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'BBBB'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'CCCC'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'DDDD'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'EEEE'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'FFFF'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'GGGG'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'HHHH'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'IIII JJJJ'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'KKKK'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'LLLL'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'MMMM'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'NNNN'", - "reason": "subtree" - } ] } { @@ -246,44 +106,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'AAAA BBBB CCCC'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'DDDD EEEE FFFF'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'GGGG HHHH IIII JJJJ'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'KKKK LLLL MMMM'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'NNNN'", - "reason": "subtree" - } ] } { @@ -362,40 +184,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "NGPhysicalBoxFragment LayoutNGBlockFlow BODY", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'AAAA BBBB CCCC'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'DDDD EEEE FFFF'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'GGGG HHHH IIII JJJJ'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'KKKK LLLL MMMM'", - "reason": "subtree" - }, - { - "object": "NGPhysicalTextFragment 'NNNN'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/markers/markers-zoomed-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/markers/markers-zoomed-expected.png new file mode 100644 index 0000000..b151cb1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-features=LayoutNG/paint/markers/markers-zoomed-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/4776765-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/4776765-expected.txt index db9aae52..77dfa9d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/4776765-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/4776765-expected.txt
@@ -23,36 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutBlockFlow DIV id='div'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-currentColor-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-currentColor-repaint-expected.txt index f07fc53..97c518f2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-currentColor-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-currentColor-repaint-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='div1'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='div2'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-generated-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-generated-expected.txt index b8a0837..7fb97c8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-generated-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-generated-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-resize-height-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-resize-height-expected.txt index e5d453f..ffd25fd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-resize-height-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-resize-height-expected.txt
@@ -313,92 +313,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='test image'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image size-cover'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image size-contain'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image fixed-height'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image percent-height'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image top'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image bottom'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image center'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image no-repeat'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image repeat-space'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image repeat-round'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated size-cover'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated size-contain'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated percent-height'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated top'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated bottom'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated center'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated no-repeat'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated repeat-space'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated repeat-round'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-shorthand-with-gradient-and-height-changes-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-shorthand-with-gradient-and-height-changes-expected.txt index b481c0c..92d73195 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-shorthand-with-gradient-and-height-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-shorthand-with-gradient-and-height-changes-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='outer'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-size-auto-with-gradient-and-height-changes-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-size-auto-with-gradient-and-height-changes-expected.txt index b481c0c..92d73195 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-size-auto-with-gradient-and-height-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/background-size-auto-with-gradient-and-height-changes-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='outer'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/backgroundSizeRepaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/backgroundSizeRepaint-expected.txt index e42b74e..119cd45c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/backgroundSizeRepaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/backgroundSizeRepaint-expected.txt
@@ -28,24 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='a'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='b'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/change-text-content-and-background-color-expected.txt index e07f2a18..37ddc9fa 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/change-text-content-and-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/change-text-content-and-background-color-expected.txt
@@ -23,28 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl (positioned) INPUT id='input'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'NEW'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/view-background-from-body-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/view-background-from-body-2-expected.txt index 484fec8..99ce095 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/view-background-from-body-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/view-background-from-body-2-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/viewport-gradient-background-html-move-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/viewport-gradient-background-html-move-overflow-expected.txt index 937ba4c4..c783c4a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/viewport-gradient-background-html-move-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/viewport-gradient-background-html-move-overflow-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/viewport-gradient-background-html-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/viewport-gradient-background-html-resize-expected.txt index 088e020..dfbcf6c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/viewport-gradient-background-html-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/viewport-gradient-background-html-resize-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/viewport-gradient-background-html-resize-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/viewport-gradient-background-html-resize-overflow-expected.txt index 752db494..6c2b6cc 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/viewport-gradient-background-html-resize-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/background/viewport-gradient-background-html-resize-overflow-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-layout-inline-children-replaced-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-layout-inline-children-replaced-expected.txt index 92df863..8084c5ed 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-layout-inline-children-replaced-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-layout-inline-children-replaced-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target' class='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-no-inflow-children-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-no-inflow-children-expected.txt index 96bbe9dc..9a9e290 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-no-inflow-children-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-no-inflow-children-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'La la la la'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-shift-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-shift-repaint-expected.txt index 7187f5a..77cb43d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-shift-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/block-shift-repaint-expected.txt
@@ -88,44 +88,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='div1' class='blue half'", - "reason": "disappeared" - }, - { - "object": "LayoutBlockFlow DIV class='red half'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='green half'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='top' class='blue half'", - "reason": "disappeared" - }, - { - "object": "LayoutBlockFlow DIV class='red half'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='green half'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='green half'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='red half'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='half'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-current-color-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-current-color-expected.txt index 18f15b7..7fd5b5ab 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-current-color-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-current-color-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='currentColor'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-image-outset-add-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-image-outset-add-repaint-expected.txt index 5a4ef1d8..365928b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-image-outset-add-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-image-outset-add-repaint-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-image-outset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-image-outset-change-repaint-expected.txt index 5a4ef1d8..365928b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-image-outset-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-image-outset-change-repaint-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-radius-repaint-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-radius-repaint-2-expected.txt index 1baedcb..a37b05c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-radius-repaint-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-radius-repaint-2-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-radius-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-radius-repaint-expected.txt index f15bea7..eb9f7742 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-radius-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-radius-repaint-expected.txt
@@ -28,24 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='a'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='b'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-radius-without-border-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-radius-without-border-expected.txt index 0e2a9e5..15c62ab3 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-radius-without-border-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-radius-without-border-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-repaint-glitch-expected.txt index 779cf276..05794ec2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-repaint-glitch-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/border-repaint-glitch-expected.txt
@@ -28,24 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='a'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='b'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-inline-resize-expected.txt index 5b6271d..75140e2d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-inline-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-inline-resize-expected.txt
@@ -23,36 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG id='foo'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow H2", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Chromium'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-add-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-add-repaint-expected.txt index f9dfcfa1..817ba5e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-add-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-add-repaint-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-change-repaint-expected.txt index 95fb7d9..c44c568 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-change-repaint-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-dynamic-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-dynamic-expected.txt index 5782e076..b15b466 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-dynamic-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-dynamic-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-inset-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-inset-repaint-expected.txt index 195ccc4..4b3c401 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-inset-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-shadow-inset-repaint-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='container'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-sizing-border-keeping-size-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-sizing-border-keeping-size-expected.txt index 7ca901c..cb227cf 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-sizing-border-keeping-size-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-sizing-border-keeping-size-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1' class='content-box'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2' class='border-box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-sizing-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-sizing-expected.txt index b6b4604..fc02bd3 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-sizing-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-sizing-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1' class='content-box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2' class='border-box'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-sizing-padding-keeping-size-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-sizing-padding-keeping-size-expected.txt index 7ca901c..cb227cf 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-sizing-padding-keeping-size-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/box-sizing-padding-keeping-size-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1' class='content-box'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2' class='border-box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/hover-pseudo-borders-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/hover-pseudo-borders-expected.txt index 92fb2c1..d60074f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/hover-pseudo-borders-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/hover-pseudo-borders-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='hitregion'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) \u003Cpseudo:after\u003E", - "reason": "style change" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/hover-pseudo-borders-whitespace-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/hover-pseudo-borders-whitespace-expected.txt index 64023913..7f0de3d6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/hover-pseudo-borders-whitespace-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/hover-pseudo-borders-whitespace-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='div_border'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='div_outline'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt index d8f0e24..b0d8fca0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN id='target'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Text'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/margin-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/margin-expected.txt index fa977d1..55a5fdd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/margin-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/margin-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/negative-shadow-box-expand-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/negative-shadow-box-expand-expected.txt index ee4345ea..83006231 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/negative-shadow-box-expand-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/negative-shadow-box-expand-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='inner2'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/negative-shadow-box-shrink-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/negative-shadow-box-shrink-expected.txt index fe9a0792b..fa8e0423 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/negative-shadow-box-shrink-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/negative-shadow-box-shrink-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='outer'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/padding-border-keeping-border-box-and-content-box-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/padding-border-keeping-border-box-and-content-box-expected.txt index 65e1260..07b33b8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/padding-border-keeping-border-box-and-content-box-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/padding-border-keeping-border-box-and-content-box-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/padding-keeping-content-size-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/padding-keeping-content-size-expected.txt index 0a322bb..fc0c10f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/padding-keeping-content-size-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/padding-keeping-content-size-expected.txt
@@ -28,20 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1' class='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2' class='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='inner'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/padding-keeping-visual-size-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/padding-keeping-visual-size-expected.txt index 10876b1..800ea0c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/padding-keeping-visual-size-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/padding-keeping-visual-size-expected.txt
@@ -23,20 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1' class='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2' class='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='inner'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/resize-with-border-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/resize-with-border-expected.txt index 8429077..3514ea8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/resize-with-border-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/resize-with-border-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/shadow-box-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/shadow-box-resize-expected.txt index 205558d..fd6d112 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/shadow-box-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/shadow-box-resize-expected.txt
@@ -28,24 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target3'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target4'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/shadow-box-resize-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/shadow-box-resize-writing-mode-expected.txt index 205558d..fd6d112 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/shadow-box-resize-writing-mode-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/box/shadow-box-resize-writing-mode-expected.txt
@@ -28,24 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target3'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target4'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-3509-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-3509-expected.txt index 24159fd..bae18081 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-3509-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-3509-expected.txt
@@ -23,24 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='im'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-5699-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-5699-expected.txt index a71a0b8..84e0f59a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-5699-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-5699-expected.txt
@@ -28,56 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='d'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Hello'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-6278-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-6278-expected.txt index 93263bf..1fd9488 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-6278-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-6278-expected.txt
@@ -128,72 +128,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD id='col1'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Curabitur pretium, quam quis semper'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'malesuada, est libero feugiat libero,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'vel fringilla orci nibh sed neque.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Quisque eu nulla non nisi molestie'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'accumsan. Etiam tellus urna, laoreet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ac, laoreet non, suscipit sed, sapien.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Phasellus vehicula, sem at posuere'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'vehicula, augue nibh molestie nisl,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'nec ullamcorper lacus ante vulputate'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'pede.'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-6473-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-6473-expected.txt index 9f6190c..58ee46c2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-6473-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-6473-expected.txt
@@ -18,28 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='allcontent'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'SUCCESS'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-7235-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-7235-expected.txt index 807d8e8d..574dc590 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-7235-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/bugzilla-7235-expected.txt
@@ -23,36 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) SPAN id='p'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='t'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/button-spurious-layout-hint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/button-spurious-layout-hint-expected.txt index 5fe84c0e59..15ca1056 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/button-spurious-layout-hint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/button-spurious-layout-hint-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutButton BUTTON id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-putImageData-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-putImageData-expected.txt index 44c8777..9137432 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-putImageData-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-putImageData-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutHTMLCanvas CANVAS id='canvas'", - "reason": "invalidate paint rectangle" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-expected.txt index 27355c9..850c863 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt index 50388f6..02f4121 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-outside-block-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-outside-block-expected.txt index ca40e9b2..bc5ac207 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-outside-block-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-outside-block-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-subpixel-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-subpixel-expected.txt index d0bb307..90733f43 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-subpixel-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/caret-subpixel-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clip-path-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clip-path-resize-expected.txt index 26d9437..d984afd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clip-path-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clip-path-resize-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clip-unclip-and-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clip-unclip-and-change-expected.txt index 55b0fd5..9317bdf03 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clip-unclip-and-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clip-unclip-and-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clipped-relative-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clipped-relative-expected.txt index 50831112..2bfbdeba 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clipped-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/clipped-relative-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='inner'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/control-clip-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/control-clip-expected.txt index 7907ad5..becc2b5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/control-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/control-clip-expected.txt
@@ -28,40 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText (anonymous)", - "reason": "full" - }, - { - "object": "InlineTextBox 'SUCCESS'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'SUCCESS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/css-clip-change-stacking-child-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/css-clip-change-stacking-child-expected.txt index f768584d..88c4ae5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/css-clip-change-stacking-child-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/css-clip-change-stacking-child-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/intermediate-layout-position-clip-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/intermediate-layout-position-clip-expected.txt index d850086..f825982 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/intermediate-layout-position-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/intermediate-layout-position-clip-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/mask-clip-change-stacking-child-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/mask-clip-change-stacking-child-expected.txt index 79b02b80..6392561 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/mask-clip-change-stacking-child-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/mask-clip-change-stacking-child-expected.txt
@@ -25,12 +25,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/outline-clip-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/outline-clip-change-expected.txt index b823ffa..70abd981 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/outline-clip-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/outline-clip-change-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) A id='link' class='updated'", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'Lorem Ipsum'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt index d06d0d7..75fd780 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) (floating) DIV class='imgContainer'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/resize-with-border-clipped-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/resize-with-border-clipped-expected.txt index 86e115b..592d05b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/resize-with-border-clipped-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/resize-with-border-clipped-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/subtree-root-clip-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/subtree-root-clip-2-expected.txt index 0c555d6..ebe1eeb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/subtree-root-clip-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/subtree-root-clip-2-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "background" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/subtree-root-clip-3-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/subtree-root-clip-3-expected.txt index a01138da..1e578c2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/subtree-root-clip-3-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/subtree-root-clip-3-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "background" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/subtree-root-clip-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/subtree-root-clip-expected.txt index d0cf19d..1a5bb7b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/subtree-root-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/clip/subtree-root-clip-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "background" - }, - { - "object": "LayoutBlockFlow DIV id='inner'", - "reason": "disappeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/child-of-sub-pixel-offset-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/child-of-sub-pixel-offset-composited-layer-expected.txt index 880b8e8c..342e905 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/child-of-sub-pixel-offset-composited-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/child-of-sub-pixel-offset-composited-layer-expected.txt
@@ -30,16 +30,6 @@ [101, 100, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='container'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target' class='green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-added-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-added-expected.txt index 74aed88..1d42628a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-added-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-added-expected.txt
@@ -26,12 +26,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='fixed'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-added-individual-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-added-individual-expected.txt index 74aed88..1d42628a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-added-individual-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-added-individual-expected.txt
@@ -26,12 +26,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='fixed'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-removed-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-removed-expected.txt index 29d00c1..40069ee7 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-removed-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-removed-expected.txt
@@ -27,12 +27,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='fixed'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-removed-individual-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-removed-individual-expected.txt index 02d7535..9e775b1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-removed-individual-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/containing-block-removed-individual-expected.txt
@@ -28,12 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='fixed'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/float-under-composited-inline-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/float-under-composited-inline-expected.txt index 7f6dbcd..be46f2d2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/float-under-composited-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/float-under-composited-inline-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV id='float'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/invalidations-on-composited-layers-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/invalidations-on-composited-layers-expected.txt index d90323ef..1d74f88 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/invalidations-on-composited-layers-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/compositing/invalidations-on-composited-layers-expected.txt
@@ -55,16 +55,6 @@ [50, 50, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='parent'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='child'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-3-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-3-expected.txt index 5f372a2..7d70908 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-3-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/crbug-371640-3-expected.txt
@@ -23,12 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='keep_child'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-element-change-columns-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-element-change-columns-repaint-expected.txt index a3d8536..f7fd116 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-element-change-columns-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-element-change-columns-repaint-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutGrid DIV class='grid min-content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='sizedToGridArea'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-element-change-rows-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-element-change-rows-repaint-expected.txt index 8484e0c9..53e8096 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-element-change-rows-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-element-change-rows-repaint-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutGrid DIV class='grid fit-content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='sizedToGridArea'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-item-change-column-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-item-change-column-repaint-expected.txt index 87cec10..5563928 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-item-change-column-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-item-change-column-repaint-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='sizedToGridArea'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-item-change-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-item-change-row-repaint-expected.txt index c2b1d2b..eda944f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-item-change-row-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/css-grid-layout/grid-item-change-row-repaint-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='sizedToGridArea'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/cull-rect-change-crash-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/cull-rect-change-crash-expected.txt index 0638596..98f7560 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/cull-rect-change-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/cull-rect-change-crash-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='g'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/delete-into-nested-block-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/delete-into-nested-block-expected.txt index 52e0eb5c..059633e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/delete-into-nested-block-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/delete-into-nested-block-expected.txt
@@ -33,28 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='one'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'three'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/details-open-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/details-open-repaint-expected.txt index c1469875..271a2e1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/details-open-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/details-open-repaint-expected.txt
@@ -18,36 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutDetailsMarker DIV id='details-marker'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow DIV id='details-content'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutTextControl INPUT", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/effect-reference-repaint-primitive-attr-mutation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/effect-reference-repaint-primitive-attr-mutation-expected.txt index 57b04ac2..b0077b2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/effect-reference-repaint-primitive-attr-mutation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/effect-reference-repaint-primitive-attr-mutation-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-1-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-1-expected.txt index fb09941..a394ca8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-1-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-1-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-2-expected.txt index b7ef8dd..cc669cbe 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-2-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-3-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-3-expected.txt index 3046438..cb69176 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-3-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-3-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-4-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-4-expected.txt index b7ef8dd..cc669cbe 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-4-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-4-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-5-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-5-expected.txt index fb09941..a394ca8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-5-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-5-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-6-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-6-expected.txt index 272db43..1ae40db0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-6-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-composite-6-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-displacement-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-displacement-expected.txt index 2217ca9..5130277 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-displacement-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-displacement-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-gaussianblur-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-gaussianblur-expected.txt index eefd415..3d5e2ee7 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-gaussianblur-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-gaussianblur-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-gaussianblur-xonly-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-gaussianblur-xonly-expected.txt index 0ab97da..1011296 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-gaussianblur-xonly-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-gaussianblur-xonly-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-gaussianblur-yonly-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-gaussianblur-yonly-expected.txt index 76b4b43..9ae5bd1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-gaussianblur-yonly-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-gaussianblur-yonly-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-lighting-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-lighting-expected.txt index f076d4c..ec886a3d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-lighting-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-lighting-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-merge-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-merge-expected.txt index 272db43..1ae40db0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-merge-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-merge-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-morphology-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-morphology-expected.txt index f0590eb..6f39aef 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-morphology-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-morphology-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-morphology-xonly-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-morphology-xonly-expected.txt index 2272213..02eee964 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-morphology-xonly-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-morphology-xonly-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-morphology-yonly-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-morphology-yonly-expected.txt index d52843f..53c71e2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-morphology-yonly-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-morphology-yonly-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-offset-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-offset-expected.txt index 1fcf1ba2..91448ca 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-offset-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-offset-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-primitive-attr-mutation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-primitive-attr-mutation-expected.txt index 57b04ac2..b0077b2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-primitive-attr-mutation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-primitive-attr-mutation-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-primitive-attr-removal-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-primitive-attr-removal-expected.txt index 57b04ac2..b0077b2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-primitive-attr-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-primitive-attr-removal-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-primitive-removed-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-primitive-removed-expected.txt index 57b04ac2..b0077b2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-primitive-removed-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/effect-reference-repaint-primitive-removed-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-invalidation-after-display-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-invalidation-after-display-expected.txt index d708219..3491e96 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-invalidation-after-display-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-invalidation-after-display-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='box' class='green box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-invalidation-with-composited-container-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-invalidation-with-composited-container-change-expected.txt index fa80833..40c87e3 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-invalidation-with-composited-container-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-invalidation-with-composited-container-change-expected.txt
@@ -38,12 +38,6 @@ [8, 8, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='box' class='green box blurry'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt index 5b96792..89de92a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
@@ -31,12 +31,6 @@ [8, 8, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='resize' class='drop-shadow'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-repaint-accelerated-on-accelerated-filter-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-repaint-accelerated-on-accelerated-filter-expected.txt index febd6bcf..7369f76 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-repaint-accelerated-on-accelerated-filter-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-repaint-accelerated-on-accelerated-filter-expected.txt
@@ -31,12 +31,6 @@ [8, 8, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='resize' class='drop-shadow accelerated'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt index cb2f3c6..6bfe1ee 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
@@ -24,12 +24,6 @@ [8, 8, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='resize' class='accelerated'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-content-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-content-change-expected.txt index 2ad927de..7676b25 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-content-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-content-change-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-content-distribution-change-grid-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-content-distribution-change-grid-expected.txt index 1e95f52..c8e6d110 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-content-distribution-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-content-distribution-change-grid-expected.txt
@@ -23,20 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-items-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-items-change-expected.txt index 1b883bb..f5e04e2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-items-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-items-change-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-self-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-self-change-expected.txt index 1b883bb..f5e04e2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-self-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-self-change-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-self-change-grid-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-self-change-grid-expected.txt index 659a2be..3b5d7e1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-self-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/align-self-change-grid-expected.txt
@@ -33,20 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item1'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item2'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item3'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-content-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-content-change-expected.txt index 2d089a7c..b5fcc7b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-content-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-content-change-expected.txt
@@ -28,16 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-content-distribution-change-grid-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-content-distribution-change-grid-expected.txt index cd1d73d9..13af4959 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-content-distribution-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-content-distribution-change-grid-expected.txt
@@ -23,20 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-items-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-items-change-expected.txt index b0a7398..5e2c20d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-items-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-items-change-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-items-legacy-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-items-legacy-change-expected.txt index 3aea132..95ddb65 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-items-legacy-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-items-legacy-change-expected.txt
@@ -28,16 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item1'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item2'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-self-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-self-change-expected.txt index d3c97d489..2a47e41 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-self-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/justify-self-change-expected.txt
@@ -33,20 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item1'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item2'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item3'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/remove-inline-block-descendant-of-flex-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/remove-inline-block-descendant-of-flex-expected.txt index acd1798..4bd9d01 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/remove-inline-block-descendant-of-flex-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/remove-inline-block-descendant-of-flex-expected.txt
@@ -23,24 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='inline-block-2' class='item'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-column-reverse-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-column-reverse-expected.txt index a340321..583f681 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-column-reverse-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-column-reverse-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='blue' class='flex-item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-during-resize-no-flex-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-during-resize-no-flex-expected.txt index e0c1732d..5e5b983f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-during-resize-no-flex-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-during-resize-no-flex-expected.txt
@@ -33,20 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='flex-item-1' class='flex-item width'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV class='flex-item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='flex-item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-expected.txt index 0051db7c..b33f10a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-expected.txt
@@ -158,88 +158,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='left'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='left'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-on-margin-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-on-margin-change-expected.txt index 68d7dcb..ad33f2ed 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-on-margin-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-on-margin-change-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='child-to-grow' class='child'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-opacity-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-opacity-change-expected.txt index 8ca5007..1e493cf 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-opacity-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-opacity-change-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target' class='item'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-rtl-column-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-rtl-column-expected.txt index 77bd6a0..8a74224 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-rtl-column-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/flexbox/repaint-rtl-column-expected.txt
@@ -48,32 +48,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='left'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='left'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-in-new-block-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-in-new-block-with-layout-delta-expected.txt index 32c124c..101988e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-in-new-block-with-layout-delta-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-in-new-block-with-layout-delta-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-move-during-layout-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-move-during-layout-expected.txt index a559e537..1b722352 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-move-during-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-move-during-layout-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-new-in-block-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-new-in-block-expected.txt index b8f16e8..dc07709 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-new-in-block-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/float-new-in-block-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV id='target'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/button-checkbox-click-method-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/button-checkbox-click-method-repaint-expected.txt index ca50e37..a58f0c9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/button-checkbox-click-method-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/button-checkbox-click-method-repaint-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow INPUT id='checkbox'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt index 1c328c4b..94abcbb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt
@@ -18,28 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutButton BUTTON", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'Reset'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.txt index 6a8c40d..26af4f2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow INPUT", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.txt index ca15db2c..45dd88f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow INPUT", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt index 49f7a86..34cbfccc 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSlider INPUT", - "reason": "subtree" - }, - { - "object": "LayoutFlexibleBox DIV", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV id='track'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV id='thumb'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/select-option-background-color-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/select-option-background-color-expected.txt index ed1f4325..fc80421 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/select-option-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/select-option-background-color-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow OPTION id='option'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt index da3952e1..879a305 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
@@ -18,28 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutButton INPUT", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'Submit'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/textarea-appearance-none-resize-handle-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/textarea-appearance-none-resize-handle-expected.txt index 10c7891..d1193ce24 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/textarea-appearance-none-resize-handle-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/textarea-appearance-none-resize-handle-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl (positioned) TEXTAREA id='textarea'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/textarea-resize-property-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/textarea-resize-property-change-expected.txt index a7dd9d8..cec3a21 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/textarea-resize-property-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/textarea-resize-property-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl (positioned) TEXTAREA id='textarea'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/textarea-set-disabled-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/textarea-set-disabled-expected.txt index 817259d..bd12533 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/textarea-set-disabled-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/forms/textarea-set-disabled-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl TEXTAREA", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/gradients-em-stops-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/gradients-em-stops-repaint-expected.txt index 978c619..34ec2fb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/gradients-em-stops-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/gradients-em-stops-repaint-expected.txt
@@ -33,36 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='em-units'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='box3' class='box'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='box4' class='box'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='indicator'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-display-none-to-display-block-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-display-none-to-display-block-expected.txt index 16e77e0..0f2d8f7 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-display-none-to-display-block-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-display-none-to-display-block-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutIFrame IFRAME id='iframe'", - "reason": "appeared" - }, - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-rounding-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-rounding-expected.txt index 95324b8..8b47bfe 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-rounding-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/iframe-rounding-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt index d9caeee..9d59bd7 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutImage IMG", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/image-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/image-resize-expected.txt index 0f315334..1d91d98f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/image-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/image-resize-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutImage (positioned) IMG", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/percent-size-image-resize-container-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/percent-size-image-resize-container-expected.txt index 0f315334..1d91d98f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/percent-size-image-resize-container-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/image/percent-size-image-resize-container-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutImage (positioned) IMG", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-block-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-block-resize-expected.txt index 4cd8551..e7fea51 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-block-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-block-resize-expected.txt
@@ -13,20 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-color-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-color-change-expected.txt index 69ad3ae6c..5766feb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-color-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-color-change-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN id='target'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-reflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-reflow-expected.txt index 6adcf83..900394b6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-reflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/inline-reflow-expected.txt
@@ -143,76 +143,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='div1' class='container'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A A A A A AA AA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AA AA AAA AAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAA AAAA AAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAA AAAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAAA AAAAAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAAA AAAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAA AAAA AAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAA AAA AAA AA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AA AA AA A A A'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A A'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='div2' class='container'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A A A A A'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/insert-frame-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/insert-frame-expected.txt index 42d77f6..1fee536 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/insert-frame-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/insert-frame-expected.txt
@@ -13,20 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutIFrame IFRAME", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt index 5dbeac07..ffe7f3ad 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt
@@ -28,16 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='root' class='editing'", - "reason": "full" - }, - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidate-invisible-element-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidate-invisible-element-expected.txt index e195082..4064d4c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidate-invisible-element-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidate-invisible-element-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidation-with-zero-size-object-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidation-with-zero-size-object-expected.txt index d7d89bb2..825a51a3 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidation-with-zero-size-object-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invalidation-with-zero-size-object-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='element'", - "reason": "disappeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invisible-objects-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invisible-objects-expected.txt index 062f12f4..d60b709 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invisible-objects-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/invisible-objects-expected.txt
@@ -6,24 +6,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'is invisible'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layer-full-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layer-full-repaint-expected.txt index c3017f3d..50e43fba8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layer-full-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layer-full-repaint-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='test' class='selected'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layer-hide-when-needs-layout-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layer-hide-when-needs-layout-expected.txt index 4256039..f4e6ad0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layer-hide-when-needs-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layer-hide-when-needs-layout-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layer-visibility-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layer-visibility-expected.txt index d87c010..6ab3914 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layer-visibility-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/layer-visibility-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/lines-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/lines-with-layout-delta-expected.txt index 6dc9fe86..9efcbdc8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/lines-with-layout-delta-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/lines-with-layout-delta-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/list-marker-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/list-marker-2-expected.txt index 2deb2638..1a39ae2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/list-marker-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/list-marker-2-expected.txt
@@ -23,24 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutListItem LI", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutListMarker (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/make-children-non-inline-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/make-children-non-inline-expected.txt index 7396f2ae..f079048 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/make-children-non-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/make-children-non-inline-expected.txt
@@ -18,168 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Word,'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'words,'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'more words.'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'I could'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'write a book'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'about all the stuff'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'that comes'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'after'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'the break.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multi-layout-one-frame-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multi-layout-one-frame-expected.txt index b548210..5452236 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multi-layout-one-frame-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multi-layout-one-frame-expected.txt
@@ -28,40 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASSED'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASSED'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/column-rules-fixed-height-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/column-rules-fixed-height-expected.txt index d70b2ea..e7a8f38 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/column-rules-fixed-height-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/column-rules-fixed-height-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - }, - { - "object": "LayoutMultiColumnSet (anonymous)", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-relpos-with-abspos-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-relpos-with-abspos-expected.txt index 63d222d..1e776ff 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-relpos-with-abspos-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-relpos-with-abspos-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-resize-with-rule-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-resize-with-rule-expected.txt index 5cd2a70..739f885 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-resize-with-rule-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-resize-with-rule-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutMultiColumnSet (anonymous)", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-abspos-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-abspos-expected.txt index 591ed0c..4618e58b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-abspos-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-abspos-expected.txt
@@ -13,24 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-block-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-block-expected.txt index d500dd2..f61acc9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-block-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-block-expected.txt
@@ -13,24 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-overflowing-block-rl-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-overflowing-block-rl-expected.txt index 3a036aa1..2770675 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-overflowing-block-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-overflowing-block-rl-expected.txt
@@ -23,20 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='elm'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='elm'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='elm'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-relpos-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-relpos-expected.txt index 2bcff34..ea5ae5a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-relpos-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/multicol/multicol-with-relpos-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/non-text-link-invalidation-optimization-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/non-text-link-invalidation-optimization-expected.txt index 63333a9d..8d4dced 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/non-text-link-invalidation-optimization-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
@@ -38,56 +38,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'This test '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' passes if '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'only'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' text is invalidated and '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' no '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' images.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt index 773d7b35d..d039c29 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt
@@ -23,20 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutListMarker (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) UL id='submenu'", - "reason": "geometry" - }, - { - "object": "LayoutListMarker (anonymous)", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/border-outline-0-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/border-outline-0-expected.txt index cd7bf921..5675f153 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/border-outline-0-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/border-outline-0-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='border-image'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/border-radius-with-outline-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/border-radius-with-outline-expected.txt index d1d9d0f..e112a26 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/border-radius-with-outline-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/border-radius-with-outline-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-continuations-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-continuations-expected.txt index 2fb0bd3..1f96cbcf4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-continuations-expected.txt
@@ -13,24 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-enable-continuations-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-enable-continuations-expected.txt index 6ae7770..35aa62d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-enable-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-enable-continuations-expected.txt
@@ -13,24 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt index 7bf2ad9..429ca9f8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt
@@ -28,16 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN", - "reason": "outline" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='block'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt index cde0514..27fd8b37 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt
@@ -23,32 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN", - "reason": "outline" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='block'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/inline-focus-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/inline-focus-expected.txt index ae6cad264..4dab96a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/inline-focus-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/inline-focus-expected.txt
@@ -33,44 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline A id='link'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Home'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'crbug.com/424078: ensure inline elements get their outline painted'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/inline-outline-repaint-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/inline-outline-repaint-2-expected.txt index 0d25250..f7347c12 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/inline-outline-repaint-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/inline-outline-repaint-2-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN", - "reason": "outline" - }, - { - "object": "InlineFlowBox", - "reason": "outline" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/inline-outline-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/inline-outline-repaint-expected.txt index 45d0db5..9c563fa 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/inline-outline-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/inline-outline-repaint-expected.txt
@@ -48,48 +48,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutInline SPAN id='test'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Lorem ipsum'", - "reason": "full" - }, - { - "object": "InlineTextBox ' '", - "reason": "full" - }, - { - "object": "InlineTextBox 'dolor\u00A0'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-add-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-add-repaint-expected.txt index fcce2a2..23cf2de3 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-add-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-add-repaint-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt index f5340862..eb8b88c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='outline'", - "reason": "outline" - }, - { - "object": "LayoutBlockFlow DIV id='child'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt index 126c299..5a245a3 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='outline'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='child'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-continuations-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-continuations-expected.txt index f605d87..d60b709 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-continuations-expected.txt
@@ -6,24 +6,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-offset-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-offset-expected.txt index 2ef863d0..81c16b1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-offset-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-offset-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-repaint-expected.txt index fcce2a2..23cf2de3 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-repaint-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-vertical-rl-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-vertical-rl-expected.txt index b59a6f41..5cb0e6a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-vertical-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-change-vertical-rl-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-child-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-child-repaint-expected.txt index 6733aca..b2af7ef 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-child-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-child-repaint-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='outlined'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-containing-image-in-non-standard-mode-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-containing-image-in-non-standard-mode-expected.txt index 86fd662..5013815 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-containing-image-in-non-standard-mode-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-containing-image-in-non-standard-mode-expected.txt
@@ -18,28 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='target'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutImage IMG", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-continuations-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-continuations-expected.txt index b696393..f1c2561 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-continuations-expected.txt
@@ -33,64 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'CONTENTS'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'CONTENTS'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-current-color-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-current-color-expected.txt index bb44c1b..09290b3a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-current-color-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-current-color-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='currentColor'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-not-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-not-affected-by-descendant-expected.txt index 188256f6..341619b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-not-affected-by-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/outline/outline-not-affected-by-descendant-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='child'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/align-items-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/align-items-overflow-change-expected.txt index d89ac71..4f3c7f5d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/align-items-overflow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/align-items-overflow-change-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item1'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/align-self-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/align-self-overflow-change-expected.txt index d89ac71..4f3c7f5d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/align-self-overflow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/align-self-overflow-change-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item1'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/composited-vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/composited-vertical-rl-overflow-expected.txt index 16360a37..3a2b99b1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/composited-vertical-rl-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/composited-vertical-rl-overflow-expected.txt
@@ -19,12 +19,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/content-into-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/content-into-overflow-expected.txt index 7bb10a730..ae72463 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/content-into-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/content-into-overflow-expected.txt
@@ -28,24 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow DIV id='target3'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/erase-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/erase-overflow-expected.txt index 71f44218..03fb500 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/erase-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/erase-overflow-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target' class='square'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/float-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/float-overflow-expected.txt index 708fa73..905439a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/float-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/float-overflow-expected.txt
@@ -558,468 +558,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/float-overflow-right-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/float-overflow-right-expected.txt index cce48181..e067d42 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/float-overflow-right-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/float-overflow-right-expected.txt
@@ -558,468 +558,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/inline-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/inline-overflow-expected.txt index 69d55a1..6cda505 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/inline-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/inline-overflow-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'A\u00A0\u00A0B'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt index f41644e..323e1fcd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'A\u00A0\u00A0B'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt index 907e2fc..b7b4b4a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'A\u00A0\u00A0B'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/justify-items-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/justify-items-overflow-change-expected.txt index d8318ad..8e4d83d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/justify-items-overflow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/justify-items-overflow-change-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item1'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/justify-self-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/justify-self-overflow-change-expected.txt index ef4368d7..9ff056d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/justify-self-overflow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/justify-self-overflow-change-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item1'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/line-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/line-overflow-expected.txt index d96b802..ec3fe71 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/line-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/line-overflow-expected.txt
@@ -98,68 +98,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Cras faucibus. Nunc'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'adipiscing, enim in scelerisque'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'convallis,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'augue '", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='t'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'purus'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' eleifend'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'lacus, at sagittis eros leo'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'pulvinar velit. Integer'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'sollicitudin nisi ut urna blandit'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'convallis.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/negative-text-indent-with-overflow-hidden-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/negative-text-indent-with-overflow-hidden-expected.txt index d9f714e2..08c2c194 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/negative-text-indent-with-overflow-hidden-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/negative-text-indent-with-overflow-hidden-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target' class='changed'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-clip-subtree-layout-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-clip-subtree-layout-expected.txt index 2267584..d60b709 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-clip-subtree-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-clip-subtree-layout-expected.txt
@@ -6,12 +6,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-delete-line-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-delete-line-expected.txt index b308331..1c41270e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-delete-line-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-delete-line-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='dv'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Lorem ipsu'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-hide-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-hide-expected.txt index fac3b0c..36658e9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-hide-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-hide-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='overflowParent' class='absolute green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-into-content-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-into-content-expected.txt index 0b8ebc7f..82792042 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-into-content-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-into-content-expected.txt
@@ -28,20 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "disappeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-show-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-show-expected.txt index b9f608e..a0ce035 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-show-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/overflow-show-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='overflowParent' class='absolute green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/rel-positioned-inline-with-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/rel-positioned-inline-with-overflow-expected.txt index a2376ea97..8d8b0aa 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/rel-positioned-inline-with-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/rel-positioned-inline-with-overflow-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/repaint-resized-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/repaint-resized-overflow-expected.txt index dcbca0d9..91d4c32 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/repaint-resized-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/repaint-resized-overflow-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='s'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/vertical-rl-overflow-expected.txt index c338f68..14c3e99 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/vertical-rl-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/overflow/vertical-rl-overflow-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/paint-caret-in-div-with-negative-indent-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/paint-caret-in-div-with-negative-indent-expected.txt index e767763..80ef22f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/paint-caret-in-div-with-negative-indent-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/paint-caret-in-div-with-negative-indent-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/absolute-margin-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/absolute-margin-change-repaint-expected.txt index 998d67b..d781e6fa 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/absolute-margin-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/absolute-margin-change-repaint-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='test'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/absolute-position-change-containing-block-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/absolute-position-change-containing-block-expected.txt index 72b6275..7baf8b1b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/absolute-position-change-containing-block-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/absolute-position-change-containing-block-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='container' class='fixed blue'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute green'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/absolute-position-moved-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/absolute-position-moved-expected.txt index e9c2ec0d..a2d6483 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/absolute-position-moved-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/absolute-position-moved-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/align-content-position-change-grid-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/align-content-position-change-grid-expected.txt index 8341f5c..ec76b05 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/align-content-position-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/align-content-position-change-grid-expected.txt
@@ -38,20 +38,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt index d2e1fc9..bf60d95 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt
@@ -33,40 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) SPAN", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (positioned) SPAN", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/containing-block-position-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/containing-block-position-change-expected.txt index c198708..07870cb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/containing-block-position-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/containing-block-position-change-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='t'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/fixed-margin-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/fixed-margin-change-repaint-expected.txt index 998d67b..d781e6fa 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/fixed-margin-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/fixed-margin-change-repaint-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='test'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/inline-relative-positioned-expected.txt index 599a895..5c34e5f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/inline-relative-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/inline-relative-positioned-expected.txt
@@ -23,24 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'a'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/intermediate-layout-position-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/intermediate-layout-position-expected.txt index 0c851cb..6ef92b8a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/intermediate-layout-position-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/intermediate-layout-position-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "incremental" - }, - { - "object": "LayoutTable TABLE", - "reason": "incremental" - }, - { - "object": "LayoutTableCell TD id='cell'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt index a3ed64e..35b74d4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/justify-content-position-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/justify-content-position-change-expected.txt index 68e87da..c8c4a85 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/justify-content-position-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/justify-content-position-change-expected.txt
@@ -28,16 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/justify-content-position-change-grid-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/justify-content-position-change-grid-expected.txt index b911e79..e99384a0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/justify-content-position-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/justify-content-position-change-grid-expected.txt
@@ -38,20 +38,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/layout-state-only-positioned-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/layout-state-only-positioned-expected.txt index 5e052419..a124aff1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/layout-state-only-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/layout-state-only-positioned-expected.txt
@@ -30,24 +30,6 @@ [0, 50, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='q'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/layout-state-relative-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/layout-state-relative-expected.txt index 7a73d812..ec8dc17 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/layout-state-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/layout-state-relative-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt index 0197f5f..9c7988a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
@@ -18,48 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) SPAN id='target'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-document-element-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-document-element-expected.txt index 99a5e39a..45cca128 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-document-element-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-document-element-expected.txt
@@ -23,32 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) HTML class='changed'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt index f4b6fb4..93e3f74 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt
@@ -28,24 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt index ab906992..e14592fa 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutListItem (positioned) LI", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutListMarker (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt index 56520eb..6d1fb6f0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt
@@ -19,32 +19,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) DIV id='block'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'When this layer moves it shouldn't generate a repaint rect.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/relative-margin-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/relative-margin-change-repaint-expected.txt index 1acad55..975602b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/relative-margin-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/position/relative-margin-change-repaint-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='test'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/push-block-with-first-line-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/push-block-with-first-line-expected.txt index 19707d06..d5bc9f7 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/push-block-with-first-line-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/push-block-with-first-line-expected.txt
@@ -28,28 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='spacer'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow DIV class='test'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'JOCULAR'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/quotes-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/quotes-expected.txt index 88955bb..422ad7d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/quotes-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/quotes-expected.txt
@@ -38,60 +38,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline Q id='q2' class='q-changed'", - "reason": "style change" - }, - { - "object": "LayoutInline \u003Cpseudo:before\u003E", - "reason": "style change" - }, - { - "object": "LayoutQuote (anonymous)", - "reason": "style change" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "style change" - }, - { - "object": "InlineTextBox '{'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'quote 2'", - "reason": "style change" - }, - { - "object": "LayoutInline \u003Cpseudo:after\u003E", - "reason": "style change" - }, - { - "object": "LayoutQuote (anonymous)", - "reason": "style change" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "style change" - }, - { - "object": "InlineTextBox '}'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/raster-under-invalidation-checking-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/raster-under-invalidation-checking-expected.txt index fc30d28..a77f946 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/raster-under-invalidation-checking-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/raster-under-invalidation-checking-expected.txt
@@ -1272,24 +1272,6 @@ [8, 260, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target1'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='target2'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='target3'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='target4'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/reflection-redraw-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/reflection-redraw-expected.txt index 63c0b80..0a8e045d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/reflection-redraw-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/reflection-redraw-expected.txt
@@ -68,72 +68,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'text in the reflection'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'should be green'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'text in the reflection'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'should be green'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'text in the reflection'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'should be green'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'text in the reflection'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'should be green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/reflection-with-rotation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/reflection-with-rotation-expected.txt index c7374bb..ce4ab59 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/reflection-with-rotation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/reflection-with-rotation-expected.txt
@@ -23,24 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt index ef9d8067..f01aa90 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='absolute clipped'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='relative reflected'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='green'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute red'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt index 99367f2..9f729993 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt
@@ -44,20 +44,6 @@ [-150, -150, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='fixed clipped'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute green reflected'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute red'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-inline-after-layout-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-inline-after-layout-expected.txt index a776381..c644554 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-inline-after-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-inline-after-layout-expected.txt
@@ -38,32 +38,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-inline-layer-after-layout-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-inline-layer-after-layout-expected.txt index f4ee15c..21b970d0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-inline-layer-after-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/remove-inline-layer-after-layout-expected.txt
@@ -23,32 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt index d3f14bd8..b7368fa 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt
@@ -28,32 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='container'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'There should only be one copy of this text.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-in-iframe-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-in-iframe-expected.txt index 850bd45..bfb22438 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-in-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-in-iframe-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-on-style-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-on-style-change-expected.txt index 89e9f4e..89dd5f9f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-on-style-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-on-style-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-subrect-grid-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-subrect-grid-expected.txt index 4bbdcd47..18bb48d5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-subrect-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/repaint-subrect-grid-expected.txt
@@ -108,52 +108,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/resize-iframe-text-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/resize-iframe-text-expected.txt index 21619c00..ff38ce5e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/resize-iframe-text-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/resize-iframe-text-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutIFrame (positioned) IFRAME", - "reason": "incremental" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/ruby-flipped-blocks-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/ruby-flipped-blocks-expected.txt index 010436ed..78f9d381 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/ruby-flipped-blocks-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/ruby-flipped-blocks-expected.txt
@@ -33,52 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a'", - "reason": "geometry" - }, - { - "object": "LayoutRubyRun (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'c'", - "reason": "style change" - }, - { - "object": "LayoutRubyBase (anonymous)", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'b'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/composited-add-resizer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/composited-add-resizer-expected.txt index 6ee9a99..c5e8bf7 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/composited-add-resizer-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/composited-add-resizer-expected.txt
@@ -29,12 +29,6 @@ [8, 8, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/destroy-composited-scrollbar-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/destroy-composited-scrollbar-expected.txt index 1d17d7b..254b647 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/destroy-composited-scrollbar-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/destroy-composited-scrollbar-expected.txt
@@ -20,20 +20,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/iframe-scrollbar-hover-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/iframe-scrollbar-hover-expected.txt index dde0447a..26363141c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/iframe-scrollbar-hover-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/iframe-scrollbar-hover-expected.txt
@@ -30,12 +30,6 @@ [2, 102, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt index 87ac73e..d4196b4c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'after'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt index 51e660fa..432320f9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'after'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt index 7a244ed..126adc4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'after'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt index 846b05b..b379911 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox ' PASS .'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt index fe2a107..ac5568f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt
@@ -120,32 +120,6 @@ [276, 143, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/outline-change-scrollable-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/outline-change-scrollable-expected.txt index d07208c..1d4ba38 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/outline-change-scrollable-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/outline-change-scrollable-expected.txt
@@ -23,12 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/overflow-hidden-in-overflow-hidden-scrolled-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/overflow-hidden-in-overflow-hidden-scrolled-expected.txt index d9656bb..b794e474 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/overflow-hidden-in-overflow-hidden-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/overflow-hidden-in-overflow-hidden-scrolled-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='red'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='ucp' class='green'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/resize-scrollable-div-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/resize-scrollable-div-expected.txt index 2b82051..2938650 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/resize-scrollable-div-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/resize-scrollable-div-expected.txt
@@ -33,28 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='div'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='div'", - "reason": "geometry" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow DIV id='div'", - "reason": "geometry" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scroll-in-clipped-layer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scroll-in-clipped-layer-expected.txt index 737bf83a..62a9cff 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scroll-in-clipped-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scroll-in-clipped-layer-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV class='relative green'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute red'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scroll-in-transformed-layer-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scroll-in-transformed-layer-expected.txt index 2c8831f..0cf4bf56 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scroll-in-transformed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scroll-in-transformed-layer-expected.txt
@@ -23,20 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='absolute clipped rotated'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute green'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute red'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scrollbar-invalidation-on-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scrollbar-invalidation-on-resize-expected.txt index 1469901c..cef1824b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scrollbar-invalidation-on-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scrollbar-invalidation-on-resize-expected.txt
@@ -28,24 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='scrollable'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='scrollable'", - "reason": "geometry" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scrollbar-invalidation-on-resize-with-border-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scrollbar-invalidation-on-resize-with-border-expected.txt index e4e19ac..57571bc 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scrollbar-invalidation-on-resize-with-border-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/scroll/scrollbar-invalidation-on-resize-with-border-expected.txt
@@ -28,24 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='scrollable'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='scrollable'", - "reason": "geometry" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/search-field-cancel-expected.txt index 772fd2c..4c94cc3 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/search-field-cancel-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/search-field-cancel-expected.txt
@@ -13,24 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'some text'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt index 9c7a16c..a26c4a5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'xx'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'y'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt index 36f3d164..ba6bb5c8f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'xx'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'y'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt index 2bc443ed..53aaf24 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'xx'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'y'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt index f8570afcd..41676eec 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'xx'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'y'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt index 58788da..6c1b7d9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt
@@ -23,32 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'a'", - "reason": "selection" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'b'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt index df6bdf5..721d33fb1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt
@@ -78,68 +78,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/japanese-rl-selection-repaint-expected.txt index 0c8e196..42a01de 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/japanese-rl-selection-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/japanese-rl-selection-repaint-expected.txt
@@ -58,52 +58,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt index b882838..20dca06 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Some text in vertical mode'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selected-replaced-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selected-replaced-expected.txt index d4b3f6d6..e49f583 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selected-replaced-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selected-replaced-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage (relative positioned) IMG id='test' class='moved'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-after-delete-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-after-delete-expected.txt index da99c98b..8b4a010 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-after-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-after-delete-expected.txt
@@ -365,28 +365,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-after-remove-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-after-remove-expected.txt index 7ff9327..81ef0f9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-after-remove-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-after-remove-expected.txt
@@ -380,40 +380,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hello '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'world'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.txt index 26aa549..9ca3692d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.txt
@@ -48,80 +48,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Foo'", - "reason": "selection" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Bar'", - "reason": "selection" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Bazz'", - "reason": "selection" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - }, - { - "object": "LayoutBR BR", - "reason": "selection" - }, - { - "object": "InlineTextBox '\n'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-clear-after-move-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-clear-after-move-expected.txt index efa22d9..1a3dd71 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-clear-after-move-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-clear-after-move-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutImage IMG", - "reason": "selection" - }, - { - "object": "LayoutText #text", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-clear-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-clear-expected.txt index 6bbe70d..bde4e45 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-clear-expected.txt
@@ -28,36 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='root'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='firstLine'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt index ed54844..e6341736 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt
@@ -46,28 +46,6 @@ [-18, 0, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt index b1ec89cc..dc999bc 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt
@@ -46,28 +46,6 @@ [-5, 0, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt index 98f20e6..ea2b62ae 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'First cell'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Second cell'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-rl-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-rl-expected.txt index 53dcb09..cb3bda4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-rl-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Testing both hit testing'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-within-composited-scroller-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-within-composited-scroller-expected.txt index 99073e88..e4973c1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-within-composited-scroller-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
@@ -36,16 +36,6 @@ [8, 8, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'test'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt index e936e3b..465e979f5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Should have blue, not gray, highlight'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt index 2207c67..ccd8483 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Should have green background'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/stacked-diacritics-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/stacked-diacritics-expected.txt index 2b0f8ad..6590db7 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/stacked-diacritics-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/stacked-diacritics-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='stacked'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/stacking-context-lost-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/stacking-context-lost-expected.txt index d2e747bb..a8adf8c0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/stacking-context-lost-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/stacking-context-lost-expected.txt
@@ -26,12 +26,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='outer'", - "reason": "background" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-skipped-expected.txt index d1645681..1a5371d6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-skipped-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/subtree-root-skipped-expected.txt
@@ -23,28 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/add-background-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/add-background-property-on-root-expected.txt index 643d0fb..c8075852 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/add-background-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/add-background-property-on-root-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "background" - }, - { - "object": "RootInlineBox", - "reason": "background" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/add-border-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/add-border-property-on-root-expected.txt index adeef4e..3195b2d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/add-border-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/add-border-property-on-root-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRoot (positioned) svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/add-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/add-outline-property-on-root-expected.txt index 636a466..dcb0408 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/add-outline-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/add-outline-property-on-root-expected.txt
@@ -13,20 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/animate-fill-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/animate-fill-expected.txt index 9d220a47..af2b60b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/animate-fill-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/animate-fill-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/animate-target-id-changed-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/animate-target-id-changed-expected.txt index 3f2d188..20bfcf7 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/animate-target-id-changed-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/animate-target-id-changed-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='newId'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/append-text-node-to-tspan-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/append-text-node-to-tspan-expected.txt index 6f251648..437d9b0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/append-text-node-to-tspan-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/append-text-node-to-tspan-expected.txt
@@ -63,88 +63,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutSVGTSpan tspan id='modify'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PA'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'SS'", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/change-background-color-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/change-background-color-expected.txt index b370cb8..3dbdc1a7 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/change-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/change-background-color-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRoot svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/circle-move-invalidation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/circle-move-invalidation-expected.txt index 66e5f80f6..dbe661e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/circle-move-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/circle-move-invalidation-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGEllipse circle id='c1'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-child-changes-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-child-changes-expected.txt index 9e4b623..e975ff2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-child-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-child-changes-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-href-changes-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-href-changes-expected.txt index e5638a4e..59165a9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-href-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-href-changes-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-id-changes-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-id-changes-expected.txt index 6f7d0a11..59165a9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-id-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-id-changes-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-units-changes-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-units-changes-expected.txt index 9e4b623..e975ff2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-units-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/clip-path-units-changes-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/color-fill-currentColor-and-css-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/color-fill-currentColor-and-css-expected.txt index 481f39d..659ba359 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/color-fill-currentColor-and-css-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/color-fill-currentColor-and-css-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGEllipse circle", - "reason": "style change" - }, - { - "object": "LayoutSVGEllipse circle", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/container-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/container-repaint-expected.txt index 8599633..da5ed9d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/container-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/container-repaint-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGViewportContainer svg id='mover'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers-expected.txt index f2f7e35..c4b602c4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers-expected.txt
@@ -33,20 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutEmbeddedObject OBJECT", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/ems-display-none-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/ems-display-none-expected.txt index 8b21832..e7192ae 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/ems-display-none-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/ems-display-none-expected.txt
@@ -13,60 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='text'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan id='tspan'", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox ' '", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/exs-display-none-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/exs-display-none-expected.txt index 813d692..856f1d90 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/exs-display-none-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/exs-display-none-expected.txt
@@ -13,60 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='text'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan id='tspan'", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox ' '", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-change-target-id-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-change-target-id-expected.txt index cd97217..144ecca0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-change-target-id-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-change-target-id-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-multiple-targets-id-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-multiple-targets-id-change-expected.txt index 07c81d96..597e74b4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-multiple-targets-id-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-multiple-targets-id-change-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-reference-invalidation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-reference-invalidation-expected.txt index cd97217..144ecca0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-reference-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-reference-invalidation-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-remove-target-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-remove-target-expected.txt index cd97217..144ecca0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-remove-target-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-remove-target-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-add-to-document-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-add-to-document-expected.txt index cd97217..144ecca0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-add-to-document-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-add-to-document-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-attribute-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-attribute-change-expected.txt index cd97217..144ecca0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-attribute-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-attribute-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-2-expected.txt index cd97217..144ecca0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-2-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-expected.txt index cd97217..144ecca0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-changes-id-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-changes-id-expected.txt index cd97217..144ecca0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-changes-id-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-changes-id-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-id-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-id-change-expected.txt index cd97217..144ecca0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-id-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-id-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-inline-style-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-inline-style-change-expected.txt index 1778940..633272a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-inline-style-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-inline-style-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-property-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-property-change-expected.txt index cd97217..144ecca0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-property-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-property-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-reappend-to-document-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-reappend-to-document-expected.txt index b0ec5624..3765ed6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-reappend-to-document-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-reappend-to-document-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-remove-from-document-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-remove-from-document-expected.txt index cd97217..144ecca0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-remove-from-document-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-remove-from-document-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-style-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-style-change-expected.txt index 1778940..633272a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-style-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/feImage-target-style-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/fecomponenttransfer-in1-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/fecomponenttransfer-in1-change-expected.txt index ab4d723..74d74e53 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/fecomponenttransfer-in1-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/fecomponenttransfer-in1-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/fill-opacity-update-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/fill-opacity-update-expected.txt index b3ca868..d25bfc2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/fill-opacity-update-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/fill-opacity-update-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGEllipse circle", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/filter-child-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/filter-child-repaint-expected.txt index 1c47cceb..624f373 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/filter-child-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/filter-child-repaint-expected.txt
@@ -13,20 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='poke'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/filter-width-update-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/filter-width-update-expected.txt index f839f3a..1bec205 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/filter-width-update-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/filter-width-update-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/focus-element-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/focus-element-expected.txt index c7ad98f3..e5eb8dd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/focus-element-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/focus-element-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/gradient-add-stops-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/gradient-add-stops-expected.txt index 90dd080..11804c1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/gradient-add-stops-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/gradient-add-stops-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/gradient-stop-style-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/gradient-stop-style-change-expected.txt index 90dd080..11804c1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/gradient-stop-style-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/gradient-stop-style-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/hairline-stroke-squarecap-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/hairline-stroke-squarecap-expected.txt index 251e8ec..d1b0003c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/hairline-stroke-squarecap-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/hairline-stroke-squarecap-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath path id='path'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/image-href-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/image-href-change-expected.txt index 921787d..c8216caf4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/image-href-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/image-href-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGImage image id='image'", - "reason": "image" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/image-with-clip-path-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/image-with-clip-path-expected.txt index eb71779..f045e5c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/image-with-clip-path-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/image-with-clip-path-expected.txt
@@ -23,24 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='g'", - "reason": "full" - }, - { - "object": "LayoutSVGImage image", - "reason": "full" - }, - { - "object": "LayoutSVGContainer g id='g'", - "reason": "full" - }, - { - "object": "LayoutSVGImage image", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/inner-svg-change-viewBox-contract-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/inner-svg-change-viewBox-contract-expected.txt index e277afea..fde95c4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/inner-svg-change-viewBox-contract-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/inner-svg-change-viewBox-contract-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGViewportContainer svg id='inner'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/inner-svg-change-viewBox-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/inner-svg-change-viewBox-expected.txt index 1a9f42b6..dc8813c3 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/inner-svg-change-viewBox-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/inner-svg-change-viewBox-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGViewportContainer svg id='s'", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt index 489beaa..59b1ec1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt
@@ -58,40 +58,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGViewportContainer svg id='inner'", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'right-aligned text'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/invalidate-on-child-layout-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/invalidate-on-child-layout-expected.txt index 116f7e9f..458826497 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/invalidate-on-child-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/invalidate-on-child-layout-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGEllipse circle id='circle'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt index f553e928..04bc2c6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt
@@ -23,48 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Clipped. INVISIBLE.'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='content'", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Clipped. INVISIBLE.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-clipPath-creation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-clipPath-creation-expected.txt index 7552690..cdf4424b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-clipPath-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-clipPath-creation-expected.txt
@@ -18,28 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Clipped. INVISIBLE.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt index 4d10764..2090553e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt
@@ -13,60 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Gradient on fill'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Gradient on stroke'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Gradient on fill/stroke'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-gradient-creation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-gradient-creation-expected.txt index 789fee2..44913093c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-gradient-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-gradient-creation-expected.txt
@@ -13,24 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Gradient on fill'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-marker-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-marker-and-object-creation-expected.txt index 2c1d561..60913645 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-marker-and-object-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-marker-and-object-creation-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-marker-creation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-marker-creation-expected.txt index ca1d5b3..0b05bd88 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-marker-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-marker-creation-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath path", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt index d35b286a..0e6a937b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt
@@ -13,60 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Pattern on fill'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Pattern on stroke'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Pattern on fill/stroke'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-pattern-creation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-pattern-creation-expected.txt index b802ac7..08bbd06 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-pattern-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-late-pattern-creation-expected.txt
@@ -13,24 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Pattern on fill'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-repaint-rect-on-path-with-stroke-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-repaint-rect-on-path-with-stroke-expected.txt index c612504..99101f4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-repaint-rect-on-path-with-stroke-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-repaint-rect-on-path-with-stroke-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath path id='path'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-container-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-container-expected.txt index 2c36d860..8f3e8224 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-container-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-container-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='group'", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-gradient-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-gradient-expected.txt index beec950..f6a229c0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-gradient-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-gradient-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-image-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-image-expected.txt index 6319c34f..276a1ed 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-image-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-image-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGImage image id='image'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-pattern-child-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-pattern-child-expected.txt index beec950..f6a229c0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-pattern-child-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-pattern-child-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-pattern-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-pattern-expected.txt index beec950..f6a229c0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-pattern-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-pattern-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-polygon-changes-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-polygon-changes-expected.txt index a83f7da..17064c48 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-polygon-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-polygon-changes-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath polygon id='polygon'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-polygon-removal-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-polygon-removal-expected.txt index 3c8874f..b716107 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-polygon-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-polygon-removal-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath polygon id='polygon'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-stop-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-stop-expected.txt index beec950..f6a229c0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-stop-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-stop-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-stop-linked-gradient-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-stop-linked-gradient-expected.txt index 1b986a9..e6c6266 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-stop-linked-gradient-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-stop-linked-gradient-expected.txt
@@ -23,20 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-style-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-style-expected.txt index 9c4d312..a5d84b5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-style-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-style-expected.txt
@@ -28,28 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-transform-addition-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-transform-addition-expected.txt index 00ccdc3..f1878432 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-transform-addition-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-transform-addition-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath polygon id='polygon'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-transform-changes-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-transform-changes-expected.txt index 00ccdc3..f1878432 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-transform-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/js-update-transform-changes-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath polygon id='polygon'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-child-changes-css-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-child-changes-css-expected.txt index 95872a54..1d2c279 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-child-changes-css-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-child-changes-css-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath path", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-child-changes-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-child-changes-expected.txt index 95872a54..1d2c279 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-child-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-child-changes-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath path", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-strokeWidth-changes-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-strokeWidth-changes-expected.txt index b4b1d582..3d54f741 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-strokeWidth-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-strokeWidth-changes-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGPath path id='path'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-viewBox-changes-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-viewBox-changes-expected.txt index 5215476..291f388 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-viewBox-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/marker-viewBox-changes-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGPath path id='go'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-inserted-listitem-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-inserted-listitem-expected.txt index 2418aef..f5839dc6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-inserted-listitem-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-inserted-listitem-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='move'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt index 9afeaf9..d8dc85c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt
@@ -58,80 +58,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGTSpan tspan id='modify'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt index 46c1b98..c1ebbc79 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt
@@ -43,44 +43,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text id='target'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A'", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' B C'", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text id='source'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'X Y Z'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-transferred-listitem-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-transferred-listitem-expected.txt index 9e3950b09..cbd7e1f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-transferred-listitem-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/modify-transferred-listitem-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath polygon id='target'", - "reason": "full" - }, - { - "object": "LayoutSVGPath polygon id='source'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size-expected.txt index 291a53bc..a6c181d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size-expected.txt
@@ -28,32 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutEmbeddedObject object", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect", - "reason": "geometry" - }, - { - "object": "LayoutSVGEllipse circle", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/outline-offset-shape-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/outline-offset-shape-expected.txt index 358e87e1..7e2ba6d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/outline-offset-shape-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/outline-offset-shape-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/outline-offset-text-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/outline-offset-text-expected.txt index f8c2d097..a7b992a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/outline-offset-text-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/outline-offset-text-expected.txt
@@ -28,24 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Foo'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/overflow-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/overflow-repaint-expected.txt index bf4e055..9b2f9d6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/overflow-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/overflow-repaint-expected.txt
@@ -13,20 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg id='svg'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/path-pathlength-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/path-pathlength-change-expected.txt index 425f971..caafa173 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/path-pathlength-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/path-pathlength-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath path", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/pending-resource-after-removal-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/pending-resource-after-removal-expected.txt index be5115e..060f0f2b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/pending-resource-after-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/pending-resource-after-removal-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='shape'", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect id='shape'", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/rect-modify-rx-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/rect-modify-rx-expected.txt index 809b3fdf..56115d8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/rect-modify-rx-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/rect-modify-rx-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='r'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-content-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-content-expected.txt index e3d5ae7..57522b70 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-content-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-content-expected.txt
@@ -23,24 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect id='targetRect'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt index a86731b..55726da 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt
@@ -43,24 +43,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGEllipse circle", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt index 2b0a39d..21ca28df 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt
@@ -23,32 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='targetUse'", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect id='targetRect'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-document-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-document-scrollbars-expected.txt index 35a2bc0..dbdd92f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-document-scrollbars-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-document-scrollbars-expected.txt
@@ -23,20 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-image-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-image-expected.txt index 5a40c5d4..a4b1559 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-image-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-image-expected.txt
@@ -23,24 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGImage image", - "reason": "image" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-inner-svg-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-inner-svg-expected.txt index f6c8bb6..7240dc14 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-inner-svg-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-inner-svg-expected.txt
@@ -23,20 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt index c45a8929..3ecfc22 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt
@@ -33,40 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect id='targetRect'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='targetUse'", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect id='targetRect1'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt index 4cb34bff..a99f0f9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt
@@ -23,24 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt index 2389cd1..396ae05 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt
@@ -23,24 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt index 0c6aa40..f9913ae 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt
@@ -23,24 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-background-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-background-property-on-root-expected.txt index 0866b2c..6f10cea 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-background-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-background-property-on-root-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "background" - }, - { - "object": "RootInlineBox", - "reason": "background" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-border-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-border-property-on-root-expected.txt index da264f9..97062ab 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-border-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-border-property-on-root-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRoot (positioned) svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-outline-property-on-root-expected.txt index c6afc23..c82b3422 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-outline-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-outline-property-on-root-expected.txt
@@ -13,20 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt index 22a2978..ecb7ba2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt
@@ -48,68 +48,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGTSpan tspan id='modify'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-tspan-from-text-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-tspan-from-text-expected.txt index 5a144ea..516c4d2 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-tspan-from-text-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/remove-tspan-from-text-expected.txt
@@ -48,56 +48,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text id='text'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-moving-svg-and-div-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-moving-svg-and-div-expected.txt index c0cebba..a886f7d4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-moving-svg-and-div-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-moving-svg-and-div-expected.txt
@@ -368,80 +368,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt index 870c022..ee472cff 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt
@@ -13,28 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text id='t'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Hello'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt index 870c022..ee472cff 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt
@@ -13,28 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text id='t'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Hello'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-on-constant-size-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-on-constant-size-change-expected.txt index a07a199..7601b834 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-on-constant-size-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-on-constant-size-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGImage image", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-on-image-bounds-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-on-image-bounds-change-expected.txt index e6db5bf..a2b41fbd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-on-image-bounds-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-on-image-bounds-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGImage image id='target'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-stroke-width-changes-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-stroke-width-changes-expected.txt index a91a49e8..3bcf187 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-stroke-width-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/repaint-stroke-width-changes-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/resource-client-removal-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/resource-client-removal-expected.txt index f3cfaa1..222112c54 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/resource-client-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/resource-client-removal-expected.txt
@@ -83,108 +83,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "full" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "full" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "full" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "full" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "full" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/rounded-rect-height-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/rounded-rect-height-change-expected.txt index fa698bac..80b04b93 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/rounded-rect-height-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/rounded-rect-height-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/scale-change-huge-geometry-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/scale-change-huge-geometry-expected.txt index 98a0bdec..aa87730 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/scale-change-huge-geometry-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/scale-change-huge-geometry-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg id='svg'", - "reason": "full" - }, - { - "object": "LayoutSVGContainer use", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/shape-transform-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/shape-transform-change-expected.txt index 64b499b3..b5f9e7bb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/shape-transform-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/shape-transform-change-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/shape-with-nested-outline-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/shape-with-nested-outline-expected.txt index 58a538fe..c66ca1a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/shape-with-nested-outline-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/shape-with-nested-outline-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "outline" - }, - { - "object": "LayoutSVGRect rect id='r'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/stroke-opacity-update-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/stroke-opacity-update-expected.txt index adbd1b99..3220e96a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/stroke-opacity-update-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/stroke-opacity-update-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGEllipse circle", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-absolute-children-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-absolute-children-expected.txt index 882bcb6..e9dcc338 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-absolute-children-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-absolute-children-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-image-change-content-size-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-image-change-content-size-expected.txt index eabf72c..e1a0fdc 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-image-change-content-size-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-image-change-content-size-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage img", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-image-par-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-image-par-resize-expected.txt index b4aacb6..8062108a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-image-par-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svg-image-par-resize-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGImage image", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svgsvgelement-repaint-children-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svgsvgelement-repaint-children-expected.txt index 281767e..a7fac267 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svgsvgelement-repaint-children-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/svgsvgelement-repaint-children-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath path id='path'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-dom-removal-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-dom-removal-expected.txt index bbb0b3d..3b8add17 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-dom-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-dom-removal-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='objectsToRemove'", - "reason": "disappeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-pattern-update-2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-pattern-update-2-expected.txt index 26a23f4..3332943 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-pattern-update-2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-pattern-update-2-expected.txt
@@ -23,48 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "SVG resource change" - }, - { - "object": "RootInlineBox", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "SVG resource change" - }, - { - "object": "InlineTextBox 'X'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "SVG resource change" - }, - { - "object": "InlineFlowBox", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "SVG resource change" - }, - { - "object": "InlineTextBox 'Y'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "SVG resource change" - }, - { - "object": "InlineTextBox 'Z'", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-pattern-update-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-pattern-update-expected.txt index 9cdae1d5..edbb1e6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-pattern-update-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-pattern-update-expected.txt
@@ -13,24 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "SVG resource change" - }, - { - "object": "RootInlineBox", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "SVG resource change" - }, - { - "object": "InlineTextBox 'X'", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-repaint-including-stroke-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-repaint-including-stroke-expected.txt index 573a243..3d4d2f0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-repaint-including-stroke-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-repaint-including-stroke-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text id='bounce'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Repaint me!'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-rescale-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-rescale-expected.txt index 5f85294..fea1c03 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-rescale-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/text-rescale-expected.txt
@@ -58,132 +58,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='text1g'", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='text2g'", - "reason": "full" - }, - { - "object": "LayoutSVGContainer g id='text3g'", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "LayoutSVGViewportContainer svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/transform-changed-state-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/transform-changed-state-expected.txt index bf8c05f..edd611f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/transform-changed-state-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/transform-changed-state-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/transform-text-element-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/transform-text-element-expected.txt index 6ba7251..1942b92c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/transform-text-element-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/transform-text-element-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Test'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt index 86361a7..c0d8999 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt
@@ -18,32 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan id='ts'", - "reason": "full" - }, - { - "object": "InlineFlowBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'This text should be at visible at 200,200'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/tspan-pattern-update-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/tspan-pattern-update-expected.txt index e78d2ff..42cd41e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/tspan-pattern-update-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/tspan-pattern-update-expected.txt
@@ -13,24 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGTSpan tspan", - "reason": "SVG resource change" - }, - { - "object": "InlineFlowBox", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "SVG resource change" - }, - { - "object": "InlineTextBox 'Y'", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/use-disappears-after-style-update-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/use-disappears-after-style-update-expected.txt index 67bff5f..0758d5f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/use-disappears-after-style-update-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/use-disappears-after-style-update-expected.txt
@@ -23,20 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/use-inherit-style-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/use-inherit-style-expected.txt index e40f0c6..fe3044f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/use-inherit-style-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/use-inherit-style-expected.txt
@@ -13,20 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='g'", - "reason": "style change" - }, - { - "object": "LayoutSVGContainer use", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/use-setAttribute-crash-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/use-setAttribute-crash-expected.txt index da3fadf..bc3a388 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/use-setAttribute-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/use-setAttribute-crash-expected.txt
@@ -18,32 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow body", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg:svg id='svg'", - "reason": "full" - }, - { - "object": "LayoutSVGContainer svg:use id='use'", - "reason": "full" - }, - { - "object": "LayoutSVGViewportContainer svg id='symbol'", - "reason": "appeared" - }, - { - "object": "LayoutSVGEllipse svg:circle id='circle'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/window-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/window-expected.txt index 1cb5afe..617abb11 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/window-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/svg/window-expected.txt
@@ -183,972 +183,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='Windows'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='navWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='textNavWindow'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This window should'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'contain navigation tools'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Click on button'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox ''Resize Navigation Window' for a'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'random resize of this Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Note that this window also'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'features a window decoration'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Statusbar'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtonnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='bigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This is a big movable window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='nestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This window contains other windows'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='colourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupcolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Changing a colour changes background'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupcolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='titleBarcolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Colour Picker'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtoncolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtoncolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtoncolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='statusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupstatusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='textStatusWindow'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This is a none-moveable'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'none-closeable status'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupstatusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='titleBarstatusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Status Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonstatusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonstatusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='titleBarnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Nested middlesize Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtonnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='smallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='textSmallWindow'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This window has a callback'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'function indicating mouse'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'movements in the statusbar'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'and alerting window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'events'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Callback function is active'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='titleBarsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Small Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtonsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='minimalWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupminimalWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='textMinimalWindow'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This is a minimal window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'without title and status bar.'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'it is also not moveable'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupminimalWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='titleBarbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Big Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtonbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='Windows'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='navWindow'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='decoGroupnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='decoGroupMinimizednavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Navigation Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtonnavWindow'", - "reason": "full" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "full" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'", - "reason": "full" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "full" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'", - "reason": "full" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/add-table-overpaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/add-table-overpaint-expected.txt index 8a21707..9ea99b4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/add-table-overpaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/add-table-overpaint-expected.txt
@@ -13,28 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - }, - { - "object": "LayoutTable TABLE", - "reason": "appeared" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "appeared" - }, - { - "object": "LayoutTableRow TR", - "reason": "appeared" - }, - { - "object": "LayoutTableCell TD", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/animated-row-background-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/animated-row-background-expected.txt index 79888e78..80e1961 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/animated-row-background-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/animated-row-background-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='row'", - "reason": "full" - }, - { - "object": "LayoutImage IMG id='image'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/border-collapse-change-collapse-to-separate-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/border-collapse-change-collapse-to-separate-expected.txt index 8bad2af..f07d472 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/border-collapse-change-collapse-to-separate-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/border-collapse-change-collapse-to-separate-expected.txt
@@ -23,28 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='table'", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/border-collapse-change-separate-to-collapse-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/border-collapse-change-separate-to-collapse-expected.txt index 30778c8..3639833 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/border-collapse-change-separate-to-collapse-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/border-collapse-change-separate-to-collapse-expected.txt
@@ -23,28 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='table'", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-69296-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-69296-expected.txt index 5e847ea0..45cd2147 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-69296-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-69296-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='row1'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR id='row1'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-cell-append-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-cell-append-expected.txt index 80efbf13..2d2b75d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-cell-append-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-cell-append-expected.txt
@@ -13,24 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='row'", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-cell-border-color-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-cell-border-color-expected.txt index cfc55d8f..665e479 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-cell-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-cell-border-color-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='foo'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-cell-border-width-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-cell-border-width-expected.txt index 053cc82..665e479 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-cell-border-width-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-cell-border-width-expected.txt
@@ -13,24 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='foo'", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt index fa6fbe51..8f7a2dd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt
@@ -23,20 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='foo'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='blockDiv'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-col-border-color-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-col-border-color-expected.txt index 60b24f4c..2a44920 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-col-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-col-border-color-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCol COL id='col'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-col-border-width-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-col-border-width-expected.txt index c498c63..eb6bb20 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-col-border-width-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-col-border-width-expected.txt
@@ -23,44 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableCol COL id='col'", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-colgroup-border-color-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-colgroup-border-color-expected.txt index 2472353..a2adaef9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-colgroup-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-colgroup-border-color-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCol COLGROUP id='colgroup'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-colgroup-border-width-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-colgroup-border-width-expected.txt index 9729c5d..cbcb95f4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-colgroup-border-width-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-colgroup-border-width-expected.txt
@@ -23,52 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableCol COLGROUP id='colgroup'", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-row-border-color-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-row-border-color-expected.txt index d97d166..0cf27311 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-row-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-row-border-color-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='row'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-row-border-width-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-row-border-width-expected.txt index 6186e5a..0cf27311 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-row-border-width-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-row-border-width-expected.txt
@@ -18,28 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='row'", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-table-border-color-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-table-border-color-expected.txt index 4f665e4..eacb42e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-table-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-table-border-color-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='tbl'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-table-border-width-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-table-border-width-expected.txt index eb1bded2..eacb42e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-table-border-width-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-table-border-width-expected.txt
@@ -13,20 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='tbl'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-tbody-border-color-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-tbody-border-color-expected.txt index 69d91e0..e421b4c4 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-tbody-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-tbody-border-color-expected.txt
@@ -23,24 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='tbody'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-tbody-border-width-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-tbody-border-width-expected.txt index 7ab334b..b8b8e81012 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-tbody-border-width-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/cached-change-tbody-border-width-expected.txt
@@ -28,52 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableSection TBODY id='tbody'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/caret-contenteditable-content-after-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/caret-contenteditable-content-after-expected.txt index 4c033125..5b7ee88 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/caret-contenteditable-content-after-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/caret-contenteditable-content-after-expected.txt
@@ -118,104 +118,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'a'", - "reason": "appeared" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'ab'", - "reason": "full" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'abc'", - "reason": "full" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/collapsed-border-cell-resize-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/collapsed-border-cell-resize-expected.txt index afa88338..3c8083d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/collapsed-border-cell-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/collapsed-border-cell-resize-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD id='target'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/collapsed-border-change-rowspan-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/collapsed-border-change-rowspan-expected.txt index 3f48bc5e..4081e25 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/collapsed-border-change-rowspan-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/collapsed-border-change-rowspan-expected.txt
@@ -23,32 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "full" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='row1'", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='cell1'", - "reason": "full" - }, - { - "object": "LayoutTableRow TR id='row2'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR id='row3'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-expected.txt index 3d03901..d0d7048e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-expected.txt
@@ -18,16 +18,6 @@ "position": [96, 118], "bounds": [10, 19] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt index f837dbe6..b55c031 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt
@@ -18,16 +18,6 @@ "position": [96, 118], "bounds": [10, 19] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-span-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-span-expected.txt index 6711175..b0a82d34 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-span-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-span-expected.txt
@@ -23,16 +23,6 @@ "position": [157, 118], "bounds": [9, 19] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt index 76045c1..ce9c309 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt
@@ -23,16 +23,6 @@ "position": [157, 118], "bounds": [9, 19] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-colgroup-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-colgroup-expected.txt index 6feba65..090bc72a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-colgroup-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-colgroup-expected.txt
@@ -18,16 +18,6 @@ "position": [96, 118], "bounds": [10, 19] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COLGROUP id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt index 917b2367..acba7629 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt
@@ -18,16 +18,6 @@ "position": [96, 118], "bounds": [10, 19] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COLGROUP id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-composited-row-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-composited-row-expected.txt index acc81ba..fa7fd09 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-composited-row-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-composited-row-expected.txt
@@ -24,12 +24,6 @@ "position": [96, 118], "bounds": [10, 19] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt index caecc90..4f23442 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt
@@ -24,12 +24,6 @@ "position": [96, 118], "bounds": [10, 19] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-expected.txt index 8bfa3c6..8898bb6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-expected.txt
@@ -18,12 +18,6 @@ "position": [96, 118], "bounds": [10, 19] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-initial-empty-expected.txt index a71bde58..abb1211 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-initial-empty-expected.txt
@@ -18,12 +18,6 @@ "position": [96, 118], "bounds": [10, 19] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt index 58f0a57..5583a93 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt
@@ -29,12 +29,6 @@ "position": [96, 118], "bounds": [10, 19] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt index f77e8838..a0db0a7 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt
@@ -29,12 +29,6 @@ "position": [96, 118], "bounds": [10, 19] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-expected.txt index 9778f6a..b502271 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-expected.txt
@@ -24,12 +24,6 @@ "position": [96, 118], "bounds": [10, 19] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt index d8755fe..511763b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt
@@ -24,12 +24,6 @@ "position": [96, 118], "bounds": [10, 19] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-row-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-row-expected.txt index 8feaa04..0c8023e0 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-row-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/composited-table-row-expected.txt
@@ -19,16 +19,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD id='target'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/input-overflow-in-table-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/input-overflow-in-table-expected.txt index a38e466a..3b8c1e3 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/input-overflow-in-table-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/input-overflow-in-table-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invalidate-cell-in-row-with-offset-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invalidate-cell-in-row-with-offset-expected.txt index be5bce90..8477c68 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invalidate-cell-in-row-with-offset-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invalidate-cell-in-row-with-offset-expected.txt
@@ -25,12 +25,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invisible-col-visible-td-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invisible-col-visible-td-expected.txt index 0655067..7dd7aa71 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invisible-col-visible-td-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invisible-col-visible-td-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='col'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invisible-tbody-visible-td-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invisible-tbody-visible-td-expected.txt index 7f7a1c9b..39fcd57 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invisible-tbody-visible-td-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invisible-tbody-visible-td-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='tbody'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invisible-tr-visible-td-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invisible-tr-visible-td-expected.txt index 73ba6b72..cfcfaab 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invisible-tr-visible-td-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/invisible-tr-visible-td-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='row'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/repaint-table-row-in-composited-document-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/repaint-table-row-in-composited-document-expected.txt index dcc41e3..6f810bb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/repaint-table-row-in-composited-document-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/repaint-table-row-in-composited-document-expected.txt
@@ -18,20 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD id='target'", - "reason": "incremental" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/replace-col-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/replace-col-expected.txt index a1b9688..661632a 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/replace-col-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/replace-col-expected.txt
@@ -23,28 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "full" - }, - { - "object": "LayoutTableSection THEAD", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableSection TFOOT", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt index 6503bb96..54ebece 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt
@@ -43,52 +43,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "incremental" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ROW1'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ROW2'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt index 8e386930..f9f431b9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'MIDDLE'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/resize-table-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/resize-table-row-repaint-expected.txt index 204592b2..0384b0e 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/resize-table-row-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/resize-table-row-repaint-expected.txt
@@ -18,24 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'MIDDLE'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/row-change-background-rowspan-cell-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/row-change-background-rowspan-cell-expected.txt index 9724a2f..7534991 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/row-change-background-rowspan-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/row-change-background-rowspan-cell-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-cell-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-cell-collapsed-border-expected.txt index eb61ca8..e01398c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-cell-collapsed-border-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-cell-collapsed-border-expected.txt
@@ -43,36 +43,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='t1'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='t2'", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='t3'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-cell-move-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-cell-move-expected.txt index e358bdb..63af1448 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-cell-move-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-cell-move-expected.txt
@@ -23,24 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD", - "reason": "appeared" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "disappeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-cell-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-cell-overflow-expected.txt index b2e8366..e5ef3207 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-cell-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-cell-overflow-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-col-background-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-col-background-expected.txt index 9951379..48294e00 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-col-background-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-col-background-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='col'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-col-background-offset-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-col-background-offset-expected.txt index 88f473b..a4f5597 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-col-background-offset-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-col-background-offset-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='col'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-collapsed-border-expected.txt index 960121ca..6c91eb7 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-collapsed-border-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-collapsed-border-expected.txt
@@ -133,184 +133,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='t'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTable TABLE", - "reason": "full" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='r'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'sit amet'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE", - "reason": "full" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='r2'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD id='d3'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'ipsum dolor'", - "reason": "appeared" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'sit amet'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-outer-border-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-outer-border-expected.txt index 648eac2..12445025 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-outer-border-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-outer-border-expected.txt
@@ -48,32 +48,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='table' class='green'", - "reason": "appeared" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "appeared" - }, - { - "object": "LayoutTableRow TR", - "reason": "appeared" - }, - { - "object": "LayoutTableCell TD", - "reason": "appeared" - }, - { - "object": "LayoutTableRow TR", - "reason": "appeared" - }, - { - "object": "LayoutTableCell TD", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-row-bg-change-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-row-bg-change-expected.txt index 09d3b07..7b96d0d5 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-row-bg-change-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-row-bg-change-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='first'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-row-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-row-expected.txt index 76850d3..1671585 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-row-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-row-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target' class='green'", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-section-overflow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-section-overflow-expected.txt index ef53f2e..e5f350d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-section-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-section-overflow-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-section-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-section-repaint-expected.txt index 183e04e0..ad33324f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-section-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-section-repaint-expected.txt
@@ -98,64 +98,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow CAPTION id='caption1' class='blue half'", - "reason": "disappeared" - }, - { - "object": "LayoutTableCell TD class='red half'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD class='green half'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "disappeared" - }, - { - "object": "LayoutBlockFlow DIV id='top' class='blue half'", - "reason": "disappeared" - }, - { - "object": "LayoutTableCell TD class='red half'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD class='green half'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD class='green half'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD class='red half'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD class='half'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD class='half'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-two-pass-layout-overpaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-two-pass-layout-overpaint-expected.txt index b4b031b..b54bd83f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-two-pass-layout-overpaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-two-pass-layout-overpaint-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-with-padding-row-invalidation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-with-padding-row-invalidation-expected.txt index 7a8414c..33ef905 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-with-padding-row-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/table/table-with-padding-row-invalidation-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-append-dirty-lines-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-append-dirty-lines-expected.txt index cde2027..5c87620 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-append-dirty-lines-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/text-append-dirty-lines-expected.txt
@@ -53,40 +53,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse placerat. Morbi tristique. Mauris eu lacus sed felis'", - "reason": "full" - }, - { - "object": "InlineTextBox 'pellentesque cursus. Proin vitae nulla. Vivamus in ipsum. Etiam mi. Nam malesuada purus in sem. Sed eget elit vel erat'", - "reason": "full" - }, - { - "object": "InlineTextBox 'laoreet feugiat. Phasellus mollis pulvinar mi. Etiam ut neque sed eros egestas laoreet. Vestibulum ullamcorper, nulla non'", - "reason": "full" - }, - { - "object": "InlineTextBox 'feugiat molestie, mi lorem bibendum leo, ac gravida orci nunc nec nulla. Nunc nunc lorem, rhoncus et, rutrum ac,'", - "reason": "full" - }, - { - "object": "InlineTextBox 'fermentum ut, tortor. Sed rhoncus. Quisque enim metus, luctus tincidunt, vestibulum eu, vestibulum eu, libero. Mauris'", - "reason": "full" - }, - { - "object": "InlineTextBox 'sagittis aliquam nunc. Nullam pharetra molestie eros. Donec tempus purus ut ligula. Phasellus non nisl. Etiam eu mauris.'", - "reason": "full" - }, - { - "object": "InlineTextBox 'Curabitur a velit.'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/caret-with-transformation-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/caret-with-transformation-expected.txt index caff741..22d5ccd 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/caret-with-transformation-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/caret-with-transformation-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/change-transform-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/change-transform-expected.txt index 62a27cd..4925fcfe 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/change-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/change-transform-expected.txt
@@ -28,12 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='square'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/invalidation-with-scale-transform-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/invalidation-with-scale-transform-expected.txt index e1528ab7..92d0e374 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/invalidation-with-scale-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/invalidation-with-scale-transform-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/resize-skewed-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/resize-skewed-expected.txt index 67a71d88..9b9c9eb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/resize-skewed-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/resize-skewed-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='skewed'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/subtree-layoutstate-transform-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/subtree-layoutstate-transform-expected.txt index b5264bda..b2134fb 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/subtree-layoutstate-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/subtree-layoutstate-transform-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='layoutroot'", - "reason": "background" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-disable-layoutstate-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-disable-layoutstate-expected.txt index 7400df3..575e2841 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-disable-layoutstate-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-disable-layoutstate-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-inline-layered-child-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-inline-layered-child-expected.txt index 09ebd260..07e32b8d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-inline-layered-child-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-inline-layered-child-expected.txt
@@ -18,100 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='box'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) SPAN id='child'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A B C'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'D E F'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'G H I'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'J K L'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'M N O'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'P Q R'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'S T U'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'V W X'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Y Z'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-layout-repaint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-layout-repaint-expected.txt index ec2570a..6c686a5c 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-layout-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-layout-repaint-expected.txt
@@ -23,24 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-rotate-and-remove-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-rotate-and-remove-expected.txt index 7d7342f..be16a25 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-rotate-and-remove-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/transform/transform-rotate-and-remove-expected.txt
@@ -18,12 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='rel'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align-length1-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align-length1-expected.txt index 8973810..2066fd9 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align-length1-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align-length1-expected.txt
@@ -33,28 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align-length2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align-length2-expected.txt index a16cee30..9d24049 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align-length2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align-length2-expected.txt
@@ -28,28 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align1-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align1-expected.txt index e620fad..1eacd4b8 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align1-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align1-expected.txt
@@ -33,28 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align2-expected.txt index 7fcc400e..13171ace 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-align2-expected.txt
@@ -28,28 +28,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-rl-as-paint-container-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-rl-as-paint-container-expected.txt index dfb0834..21fd134b 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-rl-as-paint-container-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/vertical-rl-as-paint-container-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Lorem ipsum dolor'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'sit amet,'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'consectetur'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'adipiscing elit.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-background-image-fixed-centered-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-background-image-fixed-centered-expected.txt index f037462..2c6b5b1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-background-image-fixed-centered-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-background-image-fixed-centered-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -36,12 +30,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -59,12 +47,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -82,12 +64,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-background-image-generated-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-background-image-generated-expected.txt index f037462..2c6b5b1 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-background-image-generated-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-background-image-generated-expected.txt
@@ -13,12 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -36,12 +30,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -59,12 +47,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -82,12 +64,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-background-image-non-fixed-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-background-image-non-fixed-expected.txt index 2a51542..0ee0951 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-background-image-non-fixed-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-background-image-non-fixed-expected.txt
@@ -6,12 +6,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -22,12 +16,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -45,12 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -68,12 +50,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-centered-inline-under-fixed-pos-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-centered-inline-under-fixed-pos-expected.txt index 4b35170..83ddeb6 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-centered-inline-under-fixed-pos-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-centered-inline-under-fixed-pos-expected.txt
@@ -23,28 +23,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='container'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='parent'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='child'", - "reason": "geometry" - } ] } { @@ -72,28 +50,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='container'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='parent'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='child'", - "reason": "geometry" - } ] } { @@ -151,28 +107,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='container'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='parent'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='child'", - "reason": "geometry" - } ] } { @@ -210,28 +144,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='container'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='parent'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='child'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-frameset-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-frameset-expected.txt index 9996b7d..4e1dbda 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-frameset-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-frameset-expected.txt
@@ -13,28 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutFrameSet FRAMESET", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - } ] } { @@ -52,28 +30,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutFrameSet FRAMESET", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - } ] } { @@ -101,28 +57,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutFrameSet FRAMESET", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - } ] } { @@ -150,28 +84,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutFrameSet FRAMESET", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-media-query-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-media-query-expected.txt index f21cf569..64f70b21 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-media-query-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-media-query-expected.txt
@@ -6,12 +6,6 @@ "contentsOpaque": true, "backgroundColor": "#0000FF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -22,12 +16,6 @@ "contentsOpaque": true, "backgroundColor": "#0000FF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -45,12 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -68,12 +50,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-no-layout-change1-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-no-layout-change1-expected.txt index 825c1541..ac2765ae 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-no-layout-change1-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-no-layout-change1-expected.txt
@@ -6,12 +6,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -22,12 +16,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -50,12 +38,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -78,12 +60,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-no-layout-change2-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-no-layout-change2-expected.txt index 825c1541..ac2765ae 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-no-layout-change2-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-no-layout-change2-expected.txt
@@ -6,12 +6,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -22,12 +16,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -50,12 +38,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -78,12 +60,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-percent-width-height-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-percent-width-height-expected.txt index 0a40c0a8..cf52e79 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-percent-width-height-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-percent-width-height-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "incremental" - } ] } { @@ -45,16 +35,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "incremental" - } ] } { @@ -82,16 +62,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "incremental" - } ] } { @@ -119,16 +89,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-positioned-bottom-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-positioned-bottom-expected.txt index d54d37e..d8c1b8f 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-positioned-bottom-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-positioned-bottom-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - } ] } { @@ -40,12 +30,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -83,16 +67,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - } ] } { @@ -110,12 +84,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-positioned-percent-top-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-positioned-percent-top-expected.txt index b7d41001..317418d 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-positioned-percent-top-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-positioned-percent-top-expected.txt
@@ -13,16 +13,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - } ] } { @@ -40,12 +30,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -83,16 +67,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - } ] } { @@ -110,12 +84,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-viewport-percent-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-viewport-percent-expected.txt index 7721a0c..41f9e90 100644 --- a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-viewport-percent-expected.txt +++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/paint/invalidation/window-resize/window-resize-viewport-percent-expected.txt
@@ -18,16 +18,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "incremental" - } ] } { @@ -45,12 +35,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -88,16 +72,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "incremental" - } ] } { @@ -115,12 +89,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] }
diff --git a/third_party/WebKit/LayoutTests/flag-specific/js-flags=--harmony-bigint/http/tests/devtools/console/console-format-bigint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/js-flags=--harmony-bigint/http/tests/devtools/console/console-format-bigint-expected.txt deleted file mode 100644 index 5bf45fd..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/js-flags=--harmony-bigint/http/tests/devtools/console/console-format-bigint-expected.txt +++ /dev/null
@@ -1,24 +0,0 @@ -Tests that console properly displays BigInts. - -console-format-bigint.js:15 1n -console-format-bigint.js:16 BigInt {2n} -console-format-bigint.js:17 [1n] -console-format-bigint.js:18 [BigInt] -console-format-bigint.js:19 null 1n BigInt {2n} -Expanded all messages -console-format-bigint.js:15 1n -console-format-bigint.js:16 BigInt {2n} - __proto__: BigInt - [[PrimitiveValue]]: 2n -console-format-bigint.js:17 [1n] - 0: 1n - length: 1 - __proto__: Array(0) -console-format-bigint.js:18 [BigInt] - 0: BigInt {2n} - length: 1 - __proto__: Array(0) -console-format-bigint.js:19 null 1n BigInt {2n} - __proto__: BigInt - [[PrimitiveValue]]: 2n -
diff --git a/third_party/WebKit/LayoutTests/flag-specific/js-flags=--harmony-bigint/http/tests/devtools/startup/console/console-format-startup-bigint-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/js-flags=--harmony-bigint/http/tests/devtools/startup/console/console-format-startup-bigint-expected.txt deleted file mode 100644 index 25cc56f..0000000 --- a/third_party/WebKit/LayoutTests/flag-specific/js-flags=--harmony-bigint/http/tests/devtools/startup/console/console-format-startup-bigint-expected.txt +++ /dev/null
@@ -1,18 +0,0 @@ -Tests console logging for messages with BigInts that happen before DevTools is open. - -console-format-startup-bigint.html:5 1n -console-format-startup-bigint.html:6 BigInt - __proto__: BigInt - [[PrimitiveValue]]: 2n -console-format-startup-bigint.html:7 Array(1) - 0: 1n - length: 1 - __proto__: Array(0) -console-format-startup-bigint.html:8 Array(1) - 0: BigInt {2n} - length: 1 - __proto__: Array(0) -console-format-startup-bigint.html:9 null 1n BigInt - __proto__: BigInt - [[PrimitiveValue]]: 2n -
diff --git a/third_party/WebKit/LayoutTests/hdr/color-jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/hdr/color-jpeg-with-color-profile-expected.png index b83075d..aa18829 100644 --- a/third_party/WebKit/LayoutTests/hdr/color-jpeg-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/hdr/color-jpeg-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-bigint-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-bigint-expected.txt index 5bf45fd..25dba9c 100644 --- a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-bigint-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-bigint-expected.txt
@@ -5,6 +5,7 @@ console-format-bigint.js:17 [1n] console-format-bigint.js:18 [BigInt] console-format-bigint.js:19 null 1n BigInt {2n} +console-format-bigint.js:20 123n 123n 123n 123n Expanded all messages console-format-bigint.js:15 1n console-format-bigint.js:16 BigInt {2n} @@ -21,4 +22,5 @@ console-format-bigint.js:19 null 1n BigInt {2n} __proto__: BigInt [[PrimitiveValue]]: 2n +console-format-bigint.js:20 123n 123n 123n 123n
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-bigint.js b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-bigint.js index 5caf410..14339580 100644 --- a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-bigint.js +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-format-bigint.js
@@ -17,6 +17,7 @@ console.log([1n]); console.log([wrappedBigInt]); console.log(null, 1n, wrappedBigInt); + console.log('%d %i %d %i', 123n, 123n, BigInt(123), BigInt(123)); `); ConsoleTestRunner.dumpConsoleMessages(false, false, TestRunner.textContentWithLineBreaks);
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-log-side-effects-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-log-side-effects-expected.txt index 3887a02..c5f07cae 100644 --- a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-log-side-effects-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-log-side-effects-expected.txt
@@ -13,7 +13,7 @@ console-log-side-effects.js:34 Boolean {true} console-log-side-effects.js:35 String {"foo"} console-log-side-effects.js:36 {} -console-log-side-effects.js:37 Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …} +console-log-side-effects.js:37 Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …} console-log-side-effects.js:43 console-log-side-effects.js:47 {foo: 1, bar: 2} console-log-side-effects.js:48 (3) [1, 2, 3]
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/extensions/multiple-extensions-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/extensions/multiple-extensions-expected.txt index f8a73ab..2814a44d 100644 --- a/third_party/WebKit/LayoutTests/http/tests/devtools/extensions/multiple-extensions-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/extensions/multiple-extensions-expected.txt
@@ -1,4 +1,4 @@ -Tests co-existance of multiple DevTools extensions +Tests co-existence of multiple DevTools extensions Started extension. Running tests...
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/extensions/multiple-extensions.js b/third_party/WebKit/LayoutTests/http/tests/devtools/extensions/multiple-extensions.js index ec6650a4..6eaf40a 100644 --- a/third_party/WebKit/LayoutTests/http/tests/devtools/extensions/multiple-extensions.js +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/extensions/multiple-extensions.js
@@ -3,7 +3,7 @@ // found in the LICENSE file. (async function() { - TestRunner.addResult(`Tests co-existance of multiple DevTools extensions\n`); + TestRunner.addResult(`Tests co-existence of multiple DevTools extensions\n`); await TestRunner.loadModule('extensions_test_runner'); const tests = [
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/tracing/timeline-misc/timeline-dom-gc-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/tracing/timeline-misc/timeline-dom-gc-expected.txt new file mode 100644 index 0000000..fc15c7c --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/tracing/timeline-misc/timeline-dom-gc-expected.txt
@@ -0,0 +1,4 @@ +Tests the Timeline API instrumentation of a DOM GC event + +SUCCESS: Found expected Blink GC event record +
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/tracing/timeline-misc/timeline-dom-gc.js b/third_party/WebKit/LayoutTests/http/tests/devtools/tracing/timeline-misc/timeline-dom-gc.js new file mode 100644 index 0000000..a3ac236 --- /dev/null +++ b/third_party/WebKit/LayoutTests/http/tests/devtools/tracing/timeline-misc/timeline-dom-gc.js
@@ -0,0 +1,28 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +(async function() { + TestRunner.addResult( + `Tests the Timeline API instrumentation of a DOM GC event\n`); + await TestRunner.loadModule('performance_test_runner'); + await TestRunner.showPanel('timeline'); + await TestRunner.evaluateInPagePromise(` + function produceGarbageForGCEvents() + { + window.gc(); + return new Promise(fulfill => testRunner.layoutAndPaintAsyncThen(fulfill)); + } + `); + + await PerformanceTestRunner.invokeAsyncWithTimeline( + 'produceGarbageForGCEvents'); + + const gcEvent = PerformanceTestRunner.findTimelineEvent( + TimelineModel.TimelineModel.RecordType.GCCollectGarbage); + if (gcEvent) + TestRunner.addResult('SUCCESS: Found expected Blink GC event record'); + else + TestRunner.addResult(`FAIL: Blink GC event record wasn't found`); + TestRunner.completeTest(); +})();
diff --git a/third_party/WebKit/LayoutTests/http/tests/event-timing/event-timing-onloadthenobserve.html b/third_party/WebKit/LayoutTests/http/tests/event-timing/event-timing-onloadthenobserve.html index 4a18631..1f9fbd6 100644 --- a/third_party/WebKit/LayoutTests/http/tests/event-timing/event-timing-onloadthenobserve.html +++ b/third_party/WebKit/LayoutTests/http/tests/event-timing/event-timing-onloadthenobserve.html
@@ -59,7 +59,7 @@ */ async_test(function(t) { on_event(window, 'load', () => { - clickAndBlockMain('button').then(wait).then(() => { + clickAndBlockMain('button').then(() => { startObserver(t); clickAndBlockMain('button').then(wait); processingStartMin = performance.now();
diff --git a/third_party/WebKit/LayoutTests/http/tests/event-timing/resources/event-timing-support.js b/third_party/WebKit/LayoutTests/http/tests/event-timing/resources/event-timing-support.js index 5268ef9..151c5e9e 100644 --- a/third_party/WebKit/LayoutTests/http/tests/event-timing/resources/event-timing-support.js +++ b/third_party/WebKit/LayoutTests/http/tests/event-timing/resources/event-timing-support.js
@@ -1,5 +1,6 @@ -function clickOnElement(id) { - const rect = document.getElementById(id).getBoundingClientRect(); +function clickOnElement(id, callback) { + const element = document.getElementById(id); + const rect = element.getBoundingClientRect(); const xCenter = rect.x + rect.width / 2; const yCenter = rect.y + rect.height / 2; var pointerActions = [{ @@ -9,6 +10,12 @@ { name: "pointerUp" }, ] }]; + var clickHandler = () => { + if (callback) + callback(); + element.removeEventListener("click", clickHandler); + }; + element.addEventListener("click", clickHandler); if (!chrome || !chrome.gpuBenchmarking) { reject(); } else { @@ -60,8 +67,7 @@ function clickAndBlockMain(id) { return new Promise((resolve, reject) => { - clickOnElement(id); + clickOnElement(id, resolve); mainThreadBusy(300); - resolve(); }); }
diff --git a/third_party/WebKit/LayoutTests/images/cHRM_color_spin-expected.png b/third_party/WebKit/LayoutTests/images/cHRM_color_spin-expected.png index 1f17c241..2531a5d 100644 --- a/third_party/WebKit/LayoutTests/images/cHRM_color_spin-expected.png +++ b/third_party/WebKit/LayoutTests/images/cHRM_color_spin-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/images/color-jpeg-with-color-profile-expected.png index cf3b824..9140d5c 100644 --- a/third_party/WebKit/LayoutTests/images/color-jpeg-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-jpeg-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-animate-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-animate-expected.png index a45cc26..ce7d3d2 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-animate-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-animate-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-animate-rotate-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-animate-rotate-expected.png index b52c54f5..2516b85 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-animate-rotate-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-animate-rotate-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-background-clip-text-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-background-clip-text-expected.png index 69dc3477..090e573 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-background-clip-text-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-background-clip-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-background-image-cover-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-background-image-cover-expected.png index f0d5d05..eadcce0 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-background-image-cover-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-background-image-cover-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-background-image-repeat-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-background-image-repeat-expected.png index 7590d1bc..d3888b9 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-background-image-repeat-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-background-image-repeat-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-background-image-space-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-background-image-space-expected.png index 04e19f62..bae55f4 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-background-image-space-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-background-image-space-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-border-fade-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-border-fade-expected.png index e8d68c6d..327f508 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-border-fade-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-border-fade-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-border-image-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-border-image-expected.png index 417ec9d9..76c5ab3 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-border-image-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-border-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-clip-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-clip-expected.png index c89f745..8bb9cf2 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-clip-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-clip-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-iframe-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-iframe-expected.png index 561b61a..7b6b720 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-iframe-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-iframe-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-expected.png index 62b05aee..7c64777 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-pattern-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-pattern-expected.png index 5c80e16..7c6695b9 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-pattern-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-pattern-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-image-object-fit-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-image-object-fit-expected.png index b964366..bf63077 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-image-object-fit-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-image-object-fit-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-image-pseudo-content-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-image-pseudo-content-expected.png index ce4556a..67f5f1c 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-image-pseudo-content-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-image-pseudo-content-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-image-svg-resource-url-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-image-svg-resource-url-expected.png index 85ae8c0..5122c4c 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-image-svg-resource-url-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-image-svg-resource-url-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-layer-filter-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-layer-filter-expected.png index b7a79da..81673cd 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-layer-filter-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-layer-filter-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-mask-image-svg-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-mask-image-svg-expected.png index e8fbd39d..1537bcd 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-mask-image-svg-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-mask-image-svg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-munsell-adobe-to-srgb-expected.txt b/third_party/WebKit/LayoutTests/images/color-profile-munsell-adobe-to-srgb-expected.txt index d5d9e0d21..d6d92aa 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-munsell-adobe-to-srgb-expected.txt +++ b/third_party/WebKit/LayoutTests/images/color-profile-munsell-adobe-to-srgb-expected.txt
@@ -1,36 +1,36 @@ Color Actual Expected dE -------------------------------------------- -Dark Skin 115,80,64 115,80,64 0 +Dark Skin 114,80,64 115,80,64 1 Light Skin 195,150,130 195,151,130 1 -Blue Sky 94,123,157 94,123,156 1 -Foliage 89,108,65 88,108,65 1 +Blue Sky 94,122,156 94,123,156 1 +Foliage 88,108,65 88,108,65 0 Blue Flower 130,129,177 130,129,177 0 Bluish Green 100,190,171 100,190,171 0 -------------------------------------------- -Orange 216,122,37 217,122,37 1 -Purplish Blue 72,91,166 72,91,165 1 +Orange 216,121,37 217,122,37 1 +Purplish Blue 72,90,166 72,91,165 1 Moderate Red 194,84,97 194,84,98 1 -Purple 91,60,107 91,59,107 1 -Yellow Green 160,187,60 160,188,60 1 -Orange Yellow 230,163,42 230,163,42 0 +Purple 90,60,106 91,59,107 2 +Yellow Green 160,188,60 160,188,60 0 +Orange Yellow 231,163,42 230,163,42 1 -------------------------------------------- Blue 47,60,153 46,60,153 1 Green 70,149,69 71,150,69 1 -Red 177,44,56 177,44,56 0 +Red 177,45,56 177,44,56 1 Yellow 239,200,27 238,200,27 1 Magenta 187,82,147 187,82,148 1 -Cyan (*) 0,135,166 0,135,166 0 +Cyan (*) 0,135,165 0,135,166 1 -------------------------------------------- -White 243,241,236 243,242,237 1 -Neutral 8 201,201,200 201,201,201 1 +White 243,242,236 243,242,237 1 +Neutral 8 202,201,200 201,201,201 1 Neutral 6.5 160,161,160 161,161,161 1 -Neutral 5 123,122,121 122,122,121 1 +Neutral 5 123,121,120 122,122,121 2 Neutral 3.5 83,83,83 83,83,83 0 Black 50,50,50 50,49,50 1 -------------------------------------------- -Result: total RMS color error: 0.84 +Result: total RMS color error: 1.02 * Munsell Cyan is outside 255 sRGB gamut
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-object-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-object-expected.png index 795ef49..0bc8bc8 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-object-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-object-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-svg-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-svg-expected.png index a5c4443..f44df5a 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-svg-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-svg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/color-profile-svg-foreign-object-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-svg-foreign-object-expected.png index 0e0a5da..1dcab40 100644 --- a/third_party/WebKit/LayoutTests/images/color-profile-svg-foreign-object-expected.png +++ b/third_party/WebKit/LayoutTests/images/color-profile-svg-foreign-object-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/paletted-png-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/images/paletted-png-with-color-profile-expected.png index 2d73757..46dcb35 100644 --- a/third_party/WebKit/LayoutTests/images/paletted-png-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/images/paletted-png-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/webp-color-profile-lossless-expected.png b/third_party/WebKit/LayoutTests/images/webp-color-profile-lossless-expected.png index a727856..7e3d43d 100644 --- a/third_party/WebKit/LayoutTests/images/webp-color-profile-lossless-expected.png +++ b/third_party/WebKit/LayoutTests/images/webp-color-profile-lossless-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/webp-color-profile-lossy-alpha-expected.png b/third_party/WebKit/LayoutTests/images/webp-color-profile-lossy-alpha-expected.png index 97995247..d61df31a 100644 --- a/third_party/WebKit/LayoutTests/images/webp-color-profile-lossy-alpha-expected.png +++ b/third_party/WebKit/LayoutTests/images/webp-color-profile-lossy-alpha-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/webp-color-profile-lossy-expected.png b/third_party/WebKit/LayoutTests/images/webp-color-profile-lossy-expected.png index c8da1f8f..be301a9 100644 --- a/third_party/WebKit/LayoutTests/images/webp-color-profile-lossy-expected.png +++ b/third_party/WebKit/LayoutTests/images/webp-color-profile-lossy-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/jquery/resources/test/unit/traversing.js b/third_party/WebKit/LayoutTests/jquery/resources/test/unit/traversing.js index f5108bd..e132778a 100644 --- a/third_party/WebKit/LayoutTests/jquery/resources/test/unit/traversing.js +++ b/third_party/WebKit/LayoutTests/jquery/resources/test/unit/traversing.js
@@ -366,9 +366,9 @@ test("contents()", function() { expect(12); equals( jQuery("#ap").contents().length, 9, "Check element contents" ); - ok( jQuery("#iframe").contents()[0], "Check existance of IFrame document" ); + ok( jQuery("#iframe").contents()[0], "Check existence of IFrame document" ); var ibody = jQuery("#loadediframe").contents()[0].body; - ok( ibody, "Check existance of IFrame body" ); + ok( ibody, "Check existence of IFrame body" ); equals( jQuery("span", ibody).text(), "span text", "Find span in IFrame and check its text" );
diff --git a/third_party/WebKit/LayoutTests/media/color-profile-munsell-bt601-smpte-to-srgb-expected.txt b/third_party/WebKit/LayoutTests/media/color-profile-munsell-bt601-smpte-to-srgb-expected.txt index 023204c..9b66622 100644 --- a/third_party/WebKit/LayoutTests/media/color-profile-munsell-bt601-smpte-to-srgb-expected.txt +++ b/third_party/WebKit/LayoutTests/media/color-profile-munsell-bt601-smpte-to-srgb-expected.txt
@@ -3,24 +3,24 @@ -------------------------------------------- Dark Skin 115,80,64 115,80,64 0 Light Skin 195,151,130 195,151,130 0 -Blue Sky 94,123,156 94,123,156 0 +Blue Sky 93,123,156 94,123,156 1 Foliage 88,108,65 88,108,65 0 -Blue Flower 130,129,177 130,129,177 0 +Blue Flower 130,128,177 130,129,177 1 Bluish Green 100,190,171 100,190,171 0 -------------------------------------------- Orange 217,122,37 217,122,37 0 -Purplish Blue 72,91,165 72,91,165 0 -Moderate Red 194,84,98 194,84,98 0 -Purple 91,59,107 91,59,107 0 +Purplish Blue 71,91,165 72,91,165 1 +Moderate Red 194,83,98 194,84,98 1 +Purple 90,59,107 91,59,107 1 Yellow Green 160,188,60 160,188,60 0 Orange Yellow 230,163,42 230,163,42 0 -------------------------------------------- -Blue 46,60,153 46,60,153 0 +Blue 47,60,153 46,60,153 1 Green 71,150,69 71,150,69 0 Red 177,44,56 177,44,56 0 Yellow 238,200,27 238,200,27 0 Magenta 187,82,148 187,82,148 0 -Cyan (*) 34,135,166 0,135,166 34 +Cyan (*) 35,134,166 0,135,166 35 -------------------------------------------- White 243,242,237 243,242,237 0 Neutral 8 201,201,201 201,201,201 0 @@ -34,8 +34,8 @@ SG White 1/4 74,74,74 74,74,74 0 SG Black 4x 79,79,79 79,79,79 0 SG Black 2x 48,48,48 48,48,48 0 -SG Black 31,31,31 31,31,31 0 +SG Black 32,32,32 31,31,31 2 -------------------------------------------- -Result: total RMS color error: 0.00 +Result: total RMS color error: 0.58
diff --git a/third_party/WebKit/LayoutTests/media/color-profile-munsell-bt709-to-srgb-expected.txt b/third_party/WebKit/LayoutTests/media/color-profile-munsell-bt709-to-srgb-expected.txt index 31cbdc4d..d34b900 100644 --- a/third_party/WebKit/LayoutTests/media/color-profile-munsell-bt709-to-srgb-expected.txt +++ b/third_party/WebKit/LayoutTests/media/color-profile-munsell-bt709-to-srgb-expected.txt
@@ -1,28 +1,28 @@ Color Actual Expected dE -------------------------------------------- -Dark Skin 115,80,64 115,80,64 0 -Light Skin 195,151,130 195,151,130 0 -Blue Sky 94,123,156 94,123,156 0 +Dark Skin 114,80,64 115,80,64 1 +Light Skin 195,151,129 195,151,130 1 +Blue Sky 93,123,155 94,123,156 1 Foliage 88,108,65 88,108,65 0 -Blue Flower 130,129,177 130,129,177 0 +Blue Flower 129,128,177 130,129,177 1 Bluish Green 100,190,171 100,190,171 0 -------------------------------------------- -Orange 217,122,37 217,122,37 0 -Purplish Blue 72,91,165 72,91,165 0 +Orange 218,122,37 217,122,37 1 +Purplish Blue 72,90,165 72,91,165 1 Moderate Red 194,84,98 194,84,98 0 -Purple 91,59,107 91,59,107 0 +Purple 90,59,107 91,59,107 1 Yellow Green 160,188,60 160,188,60 0 Orange Yellow 230,163,42 230,163,42 0 -------------------------------------------- Blue 46,60,153 46,60,153 0 -Green 71,150,69 71,150,69 0 +Green 71,150,68 71,150,69 1 Red 177,44,56 177,44,56 0 Yellow 238,200,28 238,200,27 1 Magenta 187,82,148 187,82,148 0 Cyan (*) 0,135,166 0,135,166 0 -------------------------------------------- -White 243,242,237 243,242,237 0 +White 244,242,237 243,242,237 1 Neutral 8 201,201,201 201,201,201 0 Neutral 6.5 161,161,161 161,161,161 0 Neutral 5 122,122,121 122,122,121 0 @@ -34,8 +34,8 @@ SG White 1/4 74,74,74 74,74,74 0 SG Black 4x 79,79,79 79,79,79 0 SG Black 2x 48,48,48 48,48,48 0 -SG Black 31,31,31 31,31,31 0 +SG Black 32,32,32 31,31,31 2 -------------------------------------------- -Result: total RMS color error: 0.18 +Result: total RMS color error: 0.68
diff --git a/third_party/WebKit/LayoutTests/media/color-profile-video-poster-image-expected.png b/third_party/WebKit/LayoutTests/media/color-profile-video-poster-image-expected.png index 625ff75..c097154 100644 --- a/third_party/WebKit/LayoutTests/media/color-profile-video-poster-image-expected.png +++ b/third_party/WebKit/LayoutTests/media/color-profile-video-poster-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background/background-currentColor-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background/background-currentColor-repaint-expected.txt index e3eeef46..cdf70af 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background/background-currentColor-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background/background-currentColor-repaint-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='div1'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='div2'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background/background-generated-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background/background-generated-expected.txt index 1003e2d..f806996a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background/background-generated-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background/background-generated-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background/background-image-paint-invalidation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background/background-image-paint-invalidation-expected.txt index a3c063a..6e29ef7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background/background-image-paint-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background/background-image-paint-invalidation-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background/background-resize-height-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background/background-resize-height-expected.txt index 9268841..46d8a55 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background/background-resize-height-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background/background-resize-height-expected.txt
@@ -307,92 +307,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='test image'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image size-cover'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image size-contain'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image fixed-height'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image percent-height'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image top'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image bottom'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image center'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image no-repeat'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image repeat-space'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test image repeat-round'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated size-cover'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated size-contain'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated percent-height'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated top'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated bottom'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated center'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated no-repeat'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated repeat-space'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='test generated repeat-round'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background/background-shorthand-with-gradient-and-height-changes-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background/background-shorthand-with-gradient-and-height-changes-expected.txt index 9827fe2..30aa3fb7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background/background-shorthand-with-gradient-and-height-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background/background-shorthand-with-gradient-and-height-changes-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='outer'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background/background-size-auto-with-gradient-and-height-changes-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background/background-size-auto-with-gradient-and-height-changes-expected.txt index 9827fe2..30aa3fb7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background/background-size-auto-with-gradient-and-height-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background/background-size-auto-with-gradient-and-height-changes-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='outer'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background/full-viewport-repaint-for-background-attachment-fixed-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background/full-viewport-repaint-for-background-attachment-fixed-expected.txt index 4f156c0..739a3ed 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background/full-viewport-repaint-for-background-attachment-fixed-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background/full-viewport-repaint-for-background-attachment-fixed-expected.txt
@@ -37,12 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background/view-background-from-body-2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background/view-background-from-body-2-expected.txt index 27af9144..089deb6f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background/view-background-from-body-2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background/view-background-from-body-2-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background/viewport-gradient-background-html-move-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background/viewport-gradient-background-html-move-overflow-expected.txt index 6540245..b4a2abd 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background/viewport-gradient-background-html-move-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background/viewport-gradient-background-html-move-overflow-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background/viewport-gradient-background-html-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background/viewport-gradient-background-html-resize-expected.txt index 2899cf1..ab24e90e6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background/viewport-gradient-background-html-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background/viewport-gradient-background-html-resize-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/background/viewport-gradient-background-html-resize-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/background/viewport-gradient-background-html-resize-overflow-expected.txt index 0959fa5..711580f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/background/viewport-gradient-background-html-resize-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/background/viewport-gradient-background-html-resize-overflow-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/block-layout-inline-children-replaced-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/block-layout-inline-children-replaced-expected.txt index 9341e6235..0f1216a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/block-layout-inline-children-replaced-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/block-layout-inline-children-replaced-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target' class='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/block-shift-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/block-shift-repaint-expected.txt index ae564bc..b9843588 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/block-shift-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/block-shift-repaint-expected.txt
@@ -99,44 +99,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='div1' class='blue half'", - "reason": "disappeared" - }, - { - "object": "LayoutBlockFlow DIV class='red half'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='green half'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='top' class='blue half'", - "reason": "disappeared" - }, - { - "object": "LayoutBlockFlow DIV class='red half'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='green half'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='green half'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='red half'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='half'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/body-background-not-propagated-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/body-background-not-propagated-expected.txt index 37a36d8..a4909d89 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/body-background-not-propagated-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/body-background-not-propagated-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/border-current-color-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/border-current-color-expected.txt index 08822c5..a3c17f3a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/border-current-color-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/border-current-color-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='currentColor'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/border-image-outset-add-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/border-image-outset-add-repaint-expected.txt index 3d9ec1f..425a59cb 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/border-image-outset-add-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/border-image-outset-add-repaint-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/border-image-outset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/border-image-outset-change-repaint-expected.txt index 3d9ec1f..425a59cb 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/border-image-outset-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/border-image-outset-change-repaint-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/border-radius-repaint-2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/border-radius-repaint-2-expected.txt index df2f791c..4c2ef17f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/border-radius-repaint-2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/border-radius-repaint-2-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/border-radius-without-border-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/border-radius-without-border-expected.txt index a2051526..006f2d4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/border-radius-without-border-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/border-radius-without-border-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/box-shadow-add-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/box-shadow-add-repaint-expected.txt index e176420..6158fba 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/box-shadow-add-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/box-shadow-add-repaint-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/box-shadow-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/box-shadow-change-repaint-expected.txt index 3cd0bbd..b0b6479 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/box-shadow-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/box-shadow-change-repaint-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/box-shadow-inset-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/box-shadow-inset-repaint-expected.txt index dd01c13..28ec8731 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/box-shadow-inset-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/box-shadow-inset-repaint-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='container'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/box-sizing-border-keeping-size-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/box-sizing-border-keeping-size-expected.txt index b8863e0..ce5f16ad 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/box-sizing-border-keeping-size-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/box-sizing-border-keeping-size-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1' class='content-box'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2' class='border-box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/box-sizing-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/box-sizing-expected.txt index 8682cc2..ea89f29 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/box-sizing-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/box-sizing-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1' class='content-box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2' class='border-box'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/box-sizing-padding-keeping-size-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/box-sizing-padding-keeping-size-expected.txt index b8863e0..ce5f16ad 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/box-sizing-padding-keeping-size-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/box-sizing-padding-keeping-size-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1' class='content-box'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2' class='border-box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/hover-pseudo-borders-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/hover-pseudo-borders-expected.txt index 53f6616..3597084 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/hover-pseudo-borders-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/hover-pseudo-borders-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='hitregion'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) \u003Cpseudo:after\u003E", - "reason": "style change" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/hover-pseudo-borders-whitespace-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/hover-pseudo-borders-whitespace-expected.txt index 594e922..6080f862 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/hover-pseudo-borders-whitespace-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/hover-pseudo-borders-whitespace-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='div_border'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='div_outline'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/margin-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/margin-expected.txt index a47fc1d..9c28c941 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/margin-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/margin-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/negative-shadow-box-expand-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/negative-shadow-box-expand-expected.txt index 82a55a2..e18d621 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/negative-shadow-box-expand-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/negative-shadow-box-expand-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='inner2'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/negative-shadow-box-shrink-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/negative-shadow-box-shrink-expected.txt index 5d8dff0..8398256 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/negative-shadow-box-shrink-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/negative-shadow-box-shrink-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='outer'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/padding-border-keeping-border-box-and-content-box-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/padding-border-keeping-border-box-and-content-box-expected.txt index aff8c063..ccfec66 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/padding-border-keeping-border-box-and-content-box-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/padding-border-keeping-border-box-and-content-box-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/padding-keeping-content-size-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/padding-keeping-content-size-expected.txt index c8c6743f..3dffd88 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/padding-keeping-content-size-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/padding-keeping-content-size-expected.txt
@@ -39,20 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1' class='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2' class='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='inner'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/padding-keeping-visual-size-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/padding-keeping-visual-size-expected.txt index f20f155e..4ce8598 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/padding-keeping-visual-size-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/padding-keeping-visual-size-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1' class='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2' class='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='inner'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/resize-with-border-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/resize-with-border-expected.txt index 6d2886b..d9b00d75 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/resize-with-border-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/resize-with-border-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/shadow-box-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/shadow-box-resize-expected.txt index d1130fc..0868228 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/shadow-box-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/shadow-box-resize-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target3'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target4'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/box/shadow-box-resize-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/box/shadow-box-resize-writing-mode-expected.txt index d1130fc..0868228 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/box/shadow-box-resize-writing-mode-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/box/shadow-box-resize-writing-mode-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target1'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target2'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target3'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='target4'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/button-spurious-layout-hint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/button-spurious-layout-hint-expected.txt index 46aae6d..269e3f6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/button-spurious-layout-hint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/button-spurious-layout-hint-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutButton BUTTON id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/canvas-putImageData-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/canvas-putImageData-expected.txt index c67acac..c9f9928 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/canvas-putImageData-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/canvas-putImageData-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutHTMLCanvas CANVAS id='canvas'", - "reason": "invalidate paint rectangle" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-expected.txt index 5f18316d..61c0d363c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt index d4cba97..4982bca 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/canvas-resize-no-full-invalidation-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/clip/clip-path-in-mask-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/clip/clip-path-in-mask-layer-expected.txt index 0b946c6..cffa4f8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/clip/clip-path-in-mask-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/clip/clip-path-in-mask-layer-expected.txt
@@ -43,12 +43,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/clip/clip-path-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/clip/clip-path-resize-expected.txt index 2a41e9a..8308a63 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/clip/clip-path-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/clip/clip-path-resize-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/clip/clip-unclip-and-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/clip/clip-unclip-and-change-expected.txt index 831337256..bed0114c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/clip/clip-unclip-and-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/clip/clip-unclip-and-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/clip/css-clip-change-stacking-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/clip/css-clip-change-stacking-child-expected.txt index 560a6086..2d09cf0 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/clip/css-clip-change-stacking-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/clip/css-clip-change-stacking-child-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/clip/intermediate-layout-position-clip-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/clip/intermediate-layout-position-clip-expected.txt index 0de1586c..68298ab 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/clip/intermediate-layout-position-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/clip/intermediate-layout-position-clip-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/clip/mask-clip-change-stacking-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/clip/mask-clip-change-stacking-child-expected.txt index 372c03f..d667aa7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/clip/mask-clip-change-stacking-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/clip/mask-clip-change-stacking-child-expected.txt
@@ -39,12 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt index 2203bb1..c975183 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/clip/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) (floating) DIV class='imgContainer'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/clip/resize-with-border-clipped-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/clip/resize-with-border-clipped-expected.txt index ef9791b..31b4331 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/clip/resize-with-border-clipped-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/clip/resize-with-border-clipped-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/clip/subtree-root-clip-2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/clip/subtree-root-clip-2-expected.txt index 36238e9..c365e0b7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/clip/subtree-root-clip-2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/clip/subtree-root-clip-2-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "background" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/clip/subtree-root-clip-3-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/clip/subtree-root-clip-3-expected.txt index 6e4b8a7..6309c81b4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/clip/subtree-root-clip-3-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/clip/subtree-root-clip-3-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "background" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/clip/subtree-root-clip-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/clip/subtree-root-clip-expected.txt index 8098ad0..a7150a5 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/clip/subtree-root-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/clip/subtree-root-clip-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "background" - }, - { - "object": "LayoutBlockFlow DIV id='inner'", - "reason": "disappeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/background-attachment-local-composited-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/background-attachment-local-composited-expected.txt index b610c203..16415ab 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/background-attachment-local-composited-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/background-attachment-local-composited-expected.txt
@@ -72,12 +72,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt index b610c203..16415ab 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt
@@ -72,12 +72,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/child-of-sub-pixel-offset-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/child-of-sub-pixel-offset-composited-layer-expected.txt index cb485add..e8bc988 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/child-of-sub-pixel-offset-composited-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/child-of-sub-pixel-offset-composited-layer-expected.txt
@@ -41,12 +41,6 @@ [101, 100, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target' class='green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/clipping-should-not-repaint-composited-descendants-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/clipping-should-not-repaint-composited-descendants-expected.txt index 128d8ce..690d34d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/clipping-should-not-repaint-composited-descendants-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/clipping-should-not-repaint-composited-descendants-expected.txt
@@ -95,16 +95,6 @@ [-100, -100, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='clipping-container'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='clipping-container with-initial-clipping'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/column-span-under-composited-column-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/column-span-under-composited-column-child-expected.txt index a00c43a2..22f49a2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/column-span-under-composited-column-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/column-span-under-composited-column-child-expected.txt
@@ -30,12 +30,6 @@ "contentsOpaque": true, "drawsContent": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (column spanner) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/composited-float-under-composited-inline-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/composited-float-under-composited-inline-expected.txt index 80c739a..b685fd7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/composited-float-under-composited-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/composited-float-under-composited-inline-expected.txt
@@ -35,12 +35,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='float'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/composited-float-under-composited-inline-individual-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/composited-float-under-composited-inline-individual-expected.txt index 80c739a..b685fd7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/composited-float-under-composited-inline-individual-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/composited-float-under-composited-inline-individual-expected.txt
@@ -35,12 +35,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='float'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/compositing-reason-removed-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/compositing-reason-removed-expected.txt index 198b6644..5a303f0 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/compositing-reason-removed-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/compositing-reason-removed-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='square'", - "reason": "compositing update" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-added-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-added-expected.txt index 6d27dfd..bde518e7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-added-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-added-expected.txt
@@ -42,16 +42,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='container'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='fixed'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-added-individual-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-added-individual-expected.txt index 6d27dfd..bde518e7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-added-individual-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-added-individual-expected.txt
@@ -42,16 +42,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='container'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='fixed'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-removed-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-removed-expected.txt index 8bd9687..f1fdade 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-removed-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-removed-expected.txt
@@ -43,16 +43,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='container'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='fixed'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-removed-individual-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-removed-individual-expected.txt index 9ae6599c..9233c72 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-removed-individual-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/containing-block-removed-individual-expected.txt
@@ -44,16 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='container'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='fixed'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/dont-invalidate-root-layer-when-composited-layer-becomes-visible-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/dont-invalidate-root-layer-when-composited-layer-becomes-visible-expected.txt index 29b53f3..ed7dd2e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/dont-invalidate-root-layer-when-composited-layer-becomes-visible-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/dont-invalidate-root-layer-when-composited-layer-becomes-visible-expected.txt
@@ -23,12 +23,6 @@ "bounds": [200, 200], "drawsContent": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/float-under-composited-inline-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/float-under-composited-inline-expected.txt index b74b0f5..978b1fe 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/float-under-composited-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/float-under-composited-inline-expected.txt
@@ -28,12 +28,6 @@ "name": "LayoutInline (relative positioned) SPAN", "position": [108, 108] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV id='float'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidate-paint-in-iframe-in-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidate-paint-in-iframe-in-composited-layer-expected.txt index d54bc06..308dac5 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidate-paint-in-iframe-in-composited-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidate-paint-in-iframe-in-composited-layer-expected.txt
@@ -40,12 +40,6 @@ [8, 408, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt index 931ef2d..2436d55 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt
@@ -75,12 +75,6 @@ [50, 50, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt index 179f4eb..22e4fc5 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt
@@ -40,12 +40,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidations-on-composited-layers-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidations-on-composited-layers-expected.txt index e3b839b..8c809082 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidations-on-composited-layers-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidations-on-composited-layers-expected.txt
@@ -66,16 +66,6 @@ [50, 50, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='parent'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='child'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidations-with-large-negative-margin-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidations-with-large-negative-margin-expected.txt index d8a913f..68552fe 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidations-with-large-negative-margin-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/invalidations-with-large-negative-margin-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='chip'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/new-stacking-context-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/new-stacking-context-expected.txt index 83e3358..6c2aae4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/new-stacking-context-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/new-stacking-context-expected.txt
@@ -71,12 +71,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/pointer-events-composited-scrolling-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/pointer-events-composited-scrolling-expected.txt index 4769c7a..e8b72bf 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/pointer-events-composited-scrolling-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/pointer-events-composited-scrolling-expected.txt
@@ -45,16 +45,6 @@ "position": [108, 8], "bounds": [0, 100] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "compositing update" - }, - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "compositing update" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/repaint-overflow-scrolled-squashed-content-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/repaint-overflow-scrolled-squashed-content-expected.txt index e97a599..0d16f528 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/repaint-overflow-scrolled-squashed-content-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/repaint-overflow-scrolled-squashed-content-expected.txt
@@ -54,12 +54,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='foo'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt index c50ded65..e9b7d31 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt
@@ -52,12 +52,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='imgElement'", - "reason": "image" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt index 28fabb5..41ac5e7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt
@@ -52,12 +52,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) SPAN class='child embiggen'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/resize-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/resize-repaint-expected.txt index 9e970af..e9e7557 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/resize-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/resize-repaint-expected.txt
@@ -50,20 +50,6 @@ [8, 8, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='resizing'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/resize-squashing-layer-that-needs-full-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/resize-squashing-layer-that-needs-full-repaint-expected.txt index 9d10f39..9eb4b30 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/resize-squashing-layer-that-needs-full-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/resize-squashing-layer-that-needs-full-repaint-expected.txt
@@ -51,12 +51,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "compositing update" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-invoke-deferred-compositing-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-invoke-deferred-compositing-expected.txt index 4070acd..949a45a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-invoke-deferred-compositing-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-invoke-deferred-compositing-expected.txt
@@ -33,12 +33,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutHTMLCanvas (positioned) CANVAS", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt index 19663a4..06e3e68 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt
@@ -90,16 +90,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt index 818e36c..0ae713e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt
@@ -37,16 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-descendants-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-descendants-expected.txt index e649e881..b479ab4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-descendants-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-descendants-expected.txt
@@ -51,16 +51,6 @@ "backfaceVisibility": "hidden", "backgroundColor": "#008000" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='composited-box'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV class='child'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-descendants-on-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-descendants-on-overflow-change-expected.txt index f231780..06aafe1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-descendants-on-overflow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-composited-descendants-on-overflow-change-expected.txt
@@ -60,16 +60,6 @@ "backfaceVisibility": "hidden", "backgroundColor": "#008000" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='overflow1'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='overflow2'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-scrolling-contents-outline-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-scrolling-contents-outline-change-expected.txt index f9f52e5..fce43b0 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-scrolling-contents-outline-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/should-not-repaint-scrolling-contents-outline-change-expected.txt
@@ -66,12 +66,6 @@ "position": [193, 193], "bounds": [15, 15] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt index 84a2bcf..1be0a08 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt
@@ -52,12 +52,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutImage (positioned) IMG id='repaintdiv' class='repaintdiv'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt index 395b1d4..9705eba 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt
@@ -74,12 +74,6 @@ "flattenInheritedTransform": false, "renderingContext": 1 } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/stacked-float-under-composited-inline-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/stacked-float-under-composited-inline-expected.txt index 4e2646b..d0f5ecd 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/stacked-float-under-composited-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/stacked-float-under-composited-inline-expected.txt
@@ -30,12 +30,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='float'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/subpixel-offset-scaled-transform-composited-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/subpixel-offset-scaled-transform-composited-expected.txt index fc241d9..1784ab9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/subpixel-offset-scaled-transform-composited-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/subpixel-offset-scaled-transform-composited-expected.txt
@@ -193,20 +193,6 @@ ], "origin": [0, 0] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='container2' class='container'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='container4' class='container composited'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='container6' class='container composited'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/text-color-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/text-color-change-expected.txt new file mode 100644 index 0000000..23ed21cc --- /dev/null +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/text-color-change-expected.txt
@@ -0,0 +1,144 @@ +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "drawsContent": false, + "backgroundColor": "#FFFFFF" + }, + { + "name": "Scrolling Layer", + "bounds": [800, 600], + "drawsContent": false + }, + { + "name": "Scrolling Contents Layer", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF", + "paintInvalidations": [ + { + "object": "InlineTextBox '\n'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox '\n'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox '\n'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox '\n'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox '\n'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox '\n'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox '\n'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox '\n'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox '\n'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox '\n'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox '\n'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox '\n'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox ' Text'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox ' Text'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox ' Text'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox ' Text'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox ' Text'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox ' Text'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox ' Text'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox ' Text'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox ' Text'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox ' Text'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox ' Text'", + "rect": [8, 61, 48, 185], + "reason": "style change" + }, + { + "object": "InlineTextBox ' Text'", + "rect": [8, 61, 48, 185], + "reason": "style change" + } + ] + } + ] +} +
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/updating-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/updating-scrolling-container-expected.txt index 7c67ea8..fa5fd03 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/updating-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/updating-scrolling-container-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='container'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/updating-scrolling-content-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/updating-scrolling-content-expected.txt index 5a101e1..fe508ef 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/compositing/updating-scrolling-content-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/compositing/updating-scrolling-content-expected.txt
@@ -70,12 +70,6 @@ "position": [193, 193], "bounds": [15, 15] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='indicator'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-element-change-columns-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-element-change-columns-repaint-expected.txt index f7cbae3..544cde7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-element-change-columns-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-element-change-columns-repaint-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutGrid DIV class='grid min-content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='sizedToGridArea'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-element-change-rows-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-element-change-rows-repaint-expected.txt index 25872a9..6107427 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-element-change-rows-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-element-change-rows-repaint-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutGrid DIV class='grid fit-content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='sizedToGridArea'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-item-change-column-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-item-change-column-repaint-expected.txt index 954fe61e..cb2dc98 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-item-change-column-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-item-change-column-repaint-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='sizedToGridArea'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-item-change-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-item-change-row-repaint-expected.txt index 86a39c0..0f0a8892 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-item-change-row-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-item-change-row-repaint-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='sizedToGridArea'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-item-z-index-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-item-z-index-change-repaint-expected.txt index 30f684f..03ac312 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-item-z-index-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/css-grid-layout/grid-item-z-index-change-repaint-expected.txt
@@ -34,12 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='item2' class='sizedToGridArea green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/cull-rect-change-crash-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/cull-rect-change-crash-expected.txt index f9753ac..3801b3e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/cull-rect-change-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/cull-rect-change-crash-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='g'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-1-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-1-expected.txt index e1b6cac1..3d23fad 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-1-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-1-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-2-expected.txt index b5764e5..8a103f7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-2-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-3-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-3-expected.txt index 6754c153..9c376c50 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-3-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-3-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-4-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-4-expected.txt index b5764e5..8a103f7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-4-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-4-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-5-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-5-expected.txt index e1b6cac1..3d23fad 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-5-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-5-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-6-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-6-expected.txt index 9a61d73b..993e70f1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-6-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-composite-6-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-displacement-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-displacement-expected.txt index dc13f6e..98ec780 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-displacement-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-displacement-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-gaussianblur-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-gaussianblur-expected.txt index 0615e55..534aeb9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-gaussianblur-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-gaussianblur-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-gaussianblur-xonly-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-gaussianblur-xonly-expected.txt index f2d77a63..34ba93a0 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-gaussianblur-xonly-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-gaussianblur-xonly-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-gaussianblur-yonly-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-gaussianblur-yonly-expected.txt index 2a5bb76..994fc1e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-gaussianblur-yonly-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-gaussianblur-yonly-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-lighting-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-lighting-expected.txt index f389ddd..f328951 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-lighting-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-lighting-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-merge-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-merge-expected.txt index 9a61d73b..993e70f1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-merge-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-merge-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-morphology-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-morphology-expected.txt index 753f2d82a..854d638 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-morphology-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-morphology-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-morphology-xonly-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-morphology-xonly-expected.txt index 2064de9..4d4865af 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-morphology-xonly-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-morphology-xonly-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-morphology-yonly-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-morphology-yonly-expected.txt index 93f7ac85..32cb8fa 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-morphology-yonly-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-morphology-yonly-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-offset-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-offset-expected.txt index 2f96ae10..09a24c1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-offset-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-offset-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-primitive-attr-mutation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-primitive-attr-mutation-expected.txt index 61f61eb..5c25ac4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-primitive-attr-mutation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-primitive-attr-mutation-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-primitive-attr-removal-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-primitive-attr-removal-expected.txt index 61f61eb..5c25ac4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-primitive-attr-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-primitive-attr-removal-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-primitive-removed-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-primitive-removed-expected.txt index 61f61eb..5c25ac4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-primitive-removed-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/effect-reference-repaint-primitive-removed-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-invalidation-after-display-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-invalidation-after-display-expected.txt index a725d31..740f773 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-invalidation-after-display-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-invalidation-after-display-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='box' class='green box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-invalidation-with-composited-container-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-invalidation-with-composited-container-change-expected.txt index d0c6057..4adaf9bf 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-invalidation-with-composited-container-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-invalidation-with-composited-container-change-expected.txt
@@ -49,12 +49,6 @@ [8, 8, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='box' class='green box blurry'", - "reason": "compositing update" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-on-html-element-with-fixed-position-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-on-html-element-with-fixed-position-child-expected.txt index 56f23142..ca2bacc02 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-on-html-element-with-fixed-position-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-on-html-element-with-fixed-position-child-expected.txt
@@ -52,12 +52,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt index 9abd5ac..695d634 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
@@ -35,12 +35,6 @@ [-4, -4, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='resize' class='drop-shadow'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-repaint-accelerated-on-accelerated-filter-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-repaint-accelerated-on-accelerated-filter-expected.txt index e4bca97..180494de4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-repaint-accelerated-on-accelerated-filter-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-repaint-accelerated-on-accelerated-filter-expected.txt
@@ -47,12 +47,6 @@ [8, 8, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='resize' class='drop-shadow accelerated'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt index 4273d68..baead56 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
@@ -37,12 +37,6 @@ [8, 8, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='resize' class='accelerated'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-content-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-content-change-expected.txt index 6bb8ef2b..6ebb226 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-content-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-content-change-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-content-distribution-change-grid-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-content-distribution-change-grid-expected.txt index 42cf0d47..6b31a45 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-content-distribution-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-content-distribution-change-grid-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-items-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-items-change-expected.txt index a36c8c1..890e3e6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-items-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-items-change-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-self-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-self-change-expected.txt index a36c8c1..890e3e6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-self-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-self-change-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-self-change-grid-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-self-change-grid-expected.txt index 2921631..a0f60cca 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-self-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/align-self-change-grid-expected.txt
@@ -44,20 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item1'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item2'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item3'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-content-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-content-change-expected.txt index b44cc24..1a2cc15 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-content-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-content-change-expected.txt
@@ -39,16 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-content-distribution-change-grid-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-content-distribution-change-grid-expected.txt index bfffceb..c8b75e1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-content-distribution-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-content-distribution-change-grid-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-items-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-items-change-expected.txt index 9a2ca27..eb17275 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-items-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-items-change-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-items-legacy-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-items-legacy-change-expected.txt index 0c3474b..8c4bc33 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-items-legacy-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-items-legacy-change-expected.txt
@@ -39,16 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item1'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item2'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-self-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-self-change-expected.txt index c4a1f63..da057729 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-self-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/justify-self-change-expected.txt
@@ -44,20 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item1'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item2'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item3'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/remove-inline-block-descendant-of-flex-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/remove-inline-block-descendant-of-flex-expected.txt index 3b86ad00..7a69cfd 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/remove-inline-block-descendant-of-flex-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/remove-inline-block-descendant-of-flex-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='inline-block-2' class='item'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-column-reverse-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-column-reverse-expected.txt index 73eaeb9..c146e8c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-column-reverse-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-column-reverse-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='blue' class='flex-item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-during-resize-no-flex-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-during-resize-no-flex-expected.txt index c0c0dbe..6ec3d30d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-during-resize-no-flex-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-during-resize-no-flex-expected.txt
@@ -44,20 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='flex-item-1' class='flex-item width'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV class='flex-item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='flex-item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-on-layout-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-on-layout-expected.txt index e6ba1ca..8834eeb7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-on-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-on-layout-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV class='state'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-on-margin-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-on-margin-change-expected.txt index 30c8df4..cdf28eb 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-on-margin-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-on-margin-change-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='child-to-grow' class='child'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-opacity-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-opacity-change-expected.txt index 7a9afc4a..89e350b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-opacity-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-opacity-change-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target' class='item'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-rtl-column-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-rtl-column-expected.txt index c888736..5b440fe 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-rtl-column-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/flexbox/repaint-rtl-column-expected.txt
@@ -59,32 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='left'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='left'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/float-in-new-block-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/float-in-new-block-with-layout-delta-expected.txt index a13107e2..94393da 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/float-in-new-block-with-layout-delta-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/float-in-new-block-with-layout-delta-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/float-new-in-block-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/float-new-in-block-expected.txt index c5af67c..3e68d9d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/float-new-in-block-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/float-new-in-block-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV id='target'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/forms/textarea-appearance-none-resize-handle-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/forms/textarea-appearance-none-resize-handle-expected.txt index 766450f6..843155986 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/forms/textarea-appearance-none-resize-handle-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/forms/textarea-appearance-none-resize-handle-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl (positioned) TEXTAREA id='textarea'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/forms/textarea-resize-property-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/forms/textarea-resize-property-change-expected.txt index 1587c95..4eb6f0e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/forms/textarea-resize-property-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/forms/textarea-resize-property-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl (positioned) TEXTAREA id='textarea'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/forms/textarea-set-disabled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/forms/textarea-set-disabled-expected.txt index d8c16de..e8a06afd 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/forms/textarea-set-disabled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/forms/textarea-set-disabled-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl TEXTAREA", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/iframe-rounding-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/iframe-rounding-expected.txt index d79bbe1..e1b8a0a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/iframe-rounding-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/iframe-rounding-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt index 978d42d2..e99396c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/image/do-not-paint-below-image-baseline-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutImage IMG", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/image/image-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/image/image-resize-expected.txt index fd61bfe..8bc5150 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/image/image-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/image/image-resize-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutImage (positioned) IMG", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/image/percent-size-image-resize-container-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/image/percent-size-image-resize-container-expected.txt index fd61bfe..8bc5150 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/image/percent-size-image-resize-container-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/image/percent-size-image-resize-container-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutImage (positioned) IMG", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/inline-block-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/inline-block-resize-expected.txt index 91d6f83..4bd0fc5f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/inline-block-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/inline-block-resize-expected.txt
@@ -24,20 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/insert-frame-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/insert-frame-expected.txt index 63e8f6c..4fc8645 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/insert-frame-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/insert-frame-expected.txt
@@ -24,20 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutIFrame IFRAME", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-descendants-when-receiving-paint-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-descendants-when-receiving-paint-layer-expected.txt index d89ca37..52b231a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-descendants-when-receiving-paint-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-descendants-when-receiving-paint-layer-expected.txt
@@ -35,16 +35,6 @@ "contentsOpaque": true, "drawsContent": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='child'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-invisible-element-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-invisible-element-expected.txt index 8707cf9..7f7c094 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-invisible-element-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-invisible-element-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-on-foreground-graphics-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-on-foreground-graphics-layer-expected.txt index e317b9e0..928e6d8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-on-foreground-graphics-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-on-foreground-graphics-layer-expected.txt
@@ -78,12 +78,6 @@ "position": [193, 193], "bounds": [15, 15] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-with-zero-size-object-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-with-zero-size-object-expected.txt index 7cde740..c1d29e4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-with-zero-size-object-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-with-zero-size-object-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='element'", - "reason": "disappeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/invisible-objects-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/invisible-objects-expected.txt index 0c7a406..58ba65a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/invisible-objects-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/invisible-objects-expected.txt
@@ -17,24 +17,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'is invisible'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/layer-full-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/layer-full-repaint-expected.txt index 5a7304c..b30e09f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/layer-full-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/layer-full-repaint-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='test' class='selected'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/layer-hide-when-needs-layout-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/layer-hide-when-needs-layout-expected.txt index bccce34..a0f093d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/layer-hide-when-needs-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/layer-hide-when-needs-layout-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/layer-visibility-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/layer-visibility-expected.txt index 0b7c1de..5c5b299 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/layer-visibility-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/layer-visibility-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/mix-blend-mode-separate-stacking-context-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/mix-blend-mode-separate-stacking-context-expected.txt index 1006111..e5daa2a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/mix-blend-mode-separate-stacking-context-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/mix-blend-mode-separate-stacking-context-expected.txt
@@ -74,28 +74,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV id='first'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (floating) DIV id='second'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (floating) DIV id='third'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='fourth'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-as-paint-container-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-as-paint-container-expected.txt index 94367a7..c000c0e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-as-paint-container-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-as-paint-container-expected.txt
@@ -110,156 +110,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Lorem ipsum'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'dolor sit amet,'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'consectetur'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'adipiscing'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'elit. Fusce'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'varius, metus'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'eu fringilla'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'pulvinar, ipsum'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'sapien'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'ultricies arcu,'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'non condimentum'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'quam est eu'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'purus. Ut nisl'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'libero,'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'suscipit ut leo'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'eget, dapibus'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'ultrices dolor.'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Lorem ipsum'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'dolor sit amet,'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'consectetur'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'adipiscing'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'elit. Fusce'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'varius, metus'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'eu fringilla'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'pulvinar, ipsum'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'sapien'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'ultricies arcu,'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'non condimentum'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'quam est eu'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'purus. Ut nisl'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'libero,'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'suscipit ut leo'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'eget, dapibus'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'ultrices dolor.'", - "reason": "style change" - }, - { - "object": "LayoutMultiColumnSet (anonymous)", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-relpos-with-abspos-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-relpos-with-abspos-expected.txt index 459b844..700cda1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-relpos-with-abspos-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-relpos-with-abspos-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-resize-with-rule-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-resize-with-rule-expected.txt index 11faeeee7a..fd05892aa 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-resize-with-rule-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-resize-with-rule-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutMultiColumnSet (anonymous)", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-block-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-block-expected.txt index 195483f8..2487e74 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-block-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-block-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-inline-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-inline-expected.txt index e7ef450..2487e74 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-inline-expected.txt
@@ -24,20 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN id='target'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-overflowing-block-rl-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-overflowing-block-rl-expected.txt index c4a2e5b..fe623eba 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-overflowing-block-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-overflowing-block-rl-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='elm'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='elm'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='elm'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-relpos-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-relpos-expected.txt index 89f46c0..740c15f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-relpos-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/multicol/multicol-with-relpos-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline/border-outline-0-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline/border-outline-0-expected.txt index 853e141e..a2eb27a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline/border-outline-0-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline/border-outline-0-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='border-image'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline/border-radius-with-outline-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline/border-radius-with-outline-expected.txt index 446d7d1..2fc1317 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline/border-radius-with-outline-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline/border-radius-with-outline-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline/inline-outline-repaint-2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline/inline-outline-repaint-2-expected.txt index 1f96742f..350810f8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline/inline-outline-repaint-2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline/inline-outline-repaint-2-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN", - "reason": "outline" - }, - { - "object": "InlineFlowBox", - "reason": "outline" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-add-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-add-repaint-expected.txt index 5628b2f..3b4e905b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-add-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-add-repaint-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-continuations-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-continuations-expected.txt index f81c6ef4..58ba65a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-continuations-expected.txt
@@ -17,24 +17,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-offset-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-offset-expected.txt index 6556279..28ffe77 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-offset-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-offset-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-repaint-expected.txt index 5628b2f..3b4e905b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-repaint-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-vertical-rl-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-vertical-rl-expected.txt index 3fb916b..e1a75ba2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-vertical-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-change-vertical-rl-expected.txt
@@ -37,12 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-child-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-child-repaint-expected.txt index 7c23559..5ccf907 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-child-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-child-repaint-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='outlined'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-containing-image-in-non-standard-mode-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-containing-image-in-non-standard-mode-expected.txt index f90186bb..74a8f125 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-containing-image-in-non-standard-mode-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-containing-image-in-non-standard-mode-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='target'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutImage IMG", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-current-color-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-current-color-expected.txt index 01dc459..713e298 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-current-color-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-current-color-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='currentColor'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-not-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-not-affected-by-descendant-expected.txt index 846cfef..cf72ed2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-not-affected-by-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/outline/outline-not-affected-by-descendant-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='child'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/align-items-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/align-items-overflow-change-expected.txt index d8e5695b..d523d90 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/align-items-overflow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/align-items-overflow-change-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item1'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/align-self-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/align-self-overflow-change-expected.txt index d8e5695b..d523d90 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/align-self-overflow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/align-self-overflow-change-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item1'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/clipped-overflow-visible-subtree-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/clipped-overflow-visible-subtree-expected.txt index 4797aef..e7d9a4e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/clipped-overflow-visible-subtree-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/clipped-overflow-visible-subtree-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt index 87b21d5..764067f5 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt
@@ -74,16 +74,6 @@ "position": [203, 203], "bounds": [15, 15] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutBlockFlow DIV id='scroller'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-overflow-with-local-background-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-overflow-with-local-background-expected.txt index 7a9f72c..328d5cc2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-overflow-with-local-background-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-overflow-with-local-background-expected.txt
@@ -66,16 +66,6 @@ "position": [193, 193], "bounds": [15, 15] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutBlockFlow DIV id='scroller'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-overflow-with-negative-offset-outline-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-overflow-with-negative-offset-outline-expected.txt index b6443327..5465c18f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-overflow-with-negative-offset-outline-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-overflow-with-negative-offset-outline-expected.txt
@@ -68,12 +68,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='scroller'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-vertical-rl-overflow-expected.txt index 9a5d1b22..04af77c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-vertical-rl-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/composited-vertical-rl-overflow-expected.txt
@@ -30,12 +30,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/content-into-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/content-into-overflow-expected.txt index e649684..45173613 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/content-into-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/content-into-overflow-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow DIV id='target3'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/erase-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/erase-overflow-expected.txt index 5c43938..395bfc6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/erase-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/erase-overflow-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target' class='square'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/fixed-position-transparency-with-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/fixed-position-transparency-with-overflow-expected.txt index 382c3b5..d74246d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/fixed-position-transparency-with-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/fixed-position-transparency-with-overflow-expected.txt
@@ -34,16 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='container' class='relative blue'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/justify-items-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/justify-items-overflow-change-expected.txt index 172cc46d..e58f557b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/justify-items-overflow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/justify-items-overflow-change-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item1'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/justify-self-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/justify-self-overflow-change-expected.txt index c1d347c9..a31eb84 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/justify-self-overflow-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/justify-self-overflow-change-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item1'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/negative-text-indent-with-overflow-hidden-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/negative-text-indent-with-overflow-hidden-expected.txt index 4c64cec5..1300985 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/negative-text-indent-with-overflow-hidden-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/negative-text-indent-with-overflow-hidden-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target' class='changed'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-changed-on-child-of-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-changed-on-child-of-composited-layer-expected.txt index 760e592..d666b45 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-changed-on-child-of-composited-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-changed-on-child-of-composited-layer-expected.txt
@@ -45,12 +45,6 @@ [27, 19, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-clip-subtree-layout-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-clip-subtree-layout-expected.txt index 63a308b..58ba65a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-clip-subtree-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-clip-subtree-layout-expected.txt
@@ -17,12 +17,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-hide-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-hide-expected.txt index 5f7a206..4d66e9e6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-hide-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-hide-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='overflowParent' class='absolute green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-into-content-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-into-content-expected.txt index 346e43e4..6cd1285 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-into-content-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-into-content-expected.txt
@@ -39,20 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "disappeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-show-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-show-expected.txt index a7d707f0..57c8b09 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-show-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/overflow-show-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='overflowParent' class='absolute green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/paged-with-overflowing-block-rl-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/paged-with-overflowing-block-rl-expected.txt index 3702517..cc77512 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/paged-with-overflowing-block-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/paged-with-overflowing-block-rl-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='elm'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='elm'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/resize-child-within-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/resize-child-within-overflow-expected.txt index 0123e0e..70a24473 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/resize-child-within-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/resize-child-within-overflow-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='container'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-overflow-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-overflow-child-expected.txt index f9ec626..0ed5cbd 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-overflow-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-overflow-child-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-overflow-parent-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-overflow-parent-expected.txt index 590f92c..132549f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-overflow-parent-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-overflow-parent-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-overflow-same-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-overflow-same-expected.txt index 5b19dc73..1dc9bde 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-overflow-same-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-overflow-same-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-rl-overflow-expected.txt index ce1bb71..d838a47 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-rl-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/overflow/vertical-rl-overflow-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/paint-caret-in-div-with-negative-indent-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/paint-caret-in-div-with-negative-indent-expected.txt index 1b4f91e..b0f6c71b2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/paint-caret-in-div-with-negative-indent-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/paint-caret-in-div-with-negative-indent-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/paint-invalidation-with-opacity-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/paint-invalidation-with-opacity-expected.txt index ede8268..ccdc9104 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/paint-invalidation-with-opacity-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/paint-invalidation-with-opacity-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-margin-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-margin-change-repaint-expected.txt index 77792a8..c32b7cee 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-margin-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-margin-change-repaint-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='test'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-position-change-containing-block-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-position-change-containing-block-expected.txt index b2f4c95..cde7d45 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-position-change-containing-block-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-position-change-containing-block-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='container' class='fixed blue'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-position-changed-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-position-changed-expected.txt index ab3772b..32d01a48 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-position-changed-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-position-changed-expected.txt
@@ -42,12 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-position-moved-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-position-moved-expected.txt index 8e21565..9be20635 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-position-moved-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/absolute-position-moved-expected.txt
@@ -39,12 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/align-content-position-change-grid-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/align-content-position-change-grid-expected.txt index cf8f6bc..cfab73a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/align-content-position-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/align-content-position-change-grid-expected.txt
@@ -49,20 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-margin-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-margin-change-repaint-expected.txt index 77792a8..c32b7cee 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-margin-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-margin-change-repaint-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='test'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-scale-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-scale-expected.txt index 4da7dc9..72a0c74c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-scale-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-scale-expected.txt
@@ -42,12 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='t' class='green translated'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-to-relative-position-with-absolute-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-to-relative-position-with-absolute-child-expected.txt index 0506be6..cb7f693 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-to-relative-position-with-absolute-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-to-relative-position-with-absolute-child-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='container' class='fixed blue'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-tranformed-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-tranformed-expected.txt index dc2c958..a3e488b0 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-tranformed-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/fixed-tranformed-expected.txt
@@ -37,12 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/inline-relative-positioned-expected.txt index 233db16..2a20486 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/inline-relative-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/inline-relative-positioned-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'a'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/intermediate-layout-position-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/intermediate-layout-position-expected.txt index eb360f7..d859245f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/intermediate-layout-position-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/intermediate-layout-position-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "incremental" - }, - { - "object": "LayoutTable TABLE", - "reason": "incremental" - }, - { - "object": "LayoutTableCell TD id='cell'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt index f44f2c4..87906e9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/justify-content-position-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/justify-content-position-change-expected.txt index 2fdcb0d..9ed868d0 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/justify-content-position-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/justify-content-position-change-expected.txt
@@ -39,16 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/justify-content-position-change-grid-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/justify-content-position-change-grid-expected.txt index dbf0e350a..074b979 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/justify-content-position-change-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/justify-content-position-change-grid-expected.txt
@@ -49,20 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='item'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/layout-state-only-positioned-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/layout-state-only-positioned-expected.txt index 303ab68b..03ceef8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/layout-state-only-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/layout-state-only-positioned-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/position/relative-margin-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/position/relative-margin-change-repaint-expected.txt index 729fc6a..4a31cf93 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/position/relative-margin-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/position/relative-margin-change-repaint-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='test'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/raster-under-invalidation-checking-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/raster-under-invalidation-checking-expected.txt index a4afeb7..0607aea 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/raster-under-invalidation-checking-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/raster-under-invalidation-checking-expected.txt
@@ -1319,24 +1319,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target1'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='target2'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='target3'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='target4'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/reflection/reflection-invalidation-after-display-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/reflection/reflection-invalidation-after-display-expected.txt index 992d0e0..f3cf7995 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/reflection/reflection-invalidation-after-display-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/reflection/reflection-invalidation-after-display-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='box' class='green box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/reflection/reflection-repaint-test-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/reflection/reflection-repaint-test-expected.txt index d4475f5..848910b9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/reflection/reflection-repaint-test-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/reflection/reflection-repaint-test-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt index c3830b6..969c158a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt
@@ -42,20 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV class='relative reflected'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='green'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute red'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt index 8f28c78..1e5b596 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt
@@ -42,16 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute green reflected'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute red'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt index e0a3e78..94bf0e8f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt
@@ -42,12 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='hideMe' class='absolute red'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-in-iframe-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/repaint-in-iframe-expected.txt index 6c7c5564..3e3be4d1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-in-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/repaint-in-iframe-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-on-style-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/repaint-on-style-change-expected.txt index 6429ae6..90ca137 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-on-style-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/repaint-on-style-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='box'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-overlay/layers-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/repaint-overlay/layers-expected.txt index 60d2383..ce3b206 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-overlay/layers-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/repaint-overlay/layers-expected.txt
@@ -129,16 +129,6 @@ ], "origin": [0, 0] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='child1'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='child2'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-overlay/layers-overlay.html b/third_party/WebKit/LayoutTests/paint/invalidation/repaint-overlay/layers-overlay.html index dee50c1..8178d72 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-overlay/layers-overlay.html +++ b/third_party/WebKit/LayoutTests/paint/invalidation/repaint-overlay/layers-overlay.html
@@ -184,16 +184,6 @@ ], "origin": [0, 0] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='child1'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='child2'", - "reason": "style change" - } ] } ; @@ -328,16 +318,6 @@ ], "origin": [0, 0] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='child1'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='child2'", - "reason": "style change" - } ] } ;
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-subrect-grid-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/repaint-subrect-grid-expected.txt index c53c812..061216db 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/repaint-subrect-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/repaint-subrect-grid-expected.txt
@@ -119,52 +119,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/requestAnimation-translation-leave-traces-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/requestAnimation-translation-leave-traces-expected.txt index 00589a9..79d5711 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/requestAnimation-translation-leave-traces-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/requestAnimation-translation-leave-traces-expected.txt
@@ -52,16 +52,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/resources/text-based-repaint.js b/third_party/WebKit/LayoutTests/paint/invalidation/resources/text-based-repaint.js index a7de637..a9966490 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/resources/text-based-repaint.js +++ b/third_party/WebKit/LayoutTests/paint/invalidation/resources/text-based-repaint.js
@@ -29,7 +29,7 @@ testRunner.dumpAsText(); testRunner.layoutAndPaintAsyncThen(function() { - internals.startTrackingRepaints(document); + internals.startTrackingRepaints(top.document); repaintTest(); if (!window.testIsAsync) finishRepaintTest(); @@ -50,27 +50,6 @@ document.documentElement.clientTop; } -function checkObjectPaintInvalidations(layersWithInvalidationsText) -{ - var layersWithInvalidations = JSON.parse(layersWithInvalidationsText); - var objectNameSet = new Set(); - if (layersWithInvalidations["objectPaintInvalidations"]) { - layersWithInvalidations["objectPaintInvalidations"].forEach(function(obj) { - objectNameSet.add(obj["object"]); - }); - } - - window.expectedObjectInvalidations.forEach(function(objectName) { - assert_true(objectNameSet.has(objectName), - "Expected object to be invalidated, but it was not: '" + objectName + "'\n" + layersWithInvalidationsText); - }); - - window.expectedObjectNonInvalidations.forEach(function(objectName) { - assert_false(objectNameSet.has(objectName), - "Expected object to *not* be invalidated, but it was: '" + objectName + "'\n" + layersWithInvalidationsText); - }); -} - function finishRepaintTest() { if (!window.testRunner || !window.internals) @@ -79,16 +58,14 @@ // Force a style recalc. forceStyleRecalc(); - var flags = window.internals.LAYER_TREE_INCLUDES_PAINT_INVALIDATIONS; + var flags = internals.LAYER_TREE_INCLUDES_PAINT_INVALIDATIONS; if (window.layerTreeAsTextAdditionalFlags) - flags |= window.layerTreeAsTextAdditionalFlags; + flags |= layerTreeAsTextAdditionalFlags; - var layersWithInvalidationsText = internals.layerTreeAsText(document, flags); + var layersWithInvalidationsText = internals.layerTreeAsText(top.document, flags); - checkObjectPaintInvalidations(layersWithInvalidationsText); - - internals.stopTrackingRepaints(document); + internals.stopTrackingRepaints(top.document); // Play nice with JS tests which may want to print out assert results. if (window.isJsTest)
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/composited-add-resizer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/composited-add-resizer-expected.txt index 161b820..a0b9809 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/composited-add-resizer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/composited-add-resizer-expected.txt
@@ -50,12 +50,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt index ed9c628..d7a9f930 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt
@@ -2,20 +2,48 @@ "layers": [ { "name": "LayoutView #document", - "position": [2, 2], + "bounds": [800, 600], + "drawsContent": false, + "backgroundColor": "#FFFFFF" + }, + { + "name": "Scrolling Layer", + "bounds": [800, 600], + "drawsContent": false + }, + { + "name": "Scrolling Contents Layer", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "Ancestor Clipping Layer", + "position": [8, 8], + "bounds": [784, 159], + "drawsContent": false + }, + { + "name": "LayoutIFrame IFRAME", + "position": [8, 8], + "bounds": [304, 154] + }, + { + "name": "LayoutView #document", + "position": [10, 10], "bounds": [300, 150], "drawsContent": false, "backgroundColor": "#EEEEEE" }, { "name": "Scrolling Layer", - "position": [2, 2], + "position": [10, 10], "bounds": [300, 150], "drawsContent": false }, { "name": "Scrolling Contents Layer", - "position": [2, 2], + "position": [10, 10], "bounds": [300, 516], "backgroundColor": "#EEEEEE", "transform": 1 @@ -27,18 +55,18 @@ }, { "name": "Overflow Controls Host Layer", - "position": [2, 2], + "position": [10, 10], "bounds": [300, 150], "drawsContent": false }, { "name": "Horizontal Scrollbar Layer", - "position": [2, 152], + "position": [10, 160], "bounds": [300, 0] }, { "name": "Vertical Scrollbar Layer", - "position": [302, 2], + "position": [310, 10], "bounds": [0, 150] } ], @@ -60,7 +88,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [10, 10, 0, 1] + [18, 18, 0, 1] ] } ]
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/destroy-composited-scrollbar-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/destroy-composited-scrollbar-expected.txt index a3a1169e..1703c2f7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/destroy-composited-scrollbar-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/destroy-composited-scrollbar-expected.txt
@@ -36,16 +36,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "compositing update" - }, - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "compositing update" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/destroy-overlay-scrollbar-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/destroy-overlay-scrollbar-expected.txt index cb87def3..631ee54 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/destroy-overlay-scrollbar-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/destroy-overlay-scrollbar-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/destroy-scrollbar-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/destroy-scrollbar-expected.txt index 6cae1ce..eedb6eb 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/destroy-scrollbar-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/destroy-scrollbar-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-after-scroll-expected.txt index 97361d6..468e67f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-after-scroll-expected.txt
@@ -42,12 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='t' class='green absolute'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt index 6ed35a77..3672ff0 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt
@@ -37,20 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='container' class='relative'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt index 4ea15be..2f8c7a3 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt
@@ -42,12 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='toMove'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt index 4ea15be..2f8c7a3 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt
@@ -42,12 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='toMove'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt index 05ebe36..60a8308 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt
@@ -42,12 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='toMove'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-of-transformed-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-of-transformed-scrolled-expected.txt index 9998e63..f1cd046 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-of-transformed-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-child-of-transformed-scrolled-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='fixed'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-descendant-of-transformed-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-descendant-of-transformed-scrolled-expected.txt index 9998e63..f1cd046 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-descendant-of-transformed-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-descendant-of-transformed-scrolled-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='fixed'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt index 4ea15be..2f8c7a3 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt
@@ -42,12 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='toMove'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt index ed7cb8e..af189f1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt
@@ -45,12 +45,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='fixed'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt index 8b6e3fc..461158fd 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt
@@ -45,12 +45,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='fixed'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/flipped-blocks-writing-mode-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/flipped-blocks-writing-mode-scroll-expected.txt index 1ad4000..fd2e50a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/flipped-blocks-writing-mode-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/flipped-blocks-writing-mode-scroll-expected.txt
@@ -59,12 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/iframe-scroll-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/iframe-scroll-repaint-expected.txt index f5ed717..b4f6bd0 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/iframe-scroll-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/iframe-scroll-repaint-expected.txt
@@ -1,4 +1,29 @@ { - + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "drawsContent": false, + "backgroundColor": "#FFFFFF" + }, + { + "name": "Scrolling Layer", + "bounds": [800, 600], + "drawsContent": false + }, + { + "name": "Scrolling Contents Layer", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF", + "paintInvalidations": [ + { + "object": "LayoutBlockFlow HTML", + "rect": [10, 10, 300, 150], + "reason": "paint property change" + } + ] + } + ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/iframe-scrollbar-hover-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/iframe-scrollbar-hover-expected.txt index 24b43bb3..d38139e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/iframe-scrollbar-hover-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/iframe-scrollbar-hover-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt index 6277a77..0054c82 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt
@@ -72,12 +72,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt index 04fbd03..e48e233 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt
@@ -37,12 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='div'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/outline-change-scrollable-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/outline-change-scrollable-expected.txt index ec336ea..a4f8f81 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/outline-change-scrollable-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/outline-change-scrollable-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-auto-in-overflow-auto-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-auto-in-overflow-auto-scrolled-expected.txt index 13b1cfa..a2e8844 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-auto-in-overflow-auto-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-auto-in-overflow-auto-scrolled-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-hidden-in-overflow-hidden-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-hidden-in-overflow-hidden-scrolled-expected.txt index 662ba22..5e30d59 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-hidden-in-overflow-hidden-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-hidden-in-overflow-hidden-scrolled-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='red'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='ucp' class='green'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt index c26dfd11..4c9bed9f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt
@@ -88,12 +88,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='block'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt index 4e9640668..318d5d2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt
@@ -88,12 +88,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='block'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-composited-non-stacking-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-composited-non-stacking-child-expected.txt index 5d81d66..3b7ce4a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-composited-non-stacking-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-composited-non-stacking-child-expected.txt
@@ -69,12 +69,6 @@ [200, 10, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-in-overflow-scroll-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-in-overflow-scroll-scrolled-expected.txt index 13b1cfa..a2e8844 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-in-overflow-scroll-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-in-overflow-scroll-scrolled-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt index fb0f96f58..f58886a5 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
@@ -98,16 +98,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutBlockFlow DIV id='scroller'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/repaint-composited-child-in-scrolled-container-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/repaint-composited-child-in-scrolled-container-expected.txt index 7cccc79e..04c2902 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/repaint-composited-child-in-scrolled-container-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/repaint-composited-child-in-scrolled-container-expected.txt
@@ -56,16 +56,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow DIV id='inner'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/repaint-during-scroll-with-zoom-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/repaint-during-scroll-with-zoom-expected.txt index 1599483..ee7a2b9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/repaint-during-scroll-with-zoom-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/repaint-during-scroll-with-zoom-expected.txt
@@ -39,20 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "full" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/resize-scrollable-div-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/resize-scrollable-div-expected.txt index 265a10d..3a3c5087 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/resize-scrollable-div-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/resize-scrollable-div-expected.txt
@@ -44,28 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='div'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='div'", - "reason": "geometry" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow DIV id='div'", - "reason": "geometry" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/resize-scrollable-iframe-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/resize-scrollable-iframe-expected.txt index 62696e9..84a2859 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/resize-scrollable-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/resize-scrollable-iframe-expected.txt
@@ -44,40 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutIFrame IFRAME id='iframe'", - "reason": "geometry" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt index a26cc7d..b2df0e1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt
@@ -42,24 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='scrollpanel'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='container'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='ul'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt index 66187c02..66b25cb0 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt
@@ -37,16 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='fixed clipped'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt index 06fd400..d4f191d2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
@@ -42,16 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute green'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute red'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-in-clipped-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-in-clipped-layer-expected.txt index d39a9c0..2c9e09c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-in-clipped-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-in-clipped-layer-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV class='relative green'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute red'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt index bbaa509..815f9e3 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt
@@ -42,16 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute green'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute red'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-in-transformed-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-in-transformed-layer-expected.txt index 009a0e4f..f6e31c4c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-in-transformed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scroll-in-transformed-layer-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='absolute clipped rotated'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute green'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='absolute red'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint-expected.txt index d218372..896c541a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint-expected.txt
@@ -14,12 +14,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-invalidation-on-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-invalidation-on-resize-expected.txt index 6f3e8c46..07256e3 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-invalidation-on-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-invalidation-on-resize-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='scrollable'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='scrollable'", - "reason": "geometry" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-invalidation-on-resize-with-border-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-invalidation-on-resize-with-border-expected.txt index e52e315..b5ea2b4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-invalidation-on-resize-with-border-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-invalidation-on-resize-with-border-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='scrollable'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='scrollable'", - "reason": "geometry" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-parts-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-parts-expected.txt index 52fc80d1..181b342 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-parts-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrollbar-parts-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrolled-iframe-scrollbar-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrolled-iframe-scrollbar-change-expected.txt index 37d307d..c2a118d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrolled-iframe-scrollbar-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/scroll/scrolled-iframe-scrollbar-change-expected.txt
@@ -1,28 +1,43 @@ { - "objectPaintInvalidations": [ + "layers": [ { - "object": "VerticalScrollbar", - "reason": "scroll control" + "name": "LayoutView #document", + "bounds": [800, 600], + "drawsContent": false, + "backgroundColor": "#FFFFFF" }, { - "object": "LayoutView #document", - "reason": "style change" + "name": "Scrolling Layer", + "bounds": [800, 600], + "drawsContent": false }, { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY class='noScroll'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='container'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='overlay'", - "reason": "appeared" + "name": "Scrolling Contents Layer", + "bounds": [804, 604], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF", + "paintInvalidations": [ + { + "object": "LayoutBlockFlow (positioned) DIV id='overlay'", + "rect": [2, 2, 800, 600], + "reason": "chunk appeared" + }, + { + "object": "LayoutBlockFlow HTML", + "rect": [10, 2, 784, 592], + "reason": "chunk appeared" + }, + { + "object": "LayoutBlockFlow HTML", + "rect": [10, 2, 769, 592], + "reason": "chunk disappeared" + }, + { + "object": "LayoutView #document", + "rect": [787, 2, 15, 600], + "reason": "chunk disappeared" + } + ] } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt index 69de4a1..fe48b0a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'xx'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'y'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.txt index 6acdad7..1021dc8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-change-in-iframe-with-relative-parent-expected.txt
@@ -59,80 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Foo'", - "reason": "selection" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Bar'", - "reason": "selection" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Bazz'", - "reason": "selection" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - }, - { - "object": "LayoutBR BR", - "reason": "selection" - }, - { - "object": "InlineTextBox '\n'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-clear-after-move-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-clear-after-move-expected.txt index 1544eaa9..7c59e0e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-clear-after-move-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-clear-after-move-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutImage IMG", - "reason": "selection" - }, - { - "object": "LayoutText #text", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-within-composited-scroller-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-within-composited-scroller-expected.txt index 05ef31f6..8bb3ab9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-within-composited-scroller-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
@@ -79,16 +79,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'test'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/stacking-context-lost-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/stacking-context-lost-expected.txt index d8c9a12..cdb10e9b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/stacking-context-lost-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/stacking-context-lost-expected.txt
@@ -37,12 +37,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='outer'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/absolute-sized-document-no-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/absolute-sized-document-no-scrollbars-expected.txt index 030ae482..6bf08a9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/absolute-sized-document-no-scrollbars-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/absolute-sized-document-no-scrollbars-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/add-background-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/add-background-property-on-root-expected.txt index d1be5f9..a15d4d8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/add-background-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/add-background-property-on-root-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "background" - }, - { - "object": "RootInlineBox", - "reason": "background" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/add-border-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/add-border-property-on-root-expected.txt index 1d1b968..0657aca 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/add-border-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/add-border-property-on-root-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRoot (positioned) svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/add-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/add-outline-property-on-root-expected.txt index eabfd48..26683f5 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/add-outline-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/add-outline-property-on-root-expected.txt
@@ -24,20 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/animate-fill-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/animate-fill-expected.txt index ea2e28c..06973068 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/animate-fill-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/animate-fill-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/animate-target-id-changed-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/animate-target-id-changed-expected.txt index 2ad71d5..78c3f3f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/animate-target-id-changed-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/animate-target-id-changed-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='newId'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/append-text-node-to-tspan-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/append-text-node-to-tspan-expected.txt index b423f79..9502153 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/append-text-node-to-tspan-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/append-text-node-to-tspan-expected.txt
@@ -74,88 +74,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutSVGTSpan tspan id='modify'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PA'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'SS'", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/change-background-color-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/change-background-color-expected.txt index 02f6284..7b721498b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/change-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/change-background-color-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRoot svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/circle-move-invalidation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/circle-move-invalidation-expected.txt index a165963..51f1e38 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/circle-move-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/circle-move-invalidation-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGEllipse circle id='c1'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-child-changes-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-child-changes-expected.txt index faa7119f..16cdf10 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-child-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-child-changes-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-href-changes-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-href-changes-expected.txt index a51bb5c..73ae832b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-href-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-href-changes-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-id-changes-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-id-changes-expected.txt index 5447e49..73ae832b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-id-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-id-changes-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-units-changes-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-units-changes-expected.txt index faa7119f..16cdf10 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-units-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/clip-path-units-changes-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/color-fill-currentColor-and-css-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/color-fill-currentColor-and-css-expected.txt index 17a0da5..3b91d3b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/color-fill-currentColor-and-css-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/color-fill-currentColor-and-css-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGEllipse circle", - "reason": "style change" - }, - { - "object": "LayoutSVGEllipse circle", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/container-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/container-repaint-expected.txt index 17160051..0d804c4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/container-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/container-repaint-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGViewportContainer svg id='mover'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/deep-dynamic-updates-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/deep-dynamic-updates-expected.txt index e03cd4a..1bf397b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/deep-dynamic-updates-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/deep-dynamic-updates-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt index 52c63f6e..1253aa1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt
@@ -1,44 +1,53 @@ { - "objectPaintInvalidations": [ + "layers": [ { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" + "name": "LayoutView #document", + "bounds": [800, 600], + "drawsContent": false, + "backgroundColor": "#FFFFFF" }, { - "object": "RootInlineBox", - "reason": "geometry" + "name": "Scrolling Layer", + "bounds": [800, 600], + "drawsContent": false }, { - "object": "LayoutEmbeddedObject OBJECT", - "reason": "style change" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutEmbeddedObject OBJECT", - "reason": "geometry" + "name": "Scrolling Contents Layer", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF", + "paintInvalidations": [ + { + "object": "LayoutBlockFlow HTML", + "rect": [1, 1, 402, 202], + "reason": "chunk appeared" + }, + { + "object": "LayoutView #document", + "rect": [1, 1, 300, 150], + "reason": "chunk disappeared" + }, + { + "object": "LayoutSVGRect rect", + "rect": [212, 12, 180, 180], + "reason": "paint property change" + }, + { + "object": "LayoutSVGRoot svg", + "rect": [12, 12, 180, 180], + "reason": "paint property change" + }, + { + "object": "LayoutSVGRoot svg", + "rect": [11, 11, 180, 125], + "reason": "paint property change" + }, + { + "object": "LayoutSVGRect rect", + "rect": [211, 11, 75, 125], + "reason": "paint property change" + } + ] } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt index 52c63f6e..1253aa1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/deep-nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt
@@ -1,44 +1,53 @@ { - "objectPaintInvalidations": [ + "layers": [ { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" + "name": "LayoutView #document", + "bounds": [800, 600], + "drawsContent": false, + "backgroundColor": "#FFFFFF" }, { - "object": "RootInlineBox", - "reason": "geometry" + "name": "Scrolling Layer", + "bounds": [800, 600], + "drawsContent": false }, { - "object": "LayoutEmbeddedObject OBJECT", - "reason": "style change" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutEmbeddedObject OBJECT", - "reason": "geometry" + "name": "Scrolling Contents Layer", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF", + "paintInvalidations": [ + { + "object": "LayoutBlockFlow HTML", + "rect": [1, 1, 402, 202], + "reason": "chunk appeared" + }, + { + "object": "LayoutView #document", + "rect": [1, 1, 300, 150], + "reason": "chunk disappeared" + }, + { + "object": "LayoutSVGRect rect", + "rect": [212, 12, 180, 180], + "reason": "paint property change" + }, + { + "object": "LayoutSVGRoot svg", + "rect": [12, 12, 180, 180], + "reason": "paint property change" + }, + { + "object": "LayoutSVGRoot svg", + "rect": [11, 11, 180, 125], + "reason": "paint property change" + }, + { + "object": "LayoutSVGRect rect", + "rect": [211, 11, 75, 125], + "reason": "paint property change" + } + ] } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers-expected.txt index 291439f3..77d20bde 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/embedded-svg-size-changes-no-layout-triggers-expected.txt
@@ -44,20 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutEmbeddedObject OBJECT", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-change-target-id-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-change-target-id-expected.txt index 3633f68..5fbd8980 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-change-target-id-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-change-target-id-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-multiple-targets-id-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-multiple-targets-id-change-expected.txt index 7c1bdd7d..45b8f04e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-multiple-targets-id-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-multiple-targets-id-change-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-reference-invalidation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-reference-invalidation-expected.txt index 3633f68..5fbd8980 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-reference-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-reference-invalidation-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-remove-target-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-remove-target-expected.txt index 3633f68..5fbd8980 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-remove-target-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-remove-target-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-add-to-document-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-add-to-document-expected.txt index 3633f68..5fbd8980 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-add-to-document-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-add-to-document-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-attribute-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-attribute-change-expected.txt index 3633f68..5fbd8980 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-attribute-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-attribute-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-2-expected.txt index 3633f68..5fbd8980 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-2-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-expected.txt index 3633f68..5fbd8980 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-attribute-change-with-use-indirection-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-changes-id-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-changes-id-expected.txt index 3633f68..5fbd8980 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-changes-id-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-changes-id-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-id-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-id-change-expected.txt index 3633f68..5fbd8980 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-id-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-id-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-inline-style-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-inline-style-change-expected.txt index 5d012a3..52b59f9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-inline-style-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-inline-style-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-property-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-property-change-expected.txt index 3633f68..5fbd8980 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-property-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-property-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-reappend-to-document-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-reappend-to-document-expected.txt index f2a54b2..5b67604 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-reappend-to-document-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-reappend-to-document-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-remove-from-document-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-remove-from-document-expected.txt index 3633f68..5fbd8980 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-remove-from-document-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-remove-from-document-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-style-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-style-change-expected.txt index 5d012a3..52b59f9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-style-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/feImage-target-style-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/fecomponenttransfer-in1-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/fecomponenttransfer-in1-change-expected.txt index 16e4467..8043fc2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/fecomponenttransfer-in1-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/fecomponenttransfer-in1-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/fill-opacity-update-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/fill-opacity-update-expected.txt index 6f606cf..f3fe0d1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/fill-opacity-update-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/fill-opacity-update-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGEllipse circle", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/filter-child-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/filter-child-repaint-expected.txt index e7eda97..8e521d1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/filter-child-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/filter-child-repaint-expected.txt
@@ -24,20 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='poke'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/filter-refresh-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/filter-refresh-expected.txt index 9f740a1..ff8aba7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/filter-refresh-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/filter-refresh-expected.txt
@@ -74,184 +74,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer use", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer use", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer use", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer use", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer use", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer use", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer use", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer use", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer use", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer use", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer use", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer use", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='separate1'", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect id='filtered'", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect id='separate2'", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/filter-width-update-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/filter-width-update-expected.txt index 43f11c7..217bcbd 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/filter-width-update-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/filter-width-update-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/foreign-object-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/foreign-object-repaint-expected.txt index b390dd3..fe7ec7b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/foreign-object-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/foreign-object-repaint-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='div1'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow div id='div2'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/gradient-add-stops-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/gradient-add-stops-expected.txt index 2f2a8d68..89590e8d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/gradient-add-stops-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/gradient-add-stops-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/gradient-stop-style-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/gradient-stop-style-change-expected.txt index 2f2a8d68..89590e8d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/gradient-stop-style-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/gradient-stop-style-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/hairline-stroke-squarecap-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/hairline-stroke-squarecap-expected.txt index 099fe65..80b5997 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/hairline-stroke-squarecap-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/hairline-stroke-squarecap-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath path id='path'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/image-href-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/image-href-change-expected.txt index 2ce2479..26af602 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/image-href-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/image-href-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGImage image id='image'", - "reason": "image" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/image-with-clip-path-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/image-with-clip-path-expected.txt index 131e182..12b69b1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/image-with-clip-path-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/image-with-clip-path-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='g'", - "reason": "full" - }, - { - "object": "LayoutSVGImage image", - "reason": "full" - }, - { - "object": "LayoutSVGContainer g id='g'", - "reason": "full" - }, - { - "object": "LayoutSVGImage image", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/inner-svg-change-viewBox-contract-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/inner-svg-change-viewBox-contract-expected.txt index 8e2a7acb..113af8f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/inner-svg-change-viewBox-contract-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/inner-svg-change-viewBox-contract-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGViewportContainer svg id='inner'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/inner-svg-change-viewBox-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/inner-svg-change-viewBox-expected.txt index b8d2ff1b..9f76be6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/inner-svg-change-viewBox-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/inner-svg-change-viewBox-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGViewportContainer svg id='s'", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/invalidate-on-child-layout-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/invalidate-on-child-layout-expected.txt index 204f86a3..e809cbf 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/invalidate-on-child-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/invalidate-on-child-layout-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGEllipse circle id='circle'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-marker-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-marker-and-object-creation-expected.txt index fa7601d..857d9a3 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-marker-and-object-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-marker-and-object-creation-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-marker-creation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-marker-creation-expected.txt index 73729997..3c46303 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-marker-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-marker-creation-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath path", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-mask-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-mask-and-object-creation-expected.txt index 208c8a7e..8c870f1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-mask-and-object-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-mask-and-object-creation-expected.txt
@@ -39,20 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-mask-creation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-mask-creation-expected.txt index 411372b7..524a867 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-mask-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-late-mask-creation-expected.txt
@@ -34,12 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-repaint-rect-on-path-with-stroke-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-repaint-rect-on-path-with-stroke-expected.txt index ee5e8c2..6f17cfae 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-repaint-rect-on-path-with-stroke-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-repaint-rect-on-path-with-stroke-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath path id='path'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-bounce-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-bounce-expected.txt index 3dfc0745..22027fcd 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-bounce-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-bounce-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGEllipse circle id='bounce'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-container-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-container-expected.txt index ac71ebce..b0d1807 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-container-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-container-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='group'", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-gradient-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-gradient-expected.txt index 99e11b6..24341ca 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-gradient-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-gradient-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-image-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-image-expected.txt index e245f02..446a626 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-image-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-image-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGImage image id='image'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-pattern-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-pattern-child-expected.txt index 99e11b6..24341ca 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-pattern-child-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-pattern-child-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-pattern-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-pattern-expected.txt index 99e11b6..24341ca 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-pattern-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-pattern-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-polygon-changes-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-polygon-changes-expected.txt index 16c1547..3601513 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-polygon-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-polygon-changes-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath polygon id='polygon'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-polygon-removal-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-polygon-removal-expected.txt index 949d895..e712ed3 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-polygon-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-polygon-removal-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath polygon id='polygon'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-stop-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-stop-expected.txt index 99e11b6..24341ca 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-stop-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-stop-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-stop-linked-gradient-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-stop-linked-gradient-expected.txt index ea1a212..567954bd 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-stop-linked-gradient-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-stop-linked-gradient-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-style-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-style-expected.txt index bc3840a..ba71685 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-style-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-style-expected.txt
@@ -39,28 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-transform-addition-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-transform-addition-expected.txt index 7335daa..9e2ceb4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-transform-addition-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-transform-addition-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath polygon id='polygon'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-transform-changes-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-transform-changes-expected.txt index 7335daa..9e2ceb4 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-transform-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/js-update-transform-changes-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath polygon id='polygon'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-child-changes-css-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-child-changes-css-expected.txt index ccea323..ba638704 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-child-changes-css-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-child-changes-css-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath path", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-child-changes-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-child-changes-expected.txt index ccea323..ba638704 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-child-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-child-changes-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath path", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-strokeWidth-changes-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-strokeWidth-changes-expected.txt index ab0df6c6..2d7936d6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-strokeWidth-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-strokeWidth-changes-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGPath path id='path'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-viewBox-changes-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-viewBox-changes-expected.txt index 77da6986..6f29cad 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-viewBox-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/marker-viewBox-changes-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGPath path id='go'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/mask-child-changes-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/mask-child-changes-expected.txt index 53d9b1c..667a42a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/mask-child-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/mask-child-changes-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/mask-clip-target-transform-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/mask-clip-target-transform-expected.txt index 1e80439b..ca18de1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/mask-clip-target-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/mask-clip-target-transform-expected.txt
@@ -49,24 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect id='masker'", - "reason": "full" - }, - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect id='clipper'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/mask-invalidation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/mask-invalidation-expected.txt index 5c613ca..30a8bab7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/mask-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/mask-invalidation-expected.txt
@@ -39,16 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='root'", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/modify-inserted-listitem-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/modify-inserted-listitem-expected.txt index bb14bfe5..2ccb818 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/modify-inserted-listitem-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/modify-inserted-listitem-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='move'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt index e4ef07f..8df523d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/modify-text-node-in-tspan-expected.txt
@@ -69,80 +69,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGTSpan tspan id='modify'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/modify-transferred-listitem-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/modify-transferred-listitem-expected.txt index c0c0178..04c85d1f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/modify-transferred-listitem-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/modify-transferred-listitem-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath polygon id='target'", - "reason": "full" - }, - { - "object": "LayoutSVGPath polygon id='source'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt index 89a50bd7..8953320 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt
@@ -49,48 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutEmbeddedObject OBJECT", - "reason": "style change" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutEmbeddedObject OBJECT", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt index 89a50bd7..8953320 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt
@@ -49,48 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutEmbeddedObject OBJECT", - "reason": "style change" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutEmbeddedObject OBJECT", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size-expected.txt index eed07dc..05c6287 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/object-sizing-no-width-height-change-content-box-size-expected.txt
@@ -39,32 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutEmbeddedObject object", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect", - "reason": "geometry" - }, - { - "object": "LayoutSVGEllipse circle", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/outline-offset-shape-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/outline-offset-shape-expected.txt index 5eaef95..5ecd83d9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/outline-offset-shape-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/outline-offset-shape-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/overflow-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/overflow-repaint-expected.txt index 100de931..c0d48c8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/overflow-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/overflow-repaint-expected.txt
@@ -24,20 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg id='svg'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/paintorder-filtered-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/paintorder-filtered-expected.txt index fec53330..4150423f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/paintorder-filtered-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/paintorder-filtered-expected.txt
@@ -39,52 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer use id='t1'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGViewportContainer svg id='poly'", - "reason": "style change" - }, - { - "object": "LayoutSVGPath polygon", - "reason": "style change" - }, - { - "object": "LayoutSVGContainer use id='t2'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGViewportContainer svg id='poly'", - "reason": "style change" - }, - { - "object": "LayoutSVGPath polygon", - "reason": "style change" - }, - { - "object": "LayoutSVGViewportContainer svg", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGPath polygon id='t3'", - "reason": "style change" - }, - { - "object": "LayoutSVGContainer use", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGViewportContainer svg id='poly2'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGPath polygon", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/path-pathlength-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/path-pathlength-change-expected.txt index 6bd76d5e..f05964e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/path-pathlength-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/path-pathlength-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath path", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/pending-resource-after-removal-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/pending-resource-after-removal-expected.txt index 7b115d1..f766b3ee 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/pending-resource-after-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/pending-resource-after-removal-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='shape'", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect id='shape'", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/rect-modify-rx-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/rect-modify-rx-expected.txt index b940e38..f31fce2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/rect-modify-rx-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/rect-modify-rx-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='r'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/relative-sized-document-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/relative-sized-document-scrollbars-expected.txt index f8d32b2..9cd46bfd 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/relative-sized-document-scrollbars-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/relative-sized-document-scrollbars-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-background-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-background-property-on-root-expected.txt index 6bbc541..0220c96 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-background-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-background-property-on-root-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "background" - }, - { - "object": "RootInlineBox", - "reason": "background" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-border-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-border-property-on-root-expected.txt index 65082cc..385388d1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-border-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-border-property-on-root-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRoot (positioned) svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-outline-property-on-root-expected.txt index 3bf8527..9702da7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-outline-property-on-root-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-outline-property-on-root-expected.txt
@@ -24,20 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt index 431a80e0..44b68a43 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-text-node-from-tspan-expected.txt
@@ -59,68 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGTSpan tspan id='modify'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-tspan-from-text-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-tspan-from-text-expected.txt index 2f1a464b7..67c635a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-tspan-from-text-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/remove-tspan-from-text-expected.txt
@@ -59,56 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text id='text'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt index 82c5425..5bbba96 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt
@@ -37,12 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-moving-svg-and-div-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-moving-svg-and-div-expected.txt index 7abd98a..6ba0ad1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-moving-svg-and-div-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-moving-svg-and-div-expected.txt
@@ -379,80 +379,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow div class='innerBox'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-on-constant-size-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-on-constant-size-change-expected.txt index 1d55737..4c22ffed 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-on-constant-size-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-on-constant-size-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGImage image", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-on-image-bounds-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-on-image-bounds-change-expected.txt index cb0717f..9c7d761 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-on-image-bounds-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-on-image-bounds-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGImage image id='target'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-paintorder-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-paintorder-expected.txt index 2c6b454..980835d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-paintorder-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-paintorder-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer use id='t1'", - "reason": "style change" - }, - { - "object": "LayoutSVGViewportContainer svg id='poly'", - "reason": "style change" - }, - { - "object": "LayoutSVGPath polygon", - "reason": "style change" - }, - { - "object": "LayoutSVGContainer use id='t2'", - "reason": "style change" - }, - { - "object": "LayoutSVGViewportContainer svg id='poly'", - "reason": "style change" - }, - { - "object": "LayoutSVGPath polygon", - "reason": "style change" - }, - { - "object": "LayoutSVGPath polygon id='t3'", - "reason": "style change" - }, - { - "object": "LayoutSVGPath polygon", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-stroke-width-changes-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-stroke-width-changes-expected.txt index 51118c1..54b75c5 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-stroke-width-changes-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/repaint-stroke-width-changes-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/resize-svg-invalidate-children-2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/resize-svg-invalidate-children-2-expected.txt index da5f842..e27cc31 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/resize-svg-invalidate-children-2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/resize-svg-invalidate-children-2-expected.txt
@@ -45,20 +45,6 @@ [8, 8, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/resize-svg-invalidate-children-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/resize-svg-invalidate-children-expected.txt index 5d2938d..f3f53a033 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/resize-svg-invalidate-children-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/resize-svg-invalidate-children-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/resize-svg-invalidate-children-fixed-size-relative-child-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/resize-svg-invalidate-children-fixed-size-relative-child-expected.txt deleted file mode 100644 index 8b13789..0000000 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/resize-svg-invalidate-children-fixed-size-relative-child-expected.txt +++ /dev/null
@@ -1 +0,0 @@ -
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/resize-svg-invalidate-children-fixed-size-relative-child.html b/third_party/WebKit/LayoutTests/paint/invalidation/svg/resize-svg-invalidate-children-fixed-size-relative-child.html deleted file mode 100644 index 0cefc399..0000000 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/resize-svg-invalidate-children-fixed-size-relative-child.html +++ /dev/null
@@ -1,21 +0,0 @@ -<!DOCTYPE html> -<script src="../../../resources/testharness.js"></script> -<script src="../../../resources/testharnessreport.js"></script> -<script src="../resources/text-based-repaint.js"></script> -<script> -// Since the SVG root element has fixed size, we should not need to -// invalidate the rect within it. -window.expectedObjectNonInvalidations.push("LayoutSVGRect rect"); - -onload = runRepaintTest; -window.outputRepaintRects = false; -function repaintTest() { - target.style.width = '200px'; - target.style.height= '200px'; -}; -</script> -<div id="target" style="width: 100px; height: 100px"> - <svg viewBox="0 0 200 200" width="100" height="100"> - <rect width="100%" height="100%"/> - </svg> -</div>
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/resource-client-removal-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/resource-client-removal-expected.txt index d60f5d1..3cbb9aa 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/resource-client-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/resource-client-removal-expected.txt
@@ -94,108 +94,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "full" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "full" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "full" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "full" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "full" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGContainer g id='inneruse'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='hp'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/resource-invalidate-on-target-update-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/resource-invalidate-on-target-update-expected.txt index 20e5e0d..4d456d6c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/resource-invalidate-on-target-update-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/resource-invalidate-on-target-update-expected.txt
@@ -54,24 +54,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='box'", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect id='rect1'", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect id='rect2'", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect id='rect3'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/rounded-rect-height-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/rounded-rect-height-change-expected.txt index d51dc712..5069c18 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/rounded-rect-height-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/rounded-rect-height-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/scale-change-huge-geometry-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/scale-change-huge-geometry-expected.txt index 17bca7a..8089a19 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/scale-change-huge-geometry-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/scale-change-huge-geometry-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg id='svg'", - "reason": "full" - }, - { - "object": "LayoutSVGContainer use", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/shape-transform-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/shape-transform-change-expected.txt index b3fd00c..8aaee81a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/shape-transform-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/shape-transform-change-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/shape-with-nested-outline-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/shape-with-nested-outline-expected.txt index baf6e529..068634e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/shape-with-nested-outline-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/shape-with-nested-outline-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "outline" - }, - { - "object": "LayoutSVGRect rect id='r'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/stroke-opacity-update-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/stroke-opacity-update-expected.txt index c5b978e..8641eabb 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/stroke-opacity-update-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/stroke-opacity-update-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGEllipse circle", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/svg-absolute-children-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/svg-absolute-children-expected.txt index d7addf3..20ffc9f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/svg-absolute-children-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/svg-absolute-children-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/svg-image-par-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/svg-image-par-resize-expected.txt index d6116ce..332d249e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/svg-image-par-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/svg-image-par-resize-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGImage image", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/svgsvgelement-repaint-children-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/svgsvgelement-repaint-children-expected.txt index 1cf3ebc3..bca9535e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/svgsvgelement-repaint-children-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/svgsvgelement-repaint-children-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGPath path id='path'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/text-pattern-update-2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/text-pattern-update-2-expected.txt index 87055d22..1647bf07 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/text-pattern-update-2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/text-pattern-update-2-expected.txt
@@ -34,48 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "SVG resource change" - }, - { - "object": "RootInlineBox", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "SVG resource change" - }, - { - "object": "InlineTextBox 'X'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "SVG resource change" - }, - { - "object": "InlineFlowBox", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "SVG resource change" - }, - { - "object": "InlineTextBox 'Y'", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "SVG resource change" - }, - { - "object": "InlineTextBox 'Z'", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/text-pattern-update-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/text-pattern-update-expected.txt index e70b611..55354ee 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/text-pattern-update-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/text-pattern-update-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "SVG resource change" - }, - { - "object": "RootInlineBox", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "SVG resource change" - }, - { - "object": "InlineTextBox 'X'", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/transform-changed-state-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/transform-changed-state-expected.txt index eb0b2b5..7f46838 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/transform-changed-state-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/transform-changed-state-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/transform-text-element-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/transform-text-element-expected.txt index c07a4a7..8fc72bd 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/transform-text-element-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/transform-text-element-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/tspan-pattern-update-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/tspan-pattern-update-expected.txt index 0d90e78..c84442f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/tspan-pattern-update-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/tspan-pattern-update-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGTSpan tspan", - "reason": "SVG resource change" - }, - { - "object": "InlineFlowBox", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "SVG resource change" - }, - { - "object": "InlineTextBox 'Y'", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-detach-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-detach-expected.txt index ea61ff8..e4ad490c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-detach-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-detach-expected.txt
@@ -34,72 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='use'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='use_text'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'use'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use", - "reason": "appeared" - }, - { - "object": "LayoutSVGEllipse circle id='use_circle'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='use'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='use_text'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'use'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use", - "reason": "appeared" - }, - { - "object": "LayoutSVGEllipse circle id='use_circle'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-disappears-after-style-update-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-disappears-after-style-update-expected.txt index 816193b..94fb604 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-disappears-after-style-update-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-disappears-after-style-update-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use", - "reason": "SVG resource change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-inherit-style-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-inherit-style-expected.txt index 05bebb1..e1214f2a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-inherit-style-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-inherit-style-expected.txt
@@ -24,20 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='g'", - "reason": "style change" - }, - { - "object": "LayoutSVGContainer use", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-setAttribute-crash-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-setAttribute-crash-expected.txt index 5ea416b6..b6b1814 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-setAttribute-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/svg/use-setAttribute-crash-expected.txt
@@ -29,32 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow body", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg:svg id='svg'", - "reason": "full" - }, - { - "object": "LayoutSVGContainer svg:use id='use'", - "reason": "full" - }, - { - "object": "LayoutSVGViewportContainer svg id='symbol'", - "reason": "appeared" - }, - { - "object": "LayoutSVGEllipse svg:circle id='circle'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/add-table-overpaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/add-table-overpaint-expected.txt index c871e39..0cfc87d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/add-table-overpaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/add-table-overpaint-expected.txt
@@ -24,28 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - }, - { - "object": "LayoutTable TABLE", - "reason": "appeared" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "appeared" - }, - { - "object": "LayoutTableRow TR", - "reason": "appeared" - }, - { - "object": "LayoutTableCell TD", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/animated-row-background-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/animated-row-background-expected.txt index 65c1fd1..99018a1 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/animated-row-background-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/animated-row-background-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='row'", - "reason": "full" - }, - { - "object": "LayoutImage IMG id='image'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/border-collapse-change-collapse-to-separate-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/border-collapse-change-collapse-to-separate-expected.txt index 56cebae..594db13 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/border-collapse-change-collapse-to-separate-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/border-collapse-change-collapse-to-separate-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='table'", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/border-collapse-change-separate-to-collapse-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/border-collapse-change-separate-to-collapse-expected.txt index 20877e0..712062b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/border-collapse-change-separate-to-collapse-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/border-collapse-change-separate-to-collapse-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='table'", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-69296-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-69296-expected.txt index e299ab4..7517771 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-69296-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-69296-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='row1'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR id='row1'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-cell-append-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-cell-append-expected.txt index d54f9a4..85d551f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-cell-append-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-cell-append-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='row'", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-cell-border-color-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-cell-border-color-expected.txt index 78219a4..dbf47bf 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-cell-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-cell-border-color-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='foo'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-cell-border-width-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-cell-border-width-expected.txt index c10107ad..dbf47bf 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-cell-border-width-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-cell-border-width-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='foo'", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-col-border-color-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-col-border-color-expected.txt index cb21fa4d..75a00489 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-col-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-col-border-color-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCol COL id='col'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-col-border-width-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-col-border-width-expected.txt index 3352620..66b51a08 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-col-border-width-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-col-border-width-expected.txt
@@ -34,44 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableCol COL id='col'", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-colgroup-border-color-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-colgroup-border-color-expected.txt index c25e39a7..74d314fe 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-colgroup-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-colgroup-border-color-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCol COLGROUP id='colgroup'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-colgroup-border-width-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-colgroup-border-width-expected.txt index af87355..b48bbb0 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-colgroup-border-width-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-colgroup-border-width-expected.txt
@@ -34,52 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableCol COLGROUP id='colgroup'", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-row-border-color-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-row-border-color-expected.txt index c2156b9..7fb86903 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-row-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-row-border-color-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='row'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-row-border-width-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-row-border-width-expected.txt index 27aeba4..7fb86903 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-row-border-width-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-row-border-width-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='row'", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-table-border-color-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-table-border-color-expected.txt index dad534bc..6e3c8c25 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-table-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-table-border-color-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='tbl'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-table-border-width-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-table-border-width-expected.txt index e8d33fd..6e3c8c25 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-table-border-width-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-table-border-width-expected.txt
@@ -24,20 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='tbl'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-tbody-border-color-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-tbody-border-color-expected.txt index 06b749c..ad6109c9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-tbody-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-tbody-border-color-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='tbody'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-tbody-border-width-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-tbody-border-width-expected.txt index 18cb9e5..62b00ad 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-tbody-border-width-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/cached-change-tbody-border-width-expected.txt
@@ -39,52 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableSection TBODY id='tbody'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/collapsed-border-cell-resize-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/collapsed-border-cell-resize-expected.txt index 9b75674c..2d2e2a6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/collapsed-border-cell-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/collapsed-border-cell-resize-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD id='target'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/collapsed-border-change-rowspan-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/collapsed-border-change-rowspan-expected.txt index 3c1d3f3..db1e13de 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/collapsed-border-change-rowspan-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/collapsed-border-change-rowspan-expected.txt
@@ -34,32 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "full" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='row1'", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='cell1'", - "reason": "full" - }, - { - "object": "LayoutTableRow TR id='row2'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR id='row3'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/fixed-table-cell-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/fixed-table-cell-expected.txt index 8ea963e..bfccb1c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/fixed-table-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/fixed-table-cell-expected.txt
@@ -42,24 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable (positioned) TABLE", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableCell (anonymous)", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/fixed-table-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/fixed-table-overflow-expected.txt index 843d02b..e3bd61cf 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/fixed-table-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/fixed-table-overflow-expected.txt
@@ -52,28 +52,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable (positioned) TABLE", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableCell (anonymous)", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='green'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt index 5ad911e..330044c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt
@@ -42,24 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable (positioned) TABLE", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableCell (anonymous)", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/input-overflow-in-table-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/input-overflow-in-table-expected.txt index e17447d..ed4df0c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/input-overflow-in-table-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/input-overflow-in-table-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/invalidate-cell-in-row-with-offset-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/invalidate-cell-in-row-with-offset-expected.txt index 1b90796..0d504eb8c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/invalidate-cell-in-row-with-offset-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/invalidate-cell-in-row-with-offset-expected.txt
@@ -41,12 +41,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/invisible-col-visible-td-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/invisible-col-visible-td-expected.txt index 0a3c4c7..cd3d1ca 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/invisible-col-visible-td-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/invisible-col-visible-td-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='col'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/invisible-tbody-visible-td-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/invisible-tbody-visible-td-expected.txt index e1df7250..abfaf1e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/invisible-tbody-visible-td-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/invisible-tbody-visible-td-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='tbody'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/invisible-tr-visible-td-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/invisible-tr-visible-td-expected.txt index 7c533d893..85f6030 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/invisible-tr-visible-td-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/invisible-tr-visible-td-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='row'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/repaint-table-row-in-composited-document-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/repaint-table-row-in-composited-document-expected.txt index 4b5f2ced..d9a32060 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/repaint-table-row-in-composited-document-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/repaint-table-row-in-composited-document-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD id='target'", - "reason": "incremental" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/replace-col-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/replace-col-expected.txt index 97db693..463ab47 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/replace-col-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/replace-col-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE", - "reason": "full" - }, - { - "object": "LayoutTableSection THEAD", - "reason": "style change" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableSection TFOOT", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/row-change-background-rowspan-cell-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/row-change-background-rowspan-cell-expected.txt index 81a2eec..84b6aaf 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/row-change-background-rowspan-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/row-change-background-rowspan-cell-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/scroll-inside-table-cell-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/scroll-inside-table-cell-expected.txt index 2a60c32..2cf3f17f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/scroll-inside-table-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/scroll-inside-table-cell-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt index e4529f2..69f8393f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt
@@ -42,12 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-cell-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-cell-overflow-expected.txt index 21b90b8..541079f8 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-cell-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-cell-overflow-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-col-background-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-col-background-expected.txt index 0410ea3..fa4e264 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-col-background-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-col-background-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='col'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-col-background-offset-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-col-background-offset-expected.txt index d1a1165..98e829a 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-col-background-offset-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-col-background-offset-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='col'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-outer-border-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-outer-border-expected.txt index eb02a5b..826b9498 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-outer-border-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-outer-border-expected.txt
@@ -59,32 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='table' class='green'", - "reason": "appeared" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "appeared" - }, - { - "object": "LayoutTableRow TR", - "reason": "appeared" - }, - { - "object": "LayoutTableCell TD", - "reason": "appeared" - }, - { - "object": "LayoutTableRow TR", - "reason": "appeared" - }, - { - "object": "LayoutTableCell TD", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-overflow-auto-in-overflow-auto-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-overflow-auto-in-overflow-auto-scrolled-expected.txt index 9675bc2..bdce8eb 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-overflow-auto-in-overflow-auto-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-overflow-auto-in-overflow-auto-scrolled-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-overflow-scroll-in-overflow-scroll-scrolled-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-overflow-scroll-in-overflow-scroll-scrolled-expected.txt index 9675bc2..bdce8eb 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-overflow-scroll-in-overflow-scroll-scrolled-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-overflow-scroll-in-overflow-scroll-scrolled-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-row-bg-change-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-row-bg-change-expected.txt index 9cf5dda..31958993 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-row-bg-change-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-row-bg-change-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='first'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-row-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-row-expected.txt index f54eb66..e3cdaf9 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-row-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-row-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target' class='green'", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-section-overflow-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-section-overflow-expected.txt index db24751..1463775 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-section-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-section-overflow-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-section-repaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-section-repaint-expected.txt index 4aa860c..12adfd69 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-section-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-section-repaint-expected.txt
@@ -109,64 +109,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow CAPTION id='caption1' class='blue half'", - "reason": "disappeared" - }, - { - "object": "LayoutTableCell TD class='red half'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD class='green half'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "disappeared" - }, - { - "object": "LayoutBlockFlow DIV id='top' class='blue half'", - "reason": "disappeared" - }, - { - "object": "LayoutTableCell TD class='red half'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD class='green half'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD class='green half'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD class='red half'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD class='half'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD class='half'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-two-pass-layout-overpaint-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-two-pass-layout-overpaint-expected.txt index 7fb4223..a199b07 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-two-pass-layout-overpaint-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-two-pass-layout-overpaint-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-with-padding-row-invalidation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-with-padding-row-invalidation-expected.txt index 4a060e37..fa1157d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/table/table-with-padding-row-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/table/table-with-padding-row-invalidation-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/transform/change-transform-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/transform/change-transform-expected.txt index 4d2e2c3..b90c703 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/transform/change-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/transform/change-transform-expected.txt
@@ -39,12 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='square'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/transform/invalidation-with-scale-transform-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/transform/invalidation-with-scale-transform-expected.txt index 002472c..d789509 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/transform/invalidation-with-scale-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/transform/invalidation-with-scale-transform-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/transform/resize-skewed-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/transform/resize-skewed-expected.txt index 4edb467..53b23716 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/transform/resize-skewed-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/transform/resize-skewed-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='skewed'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/transform/transform-disable-layoutstate-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/transform/transform-disable-layoutstate-expected.txt index df6fa34..e5ec73a6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/transform/transform-disable-layoutstate-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/transform/transform-disable-layoutstate-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/transform/transform-rotate-and-remove-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/transform/transform-rotate-and-remove-expected.txt index ab8ad4ca..d542e994 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/transform/transform-rotate-and-remove-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/transform/transform-rotate-and-remove-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='rel'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align-length1-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align-length1-expected.txt index 66bfe21..6abdff2 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align-length1-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align-length1-expected.txt
@@ -44,28 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align-length2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align-length2-expected.txt index 74b85c1..e3a65389 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align-length2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align-length2-expected.txt
@@ -39,28 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align1-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align1-expected.txt index dd494626..cc6ab6f 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align1-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align1-expected.txt
@@ -44,28 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align2-expected.txt index 3e16946..4d81829 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-align2-expected.txt
@@ -39,28 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='other'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-rl-as-paint-container-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-rl-as-paint-container-expected.txt index 8ad825b..95dd103 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/vertical-rl-as-paint-container-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/vertical-rl-as-paint-container-expected.txt
@@ -45,28 +45,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Lorem ipsum dolor'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'sit amet,'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'consectetur'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'adipiscing elit.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/video-paint-invalidation-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/video-paint-invalidation-expected.txt index d590ce4d..e2b1cf40 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/video-paint-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/video-paint-invalidation-expected.txt
@@ -37,12 +37,6 @@ "position": [8, 8], "bounds": [320, 240] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutVideo VIDEO id='video'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-fixed-centered-composited-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-fixed-centered-composited-expected.txt index af3c05a..008ec3f0 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-fixed-centered-composited-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-fixed-centered-composited-expected.txt
@@ -23,12 +23,6 @@ "bounds": [600, 250], "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -56,12 +50,6 @@ "bounds": [400, 250], "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -89,12 +77,6 @@ "bounds": [400, 600], "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -122,12 +104,6 @@ "bounds": [800, 600], "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "background" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-fixed-centered-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-fixed-centered-expected.txt index 052d3df..8a3d441 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-fixed-centered-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-fixed-centered-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -62,16 +52,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -100,16 +80,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -138,16 +108,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "background" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-generated-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-generated-expected.txt index 052d3df..8a3d441 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-generated-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-generated-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -62,16 +52,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -100,16 +80,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "background" - } ] } { @@ -138,16 +108,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "background" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-non-fixed-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-non-fixed-expected.txt index a8504e6..5373d4d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-non-fixed-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-background-image-non-fixed-expected.txt
@@ -17,16 +17,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -48,16 +38,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -86,16 +66,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -124,16 +94,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-centered-inline-under-fixed-pos-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-centered-inline-under-fixed-pos-expected.txt index 17b7709..f0a825c 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-centered-inline-under-fixed-pos-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-centered-inline-under-fixed-pos-expected.txt
@@ -34,32 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='container'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='parent'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='child'", - "reason": "geometry" - } ] } { @@ -98,32 +72,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='container'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='parent'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='child'", - "reason": "geometry" - } ] } { @@ -172,32 +120,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='container'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='parent'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='child'", - "reason": "geometry" - } ] } { @@ -241,32 +163,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV class='container'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='parent'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='child'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-frameset-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-frameset-expected.txt index 666fa80..a034455b 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-frameset-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-frameset-expected.txt
@@ -24,32 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutFrameSet FRAMESET", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - } ] } { @@ -78,32 +52,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutFrameSet FRAMESET", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - } ] } { @@ -137,32 +85,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutFrameSet FRAMESET", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - } ] } { @@ -196,32 +118,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutFrameSet FRAMESET", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - }, - { - "object": "LayoutFrame FRAME", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-media-query-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-media-query-expected.txt index bfe960fe..bd0ecc82 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-media-query-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-media-query-expected.txt
@@ -17,16 +17,6 @@ "contentsOpaque": true, "backgroundColor": "#0000FF" } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -48,16 +38,6 @@ "contentsOpaque": true, "backgroundColor": "#0000FF" } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -86,16 +66,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -124,16 +94,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-no-layout-change1-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-no-layout-change1-expected.txt index c2580d0a..1cf12ff6 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-no-layout-change1-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-no-layout-change1-expected.txt
@@ -17,12 +17,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -44,12 +38,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -71,12 +59,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -98,12 +80,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-no-layout-change2-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-no-layout-change2-expected.txt index ecf0b55b..ad6a7e7 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-no-layout-change2-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-no-layout-change2-expected.txt
@@ -17,12 +17,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -44,12 +38,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -71,12 +59,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -98,12 +80,6 @@ "contentsOpaque": true, "backgroundColor": "#FFFFFF" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-percent-html-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-percent-html-expected.txt index 4bb201f..713e4aeb 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-percent-html-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-percent-html-expected.txt
@@ -24,20 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] } { @@ -66,20 +52,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] } { @@ -113,20 +85,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] } { @@ -160,20 +118,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-percent-width-height-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-percent-width-height-expected.txt index 8172e03f0..3e24a20e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-percent-width-height-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-percent-width-height-expected.txt
@@ -24,20 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "incremental" - } ] } { @@ -71,20 +57,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "incremental" - } ] } { @@ -118,20 +90,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "incremental" - } ] } { @@ -165,20 +123,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-positioned-bottom-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-positioned-bottom-expected.txt index 2623b76..f8d8e0e 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-positioned-bottom-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-positioned-bottom-expected.txt
@@ -24,20 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - } ] } { @@ -66,16 +52,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -114,20 +90,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - } ] } { @@ -156,16 +118,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-positioned-percent-top-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-positioned-percent-top-expected.txt index 36795471..df90c70cf 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-positioned-percent-top-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-positioned-percent-top-expected.txt
@@ -24,20 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - } ] } { @@ -66,16 +52,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -114,20 +90,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - } ] } { @@ -156,16 +118,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-viewport-percent-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-viewport-percent-expected.txt index 8dbec83..a0e0cd7d 100644 --- a/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-viewport-percent-expected.txt +++ b/third_party/WebKit/LayoutTests/paint/invalidation/window-resize/window-resize-viewport-percent-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "incremental" - } ] } { @@ -71,16 +57,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - } ] } { @@ -119,20 +95,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "incremental" - } ] } { @@ -161,16 +123,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/paint/markers/markers-zoomed.html b/third_party/WebKit/LayoutTests/paint/markers/markers-zoomed.html new file mode 100644 index 0000000..b15b143 --- /dev/null +++ b/third_party/WebKit/LayoutTests/paint/markers/markers-zoomed.html
@@ -0,0 +1,62 @@ +<!DOCTYPE html> +<script src="../../resources/ahem.js"></script> +<script src="../../resources/run-after-layout-and-paint.js"></script> +<style> + @font-face { + font-family: 'testFont'; + src: url('../../resources/opensans/OpenSans-Regular.woff') format("woff"); + } + + div { + width: 150px; + height: 30px; + font: 20px testFont; + overflow: hidden; + text-overflow: ellipsis; + white-space: pre; + } +</style> + +<div id="markAllComposition">pppppppppppppppppp</div> +<br> +<div id="markAllSpelling">pppppppppppppppppp</div> +<br> +<div id="markAllTextMatch">pppppppppppppppppp</div> + +<script> +function addCompositionMarker(elem, start, end) { + const range = document.createRange(); + const textNode = elem.firstChild; + range.setStart(textNode, start); + range.setEnd(textNode, end); + if (typeof internals !== 'undefined') + internals.addCompositionMarker(range, 'orange', 'thin', 'lightBlue'); +}; + +function addSpellingMarker(elem, start, end) { + const range = document.createRange(); + const textNode = elem.firstChild; + range.setStart(textNode, start); + range.setEnd(textNode, end); + if (typeof internals !== 'undefined') + internals.setMarker(document, range, 'spelling'); +}; + +function addTextMatchMarker(elem, start, end) { + const range = document.createRange(); + const textNode = elem.firstChild; + range.setStart(textNode, start); + range.setEnd(textNode, end); + if (typeof internals !== 'undefined') { + internals.addTextMatchMarker(range, 'kActive'); + internals.setMarkedTextMatchesAreHighlighted(document, true); + } +}; + +onload = runAfterLayoutAndPaint(function() { + eventSender.setPageZoomFactor(2) + addCompositionMarker(markAllComposition, 0, 18); + addSpellingMarker(markAllSpelling, 0, 15); + addTextMatchMarker(markAllTextMatch, 0, 16); +}, true); +</script>
diff --git a/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/compositing/should-not-repaint-composited-descendants-expected.txt b/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/compositing/should-not-repaint-composited-descendants-expected.txt index 481dc7a..4448cc9f 100644 --- a/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/compositing/should-not-repaint-composited-descendants-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/compositing/should-not-repaint-composited-descendants-expected.txt
@@ -41,16 +41,6 @@ "backfaceVisibility": "hidden", "backgroundColor": "#008000" } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='composited-box'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV class='child'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt index a725a47..65795c0 100644 --- a/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/fuchsia/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/fuchsia/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt index 40b8723..70964d6 100644 --- a/third_party/WebKit/LayoutTests/platform/fuchsia/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/fuchsia/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/color-matching/image-color-matching-expected.png b/third_party/WebKit/LayoutTests/platform/linux/compositing/color-matching/image-color-matching-expected.png index 81713d1..115c4b2 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/compositing/color-matching/image-color-matching-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/color-matching/image-color-matching-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/squashing/selection-repaint-with-gaps-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/squashing/selection-repaint-with-gaps-expected.txt index c5469c9..05556e5 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/compositing/squashing/selection-repaint-with-gaps-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/squashing/selection-repaint-with-gaps-expected.txt
@@ -56,20 +56,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'lorem'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ipsum'", - "reason": "geometry" - } ] } { @@ -140,32 +126,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'lorem'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ipsum'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'lorem'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ipsum'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-filter-all-expected.png index 9cbc496..905f7061 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-filter-all-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-filter-all-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-shape-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-shape-expected.png index 1791e9e..3630c3ab 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-shape-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-shape-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-munsell-adobe-to-srgb-expected.png index bf59d51..6dc44600 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-munsell-adobe-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-munsell-adobe-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-svg-fill-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-svg-fill-text-expected.png index c8b1db9..4890325c3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-svg-fill-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-svg-fill-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/jpeg-with-color-profile-expected.png index 384c16ab..3e949ce 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/images/jpeg-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/images/jpeg-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/png-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/png-with-color-profile-expected.png index e5de1e8..509fd7e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/images/png-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/images/png-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png index fe98c529..07c44aca 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-munsell-bt709-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-munsell-bt709-to-srgb-expected.png index 3ba0eb5..fd52e4f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-munsell-bt709-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-munsell-bt709-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/background/backgroundSizeRepaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/background/backgroundSizeRepaint-expected.txt index b2552e0..01be5ea 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/background/backgroundSizeRepaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/background/backgroundSizeRepaint-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='a'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='b'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/background/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/background/change-text-content-and-background-color-expected.txt index 11e7bc4..56363ce 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/background/change-text-content-and-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/background/change-text-content-and-background-color-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl (positioned) INPUT id='input'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'NEW'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/block-no-inflow-children-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/block-no-inflow-children-expected.txt index 1fb6f179..c298739e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/block-no-inflow-children-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/block-no-inflow-children-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'La la la la'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box/box-inline-resize-expected.txt index cb6a48c..7c309040f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box/box-inline-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box/box-inline-resize-expected.txt
@@ -34,36 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG id='foo'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow H2", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Chromium'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt index 2d8c76ff..e52439a1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN id='target'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Text'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/bugzilla-5699-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/bugzilla-5699-expected.txt index 43cac044..3cb2aa5 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/bugzilla-5699-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/bugzilla-5699-expected.txt
@@ -39,56 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='d'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Hello'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/bugzilla-6278-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/bugzilla-6278-expected.txt index 5322398..06a3459 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/bugzilla-6278-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/bugzilla-6278-expected.txt
@@ -139,72 +139,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD id='col1'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Curabitur pretium, quam quis semper'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'malesuada, est libero feugiat libero,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'vel fringilla orci nibh sed neque.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Quisque eu nulla non nisi molestie'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'accumsan. Etiam tellus urna, laoreet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ac, laoreet non, suscipit sed, sapien.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Phasellus vehicula, sem at posuere'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'vehicula, augue nibh molestie nisl,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'nec ullamcorper lacus ante vulputate'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'pede.'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/clip/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/clip/control-clip-expected.txt index 6b4b301..9fdc807 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/clip/control-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/clip/control-clip-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText (anonymous)", - "reason": "full" - }, - { - "object": "InlineTextBox 'SUCCESS'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'SUCCESS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/clip/outline-clip-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/clip/outline-clip-change-expected.txt index 536d5b1..658dc13 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/clip/outline-clip-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/clip/outline-clip-change-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) A id='link' class='updated'", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'Lorem Ipsum'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/text-match-highlight-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/text-match-highlight-expected.txt index 2da1c8c5..f7e5f434 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/text-match-highlight-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/text-match-highlight-expected.txt
@@ -59,72 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'Can you findme in this boring text?'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'Findme in a typewriter!'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'Findme on a path! Did you findme?'", - "reason": "DocumentMarker change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt index dc19537f..39c99a79 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt
@@ -69,112 +69,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/delete-into-nested-block-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/delete-into-nested-block-expected.txt index 59a0999..a9cf566 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/delete-into-nested-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/delete-into-nested-block-expected.txt
@@ -44,28 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='one'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'three'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/details-open-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/details-open-repaint-expected.txt index d249994..99f1314 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/details-open-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/details-open-repaint-expected.txt
@@ -29,36 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutDetailsMarker DIV id='details-marker'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow DIV id='details-content'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutTextControl INPUT", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt index 662cccc..19f391b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
@@ -45,12 +45,6 @@ [-4, -4, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='resize' class='drop-shadow'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt index 9b1e80b..7ab928a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
@@ -40,12 +40,6 @@ [8, 8, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='resize' class='accelerated'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/flexbox/repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/flexbox/repaint-expected.txt index 5da2978f..fff7961 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/flexbox/repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/flexbox/repaint-expected.txt
@@ -169,88 +169,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='left'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='left'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt index 3f326155..c985d22 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutButton BUTTON", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'Reset'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt index 723278d4..c5470d6 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutButton INPUT", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'Submit'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/forms/textarea-caret-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/forms/textarea-caret-expected.txt index f51eb3f..eef142b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/forms/textarea-caret-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/forms/textarea-caret-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl TEXTAREA id='editor'", - "reason": "subtree" - }, - { - "object": "LayoutTextControl TEXTAREA id='editor'", - "reason": "geometry" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox '------------------------------------------------------------'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt index d433731..89bf264 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -479,184 +479,6 @@ "position": [15, 859], "bounds": [150, 60] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutHTMLCanvas CANVAS id='source-oversolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-overimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-overcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-overvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-insolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-inimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-incanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-invideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-oversolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-overimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-overcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-overvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-insolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-inimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-incanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-invideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lightersolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lighterimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lightercanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lightervideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copysolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copyimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copycanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copyvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorvideo'", - "reason": "invalidate paint rectangle" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-color-change-expected.txt index 27ff72ec..709b4aa 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-color-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/inline-color-change-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN id='target'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt index 549161b..79abac0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
@@ -37,56 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='container'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='absolute'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'This test checks that switching opacity'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'invalidates the full subtree.'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'This text should be visible in the'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'output.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-1-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-1-expected.txt index 9590af3..40df7926 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-1-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-1-expected.txt
@@ -104,56 +104,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV id='pinkFloat'", - "reason": "incremental" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The chief difficulty Alice found at first was in managing'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'flamingo: she succeeded in getting its body tucked'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'away,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'comfortably enough, under her arm, with its legs'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hanging down,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'but generally, just as she had got its'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'neck nicely straightened\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'out, and was going to give the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog a blow with its head, it\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-10-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-10-expected.txt index 94acb34..afeedc0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-10-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-10-expected.txt
@@ -304,172 +304,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'provoking to find that the hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'in the act of crawling away: besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a ridge or furrow in the way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog to, and, as the doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'getting up and walking off to other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soon came to the conclusion that it was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for the hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'here; the great\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-2-expected.txt index c887cef..e833aa7f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-2-expected.txt
@@ -494,272 +494,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The chief difficulty Alice found at first was in managing'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'flamingo: she succeeded in getting its body tucked'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'away,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'comfortably enough, under her arm, with its legs'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hanging down,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'but generally, just as she had got its'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'neck nicely straightened\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'out, and was going to give the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog a blow with its head, it\n'", - "reason": "geometry" - }, - { - "object": "LayoutInline I id='would'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'would'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' twist itself round and'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'look up in her face, with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'such a puzzled expression that she'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'could not help bursting out\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'laughing: and when she had got its'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'head down, and was going to\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'provoking to find that the hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'in the act of crawling away: besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a ridge or furrow in the way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog to, and, as the doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'getting up and walking off to other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soon came to the conclusion that it was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for the hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'about once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'here; the great\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-3-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-3-expected.txt index 70166de..92c4af04 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-3-expected.txt
@@ -289,176 +289,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'provoking to find that the hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'in the act of crawling away: besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a ridge or furrow in the way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog to, and, as the doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'getting up and walking off to other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soon came to the conclusion that it was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for turns,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting for the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was in'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'about once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'here; the great\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-4-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-4-expected.txt index 619c78a..8fdb2a6b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-4-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-4-expected.txt
@@ -279,172 +279,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'provoking to find that the hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'in the act of crawling away: besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a ridge or furrow in the way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog to, and, as the doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'getting up and walking off to other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soon came to the conclusion that it was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for the hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about once'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'here; the great\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-5-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-5-expected.txt index ed39932..c92f3d52 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-5-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-5-expected.txt
@@ -309,180 +309,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'provoking to find that the hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'in the act of crawling away: besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a ridge or furrow in the way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog to, and, as the doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'getting up and walking off to other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soon came to the conclusion that it was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting for the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was in a'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and shouting'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u2018Off with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about once'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'here; the great\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-6-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-6-expected.txt index 953e63a..972a51a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-6-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-6-expected.txt
@@ -134,88 +134,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'provoking to find that the hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'in the act of crawling away: besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a ridge or furrow in the way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog to, and, as the doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'getting up and walking off to other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soon came to the conclusion that it was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'foo'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'game indeed.\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-7-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-7-expected.txt index 7e2f423..95267ae 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-7-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-7-expected.txt
@@ -69,40 +69,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for the hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='theQueen'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-8-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-8-expected.txt index 4d9cfaa..cf0c137 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-8-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-8-expected.txt
@@ -454,224 +454,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The chief difficulty Alice found at first was in managing'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'flamingo: she succeeded in getting its body tucked'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'away,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'comfortably enough, under her arm, with its legs'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hanging down,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'but generally, just as she had got its'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'neck nicely straightened\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'out, and was going to give the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog a blow with its head, it\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'would'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' twist itself round and'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'look up in her face, with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'such a puzzled expression that she'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'could not help bursting out\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'laughing: and when she had got its'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'head down, and was going to\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'provoking to find that the hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'in the act of crawling away: besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a ridge or furrow in the way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog to, and, as the doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'getting up and walking off to other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soon came to the conclusion that it was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for turns,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting for the hedgehogs;'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was in a furious'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and shouting \u2018Off'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about once in a'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'minute.\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-9-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-9-expected.txt index 5579afc..e15507f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-9-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/line-flow-with-floats-9-expected.txt
@@ -394,200 +394,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' twist itself round and'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'look up in her face, with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'such a puzzled expression that she'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'could not help bursting out\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'laughing: and when she had got its'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'head down, and was going to\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='yellowFloat'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'provoking to find that the hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'and was in the act of crawling away: besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'there was generally a ridge or furrow in the way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wanted to send the hedgehog to, and, as the doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'were always getting up and walking off to other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ground, Alice soon came to the conclusion that it was a very'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for the hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'here; the great\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/lines-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/lines-with-layout-delta-expected.txt index b9175e5..40e2f8c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/lines-with-layout-delta-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/lines-with-layout-delta-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/make-children-non-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/make-children-non-inline-expected.txt index 392f450..b56469a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/make-children-non-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/make-children-non-inline-expected.txt
@@ -114,168 +114,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Word,'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'words,'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'more words.'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'I could'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'write a book'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'about all the stuff'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'that comes'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'after'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'the break.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/multi-layout-one-frame-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/multi-layout-one-frame-expected.txt index ba9b21f..d29245b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/multi-layout-one-frame-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/multi-layout-one-frame-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASSED'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASSED'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/multicol/multicol-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/multicol/multicol-repaint-expected.txt index 37ca0652..8e8023f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/multicol/multicol-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/multicol/multicol-repaint-expected.txt
@@ -39,56 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='a'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'XXXXXX'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/non-text-link-invalidation-optimization-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/non-text-link-invalidation-optimization-expected.txt index 530b6f4..bdea3add 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/non-text-link-invalidation-optimization-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
@@ -49,56 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'This test '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' passes if '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'only'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' text is invalidated and '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' no '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' images.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/focus-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/focus-continuations-expected.txt index 6289959..1faf896 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/focus-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/focus-continuations-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/focus-enable-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/focus-enable-continuations-expected.txt index f2c5bd63..5fc57cc 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/focus-enable-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/focus-enable-continuations-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/inline-focus-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/inline-focus-expected.txt index f7cf5672..ba741db 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/inline-focus-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/inline-focus-expected.txt
@@ -44,44 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline A id='link'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Home'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'crbug.com/424078: ensure inline elements get their outline painted'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/inline-outline-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/inline-outline-repaint-expected.txt index f628045..3437633 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/inline-outline-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/inline-outline-repaint-expected.txt
@@ -59,48 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutInline SPAN id='test'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Lorem ipsum'", - "reason": "full" - }, - { - "object": "InlineTextBox ' '", - "reason": "full" - }, - { - "object": "InlineTextBox 'dolor\u00A0'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/outline-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/outline-continuations-expected.txt index 49bfb75..655ab04 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/outline-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/outline/outline-continuations-expected.txt
@@ -44,64 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'CONTENTS'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'CONTENTS'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/float-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/float-overflow-expected.txt index 175ab04..edc2ece 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/float-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/float-overflow-expected.txt
@@ -569,468 +569,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/float-overflow-right-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/float-overflow-right-expected.txt index 8bba0c7..63c1af7 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/float-overflow-right-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/float-overflow-right-expected.txt
@@ -569,468 +569,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/line-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/line-overflow-expected.txt index 73fbf51..64055976 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/line-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/line-overflow-expected.txt
@@ -109,68 +109,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Cras faucibus. Nunc'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'adipiscing, enim in scelerisque'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'convallis,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'augue '", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='t'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'purus'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' eleifend'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'lacus, at sagittis eros leo'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'pulvinar velit. Integer'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'sollicitudin nisi ut urna blandit'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'convallis.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/overflow-delete-line-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/overflow-delete-line-expected.txt index 82f0e8f..89f9f09 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/overflow-delete-line-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/overflow-delete-line-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='dv'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Lorem ipsu'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/repaint-resized-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/repaint-resized-overflow-expected.txt index c813055..ef98278f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/repaint-resized-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/overflow/repaint-resized-overflow-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='s'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt index d6bcb17..5eda635 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt
@@ -44,40 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) SPAN", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (positioned) SPAN", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/layout-state-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/layout-state-relative-expected.txt index a49270e9..7eb3a55 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/layout-state-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/layout-state-relative-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/positioned-document-element-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/positioned-document-element-expected.txt index da17597..2295e8f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/positioned-document-element-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/positioned-document-element-expected.txt
@@ -34,36 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) HTML class='changed'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt index 99d9ccb..8278548d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt index 13111976..179ee1ac 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt
@@ -30,32 +30,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) DIV id='block'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'When this layer moves it shouldn't generate a repaint rect.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/quotes-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/quotes-expected.txt index 586dcdb..b12dca4b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/quotes-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/quotes-expected.txt
@@ -49,60 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline Q id='q2' class='q-changed'", - "reason": "style change" - }, - { - "object": "LayoutInline \u003Cpseudo:before\u003E", - "reason": "style change" - }, - { - "object": "LayoutQuote (anonymous)", - "reason": "style change" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "style change" - }, - { - "object": "InlineTextBox '{'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'quote 2'", - "reason": "style change" - }, - { - "object": "LayoutInline \u003Cpseudo:after\u003E", - "reason": "style change" - }, - { - "object": "LayoutQuote (anonymous)", - "reason": "style change" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "style change" - }, - { - "object": "InlineTextBox '}'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection/reflection-redraw-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection/reflection-redraw-expected.txt index d14768c..4d14ecc 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection/reflection-redraw-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection/reflection-redraw-expected.txt
@@ -79,72 +79,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'text in the reflection'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'should be green'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'text in the reflection'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'should be green'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'text in the reflection'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'should be green'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'text in the reflection'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'should be green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection/reflection-with-rotation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection/reflection-with-rotation-expected.txt index ad65de2..09b3bab1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection/reflection-with-rotation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/reflection/reflection-with-rotation-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/remove-inline-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/remove-inline-after-layout-expected.txt index c7cf09bc..7c85837b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/remove-inline-after-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/remove-inline-after-layout-expected.txt
@@ -49,32 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/remove-inline-layer-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/remove-inline-layer-after-layout-expected.txt index 465a5177..30084073 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/remove-inline-layer-after-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/remove-inline-layer-after-layout-expected.txt
@@ -34,32 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt index bae1b05e..cca1667 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '\u7B2C\u4E00\u6BB5\u843D paragraph 1'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt index 59ec62f..a91047a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt
@@ -39,32 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='container'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'There should only be one copy of this text.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/resize-iframe-text-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/resize-iframe-text-expected.txt index ffb03269..7cf8073 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/resize-iframe-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/resize-iframe-text-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutIFrame (positioned) IFRAME", - "reason": "incremental" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt index df13d1ae..89c925f7 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt index 36b4bb1..a39f2251 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
@@ -37,16 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Text Text Text Text Text Text Text Text Text Text Text Text Text'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt index e1c78bc..63ef80f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
@@ -42,12 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt index e50ce17..f5c64f2 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt
@@ -35,32 +35,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='root'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt index e50ce17..f5c64f2 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt
@@ -35,32 +35,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='root'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt index 5b94a3e..1c0c148c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'after'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt index 4703550..369cb30 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'after'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt index dd72dcbf..71db693 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'after'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt index 1977f09..00843996 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt
@@ -59,72 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'You should see both vertical and horizontal scrollbars.'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'This is the test for '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Bug 36461 - No vertical scrollbar after the CSS class change'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/overflow-scroll-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/overflow-scroll-delete-expected.txt index 7db4fb5d..908f08e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/overflow-scroll-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/overflow-scroll-delete-expected.txt
@@ -23,36 +23,12 @@ "reason": "appeared" }, { - "object": "InlineTextBox 'Test'", - "rect": [8, 136, 43, 17], - "reason": "appeared" - }, - { "object": "InlineTextBox 'Failed'", "rect": [8, 136, 39, 17], "reason": "disappeared" - }, - { - "object": "InlineTextBox 'Test'", - "rect": [8, 136, 39, 17], - "reason": "disappeared" } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Passed'", - "reason": "full" - }, - { - "object": "InlineTextBox 'Test'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint-expected.txt index b7284aff..015940e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/search-field-cancel-expected.txt index eedb3b3..142dff1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/search-field-cancel-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/search-field-cancel-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'some text'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt index acdabf4..57e82bed 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'xx'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'y'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt index d7531c0..850b0d9 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'xx'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'y'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt index 4a7459f..2d8f395 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'xx'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'y'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt index dc5d4f4..b47e41da 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'xx'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'y'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt index fad2803..b98e7f3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt
@@ -34,32 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'a'", - "reason": "selection" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'b'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt index 68457ed..2cee848 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt
@@ -89,68 +89,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt index 87a95a5..bce6566 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Some text in vertical mode'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-after-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-after-delete-expected.txt index b1bf88dd..f27529e66 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-after-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-after-delete-expected.txt
@@ -376,28 +376,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-after-remove-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-after-remove-expected.txt index 477833c..c4df1e44 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-after-remove-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-after-remove-expected.txt
@@ -391,40 +391,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hello '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'world'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-clear-expected.txt index 841fbcff..2bf0911 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-clear-expected.txt
@@ -39,36 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='root'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='firstLine'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt index 7299095..cc0c514 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt index 439340f..f7a54884 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt index c39252c..032d0ae 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt
@@ -29,44 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow HTML", - "reason": "selection" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "selection" - }, - { - "object": "LayoutTable TABLE", - "reason": "selection" - }, - { - "object": "LayoutTableCell TD id='firstCell'", - "reason": "selection" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'First cell'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD id='secondCell'", - "reason": "selection" - }, - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Second cell'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-rl-expected.txt index e18978c..e1842b49 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/selection-rl-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Testing both hit testing'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt index 7341c04..eceac54 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Should have blue, not gray, highlight'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt index 81df38ab..f3061bc 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Should have green background'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/stacked-diacritics-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/stacked-diacritics-expected.txt index d763494..8167057f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/stacked-diacritics-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/stacked-diacritics-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='stacked'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/subtree-root-skipped-expected.txt index 52457bd..5f434dd 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/subtree-root-skipped-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/subtree-root-skipped-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt index d8613e3..1aa9090 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt
@@ -49,36 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "full" - }, - { - "object": "LayoutSVGText text id='text'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'This is some text'", - "reason": "geometry" - }, - { - "object": "LayoutSVGImage image id='image'", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/ems-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/ems-display-none-expected.txt index a149ff99b..5cb743973 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/ems-display-none-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/ems-display-none-expected.txt
@@ -24,60 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='text'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan id='tspan'", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox ' '", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/exs-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/exs-display-none-expected.txt index 72f0aad6..6aae7077 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/exs-display-none-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/exs-display-none-expected.txt
@@ -24,60 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='text'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan id='tspan'", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox ' '", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt index 1a649cc0..fd8cdf8 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt
@@ -69,40 +69,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGViewportContainer svg id='inner'", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'right-aligned text'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt index 456a8b4..bac77f3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt
@@ -24,60 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Pattern on fill'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Pattern on stroke'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Pattern on fill/stroke'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/relative-sized-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/relative-sized-image-expected.png index 77c9e3c..ee936fc 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/relative-sized-image-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/relative-sized-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt index 59b9e83..e78fab0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt
@@ -24,28 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text id='t'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Hello'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt index 59b9e83..e78fab0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt
@@ -24,28 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text id='t'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Hello'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png index 3410dcc5..b8a13ce2 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt index f92b2a5e..6e5d0f316 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -87,64 +87,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'pservers-pattern-01-b \u2190'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutInline A", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'index'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u2192 script-handle-01-b'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/tabgroup-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/tabgroup-expected.txt index 0dd3821..abe8345 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/tabgroup-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/tabgroup-expected.txt
@@ -84,948 +84,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='tabgroupRect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRect__0'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Biography'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRect__0_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRect__2'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Events'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRect__2_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRect__3'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Portrait'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRect__3_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRect__1'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Relations'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRect__1_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupTriangle'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupTriangle__1'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Download'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Folder'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupTriangle__2'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Your'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Account'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupTriangle__3'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Help'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox '& Info'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupTriangle__0'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Geodata'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Browser'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupTriangle__0_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='contentTabGroupTriangle0'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This is a tabgroup with triangular tab corners'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'and a double line tab. (use \"\\n\" as a line separator)'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Click on the second tab to see oversize content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectTriangle'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectTriangle__0'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Biography'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectTriangle__0_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectTriangle__1'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Relations'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectTriangle__1_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectTriangle__3'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Portrait'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectTriangle__3_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Events'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRound'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRound__0'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Biography'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRound__0_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRound__2'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Events'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRound__2_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRound__3'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Portrait'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRound__3_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRound__1'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Relations'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRound__1_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectRound'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectRound__1'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Relations'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectRound__1_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectRound__2'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Events'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectRound__2_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectRound__3'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Portrait'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectRound__3_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectRound__0'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Biography'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-dom-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-dom-removal-expected.txt index e05a123..31a2b6551 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-dom-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-dom-removal-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='objectsToRemove'", - "reason": "disappeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-mask-update-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-mask-update-expected.txt index 216fa78..12f61f74 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-mask-update-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-mask-update-expected.txt
@@ -39,16 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-repaint-including-stroke-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-repaint-including-stroke-expected.txt index b6bdf6f..e78f389 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-repaint-including-stroke-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-repaint-including-stroke-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text id='bounce'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Repaint me!'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-rescale-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-rescale-expected.txt index 85902cf..8e41844 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-rescale-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-rescale-expected.txt
@@ -69,132 +69,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='text1g'", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='text2g'", - "reason": "full" - }, - { - "object": "LayoutSVGContainer g id='text3g'", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "LayoutSVGViewportContainer svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-selection-text-05-t-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-selection-text-05-t-expected.txt index c041850..7521ecc0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-selection-text-05-t-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-selection-text-05-t-expected.txt
@@ -449,740 +449,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1.x 1.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '4.x 1.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '2.x 1.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1.x 4.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '4.x 4.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '2.x 4.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1.x 2.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '4.x 2.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '2.x 2.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'text-anchor'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'start'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'text-anchor'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'middle'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'text-anchor'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'end'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text id='revision'", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '$Revision: 1.8 $'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt index 0f4e9c5..e9ecc22c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text id='ttt'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Passes, if text is at 200x20'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt index 6b168275..0c2eafb 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt
@@ -29,32 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan id='ts'", - "reason": "full" - }, - { - "object": "InlineFlowBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'This text should be at visible at 200,200'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/use-clipped-hit-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/use-clipped-hit-expected.txt index e87feae..651a1c3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/use-clipped-hit-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/use-clipped-hit-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text id='status'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Passed'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/use-detach-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/use-detach-expected.txt index ee11048..caf2f4e5 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/use-detach-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/use-detach-expected.txt
@@ -34,72 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='use'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='use_text'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'use'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use", - "reason": "appeared" - }, - { - "object": "LayoutSVGEllipse circle id='use_circle'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='use'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='use_text'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'use'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use", - "reason": "appeared" - }, - { - "object": "LayoutSVGEllipse circle id='use_circle'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt index 592421f..cdd3bb5 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='foo'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='blockDiv'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/caret-contenteditable-content-after-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/caret-contenteditable-content-after-expected.txt index 40b16ea..f70a34b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/caret-contenteditable-content-after-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/caret-contenteditable-content-after-expected.txt
@@ -129,104 +129,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'a'", - "reason": "appeared" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'ab'", - "reason": "full" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'abc'", - "reason": "full" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-expected.txt index bfb42954..e590685 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-expected.txt
@@ -29,16 +29,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt index c44a1df..6e326c90 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt
@@ -29,16 +29,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-expected.txt index 4ba168b..ab7eb63a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-expected.txt
@@ -34,16 +34,6 @@ "position": [133, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt index ddb2e8f..92699c25 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt
@@ -34,16 +34,6 @@ "position": [133, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-colgroup-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-colgroup-expected.txt index 5b8bca4..51cabc0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-colgroup-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-colgroup-expected.txt
@@ -29,16 +29,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COLGROUP id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt index 9689fec..1b16f1b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt
@@ -29,16 +29,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COLGROUP id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-composited-row-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-composited-row-expected.txt index 684626f..14effa67 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-composited-row-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-composited-row-expected.txt
@@ -35,12 +35,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt index 9d42289..ef5078c4 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt
@@ -35,12 +35,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-expected.txt index 189d3c0..9091194 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-expected.txt
@@ -29,12 +29,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-initial-empty-expected.txt index 1056177..4197e294 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-initial-empty-expected.txt
@@ -29,12 +29,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt index d3a53ec..3ee3f23 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt
@@ -40,12 +40,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt index 0ac74c9..80e664a56 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt
@@ -40,12 +40,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-expected.txt index 9b8c49e..7ffbfb2 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-expected.txt
@@ -35,12 +35,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt index 9cd7fbb..f5ae649 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt
@@ -35,12 +35,6 @@ "position": [72, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-row-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-row-expected.txt index ad69bd9e..7628914 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-row-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/composited-table-row-expected.txt
@@ -30,16 +30,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD id='target'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt index bdd06f8f..926118a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt
@@ -54,52 +54,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "incremental" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ROW1'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ROW2'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt index e4b257bb..720f995 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'MIDDLE'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/resize-table-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/resize-table-row-repaint-expected.txt index a079edd..29b20b3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/resize-table-row-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/resize-table-row-repaint-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'MIDDLE'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt index cd5141a..d077c1e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Col 1'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Col 1'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Col 1'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Col 1'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/table-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/table-collapsed-border-expected.txt index bb70e82..aaef5160 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/table-collapsed-border-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/table/table-collapsed-border-expected.txt
@@ -144,184 +144,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='t'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTable TABLE", - "reason": "full" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='r'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'sit amet'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE", - "reason": "full" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='r2'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD id='d3'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'ipsum dolor'", - "reason": "appeared" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'sit amet'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-append-dirty-lines-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-append-dirty-lines-expected.txt index 3d47bd0f..6e783648 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-append-dirty-lines-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-append-dirty-lines-expected.txt
@@ -64,40 +64,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse placerat. Morbi tristique. Mauris eu lacus sed felis'", - "reason": "full" - }, - { - "object": "InlineTextBox 'pellentesque cursus. Proin vitae nulla. Vivamus in ipsum. Etiam mi. Nam malesuada purus in sem. Sed eget elit vel erat'", - "reason": "full" - }, - { - "object": "InlineTextBox 'laoreet feugiat. Phasellus mollis pulvinar mi. Etiam ut neque sed eros egestas laoreet. Vestibulum ullamcorper, nulla non'", - "reason": "full" - }, - { - "object": "InlineTextBox 'feugiat molestie, mi lorem bibendum leo, ac gravida orci nunc nec nulla. Nunc nunc lorem, rhoncus et, rutrum ac,'", - "reason": "full" - }, - { - "object": "InlineTextBox 'fermentum ut, tortor. Sed rhoncus. Quisque enim metus, luctus tincidunt, vestibulum eu, vestibulum eu, libero. Mauris'", - "reason": "full" - }, - { - "object": "InlineTextBox 'sagittis aliquam nunc. Nullam pharetra molestie eros. Donec tempus purus ut ligula. Phasellus non nisl. Etiam eu mauris.'", - "reason": "full" - }, - { - "object": "InlineTextBox 'Curabitur a velit.'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-match-document-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-match-document-change-expected.txt index d0915d5..4a3af0f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-match-document-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/text-match-document-change-expected.txt
@@ -39,28 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow DIV id='to-be-changed'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'After change'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform/caret-with-transformation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform/caret-with-transformation-expected.txt index 66780ae..ec8c195 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform/caret-with-transformation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform/caret-with-transformation-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform/transform-inline-layered-child-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform/transform-inline-layered-child-expected.txt index 38a03184..e0b225c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform/transform-inline-layered-child-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform/transform-inline-layered-child-expected.txt
@@ -29,100 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='box'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutInline (relative positioned) SPAN id='child'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'A B C'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'D E F'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'G H I'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'J K L'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'M N O'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'P Q R'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'S T U'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'V W X'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Y Z'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform/transform-layout-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform/transform-layout-repaint-expected.txt index 06f17dfd..da820dbc 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform/transform-layout-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/transform/transform-layout-repaint-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt index c123463a..394d4e8 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
@@ -37,84 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'BBBB'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'CCCC'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'DDDD'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'EEEE'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'FFFF'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'GGGG'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'HHHH'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'IIII JJJJ'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'KKKK'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'LLLL'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'MMMM'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'NNNN'", - "reason": "geometry" - } ] } { @@ -156,84 +78,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'BBBB'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'CCCC'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'DDDD'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'EEEE'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'FFFF'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'GGGG'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'HHHH'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'IIII JJJJ'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'KKKK'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'LLLL'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'MMMM'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'NNNN'", - "reason": "geometry" - } ] } { @@ -262,52 +106,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAA BBBB CCCC'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'DDDD EEEE FFFF'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'GGGG HHHH IIII JJJJ'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'KKKK LLLL MMMM'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'NNNN'", - "reason": "geometry" - } ] } { @@ -386,48 +184,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAA BBBB CCCC'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'DDDD EEEE FFFF'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'GGGG HHHH IIII JJJJ'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'KKKK LLLL MMMM'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'NNNN'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/markers/markers-zoomed-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/markers/markers-zoomed-expected.png new file mode 100644 index 0000000..755d2915 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/linux/paint/markers/markers-zoomed-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/scrollbars/listbox-scrollbar-combinations-expected.png b/third_party/WebKit/LayoutTests/platform/linux/scrollbars/listbox-scrollbar-combinations-expected.png index c9a2775..b7e4b2ea 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/scrollbars/listbox-scrollbar-combinations-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/scrollbars/listbox-scrollbar-combinations-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/scrollbars/overflow-scrollbar-combinations-expected.png b/third_party/WebKit/LayoutTests/platform/linux/scrollbars/overflow-scrollbar-combinations-expected.png index 96bc244..c432906c 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/scrollbars/overflow-scrollbar-combinations-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/scrollbars/overflow-scrollbar-combinations-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png index 3c9a0296..df24d48 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png index 0a4914e..72c1ec5 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/render-groups-01-b-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/render-groups-01-b-expected.png index 8fb21a4..ed93dcfc 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/render-groups-01-b-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/render-groups-01-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/render-groups-03-t-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/render-groups-03-t-expected.png index 81c6b540..8dc9fab 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/render-groups-03-t-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/render-groups-03-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/struct-image-06-t-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/struct-image-06-t-expected.png index 999a7f4..5678bf68 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/struct-image-06-t-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/struct-image-06-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/struct-use-01-t-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/struct-use-01-t-expected.png index eedb266..013dee13 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/struct-use-01-t-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/struct-use-01-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/as-border-image/svg-as-border-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/as-border-image/svg-as-border-image-expected.png index d80f7c8..6b74f52 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/as-border-image/svg-as-border-image-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/as-border-image/svg-as-border-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png index 082eaaf..380fc413 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png index 082eaaf..380fc413 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png index 50c2159..cdef735 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt index 233f9ba9..ef4deb6 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -257,184 +257,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutHTMLCanvas CANVAS id='source-oversolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-overimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-overcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-overvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-insolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-inimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-incanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-invideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-oversolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-overimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-overcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-overvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-insolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-inimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-incanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-invideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lightersolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lighterimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lightercanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lightervideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copysolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copyimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copycanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copyvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorvideo'", - "reason": "invalidate paint rectangle" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/12-55-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/12-55-expected.png index 402568ee..8c82c424 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/12-55-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/12-55-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/182-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/182-expected.png index 211b2675..0c6696f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/182-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/182-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/2-dht-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/2-dht-expected.png index 38a7b19..1837bad 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/2-dht-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/2-dht-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/23-55-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/23-55-expected.png index c57020d3..1d4d6880 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/23-55-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/23-55-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/55-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/55-expected.png index b5820ace..ce7cddf3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/55-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/55-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/alt-text-wrapping-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/alt-text-wrapping-expected.png index 153a3aa..4011bb3 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/alt-text-wrapping-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/alt-text-wrapping-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png index 6d3de144..0735864 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-shape-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-shape-expected.png index 85e6c976..6fd918396 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-shape-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-image-shape-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png index 221f44ced..2003545 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png index ced71e8..15feb28 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png index 09b4743..31bbd530 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-css-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-css-expected.png index 280fda2a..53a29ae 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-css-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-css-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-expected.png index c50431b..186f3e4 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png index 90f1daab..b12b850 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/image-map-anchor-children-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/image-map-anchor-children-expected.png index 2a88f42..a697514 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/image-map-anchor-children-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/image-map-anchor-children-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-zero-outline-width-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-zero-outline-width-expected.png index 4738c50..64019421 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-zero-outline-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/imagemap-focus-ring-zero-outline-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png index 5dae8179..7abc98b2 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png index d3586c5..b9204e14 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/png-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/png-with-color-profile-expected.png index 72a5fee..756f4a6 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/png-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/png-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.png index f886512..d130757 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png index f28507e..971f355 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.png index eb19f0b2..ea928a3a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.png index 2c07476..dadd2af 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.png index 684cd4f..f77d5bdc0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png index 05ab8aa..6ef3c40 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-images-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-images-expected.png index d5e8375..26a95cd 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/rendering-broken-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png index a761608..a8a8a3a 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt index 4b529666..6c225d1b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt
@@ -61,340 +61,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt index f77a218..380687f2 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt
@@ -98,72 +98,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Can you findme in this boring text?'", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Findme in a typewriter!'", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Findme on a path! Did you findme?'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-and-content-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-and-content-expected.txt index 13b41fe..4d42b00b 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-and-content-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-and-content-expected.txt
@@ -121,112 +121,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png index c9a2775..b7e4b2ea 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/stable/paint/invalidation/iframe-display-block-to-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/stable/paint/invalidation/iframe-display-block-to-display-none-expected.txt index 71ca322..c77e11d 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/stable/paint/invalidation/iframe-display-block-to-display-none-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/stable/paint/invalidation/iframe-display-block-to-display-none-expected.txt
@@ -24,32 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutIFrame IFRAME id='iframe'", - "reason": "layoutObject removal" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "layoutObject removal" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "layoutObject removal" - }, - { - "object": "LayoutView #document", - "reason": "full" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "layoutObject insertion" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "layoutObject insertion" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/stable/paint/invalidation/iframe-display-none-to-display-block-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/stable/paint/invalidation/iframe-display-none-to-display-block-expected.txt index f922c243..1719a2e2 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/stable/paint/invalidation/iframe-display-none-to-display-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/stable/paint/invalidation/iframe-display-none-to-display-block-expected.txt
@@ -29,40 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutIFrame IFRAME id='iframe'", - "reason": "layoutObject insertion" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "layoutObject removal" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "layoutObject removal" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll" - }, - { - "object": "LayoutView #document", - "reason": "scroll" - }, - { - "object": "LayoutView #document", - "reason": "full" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "layoutObject insertion" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "layoutObject insertion" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/stable/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/stable/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt index 26cf308..7861f159 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/stable/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/stable/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt
@@ -54,60 +54,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutIFrame IFRAME id='iframe'", - "reason": "layoutObject removal" - }, - { - "object": "LayoutText #text", - "reason": "layoutObject removal" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "layoutObject removal" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'", - "reason": "bounds change" - }, - { - "object": "RootInlineBox", - "reason": "bounds change" - }, - { - "object": "LayoutImage IMG", - "reason": "bounds change" - }, - { - "object": "LayoutText #text", - "reason": "location change" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "layoutObject removal" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "layoutObject removal" - }, - { - "object": "LayoutView #document", - "reason": "full" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "layoutObject insertion" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "layoutObject insertion" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png index fe98c529..07c44aca 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/color-profile-munsell-bt709-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/color-profile-munsell-bt709-to-srgb-expected.png index 3ba0eb5..fd52e4f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/color-profile-munsell-bt709-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/color-profile-munsell-bt709-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/images/color-profile-munsell-adobe-to-srgb-expected.png index 2289c210..2d13eec 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/images/color-profile-munsell-adobe-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/images/color-profile-munsell-adobe-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/images/color-profile-svg-fill-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/images/color-profile-svg-fill-text-expected.png index 140bfad..f564d4f0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/images/color-profile-svg-fill-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/images/color-profile-svg-fill-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/background/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/background/change-text-content-and-background-color-expected.txt index 95ac1a1d..57d87db 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/background/change-text-content-and-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/background/change-text-content-and-background-color-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl (positioned) INPUT id='input'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'NEW'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/clip/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/clip/control-clip-expected.txt index e3ca88e..2a4890ed 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/clip/control-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/clip/control-clip-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText (anonymous)", - "reason": "full" - }, - { - "object": "InlineTextBox 'SUCCESS'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'SUCCESS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/flexbox/scrollbars-changed-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/flexbox/scrollbars-changed-expected.txt index 6f67e84..dba55d8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/flexbox/scrollbars-changed-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/flexbox/scrollbars-changed-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow DIV id='dynamic' class='content'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'z'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt index 95edcea8..2d115fc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutButton BUTTON", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'Reset'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt index b58f4f2..365123e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutButton INPUT", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'Submit'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/multi-layout-one-frame-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/multi-layout-one-frame-expected.txt index ac92b58..78d731fc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/multi-layout-one-frame-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/multi-layout-one-frame-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASSED'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASSED'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt index 9af8c99..b01a80f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'A\u00A0\u00A0B'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt index 66f62ae..524f460 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'A\u00A0\u00A0B'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/search-field-cancel-expected.txt index adfb671e..766a68b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/search-field-cancel-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/search-field-cancel-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'some text'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt index bbecf8d..ae51837 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/subtree-root-skipped-expected.txt index 9a64c70..b201860a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/subtree-root-skipped-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/subtree-root-skipped-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/vertical-rl-as-paint-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/vertical-rl-as-paint-container-expected.txt index a0338ca5..6502759 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/vertical-rl-as-paint-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/paint/invalidation/vertical-rl-as-paint-container-expected.txt
@@ -45,28 +45,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Lorem ipsum dolor'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'sit amet,'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'consectetur'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'adipiscing elit.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/12-55-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/12-55-expected.png index 27d7e5a..c3e7f5a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/12-55-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/12-55-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/182-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/182-expected.png index 93864f57..41e829e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/182-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/182-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/2-dht-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/2-dht-expected.png index 853a41c7..e49a7cd8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/2-dht-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/2-dht-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/23-55-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/23-55-expected.png index 04224fb..3a2b339 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/23-55-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/23-55-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/55-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/55-expected.png index a712cb1..bc3d191 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/55-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/55-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png index 4df0d15..84d602e2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png index 7dc745aa..128284a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png index ae2b51e4..3dd4a02 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png index 2e2e787e..864c0d1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png index d785b37..0bc2e92 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/background/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/background/change-text-content-and-background-color-expected.txt index 9f53ba0f..5cfc927a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/background/change-text-content-and-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/background/change-text-content-and-background-color-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl (positioned) INPUT id='input'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'NEW'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/search-field-cancel-expected.txt index b4b8ad9..28a9894 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/search-field-cancel-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/search-field-cancel-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'some text'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/subtree-root-skipped-expected.txt index 95abdbd..6d86460 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/subtree-root-skipped-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/paint/invalidation/subtree-root-skipped-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/12-55-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/12-55-expected.png index fb3b7d3a..cdcfb20 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/12-55-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/12-55-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/182-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/182-expected.png index 7409301..9dd4f89 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/182-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/182-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/2-dht-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/2-dht-expected.png index b3780c2..0e3866c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/2-dht-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/2-dht-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/23-55-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/23-55-expected.png index 9c0617b0..ec8c421 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/23-55-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/23-55-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/55-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/55-expected.png index 20f6f85..89c4ac7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/55-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/virtual/exotic-color-space/images/55-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/inline-reflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/inline-reflow-expected.txt index 518f341e..d1ba279 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/inline-reflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/inline-reflow-expected.txt
@@ -154,76 +154,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='div1' class='container'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A A A A A AA AA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AA AA AAA AAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAA AAAA AAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAA AAAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAAA AAAAAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAAA AAAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAA AAAA AAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAA AAA AAA AA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AA AA AA A A A'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A A'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='div2' class='container'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A A A A A'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-repaint-expected.txt index 7f715a7ea..511e50a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-repaint-expected.txt
@@ -39,56 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='a'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'XXXXXX'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-abspos-in-relpos-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-abspos-in-relpos-expected.txt index 6c6d72d9..cc9a8097 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-abspos-in-relpos-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-abspos-in-relpos-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-block-expected.txt index a3eb4e3..6cf19252 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-block-expected.txt
@@ -24,32 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-inline-expected.txt index 749d08e1..6cf19252 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-inline-expected.txt
@@ -24,28 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN id='target'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-text-expected.txt index bf70e4e8..6cf19252 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/multicol/multicol-with-text-expected.txt
@@ -24,108 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "incremental" - }, - { - "object": "RootInlineBox", - "reason": "incremental" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "appeared" - }, - { - "object": "LayoutMultiColumnSet (anonymous)", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/outline/inline-outline-repaint-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/outline/inline-outline-repaint-2-expected.txt index 67a1dad..1049d1e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/outline/inline-outline-repaint-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/outline/inline-outline-repaint-2-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN", - "reason": "outline" - }, - { - "object": "InlineFlowBox", - "reason": "outline" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Test'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/overflow/inline-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/overflow/inline-overflow-expected.txt index 8ba3fea..3442ffc8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/overflow/inline-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/overflow/inline-overflow-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'A\u00A0\u00A0B'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/position/inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/position/inline-relative-positioned-expected.txt index fd7fdd4..2dec27f5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/position/inline-relative-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/position/inline-relative-positioned-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'a'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt index 1f35ab8..d3ea4ee 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
@@ -29,48 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) SPAN id='target'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/position/text-in-relative-positioned-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/position/text-in-relative-positioned-inline-expected.txt index 04b87aa9..dee5ac6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/position/text-in-relative-positioned-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/position/text-in-relative-positioned-inline-expected.txt
@@ -34,12 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/push-block-with-first-line-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/push-block-with-first-line-expected.txt index 5a6af59..05e4252 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/push-block-with-first-line-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/push-block-with-first-line-expected.txt
@@ -39,28 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='spacer'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow DIV class='test'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'JOCULAR'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/ruby-flipped-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/ruby-flipped-blocks-expected.txt index 622857e..bd472aa 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/ruby-flipped-blocks-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/paint/invalidation/ruby-flipped-blocks-expected.txt
@@ -44,52 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a'", - "reason": "geometry" - }, - { - "object": "LayoutRubyRun (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'c'", - "reason": "style change" - }, - { - "object": "LayoutRubyBase (anonymous)", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'b'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/svg/as-border-image/svg-as-border-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/svg/as-border-image/svg-as-border-image-expected.png index e7d160b..03ee60c7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.12/svg/as-border-image/svg-as-border-image-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.12/svg/as-border-image/svg-as-border-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/background/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/background/change-text-content-and-background-color-expected.txt index 8a03346..4aef00ee5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/background/change-text-content-and-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/background/change-text-content-and-background-color-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl (positioned) INPUT id='input'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'NEW'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/clip/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/clip/control-clip-expected.txt index fc3ad95..c5eae1bd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/clip/control-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/clip/control-clip-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText (anonymous)", - "reason": "full" - }, - { - "object": "InlineTextBox 'SUCCESS'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'SUCCESS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/details-open-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/details-open-repaint-expected.txt index 71787ba7..06969d64f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/details-open-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/details-open-repaint-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutDetailsMarker DIV id='details-marker'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow DIV id='details-content'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutTextControl INPUT", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt index 17f26d4..3d2c557f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutButton INPUT", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'Submit'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/forms/textarea-caret-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/forms/textarea-caret-expected.txt index e3f3fe2..49339ea7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/forms/textarea-caret-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/forms/textarea-caret-expected.txt
@@ -49,48 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl TEXTAREA id='editor'", - "reason": "subtree" - }, - { - "object": "LayoutTextControl TEXTAREA id='editor'", - "reason": "geometry" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutTextControl TEXTAREA id='editor'", - "reason": "geometry" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox '------------------------------------------------------------'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/multi-layout-one-frame-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/multi-layout-one-frame-expected.txt index 432305dc..3d649bf 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/multi-layout-one-frame-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/multi-layout-one-frame-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASSED'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASSED'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt index 58d45316a..eb092d6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt index 2306c11a..b474661 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt
@@ -45,32 +45,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='root'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt index 2306c11a..b474661 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt
@@ -45,32 +45,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='root'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/search-field-cancel-expected.txt index b22e593..c61719d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/search-field-cancel-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/search-field-cancel-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'some text'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt index 695c7be..6591452 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt
@@ -24,28 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt index 695c7be..6591452 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt
@@ -24,28 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/stacked-diacritics-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/stacked-diacritics-expected.txt index 34bfffa..b0a5f9e8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/stacked-diacritics-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/stacked-diacritics-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "disappeared" - }, - { - "object": "LayoutBlockFlow DIV id='stacked'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/subtree-root-skipped-expected.txt index 0c79b00..d68163d0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/subtree-root-skipped-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/invalidation/subtree-root-skipped-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/color-matching/image-color-matching-expected.png b/third_party/WebKit/LayoutTests/platform/mac/compositing/color-matching/image-color-matching-expected.png index 798a545..190e0ea 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/color-matching/image-color-matching-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/color-matching/image-color-matching-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/selection-repaint-with-gaps-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/selection-repaint-with-gaps-expected.txt index ccc348da..c857c19 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/selection-repaint-with-gaps-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/selection-repaint-with-gaps-expected.txt
@@ -56,20 +56,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'lorem'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ipsum'", - "reason": "geometry" - } ] } { @@ -140,32 +126,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'lorem'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ipsum'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'lorem'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ipsum'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/object-fit-grow-landscape-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css/object-fit-grow-landscape-expected.png index bdee278..2c45e83845 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/object-fit-grow-landscape-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/object-fit-grow-landscape-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/css/object-fit-grow-portrait-expected.png b/third_party/WebKit/LayoutTests/platform/mac/fast/css/object-fit-grow-portrait-expected.png index 2450010f..a1b2d4d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/css/object-fit-grow-portrait-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/css/object-fit-grow-portrait-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-cross-fade-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-cross-fade-expected.png index 414f93c..0b3c5807 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-cross-fade-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-cross-fade-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-cross-fade-png-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-cross-fade-png-expected.png index 414f93c..0b3c5807 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-cross-fade-png-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-cross-fade-png-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-border-radius-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-border-radius-expected.png index 2bb7a53..1f5e1f8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-border-radius-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-border-radius-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-drag-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-drag-image-expected.png index f7e4cca6..573a04c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-drag-image-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-drag-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-filter-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-filter-expected.png index eb2bc1a8..aa74edf 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-filter-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-filter-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-group-expected.png index 32f6084..95e4f7ec 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-canvas-svg-expected.png index 89deec4..bbffb22 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-canvas-svg-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-canvas-svg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-expected.png index 3952b51..b8e5539 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-filter-all-expected.png index c53b744..39df836 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-filter-all-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-filter-all-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-shape-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-shape-expected.png index c4ed1ae..0d51fcd6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-shape-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-shape-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-layer-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-layer-expected.png index 9ea71d1..905ad29 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-layer-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-layer-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-munsell-adobe-to-srgb-expected.png index f7cbcc07..2e1cd63f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-munsell-adobe-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-munsell-adobe-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-svg-fill-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-svg-fill-text-expected.png index 44548d1..45113da 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-svg-fill-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-svg-fill-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/cross-fade-background-size-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/cross-fade-background-size-expected.png index ff06900..3ce36f4f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/cross-fade-background-size-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/cross-fade-background-size-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/jpeg-with-color-profile-expected.png index 41df6fe..a20e411 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/jpeg-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/jpeg-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/png-suite/test-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/png-suite/test-expected.png index 8c73b1d..52971d4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/png-suite/test-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/png-suite/test-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/png-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/png-with-color-profile-expected.png index d9db4ee..07e14253 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/images/png-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/images/png-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png index 1af9fc465..7a5501e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/color-profile-munsell-bt709-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/color-profile-munsell-bt709-to-srgb-expected.png index 40e9c6f1..409460f34 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/media/color-profile-munsell-bt709-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/media/color-profile-munsell-bt709-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/4776765-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/4776765-expected.txt index 5e2bcb6..db2082747 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/4776765-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/4776765-expected.txt
@@ -34,36 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutBlockFlow DIV id='div'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/background/backgroundSizeRepaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/background/backgroundSizeRepaint-expected.txt index 41f449d..81835ef 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/background/backgroundSizeRepaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/background/backgroundSizeRepaint-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='a'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='b'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/background/body-background-image-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/background/body-background-image-expected.txt index b6143591..875f7de 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/background/body-background-image-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/background/body-background-image-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/background/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/background/change-text-content-and-background-color-expected.txt index d65c39f..d414a7f40 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/background/change-text-content-and-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/background/change-text-content-and-background-color-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl (positioned) INPUT id='input'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'NEW'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/block-no-inflow-children-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/block-no-inflow-children-expected.txt index 417a055f..db7cd383 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/block-no-inflow-children-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/block-no-inflow-children-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'La la la la'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/border-radius-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/border-radius-repaint-expected.txt index 26d475e..c18ccd6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/border-radius-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/border-radius-repaint-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='a'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='b'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/border-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/border-repaint-glitch-expected.txt index c671d88..6393737e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/border-repaint-glitch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/border-repaint-glitch-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='a'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='b'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/box-inline-resize-expected.txt index e8f4906a..fa82e04 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/box-inline-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/box-inline-resize-expected.txt
@@ -34,36 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG id='foo'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow H2", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Chromium'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/box-shadow-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/box-shadow-dynamic-expected.txt index 611c5e1..53c63ecd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/box-shadow-dynamic-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/box-shadow-dynamic-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt index 456642e..c652ee4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN id='target'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Text'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-3509-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-3509-expected.txt index 4f83d01..b8742cfb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-3509-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-3509-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='im'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-5699-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-5699-expected.txt index 6581d738..3203aea5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-5699-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-5699-expected.txt
@@ -39,56 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='d'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Hello'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-6278-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-6278-expected.txt index a537d3d0..ebc3ae7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-6278-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-6278-expected.txt
@@ -139,72 +139,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD id='col1'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Curabitur pretium, quam quis semper'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'malesuada, est libero feugiat libero,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'vel fringilla orci nibh sed neque.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Quisque eu nulla non nisi molestie'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'accumsan. Etiam tellus urna, laoreet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ac, laoreet non, suscipit sed, sapien.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Phasellus vehicula, sem at posuere'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'vehicula, augue nibh molestie nisl,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'nec ullamcorper lacus ante vulputate'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'pede.'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-6473-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-6473-expected.txt index 9df5017..576d182 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-6473-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-6473-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='allcontent'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'SUCCESS'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-7235-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-7235-expected.txt index 4abb7307..d1d21574 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-7235-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/bugzilla-7235-expected.txt
@@ -34,36 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) SPAN id='p'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='t'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-outside-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-outside-block-expected.txt index 8b6f76b..dc47339 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-outside-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-outside-block-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-subpixel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-subpixel-expected.txt index 0fb0c10c..791f56b9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-subpixel-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-subpixel-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/clip-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/clip-with-layout-delta-expected.txt index 61bd4c0..f0141a0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/clip-with-layout-delta-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/clip-with-layout-delta-expected.txt
@@ -49,48 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "background" - }, - { - "object": "LayoutBlockFlow SPAN id='t1'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV", - "reason": "background" - }, - { - "object": "LayoutBlockFlow SPAN id='t2' class='blue'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/clipped-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/clipped-relative-expected.txt index 02c8c5e..7298afc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/clipped-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/clipped-relative-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='inner'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/control-clip-expected.txt index 0ad4cae..e82866e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/control-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/control-clip-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText (anonymous)", - "reason": "full" - }, - { - "object": "InlineTextBox 'SUCCESS'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'SUCCESS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/outline-clip-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/outline-clip-change-expected.txt index 3c25c31..bf4274f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/outline-clip-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/clip/outline-clip-change-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) A id='link' class='updated'", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'Lorem Ipsum'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt index f767d77..5d35ecb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt
@@ -62,36 +62,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'test1'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt index dfbaa520..70c08e0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt
@@ -56,32 +56,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='container'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'", - "reason": "compositing update" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/text-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/text-color-change-expected.txt index b1bc087..b2a2f9e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/text-color-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/text-color-change-expected.txt
@@ -83,246 +83,6 @@ "reason": "style change" }, { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 57, 47, 185], - "reason": "style change" - }, - { "object": "InlineTextBox ' Text'", "rect": [8, 57, 47, 185], "reason": "style change" @@ -389,340 +149,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/text-match-highlight-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/text-match-highlight-expected.txt index 3c998be8..4962012 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/text-match-highlight-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/text-match-highlight-expected.txt
@@ -59,72 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'Can you findme in this boring text?'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'Findme in a typewriter!'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'Findme on a path! Did you findme?'", - "reason": "DocumentMarker change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt index 4a8cefe..9674c949 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt
@@ -74,112 +74,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-3-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-3-expected.txt index fbeffd2..f4d759d9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/crbug-371640-3-expected.txt
@@ -34,12 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='keep_child'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/create-layer-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/create-layer-repaint-expected.txt index 3fec55a..f91d2285 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/create-layer-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/create-layer-repaint-expected.txt
@@ -34,12 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test' class='stretchy'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/delete-into-nested-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/delete-into-nested-block-expected.txt index e518006..e010546 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/delete-into-nested-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/delete-into-nested-block-expected.txt
@@ -44,28 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='one'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'three'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/details-open-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/details-open-repaint-expected.txt index e51b523..6a97a78 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/details-open-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/details-open-repaint-expected.txt
@@ -29,36 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutDetailsMarker DIV id='details-marker'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow DIV id='details-content'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutTextControl INPUT", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt index 662cccc..19f391b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
@@ -45,12 +45,6 @@ [-4, -4, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='resize' class='drop-shadow'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt index 9b1e80b..7ab928a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
@@ -40,12 +40,6 @@ [8, 8, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='resize' class='accelerated'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/flexbox/repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/flexbox/repaint-expected.txt index 8a657585..3a8c122 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/flexbox/repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/flexbox/repaint-expected.txt
@@ -184,92 +184,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='left'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'aliquet. Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'feugiat vehicula. Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'condimentum leo neque sed nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'id, faucibus id quam.'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='left'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/flexbox/scrollbars-changed-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/flexbox/scrollbars-changed-expected.txt index 5e86dd7..3afbad8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/flexbox/scrollbars-changed-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/flexbox/scrollbars-changed-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow DIV id='dynamic' class='content'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'z'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/float-move-during-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/float-move-during-layout-expected.txt index 3df1904..e900ee0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/float-move-during-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/float-move-during-layout-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/button-checkbox-click-method-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/button-checkbox-click-method-repaint-expected.txt index 915ca2d9..00920a6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/button-checkbox-click-method-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/button-checkbox-click-method-repaint-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow INPUT id='checkbox'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt index b724650..235fcc5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutButton BUTTON", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'Reset'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.txt index 9391247..beaecb8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow INPUT", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.txt index d29eafc..91ed031e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow INPUT", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt index 3224051..d28e402 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSlider INPUT", - "reason": "subtree" - }, - { - "object": "LayoutFlexibleBox DIV", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV id='track'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV id='thumb'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/select-option-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/select-option-background-color-expected.txt index a256fb01..bcf1b12 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/select-option-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/select-option-background-color-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow OPTION id='option'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt index 888def38..ad2dc5e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutButton INPUT", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'Submit'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/textarea-caret-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/textarea-caret-expected.txt index 727b9b4..c38f8e727d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/textarea-caret-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/forms/textarea-caret-expected.txt
@@ -39,56 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutTextControl TEXTAREA id='editor'", - "reason": "subtree" - }, - { - "object": "LayoutTextControl TEXTAREA id='editor'", - "reason": "geometry" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutTextControl TEXTAREA id='editor'", - "reason": "geometry" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox '------------------------------------------------------------'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/gradients-em-stops-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/gradients-em-stops-repaint-expected.txt index e0bcaf8e..2a51ff4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/gradients-em-stops-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/gradients-em-stops-repaint-expected.txt
@@ -44,36 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='em-units'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='box3' class='box'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='box4' class='box'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='indicator'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/iframe-display-none-to-display-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/iframe-display-none-to-display-block-expected.txt index 1be0c0b..0f37dab9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/iframe-display-none-to-display-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/iframe-display-none-to-display-block-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutIFrame IFRAME id='iframe'", - "reason": "appeared" - }, - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt index 9144227..53b6b0a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -479,184 +479,6 @@ "position": [15, 854], "bounds": [150, 60] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutHTMLCanvas CANVAS id='source-oversolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-overimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-overcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-overvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-insolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-inimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-incanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-invideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-oversolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-overimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-overcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-overvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-insolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-inimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-incanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-invideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lightersolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lighterimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lightercanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lightervideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copysolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copyimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copycanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copyvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorvideo'", - "reason": "invalidate paint rectangle" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/in-scaled-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/in-scaled-iframe-expected.txt index ff7325d..cbf2991 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/in-scaled-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/in-scaled-iframe-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-color-change-expected.txt index 0d0690e..a305fd91 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-color-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-color-change-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN id='target'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-reflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-reflow-expected.txt index d7ba7dab..f35e22c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-reflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/inline-reflow-expected.txt
@@ -154,76 +154,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='div1' class='container'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A A A A A AA AA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AA AA AAA AAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAA AAAA AAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAA AAAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAAA AAAAAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAAA AAAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAA AAAA AAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAA AAA AAA AA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AA AA AA A A A'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A A'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='div2' class='container'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A A A A A'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt index 70eedf93..634c332a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt
@@ -39,16 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='root' class='editing'", - "reason": "full" - }, - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt index c25a949..0b95dda9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
@@ -37,56 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='container'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='absolute'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'This test checks that switching opacity'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'invalidates the full subtree.'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'This text should be visible in the'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'output.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-1-expected.txt index 92ac3e5..345535e4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-1-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-1-expected.txt
@@ -504,252 +504,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV id='pinkFloat'", - "reason": "incremental" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The chief difficulty Alice found at first was in'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'managing her\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'flamingo: she succeeded in getting its'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'body tucked away,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'comfortably enough, under her'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'arm, with its legs hanging down,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'but generally, just as'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she had got its neck nicely straightened\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'out, and was going to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'give the hedgehog a blow with its head, it\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'would'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' twist itself'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'round and look up in her face, with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'such a puzzled expression'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'that she could not help bursting out\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'laughing: and when she'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had got its head down, and was going to\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'very provoking to find that the hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'and was in the act of crawling away: besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'generally a ridge or furrow in the way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'send the hedgehog to, and, as the doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'always getting up and walking off to other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice soon came to the conclusion that it was a very'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for the hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'about once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'here; the great\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-10-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-10-expected.txt index 6b05b58..aead6f6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-10-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-10-expected.txt
@@ -314,168 +314,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always getting up and walking off to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'that it was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for the hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was in a furious passion, and went'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and shouting \u2018Off with his head!\u2019 or'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'here; the great\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-2-expected.txt index da91076..93d6a70 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-2-expected.txt
@@ -479,260 +479,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The chief difficulty Alice found at first was in'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'managing her\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'flamingo: she succeeded in getting its'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'body tucked away,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'comfortably enough, under her'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'arm, with its legs hanging down,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'but generally, just as'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she had got its neck nicely straightened\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'out, and was'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'going to give the hedgehog a blow with its head, it'", - "reason": "geometry" - }, - { - "object": "LayoutInline I id='would'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'would'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' twist itself round and look up in her face, with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'such a'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'puzzled expression that she could not help bursting out'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'laughing: and when she had got its head down, and was going'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'to\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always getting up and walking off to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'that it was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for the hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'here; the great\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-3-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-3-expected.txt index 78a56bd09..994f45d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-3-expected.txt
@@ -304,168 +304,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always getting up and walking off to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'that it was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for the hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was in a furious passion, and went'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and shouting \u2018Off with his head!\u2019 or'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'here; the great\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-4-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-4-expected.txt index 6b0f406..1c77a0b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-4-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-4-expected.txt
@@ -304,172 +304,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always getting up and walking off to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'that it was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for the hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'head!\u2019 about once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'here; the great\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-5-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-5-expected.txt index 9c0d6e0..2a86b18d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-5-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-5-expected.txt
@@ -314,172 +314,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always getting up and walking off to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'that it was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting for'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'here; the great\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-6-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-6-expected.txt index ad6ea99..5d2725ba 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-6-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-6-expected.txt
@@ -134,92 +134,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always getting up and walking off to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'that it was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'foo'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-7-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-7-expected.txt index e2d7076d..c305e6c9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-7-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-7-expected.txt
@@ -109,64 +109,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for the hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='theQueen'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'the'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Queen'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-8-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-8-expected.txt index bf9e2cdd..ce7a6e34 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-8-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-8-expected.txt
@@ -439,220 +439,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The chief difficulty Alice found at first was in'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'managing her\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'flamingo: she succeeded in getting its'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'body tucked away,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'comfortably enough, under her'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'arm, with its legs hanging down,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'but generally, just as'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she had got its neck nicely straightened\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'out, and was'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'going to give the hedgehog a blow with its head, it'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'would'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' twist itself round and look up in her face, with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'such a'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'puzzled expression that she could not help bursting out'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'laughing: and when she had got its head down, and was going'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'to\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always getting up and walking off to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'that it was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting for the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was in a'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'about once in a minute.\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-9-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-9-expected.txt index f95da14..877f071 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-9-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/line-flow-with-floats-9-expected.txt
@@ -409,212 +409,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' twist itself round and look up in her face, with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'such a'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'puzzled expression that she could not help bursting out'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'laughing: and when she had got its head down, and was going'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'to\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='yellowFloat'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'crawling away: besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ridge or furrow in the way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'send the hedgehog to, and, as the doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'always getting up and walking off to other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice soon came to the conclusion that it was a very'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for the hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'about once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'here; the great\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/lines-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/lines-with-layout-delta-expected.txt index bdf8e8a..7ac7d54 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/lines-with-layout-delta-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/lines-with-layout-delta-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/list-marker-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/list-marker-2-expected.txt index 51c4890..bcc6d867 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/list-marker-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/list-marker-2-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutListItem LI", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutListMarker (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/make-children-non-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/make-children-non-inline-expected.txt index fbf2c58..09a4816 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/make-children-non-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/make-children-non-inline-expected.txt
@@ -114,168 +114,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Word,'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'words,'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'more words.'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'I could'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'write a book'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'about all the stuff'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'that comes'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'after'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'the break.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multi-layout-one-frame-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multi-layout-one-frame-expected.txt index 91ead837..ee06ea0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multi-layout-one-frame-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multi-layout-one-frame-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASSED'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASSED'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/column-rules-fixed-height-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/column-rules-fixed-height-expected.txt index 0a915e7..8d972a0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/column-rules-fixed-height-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/column-rules-fixed-height-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - }, - { - "object": "LayoutMultiColumnSet (anonymous)", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-repaint-expected.txt index 399e2da..58d0525 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-repaint-expected.txt
@@ -39,56 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='a'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'XXXXXX'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-abspos-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-abspos-expected.txt index 6a6d834e..abccebb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-abspos-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-abspos-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-abspos-in-relpos-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-abspos-in-relpos-expected.txt index 1e4230a5..1c8c15f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-abspos-in-relpos-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-abspos-in-relpos-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-block-expected.txt index 7925826b..b3122c8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-block-expected.txt
@@ -24,32 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-inline-expected.txt index 25b394a..b3122c8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-inline-expected.txt
@@ -24,28 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN id='target'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-text-expected.txt index 7174615..b3122c8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/multicol/multicol-with-text-expected.txt
@@ -24,92 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "incremental" - }, - { - "object": "RootInlineBox", - "reason": "incremental" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "appeared" - }, - { - "object": "LayoutMultiColumnSet (anonymous)", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/non-text-link-invalidation-optimization-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/non-text-link-invalidation-optimization-expected.txt index e99ff824..6496bd9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/non-text-link-invalidation-optimization-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
@@ -49,56 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'This test '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' passes if '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'only'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' text is invalidated and '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' no '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' images.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt index 0e5e64a..b25c390 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt
@@ -47,20 +47,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutListMarker (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) UL id='submenu'", - "reason": "geometry" - }, - { - "object": "LayoutListMarker (anonymous)", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-continuations-expected.txt index 6904bc8..f3c2cab0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-continuations-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-enable-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-enable-continuations-expected.txt index 0e78f8b..da2977e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-enable-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-enable-continuations-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-ring-on-child-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-ring-on-child-move-expected.txt index b00d0b3..cad6eca 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-ring-on-child-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-ring-on-child-move-expected.txt
@@ -34,16 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "outline" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='child'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt index 3b9354fc..abebb2cc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt
@@ -39,16 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN", - "reason": "outline" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='block'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt index e5bb878..f601d561 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt
@@ -34,32 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN", - "reason": "outline" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='block'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/inline-focus-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/inline-focus-expected.txt index 7aa0420fa..73346222 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/inline-focus-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/inline-focus-expected.txt
@@ -44,44 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline A id='link'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Home'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'crbug.com/424078: ensure inline elements get their outline painted'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/inline-outline-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/inline-outline-repaint-expected.txt index 3f19069..9e3e605 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/inline-outline-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/inline-outline-repaint-expected.txt
@@ -59,48 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutInline SPAN id='test'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Lorem ipsum'", - "reason": "full" - }, - { - "object": "InlineTextBox ' '", - "reason": "full" - }, - { - "object": "InlineTextBox 'dolor\u00A0'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt index 7926a6d..1f7fd856 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='outline'", - "reason": "outline" - }, - { - "object": "LayoutBlockFlow DIV id='child'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt index 4fe684d..9f0ca97 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='outline'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='child'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-change-invalidation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-change-invalidation-expected.txt index 1bca1ad..2a3214b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-change-invalidation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-change-invalidation-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow A id='link'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutListMarker (anonymous)", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-continuations-expected.txt index cf46d7a..1a0487c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-continuations-expected.txt
@@ -44,64 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'CONTENTS'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'CONTENTS'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-inset-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-inset-expected.txt index 240039c..a639ec3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-inset-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-inset-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='a'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='b'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-repaint-glitch-expected.txt index a60a2c5..d425eb2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-repaint-glitch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-repaint-glitch-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='a'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='b'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-shrinking-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-shrinking-expected.txt index a8adea4..c6465c4a3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-shrinking-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/outline/outline-shrinking-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='t'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/float-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/float-overflow-expected.txt index ea93e4f..ac3c12f71 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/float-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/float-overflow-expected.txt
@@ -569,468 +569,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/float-overflow-right-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/float-overflow-right-expected.txt index cf53b1c3..1fb5e1c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/float-overflow-right-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/float-overflow-right-expected.txt
@@ -569,468 +569,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/inline-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/inline-overflow-expected.txt index 097643d..d2519776 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/inline-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/inline-overflow-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'A\u00A0\u00A0B'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt index 28f7aaf..dc30a24 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'A\u00A0\u00A0B'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt index b28642b..dc978dbb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'A\u00A0\u00A0B'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/line-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/line-overflow-expected.txt index 121e7b5..efc22cd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/line-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/line-overflow-expected.txt
@@ -109,68 +109,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Cras faucibus. Nunc'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'adipiscing, enim in scelerisque'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'convallis,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'augue '", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='t'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'purus'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' eleifend'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'lacus, at sagittis eros leo'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'pulvinar velit. Integer'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'sollicitudin nisi ut urna blandit'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'convallis.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/opacity-change-on-overflow-float-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/opacity-change-on-overflow-float-expected.txt index 7201382..62b1a91 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/opacity-change-on-overflow-float-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/opacity-change-on-overflow-float-expected.txt
@@ -49,16 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV class='red'", - "reason": "background" - }, - { - "object": "LayoutBlockFlow (floating) DIV class='green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/overflow-delete-line-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/overflow-delete-line-expected.txt index 4dcf9f57..d2f2c0a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/overflow-delete-line-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/overflow-delete-line-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='dv'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Lorem ipsu'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/rel-positioned-inline-with-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/rel-positioned-inline-with-overflow-expected.txt index 12294e0..a475976 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/rel-positioned-inline-with-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/rel-positioned-inline-with-overflow-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/repaint-resized-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/repaint-resized-overflow-expected.txt index e2e450f..5328ecc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/repaint-resized-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/overflow/repaint-resized-overflow-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='s'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt index ab790a63..04229483 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='inner-target'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'abc'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt index 002560f..21f5afb8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt
@@ -44,40 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) SPAN", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (positioned) SPAN", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/containing-block-position-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/containing-block-position-change-expected.txt index 4dd6e9e0..579d794 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/containing-block-position-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/containing-block-position-change-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='t'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/fixed-element-repaint-after-compositing-update-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/fixed-element-repaint-after-compositing-update-expected.txt index f43361e..73cb1cc3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/fixed-element-repaint-after-compositing-update-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/fixed-element-repaint-after-compositing-update-expected.txt
@@ -46,12 +46,6 @@ [8, 102, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='moveMe'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/fixed-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/fixed-expected.txt index 16834c9..f85720c4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/fixed-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/fixed-expected.txt
@@ -37,12 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='t'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/inline-relative-positioned-expected.txt index 26350670..30edf8c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/inline-relative-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/inline-relative-positioned-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'a'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/layout-state-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/layout-state-relative-expected.txt index c0ac303..ac3966f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/layout-state-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/layout-state-relative-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt index 552cee9..7e44313 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
@@ -29,48 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) SPAN id='target'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/positioned-document-element-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/positioned-document-element-expected.txt index daecdb8..75bb87d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/positioned-document-element-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/positioned-document-element-expected.txt
@@ -34,36 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) HTML class='changed'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt index e936599..de383254 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt index c09f6049..00c64d0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutListItem (positioned) LI", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutListMarker (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt index b3c1ae2..0d6ea40f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt
@@ -30,32 +30,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) DIV id='block'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'When this layer moves it shouldn't generate a repaint rect.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/static-to-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/static-to-positioned-expected.txt index 1f00dfb..70887fd8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/static-to-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/static-to-positioned-expected.txt
@@ -39,16 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='a'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='t'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/text-in-relative-positioned-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/text-in-relative-positioned-inline-expected.txt index 3c6a592..b6fba16 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/text-in-relative-positioned-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/position/text-in-relative-positioned-inline-expected.txt
@@ -34,12 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/push-block-with-first-line-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/push-block-with-first-line-expected.txt index 6078068..ef5be6c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/push-block-with-first-line-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/push-block-with-first-line-expected.txt
@@ -39,28 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='spacer'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow DIV class='test'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'JOCULAR'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/quotes-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/quotes-expected.txt index ca1d835..fe09398 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/quotes-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/quotes-expected.txt
@@ -49,60 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline Q id='q2' class='q-changed'", - "reason": "style change" - }, - { - "object": "LayoutInline \u003Cpseudo:before\u003E", - "reason": "style change" - }, - { - "object": "LayoutQuote (anonymous)", - "reason": "style change" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "style change" - }, - { - "object": "InlineTextBox '{'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'quote 2'", - "reason": "style change" - }, - { - "object": "LayoutInline \u003Cpseudo:after\u003E", - "reason": "style change" - }, - { - "object": "LayoutQuote (anonymous)", - "reason": "style change" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "style change" - }, - { - "object": "InlineTextBox '}'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/reflection/reflection-redraw-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/reflection/reflection-redraw-expected.txt index 5e2246b..1627faa5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/reflection/reflection-redraw-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/reflection/reflection-redraw-expected.txt
@@ -99,88 +99,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'text in the'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'reflection should be'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'green'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'text in the'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'reflection should be'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'green'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'text in the'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'reflection should be'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'green'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'text in the'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'reflection should be'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/reflection/reflection-with-rotation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/reflection/reflection-with-rotation-expected.txt index b5ab017..4ee2a23 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/reflection/reflection-with-rotation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/reflection/reflection-with-rotation-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/remove-inline-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/remove-inline-after-layout-expected.txt index 360e48e0..5aa4cde 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/remove-inline-after-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/remove-inline-after-layout-expected.txt
@@ -49,32 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/remove-inline-layer-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/remove-inline-layer-after-layout-expected.txt index d7b701c1..6d33770fe 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/remove-inline-layer-after-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/remove-inline-layer-after-layout-expected.txt
@@ -34,32 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt index 3673636..e01609eb 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '\u7B2C\u4E00\u6BB5\u843D paragraph 1'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt index b910d13c..9e27f16 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt
@@ -39,32 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='container'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'There should only be one copy of this text.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/resize-iframe-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/resize-iframe-text-expected.txt index 4aed49e..d715dd7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/resize-iframe-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/resize-iframe-text-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutIFrame (positioned) IFRAME", - "reason": "incremental" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/ruby-flipped-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/ruby-flipped-blocks-expected.txt index f7dc82f..5110cd7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/ruby-flipped-blocks-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/ruby-flipped-blocks-expected.txt
@@ -44,52 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a'", - "reason": "geometry" - }, - { - "object": "LayoutRubyRun (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'c'", - "reason": "style change" - }, - { - "object": "LayoutRubyBase (anonymous)", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'b'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt index bb9fcd79..f724917 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt index c1206e93..3ebeda8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt
@@ -79,20 +79,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='text'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt new file mode 100644 index 0000000..dd9907a --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt
@@ -0,0 +1,96 @@ +{ + "layers": [ + { + "name": "LayoutView #document", + "bounds": [800, 600], + "drawsContent": false, + "backgroundColor": "#FFFFFF" + }, + { + "name": "Scrolling Layer", + "bounds": [800, 600], + "drawsContent": false + }, + { + "name": "Scrolling Contents Layer", + "bounds": [800, 600], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "Ancestor Clipping Layer", + "position": [8, 8], + "bounds": [784, 158], + "drawsContent": false + }, + { + "name": "LayoutIFrame IFRAME", + "position": [8, 8], + "bounds": [304, 154] + }, + { + "name": "LayoutView #document", + "position": [10, 10], + "bounds": [300, 150], + "drawsContent": false, + "backgroundColor": "#EEEEEE" + }, + { + "name": "Scrolling Layer", + "position": [10, 10], + "bounds": [300, 150], + "drawsContent": false + }, + { + "name": "Scrolling Contents Layer", + "position": [10, 10], + "bounds": [300, 516], + "backgroundColor": "#EEEEEE", + "transform": 1 + }, + { + "name": "LayoutBlockFlow BODY", + "bounds": [284, 500], + "transform": 2 + }, + { + "name": "Overflow Controls Host Layer", + "position": [10, 10], + "bounds": [300, 150], + "drawsContent": false + }, + { + "name": "Horizontal Scrollbar Layer", + "position": [10, 160], + "bounds": [300, 0] + }, + { + "name": "Vertical Scrollbar Layer", + "position": [310, 10], + "bounds": [0, 150] + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, -20, 0, 1] + ], + "flattenInheritedTransform": false + }, + { + "id": 2, + "parent": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [18, 18, 0, 1] + ] + } + ] +} +
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt index 6203a22d..2966c8f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
@@ -37,16 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Text Text Text Text Text Text Text Text Text Text Text Text Text'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt index f4bdf8d..adc2a55 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
@@ -42,12 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt index 161a0917..c0ef892 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt
@@ -35,32 +35,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='root'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt index 161a0917..c0ef892 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt
@@ -35,32 +35,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='root'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt index 41816b6..cdf7c17 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'after'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt index 638112eb..74ab66d0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'after'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt index 0406ff91..4f349f2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'after'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt index acc72b0a..0c7aeee3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox ' PASS .'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt index 109b8cf..5cdf196 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt
@@ -49,32 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt index 27747c1..e3b727b5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt
@@ -59,72 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'You should see both vertical and horizontal scrollbars.'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'This is the test for '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Bug 36461 - No vertical scrollbar after the CSS class change'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/overflow-scroll-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/overflow-scroll-delete-expected.txt index ad5b27a..7b364a98 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/overflow-scroll-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/overflow-scroll-delete-expected.txt
@@ -39,20 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Passed'", - "reason": "full" - }, - { - "object": "InlineTextBox 'Test'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt index 21986ca..d66d4d10 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
@@ -98,16 +98,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutBlockFlow DIV id='scroller'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt index 4d3c881b..7b308159 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt
@@ -42,24 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='scrollpanel'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='container'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='ul'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint-expected.txt index b7284aff..015940e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/scroll/scrollbar-damage-and-full-viewport-repaint-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/search-field-cancel-expected.txt index 88f5638..5aa078a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/search-field-cancel-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/search-field-cancel-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'some text'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt index 1886165..72436da 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'xx'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'y'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt index b5ef5dc..bcdc6e4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'xx'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'y'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt index c6c2775..33537ff 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'xx'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'y'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt index 2e6e5f5..5ead68a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt
@@ -34,32 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'a'", - "reason": "selection" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'b'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt index e096b625..1d9e0d5e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt
@@ -94,72 +94,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt index 2bcdc40..62101860 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Some text in vertical mode'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selected-replaced-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selected-replaced-expected.txt index fce57f5..6337307 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selected-replaced-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selected-replaced-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage (relative positioned) IMG id='test' class='moved'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-after-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-after-delete-expected.txt index 9ae345c..3c4ce0f0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-after-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-after-delete-expected.txt
@@ -84,28 +84,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-after-remove-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-after-remove-expected.txt index 1f5ce6d..511d9fd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-after-remove-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-after-remove-expected.txt
@@ -99,40 +99,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hello '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'world'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-clear-expected.txt index 209104b..7e0793d3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-clear-expected.txt
@@ -39,36 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='root'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='firstLine'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt index 10a3b6e..674f7f3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt index bbecf8d..ae51837 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt index ba72fa6..1b57b6ba3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt
@@ -29,44 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow HTML", - "reason": "selection" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "selection" - }, - { - "object": "LayoutTable TABLE", - "reason": "selection" - }, - { - "object": "LayoutTableCell TD id='firstCell'", - "reason": "selection" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'First cell'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD id='secondCell'", - "reason": "selection" - }, - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Second cell'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-rl-expected.txt index 3ffb68c..c756c3d6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-rl-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Testing both hit testing'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-within-composited-scroller-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-within-composited-scroller-expected.txt index 4ea4039..82500f4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-within-composited-scroller-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
@@ -79,16 +79,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'test'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt index 300855e..a2f8e835 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Should have blue, not gray, highlight'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt index 628eca9..cb5f4af 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Should have green background'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/stacked-diacritics-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/stacked-diacritics-expected.txt index 106474a..0bf37c3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/stacked-diacritics-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/stacked-diacritics-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='stacked'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/subtree-root-skipped-expected.txt index 9a64c70..b201860a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/subtree-root-skipped-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/subtree-root-skipped-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt index 056ae3b..50bec9c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt
@@ -44,24 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt index a8cd617..8f4a5d7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt
@@ -49,36 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "full" - }, - { - "object": "LayoutSVGText text id='text'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'This is some text'", - "reason": "geometry" - }, - { - "object": "LayoutSVGImage image id='image'", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/ems-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/ems-display-none-expected.txt index a149ff99b..5cb743973 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/ems-display-none-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/ems-display-none-expected.txt
@@ -24,60 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='text'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan id='tspan'", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox ' '", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/exs-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/exs-display-none-expected.txt index 7fc51b81..ae6c930 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/exs-display-none-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/exs-display-none-expected.txt
@@ -24,60 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='text'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan id='tspan'", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox ' '", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/focus-element-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/focus-element-expected.txt index 2a321a07..35da2927 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/focus-element-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/focus-element-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt index f106aeb..f724778c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt
@@ -69,40 +69,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGViewportContainer svg id='inner'", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'right-aligned text'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt index 6cf3b15..9a27765 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt
@@ -34,48 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Clipped. INVISIBLE.'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='content'", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Clipped. INVISIBLE.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-clipPath-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-clipPath-creation-expected.txt index 73f007d..6f66181 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-clipPath-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-clipPath-creation-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Clipped. INVISIBLE.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt index 60d700d..fb4f3dd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt
@@ -24,60 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Gradient on fill'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Gradient on stroke'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Gradient on fill/stroke'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-gradient-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-gradient-creation-expected.txt index 86f1393..0b3fddf 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-gradient-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-gradient-creation-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Gradient on fill'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt index 420a587..1630379 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt
@@ -24,60 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Pattern on fill'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Pattern on stroke'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Pattern on fill/stroke'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-pattern-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-pattern-creation-expected.txt index 7827f88..0979bf2d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-pattern-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/js-late-pattern-creation-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Pattern on fill'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt index 973b812..f912a02 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt
@@ -54,44 +54,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text id='target'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A'", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' B C'", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text id='source'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'X Y Z'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/outline-offset-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/outline-offset-text-expected.txt index c58d3fa..d26e23b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/outline-offset-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/outline-offset-text-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Foo'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-content-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-content-expected.txt index 8d3d3ac..3c8aea1d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-content-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-content-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect id='targetRect'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt index d4c8896..ba2fc0a8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt
@@ -54,24 +54,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGEllipse circle", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt index 527315d..0c34e96 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt
@@ -34,32 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='targetUse'", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect id='targetRect'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-image-expected.png index e0b99aa..11bd905 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-image-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-image-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-image-expected.txt index 76ad06c..e4ebb20e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-image-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-image-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGImage image", - "reason": "image" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-inner-svg-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-inner-svg-expected.txt index 65aba8a..669d323 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-inner-svg-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-inner-svg-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt index 20b3945d..aa9bbd53 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt
@@ -44,40 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect id='targetRect'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='targetUse'", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect id='targetRect1'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt index d5a0251f..51a318f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt index 5c43ee6..f3a9c49 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt index 39cd8a1..e8af49c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt index de9c696d..67f1b01 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt
@@ -24,28 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text id='t'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Hello'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt index de9c696d..67f1b01 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt
@@ -24,28 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text id='t'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Hello'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png index e29223e..54d1aee 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt index 6d5c440..5223e0e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -87,64 +87,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'pservers-pattern-01-b \u2190'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutInline A", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'index'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u2192 script-handle-01-b'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/svg-image-change-content-size-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/svg-image-change-content-size-expected.txt index 7dbcfd5..d99ba903 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/svg-image-change-content-size-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/svg-image-change-content-size-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage img", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/tabgroup-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/tabgroup-expected.txt index f1c5a32..04e2ee80 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/tabgroup-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/tabgroup-expected.txt
@@ -84,948 +84,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='tabgroupRect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRect__0'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Biography'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRect__0_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRect__2'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Events'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRect__2_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRect__3'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Portrait'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRect__3_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRect__1'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Relations'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRect__1_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupTriangle'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupTriangle__1'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Download'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Folder'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupTriangle__2'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Your'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Account'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupTriangle__3'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Help'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox '& Info'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupTriangle__0'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Geodata'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Browser'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupTriangle__0_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='contentTabGroupTriangle0'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This is a tabgroup with triangular tab corners'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'and a double line tab. (use \"\\n\" as a line separator)'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Click on the second tab to see oversize content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectTriangle'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectTriangle__0'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Biography'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectTriangle__0_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectTriangle__1'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Relations'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectTriangle__1_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectTriangle__3'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Portrait'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectTriangle__3_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Events'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRound'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRound__0'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Biography'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRound__0_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRound__2'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Events'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRound__2_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRound__3'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Portrait'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRound__3_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRound__1'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Relations'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRound__1_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectRound'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectRound__1'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Relations'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectRound__1_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectRound__2'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Events'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectRound__2_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectRound__3'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Portrait'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectRound__3_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectRound__0'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Biography'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-dom-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-dom-removal-expected.txt index d79ccae3..618aedd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-dom-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-dom-removal-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='objectsToRemove'", - "reason": "disappeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-mask-update-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-mask-update-expected.txt index 8fcb3e37..fda1fd4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-mask-update-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-mask-update-expected.txt
@@ -39,16 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-repaint-including-stroke-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-repaint-including-stroke-expected.txt index 0254857..2c1338d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-repaint-including-stroke-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-repaint-including-stroke-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text id='bounce'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Repaint me!'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-rescale-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-rescale-expected.txt index e82bac33..255951a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-rescale-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-rescale-expected.txt
@@ -69,132 +69,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='text1g'", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "LayoutSVGViewportContainer svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='text2g'", - "reason": "full" - }, - { - "object": "LayoutSVGContainer g id='text3g'", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "LayoutSVGViewportContainer svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-selection-text-05-t-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-selection-text-05-t-expected.txt index 061a2d1..c865624 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-selection-text-05-t-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-selection-text-05-t-expected.txt
@@ -449,740 +449,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1.x 1.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '4.x 1.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '2.x 1.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1.x 4.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '4.x 4.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '2.x 4.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1.x 2.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '4.x 2.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '2.x 2.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'text-anchor'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'start'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'text-anchor'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'middle'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'text-anchor'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'end'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text id='revision'", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '$Revision: 1.8 $'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-viewbox-rescale-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-viewbox-rescale-expected.txt index bdee471..ca1a834f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-viewbox-rescale-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-viewbox-rescale-expected.txt
@@ -44,80 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGViewportContainer svg id='inner1'", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "full" - }, - { - "object": "InlineFlowBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGViewportContainer svg id='inner2'", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "full" - }, - { - "object": "InlineFlowBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt index 1bdc6009..c9ab415 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text id='ttt'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Passes, if text is at 200x20'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt index 1f362bc4..4290097 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
@@ -64,12 +64,6 @@ ], "origin": [150, 150] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt index 9b85586ea..a2e09e2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt
@@ -29,32 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan id='ts'", - "reason": "full" - }, - { - "object": "InlineFlowBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'This text should be at visible at 200,200'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/use-clipped-hit-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/use-clipped-hit-expected.txt index cbbe0728..128ceb4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/use-clipped-hit-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/use-clipped-hit-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text id='status'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Passed'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/window-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/window-expected.txt index 3c69d22..051df056 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/window-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/window-expected.txt
@@ -194,972 +194,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='Windows'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='navWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='textNavWindow'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This window should'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'contain navigation tools'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Click on button'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox ''Resize Navigation Window' for a'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'random resize of this Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Note that this window also'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'features a window decoration'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Statusbar'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtonnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='bigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This is a big movable window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='nestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This window contains other windows'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='colourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupcolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Changing a colour changes background'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupcolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='titleBarcolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Colour Picker'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtoncolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtoncolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtoncolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='statusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupstatusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='textStatusWindow'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This is a none-moveable'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'none-closeable status'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupstatusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='titleBarstatusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Status Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonstatusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonstatusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='titleBarnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Nested middlesize Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtonnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='smallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='textSmallWindow'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This window has a callback'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'function indicating mouse'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'movements in the statusbar'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'and alerting window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'events'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Callback function is active'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='titleBarsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Small Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtonsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='minimalWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupminimalWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='textMinimalWindow'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This is a minimal window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'without title and status bar.'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'it is also not moveable'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupminimalWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='titleBarbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Big Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtonbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='Windows'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='navWindow'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='decoGroupnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='decoGroupMinimizednavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Navigation Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtonnavWindow'", - "reason": "full" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "full" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'", - "reason": "full" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "full" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'", - "reason": "full" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt index 6f3f9c8..cc8eb17b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='foo'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='blockDiv'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/caret-contenteditable-content-after-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/caret-contenteditable-content-after-expected.txt index c148b39..6d58851 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/caret-contenteditable-content-after-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/caret-contenteditable-content-after-expected.txt
@@ -129,104 +129,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'a'", - "reason": "appeared" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'ab'", - "reason": "full" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'abc'", - "reason": "full" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-expected.txt index a7deb8c..07bf54e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-expected.txt
@@ -29,16 +29,6 @@ "position": [72, 94], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt index c178280c..fc45ff0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt
@@ -29,16 +29,6 @@ "position": [72, 94], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-span-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-span-expected.txt index a0bb042..98f6b04 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-span-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-span-expected.txt
@@ -34,16 +34,6 @@ "position": [133, 94], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt index b5ecd4e..6f76d9e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt
@@ -34,16 +34,6 @@ "position": [133, 94], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-colgroup-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-colgroup-expected.txt index c03269b..4ec7e66 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-colgroup-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-colgroup-expected.txt
@@ -29,16 +29,6 @@ "position": [72, 94], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COLGROUP id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt index b2e863e..ab2ed6d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt
@@ -29,16 +29,6 @@ "position": [72, 94], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COLGROUP id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-composited-row-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-composited-row-expected.txt index c0e240e0..58e2a85d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-composited-row-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-composited-row-expected.txt
@@ -35,12 +35,6 @@ "position": [72, 94], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt index a007f308..add070b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt
@@ -35,12 +35,6 @@ "position": [72, 94], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-expected.txt index 2e74d534..632ae77 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-expected.txt
@@ -29,12 +29,6 @@ "position": [72, 94], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-initial-empty-expected.txt index 761583c..bfddd9a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-initial-empty-expected.txt
@@ -29,12 +29,6 @@ "position": [72, 94], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt index 06864c0..0161eeed 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt
@@ -40,12 +40,6 @@ "position": [72, 94], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt index f5af723..4236f0d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt
@@ -40,12 +40,6 @@ "position": [72, 94], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-expected.txt index b6c4bf8..505447f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-expected.txt
@@ -35,12 +35,6 @@ "position": [72, 94], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt index b67f056..8cd330de 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt
@@ -35,12 +35,6 @@ "position": [72, 94], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-row-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-row-expected.txt index 5586ff47b..4790141 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-row-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/composited-table-row-expected.txt
@@ -30,16 +30,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD id='target'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt index 39c5114..4876c6f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt
@@ -54,52 +54,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "incremental" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ROW1'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ROW2'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt index e93dfbc..94736d3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'MIDDLE'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/resize-table-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/resize-table-row-repaint-expected.txt index 7350b4c..3ba01b7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/resize-table-row-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/resize-table-row-repaint-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'MIDDLE'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt index 391fce5..fe31972 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Col 1'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Col 1'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Col 1'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Col 1'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-cell-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-cell-collapsed-border-expected.txt index cf1c6b9..1c46d64 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-cell-collapsed-border-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-cell-collapsed-border-expected.txt
@@ -54,36 +54,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='t1'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='t2'", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='t3'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-cell-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-cell-move-expected.txt index 4f29072..9293e32f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-cell-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-cell-move-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD", - "reason": "appeared" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "disappeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-collapsed-border-expected.txt index 837cb4a6..a5e7750 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-collapsed-border-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-collapsed-border-expected.txt
@@ -144,184 +144,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='t'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTable TABLE", - "reason": "full" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='r'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'sit amet'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE", - "reason": "full" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='r2'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD id='d3'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'ipsum dolor'", - "reason": "appeared" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'sit amet'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-shrink-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-shrink-row-repaint-expected.txt index a20bb72..067f7a5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-shrink-row-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/table/table-shrink-row-repaint-expected.txt
@@ -234,208 +234,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutTableCell TD id='resizeMe'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '2'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '3'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '4'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '5'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '6'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '7'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '8'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '9'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '10'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '11'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '12'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '13'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-append-dirty-lines-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-append-dirty-lines-expected.txt index f7a4ba08a4..dbe57fa 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-append-dirty-lines-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-append-dirty-lines-expected.txt
@@ -64,40 +64,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse placerat. Morbi tristique. Mauris eu lacus sed felis'", - "reason": "full" - }, - { - "object": "InlineTextBox 'pellentesque cursus. Proin vitae nulla. Vivamus in ipsum. Etiam mi. Nam malesuada purus in sem. Sed eget elit vel erat'", - "reason": "full" - }, - { - "object": "InlineTextBox 'laoreet feugiat. Phasellus mollis pulvinar mi. Etiam ut neque sed eros egestas laoreet. Vestibulum ullamcorper, nulla non'", - "reason": "full" - }, - { - "object": "InlineTextBox 'feugiat molestie, mi lorem bibendum leo, ac gravida orci nunc nec nulla. Nunc nunc lorem, rhoncus et, rutrum ac,'", - "reason": "full" - }, - { - "object": "InlineTextBox 'fermentum ut, tortor. Sed rhoncus. Quisque enim metus, luctus tincidunt, vestibulum eu, vestibulum eu, libero. Mauris'", - "reason": "full" - }, - { - "object": "InlineTextBox 'sagittis aliquam nunc. Nullam pharetra molestie eros. Donec tempus purus ut ligula. Phasellus non nisl. Etiam eu mauris.'", - "reason": "full" - }, - { - "object": "InlineTextBox 'Curabitur a velit.'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-match-document-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-match-document-change-expected.txt index 607ed82d..1f44ac46 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-match-document-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/text-match-document-change-expected.txt
@@ -39,28 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow DIV id='to-be-changed'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'After change'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/caret-with-transformation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/caret-with-transformation-expected.txt index 856a3c8b..47cd3f5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/caret-with-transformation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/caret-with-transformation-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/subtree-layoutstate-transform-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/subtree-layoutstate-transform-expected.txt index 09a466a..13f842aa 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/subtree-layoutstate-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/subtree-layoutstate-transform-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='layoutroot'", - "reason": "background" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/transform-inline-layered-child-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/transform-inline-layered-child-expected.txt index 35d9f193..55750de 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/transform-inline-layered-child-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/transform-inline-layered-child-expected.txt
@@ -29,100 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='box'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutInline (relative positioned) SPAN id='child'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'A B C'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'D E F'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'G H I'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'J K L'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'M N O'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'P Q R'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'S T U'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'V W X'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Y Z'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/transform-layout-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/transform-layout-repaint-expected.txt index 90475fa..51ed11d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/transform-layout-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/transform/transform-layout-repaint-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt index 46b77a8..612e9ad7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
@@ -37,84 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'BBBB'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'CCCC'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'DDDD'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'EEEE'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'FFFF'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'GGGG'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'HHHH'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'IIII JJJJ'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'KKKK'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'LLLL'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'MMMM'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'NNNN'", - "reason": "geometry" - } ] } { @@ -156,84 +78,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'BBBB'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'CCCC'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'DDDD'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'EEEE'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'FFFF'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'GGGG'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'HHHH'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'IIII JJJJ'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'KKKK'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'LLLL'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'MMMM'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'NNNN'", - "reason": "geometry" - } ] } { @@ -262,52 +106,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAA BBBB CCCC'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'DDDD EEEE FFFF'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'GGGG HHHH IIII JJJJ'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'KKKK LLLL MMMM'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'NNNN'", - "reason": "geometry" - } ] } { @@ -386,48 +184,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAA BBBB CCCC'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'DDDD EEEE FFFF'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'GGGG HHHH IIII JJJJ'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'KKKK LLLL MMMM'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'NNNN'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/markers/markers-zoomed-expected.png b/third_party/WebKit/LayoutTests/platform/mac/paint/markers/markers-zoomed-expected.png new file mode 100644 index 0000000..a424d76 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/markers/markers-zoomed-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/pagination/pagination-change-clip-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/pagination/pagination-change-clip-crash-expected.txt index 2c2dd21..da202c49 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/paint/pagination/pagination-change-clip-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/paint/pagination/pagination-change-clip-crash-expected.txt
@@ -41,16 +41,6 @@ [8, 426, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='background'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/scrollbars/listbox-scrollbar-combinations-expected.png b/third_party/WebKit/LayoutTests/platform/mac/scrollbars/listbox-scrollbar-combinations-expected.png index f955060..0c1809a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/scrollbars/listbox-scrollbar-combinations-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/scrollbars/listbox-scrollbar-combinations-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/scrollbars/overflow-scrollbar-combinations-expected.png b/third_party/WebKit/LayoutTests/platform/mac/scrollbars/overflow-scrollbar-combinations-expected.png index 0040d94..ce64c11 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/scrollbars/overflow-scrollbar-combinations-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/scrollbars/overflow-scrollbar-combinations-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png index 011b6d0..127d491 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png index bb1ebba3..0d416b9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/render-groups-01-b-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/render-groups-01-b-expected.png index 15903e42..46a1996 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/render-groups-01-b-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/render-groups-01-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/render-groups-03-t-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/render-groups-03-t-expected.png index 55327a0..e715ef0f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/render-groups-03-t-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/render-groups-03-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/struct-image-06-t-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/struct-image-06-t-expected.png index 55a0933..b7df71d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/struct-image-06-t-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/struct-image-06-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/struct-use-01-t-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/struct-use-01-t-expected.png index f15f980e..8989246 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/struct-use-01-t-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/struct-use-01-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/as-border-image/svg-as-border-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/as-border-image/svg-as-border-image-expected.png index 448f910..e999a0a 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/as-border-image/svg-as-border-image-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/as-border-image/svg-as-border-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png index 73a00e04..3a60487 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png index 73a00e04..3a60487 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png index b381f0a..7e9f6fc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/12-55-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/12-55-expected.png index b74a3a5..7596111 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/12-55-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/12-55-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/182-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/182-expected.png index 8e7bb20..330f25b2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/182-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/182-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/2-dht-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/2-dht-expected.png index 1de94cf..bf674e69 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/2-dht-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/2-dht-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/23-55-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/23-55-expected.png index 1b84bc1..7f9d414f8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/23-55-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/23-55-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/55-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/55-expected.png index 762e543..f9af367 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/55-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/55-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/alt-text-wrapping-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/alt-text-wrapping-expected.png index 66552c89..058edcce 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/alt-text-wrapping-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/alt-text-wrapping-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-expected.png index c6af1dc..53dde97 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png-expected.png index c6af1dc..53dde97 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-border-image-source-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-border-image-source-expected.png index fbe0076..1e6d986 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-border-image-source-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-border-image-source-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-border-radius-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-border-radius-expected.png index b591ccd..f5ed92e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-border-radius-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-border-radius-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-filter-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-filter-expected.png index 2f91b80f..343339f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-filter-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-filter-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-group-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-group-expected.png index ce3e86c..a0f1ae5 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png index c0a1c73e..c35326e2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-expected.png index 553c720..312fb69 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png index b3442df9..e3e44af 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-shape-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-shape-expected.png index 43258ba..a80fc427 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-shape-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-image-shape-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-layer-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-layer-expected.png index 45ab0117..bfd447d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-layer-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-layer-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png index 5ec8194..d376205 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png index b8480a5..550f64bd 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png index d367623..f8df8ea6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png index 3af4b08..09c693e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/exif-orientation-css-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/exif-orientation-css-expected.png index 715d1127..8bfda57 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/exif-orientation-css-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/exif-orientation-css-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/exif-orientation-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/exif-orientation-expected.png index 7a299a2..65c20a2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/exif-orientation-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/exif-orientation-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png index 00c987a..78cae10 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/image-in-map-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/image-in-map-expected.png index 4ff8833..7b684a8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/image-in-map-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/image-in-map-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/image-map-anchor-children-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/image-map-anchor-children-expected.png index 8548a9b..89705fe9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/image-map-anchor-children-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/image-map-anchor-children-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/imagemap-focus-ring-zero-outline-width-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/imagemap-focus-ring-zero-outline-width-expected.png index 80f38f47..0afce84 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/imagemap-focus-ring-zero-outline-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/imagemap-focus-ring-zero-outline-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png index 800f492..64ffd8e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png index c721df4a..f731630 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/missing-image-border-zoom-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/missing-image-border-zoom-expected.png index 23f6ed1b..85403b3e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/missing-image-border-zoom-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/missing-image-border-zoom-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/png-suite/test-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/png-suite/test-expected.png index cd71587..84fa3074 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/png-suite/test-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/png-suite/test-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/png-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/png-with-color-profile-expected.png index fe8965a..2a32658 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/png-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/png-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.png index e7605307..59b38e7d3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png index 4548b6a..f41e9b8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.png index 3db20885..505cf7de 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.png index 8b4b1a69..45820d0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.png index 2bc7ee52..c49e4e9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png index 26c72e27..564ac5c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-images-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-images-expected.png index 659d9a8..c8c1efe3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/exotic-color-space/images/rendering-broken-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png index 8421dd1..e47813f 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png index 8d70aba..60904a3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/color-matching/image-color-matching-expected.png b/third_party/WebKit/LayoutTests/platform/win/compositing/color-matching/image-color-matching-expected.png index 82670d0..8e247045 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/color-matching/image-color-matching-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/color-matching/image-color-matching-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/selection-repaint-with-gaps-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/selection-repaint-with-gaps-expected.txt index 9a21455..f93ff682a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/selection-repaint-with-gaps-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/selection-repaint-with-gaps-expected.txt
@@ -56,20 +56,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'lorem'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ipsum'", - "reason": "geometry" - } ] } { @@ -140,32 +126,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'lorem'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ipsum'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'lorem'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ipsum'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-landscape-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-landscape-expected.png index 2c8735a..e4017e6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-landscape-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-landscape-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-portrait-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-portrait-expected.png index 990e6aa..450a897 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-portrait-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-portrait-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-expected.png index 39c583c..3c776d35 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-png-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-png-expected.png index 39c583c..3c776d35 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-png-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-png-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-radius-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-radius-expected.png index de65284..000a368 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-radius-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-radius-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-drag-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-drag-image-expected.png index a1cdf88..2579a19 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-drag-image-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-drag-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-filter-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-filter-expected.png index 33ffd96..66d15d2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-filter-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-filter-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-group-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-group-expected.png index f67bbeb..6233a7ab 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-svg-expected.png index da252b6..9bf52b0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-svg-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-svg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-expected.png index 47e5735..ee9bf96 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-filter-all-expected.png index eb0fbd7..769b47d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-filter-all-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-filter-all-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-shape-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-shape-expected.png index 8408e6d..a628d27 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-shape-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-shape-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-layer-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-layer-expected.png index 3f3c4c5..7f9156bd 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-layer-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-layer-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-munsell-adobe-to-srgb-expected.png index 957bbd6a..1f15711 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-munsell-adobe-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-munsell-adobe-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-svg-fill-text-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-svg-fill-text-expected.png index dbce9e51..d0e45d5 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-svg-fill-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-svg-fill-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/cross-fade-background-size-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/cross-fade-background-size-expected.png index 1fa46e7..68d31582 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/cross-fade-background-size-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/cross-fade-background-size-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/jpeg-with-color-profile-expected.png index 5c17835..c0c6347 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/jpeg-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/jpeg-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/png-suite/test-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/png-suite/test-expected.png index b9e286f..6a46e06 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/png-suite/test-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/png-suite/test-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/png-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/png-with-color-profile-expected.png index 7a4ccc123..9dd5a57 100644 --- a/third_party/WebKit/LayoutTests/platform/win/images/png-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/images/png-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png index d3e9da4..b7839d0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt709-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt709-to-srgb-expected.png index ed871cf..59b06be 100644 --- a/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt709-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt709-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/4776765-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/4776765-expected.txt index 1898615..49365fb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/4776765-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/4776765-expected.txt
@@ -34,36 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutBlockFlow DIV id='div'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/background/backgroundSizeRepaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/background/backgroundSizeRepaint-expected.txt index 5570263..af7002d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/background/backgroundSizeRepaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/background/backgroundSizeRepaint-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='a'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='b'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/background/body-background-image-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/background/body-background-image-expected.txt index 0e1566c..444e9d2e1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/background/body-background-image-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/background/body-background-image-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/background/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/background/change-text-content-and-background-color-expected.txt index 1e2e348..225ddbf 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/background/change-text-content-and-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/background/change-text-content-and-background-color-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl (positioned) INPUT id='input'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'NEW'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/block-no-inflow-children-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/block-no-inflow-children-expected.txt index be6756c..bd693dd5 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/block-no-inflow-children-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/block-no-inflow-children-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'La la la la'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/border-radius-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/border-radius-repaint-expected.txt index fc176ef..c20510b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/border-radius-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/border-radius-repaint-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='a'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='b'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/border-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/border-repaint-glitch-expected.txt index 72565b2..5d0b8c4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/border-repaint-glitch-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/border-repaint-glitch-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='a'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='b'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/box-inline-resize-expected.txt index 43f833bb..05d7cf09 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/box-inline-resize-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/box-inline-resize-expected.txt
@@ -34,36 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG id='foo'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow H2", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Chromium'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/box-shadow-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/box-shadow-dynamic-expected.txt index 361f529..8999bd4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/box-shadow-dynamic-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/box-shadow-dynamic-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt index 20ff062..dbd8801a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/box/invalidate-box-shadow-currentColor-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN id='target'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Text'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-3509-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-3509-expected.txt index 42b91d8..9cfe063 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-3509-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-3509-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='im'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-5699-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-5699-expected.txt index d206f165..277d42c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-5699-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-5699-expected.txt
@@ -39,56 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='d'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Hello'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-6278-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-6278-expected.txt index a63110d7..00e2b854 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-6278-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-6278-expected.txt
@@ -134,68 +134,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD id='col1'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Curabitur pretium, quam quis semper'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'malesuada, est libero feugiat libero, vel'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'fringilla orci nibh sed neque. Quisque eu'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'nulla non nisi molestie accumsan. Etiam'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'tellus urna, laoreet ac, laoreet non,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'suscipit sed, sapien. Phasellus vehicula,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'sem at posuere vehicula, augue nibh'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'molestie nisl, nec ullamcorper lacus ante'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'vulputate pede.'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-6473-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-6473-expected.txt index fdce5a25..29616d6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-6473-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-6473-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='allcontent'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (relative positioned) P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'SUCCESS'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-7235-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-7235-expected.txt index 0fce097..3e464899 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-7235-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/bugzilla-7235-expected.txt
@@ -34,36 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) SPAN id='p'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='t'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-outside-block-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-outside-block-expected.txt index 004f260..22bcb99 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-outside-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-outside-block-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-subpixel-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-subpixel-expected.txt index 92b0d70..4071110 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-subpixel-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-subpixel-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/clipped-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/clipped-relative-expected.txt index 4ba8da1..19a1c2d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/clipped-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/clipped-relative-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='inner'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/control-clip-expected.txt index 8dc4b65..606fa460 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/control-clip-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/control-clip-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText (anonymous)", - "reason": "full" - }, - { - "object": "InlineTextBox 'SUCCESS'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'SUCCESS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/outline-clip-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/outline-clip-change-expected.txt index 14a21eb..80552abe 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/outline-clip-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/clip/outline-clip-change-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) A id='link' class='updated'", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'Lorem Ipsum'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt index f5808b7e..865abe4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt
@@ -62,36 +62,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'test1'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt index 29b04b1d..ae328dc1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/remove-squashed-layer-plus-move-expected.txt
@@ -56,32 +56,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='container'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'", - "reason": "compositing update" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/text-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/text-color-change-expected.txt deleted file mode 100644 index e7208297..0000000 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/text-color-change-expected.txt +++ /dev/null
@@ -1,698 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutView #document", - "bounds": [800, 600], - "drawsContent": false, - "backgroundColor": "#FFFFFF" - }, - { - "name": "Scrolling Layer", - "bounds": [800, 600], - "drawsContent": false - }, - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF", - "paintInvalidations": [ - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "rect": [8, 61, 48, 185], - "reason": "style change" - } - ] - } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "InlineTextBox ' Text'", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - } - ] -} -
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/text-match-highlight-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/text-match-highlight-expected.txt index b276e6ff..ac0447fc5 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/text-match-highlight-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/text-match-highlight-expected.txt
@@ -59,72 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'findme'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'Can you findme in this boring text?'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'Findme in a typewriter!'", - "reason": "DocumentMarker change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "DocumentMarker change" - }, - { - "object": "InlineTextBox 'Findme on a path! Did you findme?'", - "reason": "DocumentMarker change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt index bebc48e..725b5ff 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/compositing/updating-scrolling-container-and-content-expected.txt
@@ -69,112 +69,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'CONTENT'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-3-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-3-expected.txt index cd3d710..f9808f2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/crbug-371640-3-expected.txt
@@ -34,12 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='keep_child'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/delete-into-nested-block-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/delete-into-nested-block-expected.txt index 15a7f3e..8de1d5b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/delete-into-nested-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/delete-into-nested-block-expected.txt
@@ -44,28 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='one'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'three'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/details-open-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/details-open-repaint-expected.txt index 7e12a06..694a27c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/details-open-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/details-open-repaint-expected.txt
@@ -29,36 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutDetailsMarker DIV id='details-marker'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow DIV id='details-content'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutTextControl INPUT", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "appeared" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/flexbox/repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/flexbox/repaint-expected.txt index acb8806..9a7ce24 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/flexbox/repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/flexbox/repaint-expected.txt
@@ -164,88 +164,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='left'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet. Nulla'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et magnis dis'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula. Sed volutpat,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed nulla. Nunc quis porta'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='left'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='content'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet. Nulla'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et magnis dis'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula. Sed volutpat, tellus'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed nulla. Nunc quis porta elit.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/flexbox/scrollbars-changed-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/flexbox/scrollbars-changed-expected.txt index 0ff0c30..1678eb12 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/flexbox/scrollbars-changed-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/flexbox/scrollbars-changed-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow DIV id='dynamic' class='content'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'z'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/float-move-during-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/float-move-during-layout-expected.txt index cd8e400..b4d9af90 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/float-move-during-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/float-move-during-layout-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/button-checkbox-click-method-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/button-checkbox-click-method-repaint-expected.txt index e511192..ff08bb3f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/button-checkbox-click-method-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/button-checkbox-click-method-repaint-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow INPUT id='checkbox'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt index c65b38e..e43f765 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/button-reset-focus-by-mouse-then-keydown-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutButton BUTTON", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'Reset'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.txt index f1c0c5f..2fee2caf 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/checkbox-focus-by-mouse-then-keydown-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow INPUT", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.txt index 16cee32..e012450 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/radio-focus-by-mouse-then-keydown-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow INPUT", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt index 363509a..6ba99da 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/range-focus-by-mouse-then-keydown-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSlider INPUT", - "reason": "subtree" - }, - { - "object": "LayoutFlexibleBox DIV", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV id='track'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV id='thumb'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/select-option-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/select-option-background-color-expected.txt index d565275..0dc3171d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/select-option-background-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/select-option-background-color-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow OPTION id='option'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt index 9405da6..03375c9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/submit-focus-by-mouse-then-keydown-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutButton INPUT", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'Submit'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/textarea-caret-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/textarea-caret-expected.txt index ea9de96..ad6d7229 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/textarea-caret-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/forms/textarea-caret-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl TEXTAREA id='editor'", - "reason": "subtree" - }, - { - "object": "LayoutTextControl TEXTAREA id='editor'", - "reason": "geometry" - }, - { - "object": "HorizontalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox '------------------------------------------------------------'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/gradients-em-stops-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/gradients-em-stops-repaint-expected.txt index e45233f..f107eda 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/gradients-em-stops-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/gradients-em-stops-repaint-expected.txt
@@ -44,36 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='em-units'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='box3' class='box'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='box4' class='box'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='indicator'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/iframe-display-none-to-display-block-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/iframe-display-none-to-display-block-expected.txt index 3721fa94..dda1696 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/iframe-display-none-to-display-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/iframe-display-none-to-display-block-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutIFrame IFRAME id='iframe'", - "reason": "appeared" - }, - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt index be9955c..3dc2f94 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/image/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -479,184 +479,6 @@ "position": [15, 859], "bounds": [150, 60] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutHTMLCanvas CANVAS id='source-oversolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-overimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-overcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-overvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-insolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-inimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-incanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-invideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-outvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='source-atopvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-oversolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-overimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-overcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-overvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-insolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-inimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-incanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-invideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-outvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='destination-atopvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lightersolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lighterimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lightercanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='lightervideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copysolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copyimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copycanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='copyvideo'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorsolid color'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorimage'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorcanvas'", - "reason": "invalidate paint rectangle" - }, - { - "object": "LayoutHTMLCanvas CANVAS id='xorvideo'", - "reason": "invalidate paint rectangle" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/in-scaled-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/in-scaled-iframe-expected.txt index c6d56ff..f1da8e8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/in-scaled-iframe-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/in-scaled-iframe-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-color-change-expected.txt index 14eedd6..f250c7a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-color-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-color-change-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN id='target'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-reflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-reflow-expected.txt index 25cc0a5..59e553a6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-reflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/inline-reflow-expected.txt
@@ -154,76 +154,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='div1' class='container'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A A A A A AA AA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AA AA AAA AAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAA AAAA AAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAA AAAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAAA AAAAAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAAA AAAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAAA AAAA AAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAA AAA AAA AA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AA AA AA A A A'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A A'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='div2' class='container'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A A A A A'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt index 550eae9..a390805 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-caret-before-text-node-update-expected.txt
@@ -39,16 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='root' class='editing'", - "reason": "full" - }, - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt index df92d3f..28009892e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
@@ -37,56 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='container'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='absolute'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'This test checks that switching opacity'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'invalidates the full subtree.'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'This text should be visible in the'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'output.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-1-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-1-expected.txt index 58da46a..4b27ac4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-1-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-1-expected.txt
@@ -484,232 +484,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV id='pinkFloat'", - "reason": "incremental" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The chief difficulty Alice found at first was in managing her'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'flamingo: she succeeded in getting its body tucked away,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'comfortably enough, under her arm, with its legs hanging'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'down,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'but generally, just as she had got its neck nicely'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'straightened\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'out, and was going to give the hedgehog a blow with'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'its head, it\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'would'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' twist itself round and look up in her face, with'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'such a puzzled expression that she could not help bursting out'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'laughing: and when she had got its head down, and was going to'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog had'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away: besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'there was generally a ridge or furrow in the way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wanted to send the hedgehog to, and, as the doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'were always getting up and walking off to other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice soon came to the conclusion that it was a very'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting for the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was in a'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and shouting'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u2018Off with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about once in a'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet had'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me?'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-10-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-10-expected.txt index 38d541e3..4e55d8c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-10-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-10-expected.txt
@@ -324,172 +324,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always getting up and walking off to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting for the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'head!\u2019 about once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet had'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me?'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-2-expected.txt index 1af611c..2eed943 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-2-expected.txt
@@ -504,264 +504,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The chief difficulty Alice found at first was in managing her'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'flamingo: she succeeded in getting its body tucked away,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'comfortably enough, under her arm, with its legs hanging'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'down,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'but generally, just as she had got its neck nicely'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'straightened\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'out, and was going to give the hedgehog a'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'blow with its head, it\n'", - "reason": "geometry" - }, - { - "object": "LayoutInline I id='would'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'would'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' twist itself round and look up in her'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'face, with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'such a puzzled expression that she could not help'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'bursting out\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'laughing: and when she had got its head down, and was'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'going to\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always getting up and walking off to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting for the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet had'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me?'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-3-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-3-expected.txt index cb74ea8c..77740c9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-3-expected.txt
@@ -309,172 +309,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always getting up and walking off to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for the hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'head!\u2019 about once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet had'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me?'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-4-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-4-expected.txt index 154ac7f..5150b2a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-4-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-4-expected.txt
@@ -309,172 +309,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always getting up and walking off to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting for the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about once in'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet had'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me?'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-5-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-5-expected.txt index 509e0bc9..f5da54c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-5-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-5-expected.txt
@@ -324,176 +324,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always getting up and walking off to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting for the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet had'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me?'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-6-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-6-expected.txt index 28d8531..95c2506 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-6-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-6-expected.txt
@@ -164,116 +164,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always getting up and walking off to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'foo'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting for the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-7-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-7-expected.txt index 49736363..0e9314d6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-7-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-7-expected.txt
@@ -74,44 +74,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting for the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='theQueen'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-8-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-8-expected.txt index 7ad6895..e876998 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-8-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-8-expected.txt
@@ -509,248 +509,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The chief difficulty Alice found at first was in managing her'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'flamingo: she succeeded in getting its body tucked away,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'comfortably enough, under her arm, with its legs hanging'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'down,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'but generally, just as she had got its neck nicely'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'straightened\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'out, and was going to give the hedgehog a'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'blow with its head, it\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'would'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' twist itself round and look up in her'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'face, with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'such a puzzled expression that she could not help'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'bursting out\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'laughing: and when she had got its head down, and was'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'going to\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always getting up and walking off to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for turns,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting for the hedgehogs; and'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' was in a furious passion,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and shouting \u2018Off with his head!\u2019'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet had'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me?'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-9-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-9-expected.txt index 31652a2..2a2627e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-9-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/line-flow-with-floats-9-expected.txt
@@ -409,200 +409,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' twist itself round and look up in her'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'face, with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'such a puzzled expression that she could not help'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'bursting out\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'laughing: and when she had got its head down, and was'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'going to\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) SPAN id='yellowFloat'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'begin again, it was very provoking to find that the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehog had\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'unrolled itself, and was in the act of crawling'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'away: besides all\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'this, there was generally a ridge or furrow'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'in the way wherever\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the doubled-up\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'soldiers were always getting up and walking off to'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'other parts of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was a very\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'difficult game indeed.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'The players all played at once without waiting\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'for'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'turns,\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'quarrelling all the while, and fighting for the'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hedgehogs; and in\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a very short time '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'the Queen'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'was in a furious passion, and went\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'stamping about, and'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'her head!\u2019 about'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'once in a minute.\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'yet had'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'happen any'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'me?'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/lines-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/lines-with-layout-delta-expected.txt index 0ec68197..e9c843b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/lines-with-layout-delta-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/lines-with-layout-delta-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/list-marker-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/list-marker-2-expected.txt index e7355168c..2f63d9c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/list-marker-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/list-marker-2-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutListItem LI", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutListMarker (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG id='target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/make-children-non-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/make-children-non-inline-expected.txt index 6f69248..b41fa23 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/make-children-non-inline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/make-children-non-inline-expected.txt
@@ -114,168 +114,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Word,'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'words,'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'more words.'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'I could'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'write a book'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'about all the stuff'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'that comes'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'after'", - "reason": "style change" - }, - { - "object": "LayoutBR BR", - "reason": "style change" - }, - { - "object": "InlineTextBox '\n'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'the break.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multi-layout-one-frame-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multi-layout-one-frame-expected.txt index c571867..83d758df 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multi-layout-one-frame-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multi-layout-one-frame-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASSED'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASSED'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/column-rules-fixed-height-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/column-rules-fixed-height-expected.txt index c1e16dd..07ada14 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/column-rules-fixed-height-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/column-rules-fixed-height-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - }, - { - "object": "LayoutMultiColumnSet (anonymous)", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/multicol-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/multicol-repaint-expected.txt index 4132bc0..1262129 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/multicol-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/multicol-repaint-expected.txt
@@ -39,56 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='a'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'XXXXXX'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/multicol-with-abspos-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/multicol-with-abspos-expected.txt index 70aef8d..885f1f2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/multicol-with-abspos-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/multicol-with-abspos-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='target'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/multicol-with-text-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/multicol-with-text-expected.txt index 8d813cb..2487e74 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/multicol-with-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/multicol/multicol-with-text-expected.txt
@@ -24,68 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "incremental" - }, - { - "object": "RootInlineBox", - "reason": "incremental" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutMultiColumnFlowThread (anonymous)", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "appeared" - }, - { - "object": "LayoutMultiColumnSet (anonymous)", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/non-text-link-invalidation-optimization-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/non-text-link-invalidation-optimization-expected.txt index 8b96d4d..0ce4cf0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/non-text-link-invalidation-optimization-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
@@ -49,56 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'This test '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' passes if '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'only'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' text is invalidated and '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' no '", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox ' images.'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt index 34ad8e0..aa9f41c6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/offset-change-wrong-invalidation-with-float-expected.txt
@@ -47,20 +47,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutListMarker (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (positioned) UL id='submenu'", - "reason": "geometry" - }, - { - "object": "LayoutListMarker (anonymous)", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-continuations-expected.txt index c6a35f6..01a01d5 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-continuations-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-enable-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-enable-continuations-expected.txt index 635ca58..ce77ea8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-enable-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-enable-continuations-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt index 772ac439..24c2846c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-ring-on-continuation-move-expected.txt
@@ -39,16 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN", - "reason": "outline" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='block'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt index b1e3b98..219a51f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/focus-ring-on-inline-continuation-move-expected.txt
@@ -34,32 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutInline SPAN", - "reason": "outline" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV id='block'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/inline-focus-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/inline-focus-expected.txt index dbc75cba..0d2f31b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/inline-focus-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/inline-focus-expected.txt
@@ -44,44 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline A id='link'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Home'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'crbug.com/424078: ensure inline elements get their outline painted'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/inline-outline-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/inline-outline-repaint-expected.txt index e87877e..4e50e1cb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/inline-outline-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/inline-outline-repaint-expected.txt
@@ -59,48 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutInline SPAN id='test'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Lorem ipsum'", - "reason": "full" - }, - { - "object": "InlineTextBox ' '", - "reason": "full" - }, - { - "object": "InlineTextBox 'dolor\u00A0'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt index e2ecae9..59335157 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/outline-become-affected-by-descendant-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='outline'", - "reason": "outline" - }, - { - "object": "LayoutBlockFlow DIV id='child'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt index f8c0900f..64fd886 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/outline-become-not-affected-by-descendant-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='outline'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='child'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/outline-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/outline-continuations-expected.txt index af921c9..b5a87dd 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/outline-continuations-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/outline/outline-continuations-expected.txt
@@ -44,64 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'CONTENTS'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'CONTENTS'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='outer'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/float-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/float-overflow-expected.txt index 2ca79297..ebe6f9a2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/float-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/float-overflow-expected.txt
@@ -569,468 +569,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/float-overflow-right-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/float-overflow-right-expected.txt index f0d3e65..f28a2b6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/float-overflow-right-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/float-overflow-right-expected.txt
@@ -569,468 +569,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV class='outer'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (floating) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/inline-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/inline-overflow-expected.txt index 3e6100bc..cb8bea1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/inline-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/inline-overflow-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'A\u00A0\u00A0B'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt index e4145ed..0fd8254f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/inline-vertical-lr-overflow-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'A\u00A0\u00A0B'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt index 4c2b9b3..9a3e928 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/inline-vertical-rl-overflow-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'A\u00A0\u00A0B'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/line-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/line-overflow-expected.txt index 5ad473f..c620715 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/line-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/line-overflow-expected.txt
@@ -99,60 +99,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Cras faucibus. Nunc adipiscing,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'enim in scelerisque convallis,'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'augue '", - "reason": "geometry" - }, - { - "object": "LayoutInline SPAN id='t'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'purus'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' eleifend lacus, at'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'sagittis eros leo pulvinar velit.'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Integer sollicitudin nisi ut urna'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'blandit convallis.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/overflow-delete-line-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/overflow-delete-line-expected.txt index f3e7705..ac4b0aa 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/overflow-delete-line-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/overflow-delete-line-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='dv'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Lorem ipsu'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/rel-positioned-inline-with-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/rel-positioned-inline-with-overflow-expected.txt index e194a31..b34432a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/rel-positioned-inline-with-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/rel-positioned-inline-with-overflow-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/repaint-resized-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/repaint-resized-overflow-expected.txt index d72f7d2..9aa7b5e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/repaint-resized-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/overflow/repaint-resized-overflow-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='s'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt index 952f397..876f614 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='inner-target'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'abc'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt index 0bd45ec..73b1a1f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/block-layout-inline-children-float-positioned-expected.txt
@@ -44,40 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (floating) SPAN", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (positioned) SPAN", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/containing-block-position-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/containing-block-position-change-expected.txt index 04d531f0..de3553f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/containing-block-position-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/containing-block-position-change-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='t'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/fixed-element-repaint-after-compositing-update-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/fixed-element-repaint-after-compositing-update-expected.txt index a70eec84..3208de8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/fixed-element-repaint-after-compositing-update-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/fixed-element-repaint-after-compositing-update-expected.txt
@@ -46,12 +46,6 @@ [8, 88, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='moveMe'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/fixed-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/fixed-expected.txt index 86e5762..a969529 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/fixed-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/fixed-expected.txt
@@ -37,12 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='t'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/layout-state-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/layout-state-relative-expected.txt index e547460..6a4caf3 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/layout-state-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/layout-state-relative-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (relative positioned) DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt index e1117fb..172fb0919 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
@@ -29,48 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) SPAN", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) SPAN id='target'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-document-element-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-document-element-expected.txt index a1b936e..eb5b8a1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-document-element-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-document-element-expected.txt
@@ -34,36 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) HTML class='changed'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt index cea0f15..4a9381b2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-great-grandparent-change-location-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Target'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt index e319b61..6089c53b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/positioned-list-offset-change-repaint-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutListItem (positioned) LI", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutListMarker (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutImage IMG", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt index 5ecef077..fcd93af 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/position/relative-inline-positioned-movement-repaint-expected.txt
@@ -30,32 +30,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline (relative positioned) DIV id='block'", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'When this layer moves it shouldn't generate a repaint rect.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/push-block-with-first-line-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/push-block-with-first-line-expected.txt index 9c3b462..0ab0888 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/push-block-with-first-line-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/push-block-with-first-line-expected.txt
@@ -39,28 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='spacer'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow DIV class='test'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'JOCULAR'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/quotes-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/quotes-expected.txt index 8022e55..397db167 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/quotes-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/quotes-expected.txt
@@ -49,60 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutInline Q id='q2' class='q-changed'", - "reason": "style change" - }, - { - "object": "LayoutInline \u003Cpseudo:before\u003E", - "reason": "style change" - }, - { - "object": "LayoutQuote (anonymous)", - "reason": "style change" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "style change" - }, - { - "object": "InlineTextBox '{'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'quote 2'", - "reason": "style change" - }, - { - "object": "LayoutInline \u003Cpseudo:after\u003E", - "reason": "style change" - }, - { - "object": "LayoutQuote (anonymous)", - "reason": "style change" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "style change" - }, - { - "object": "InlineTextBox '}'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/reflection/reflection-redraw-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/reflection/reflection-redraw-expected.txt index 33be7b2b..b581cbe9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/reflection/reflection-redraw-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/reflection/reflection-redraw-expected.txt
@@ -79,72 +79,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this text'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'in the reflection'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'should be green'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this text'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'in the reflection'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'should be green'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this text'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'in the reflection'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'should be green'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'The color of this text'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'in the reflection'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'should be green'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/reflection/reflection-with-rotation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/reflection/reflection-with-rotation-expected.txt index 47af382..c4b22d0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/reflection/reflection-with-rotation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/reflection/reflection-with-rotation-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/remove-inline-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/remove-inline-after-layout-expected.txt index a0e8105..a45874f93 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/remove-inline-after-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/remove-inline-after-layout-expected.txt
@@ -49,32 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/remove-inline-layer-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/remove-inline-layer-after-layout-expected.txt index 40c10c30..9fb1c11 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/remove-inline-layer-after-layout-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/remove-inline-layer-after-layout-expected.txt
@@ -34,32 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt index e3876eb..794a6ddb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-across-writing-mode-boundary-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '\u7B2C\u4E00\u6BB5\u843D paragraph 1'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt index 2bfc7cb..2e8dbc8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/repaint-descandant-on-ancestor-layer-move-expected.txt
@@ -39,32 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='container'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'There should only be one copy of this text.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/resize-iframe-text-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/resize-iframe-text-expected.txt index 6705455..51c7166 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/resize-iframe-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/resize-iframe-text-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutIFrame (positioned) IFRAME", - "reason": "incremental" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/ruby-flipped-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/ruby-flipped-blocks-expected.txt index 5b5a0d42..fa20bb0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/ruby-flipped-blocks-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/ruby-flipped-blocks-expected.txt
@@ -44,52 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'a'", - "reason": "geometry" - }, - { - "object": "LayoutRubyRun (anonymous)", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'c'", - "reason": "style change" - }, - { - "object": "LayoutRubyBase (anonymous)", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'b'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt index e7555b70..df231d9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/caret-invalidation-in-overflow-scroll-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt index 8a953e2c..4619e601 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt
@@ -79,20 +79,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='text'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt index 5afe2ca9..d8a501e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
@@ -37,16 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Text Text Text Text Text Text Text Text Text Text Text Text Text'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt index 9688206..4a4adab 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
@@ -42,12 +42,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt index e9fab9b..1a1be903 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/invalidate-caret-in-composited-scrolling-container-expected.txt
@@ -35,32 +35,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='root'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt index e9fab9b..1a1be903 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/invalidate-caret-in-non-composited-scrolling-container-expected.txt
@@ -35,32 +35,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='root'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt index 4d16d8b..70f8e74 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/layout-state-scrolloffset-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'after'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt index c85a61a..006d9e5 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/layout-state-scrolloffset2-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'after'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt index 9510ef2..3df8f0d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/layout-state-scrolloffset3-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'after'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt index 0b24049..de2e3d0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/line-in-scrolled-clipped-block-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox ' PASS .'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt index 0f80bcd..861bbbf 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/outline-change-in-scrollers-expected.txt
@@ -49,32 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow DIV class='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt index 186376237..739dde7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/overflow-scroll-body-appear-expected.txt
@@ -59,72 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutView #document", - "reason": "style change" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'You should see both vertical and horizontal scrollbars.'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'This is the test for '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Bug 36461 - No vertical scrollbar after the CSS class change'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/overflow-scroll-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/overflow-scroll-delete-expected.txt index 0520ffa4..e3c20af 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/overflow-scroll-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/scroll/overflow-scroll-delete-expected.txt
@@ -23,36 +23,12 @@ "reason": "appeared" }, { - "object": "InlineTextBox 'Test'", - "rect": [8, 136, 43, 17], - "reason": "appeared" - }, - { "object": "InlineTextBox 'Failed'", "rect": [8, 136, 37, 17], "reason": "disappeared" - }, - { - "object": "InlineTextBox 'Test'", - "rect": [8, 136, 37, 17], - "reason": "disappeared" } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Passed'", - "reason": "full" - }, - { - "object": "InlineTextBox 'Test'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/search-field-cancel-expected.txt index 7d3bd790..aef886c5c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/search-field-cancel-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/search-field-cancel-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'some text'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt index 46e0785..9ce11c3 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'xx'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'y'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt index 9f8e5d9..913f554 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'xx'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'y'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt index 69de4a1..fe48b0a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'xx'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'y'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt index 9f5684f7..2c0e4f0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/invalidation-rect-with-br-includes-newline-expected.txt
@@ -34,32 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'a'", - "reason": "selection" - }, - { - "object": "LayoutBR BR", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\n'", - "reason": "appeared" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'b'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt index df704e5..5143a5e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt
@@ -89,68 +89,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt index a7e55b6..078a998 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Some text in vertical mode'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selected-replaced-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selected-replaced-expected.txt index 377adb5..41b85d7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selected-replaced-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selected-replaced-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage (relative positioned) IMG id='test' class='moved'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-after-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-after-delete-expected.txt index 0819faf..f455975 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-after-delete-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-after-delete-expected.txt
@@ -74,28 +74,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-after-remove-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-after-remove-expected.txt index 1fab4d0..c5249ea2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-after-remove-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-after-remove-expected.txt
@@ -89,40 +89,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='test'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'hello '", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'world'", - "reason": "geometry" - }, - { - "object": "LayoutBR BR", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-clear-expected.txt index f712a6b..aceabb8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-clear-expected.txt
@@ -39,36 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='root'", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='firstLine'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "appeared" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt index d85e7c3a..671c110 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-in-composited-scrolling-container-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt index df4280b..3ee964e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-in-non-composited-scrolling-container-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTextControl INPUT id='target'", - "reason": "subtree" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "subtree" - }, - { - "object": "RootInlineBox", - "reason": "subtree" - }, - { - "object": "LayoutText #text", - "reason": "subtree" - }, - { - "object": "InlineTextBox 'test test test'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt index 2807eed..70a550c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-partial-invalidation-between-blocks-expected.txt
@@ -29,44 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow HTML", - "reason": "selection" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "selection" - }, - { - "object": "LayoutTable TABLE", - "reason": "selection" - }, - { - "object": "LayoutTableCell TD id='firstCell'", - "reason": "selection" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'First cell'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD id='secondCell'", - "reason": "selection" - }, - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Second cell'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-rl-expected.txt index 61a1d52..5983111 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-rl-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/selection-rl-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Testing both hit testing'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt index 4d5943b..1e3169af 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/text-selection-rect-in-overflow-2-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'Should have blue, not gray, highlight'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt index e5b7ebd6..93890c05 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/selection/text-selection-rect-in-overflow-expected.txt
@@ -24,16 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Should have green background'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/stacked-diacritics-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/stacked-diacritics-expected.txt index 797ea74..b63f319 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/stacked-diacritics-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/stacked-diacritics-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='stacked'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/subtree-root-skipped-expected.txt index f14fc71..5d2e96b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/subtree-root-skipped-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/subtree-root-skipped-expected.txt
@@ -34,28 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='div'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt index 96ed965..6911b9f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/absolute-sized-content-with-resources-expected.txt
@@ -44,24 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt index 823e73e..f291bd3f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/animated-path-inside-transformed-html-expected.txt
@@ -49,36 +49,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "full" - }, - { - "object": "LayoutSVGText text id='text'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'This is some text'", - "reason": "geometry" - }, - { - "object": "LayoutSVGImage image id='image'", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/ems-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/ems-display-none-expected.txt index 5f0188c..1e8fc979eb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/ems-display-none-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/ems-display-none-expected.txt
@@ -24,60 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='text'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan id='tspan'", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox ' '", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/exs-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/exs-display-none-expected.txt index bcd1c69..22564ea 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/exs-display-none-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/exs-display-none-expected.txt
@@ -24,60 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='text'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan id='tspan'", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox ' '", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Two lines of text should be visible.'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/focus-element-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/focus-element-expected.txt index 31146e4..73cfeee 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/focus-element-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/focus-element-expected.txt
@@ -24,12 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect id='rect'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt index cc38ea2..8cbd13b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/inner-svg-change-viewPort-relative-expected.txt
@@ -69,40 +69,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGViewportContainer svg id='inner'", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'right-aligned text'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt index a74747b..8d5d465 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-clipPath-and-object-creation-expected.txt
@@ -34,48 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Clipped. INVISIBLE.'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='content'", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Clipped. INVISIBLE.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-clipPath-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-clipPath-creation-expected.txt index 92a2b3bd..aeb7736 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-clipPath-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-clipPath-creation-expected.txt
@@ -29,28 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Clipped. INVISIBLE.'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt index 7b1dd25..080b8a0a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-gradient-and-object-creation-expected.txt
@@ -24,60 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Gradient on fill'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Gradient on stroke'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Gradient on fill/stroke'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-gradient-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-gradient-creation-expected.txt index 175d337..a4bec03 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-gradient-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-gradient-creation-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Gradient on fill'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt index 5643fe2..0ad20bc 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-pattern-and-object-creation-expected.txt
@@ -24,60 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Pattern on fill'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Pattern on stroke'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Pattern on fill/stroke'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-pattern-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-pattern-creation-expected.txt index 98a2ca2..2931496 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-pattern-creation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/js-late-pattern-creation-expected.txt
@@ -24,24 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Pattern on fill'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt index 25bb3aa..5dea806fb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/modify-transferred-listitem-different-attr-expected.txt
@@ -54,44 +54,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text id='target'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'A'", - "reason": "geometry" - }, - { - "object": "InlineTextBox ' B C'", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text id='source'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'X Y Z'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/outline-offset-text-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/outline-offset-text-expected.txt index 4675958a..6ec302e7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/outline-offset-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/outline-offset-text-expected.txt
@@ -39,24 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Foo'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-content-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-content-expected.txt index e7ae2230..7b64d4d8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-content-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-content-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect id='targetRect'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt index 01dd1e0..294fe0e2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-content-with-resources-expected.txt
@@ -54,24 +54,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGEllipse circle", - "reason": "SVG resource change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt index 1718dc1..8f37782 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-deep-shadow-tree-content-expected.txt
@@ -34,32 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='targetUse'", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect id='targetRect'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-image-expected.png index f353e877..01878fb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-image-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-image-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-image-expected.txt index 364d6d4..55d807ff 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-image-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-image-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGImage image", - "reason": "image" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-inner-svg-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-inner-svg-expected.txt index f74f915..8abf99f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-inner-svg-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-inner-svg-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt index 685b7ad..c91bd35 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-shadow-tree-content-expected.txt
@@ -44,40 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect id='targetRect'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='targetUse'", - "reason": "geometry" - }, - { - "object": "LayoutSVGRect rect id='targetRect1'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt index 35d2d2830..992ee3c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt index bb7d883c..4289b03 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-use-on-symbol-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt index 5ec73a9..5a0067e8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGRoot svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer use", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt index 7839287..6aff358 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/repaint-non-scaling-stroke-text-decoration-expected.txt
@@ -24,28 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text id='t'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Hello'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt index 7839287..6aff358 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/repaint-non-scaling-stroke-text-expected.txt
@@ -24,28 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text id='t'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Hello'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png index 14e5f12..4d818614 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt index f15a1997..80e84c4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -87,64 +87,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow P", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'pservers-pattern-01-b \u2190'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutInline A", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'index'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\n'", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u2192 script-handle-01-b'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/svg-image-change-content-size-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/svg-image-change-content-size-expected.txt index de3ef2e..b507634 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/svg-image-change-content-size-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/svg-image-change-content-size-expected.txt
@@ -29,20 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow div id='contentBox'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutImage img", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/tabgroup-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/tabgroup-expected.txt index c2411ed..34c8e228 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/tabgroup-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/tabgroup-expected.txt
@@ -84,948 +84,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='tabgroupRect'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRect__0'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Biography'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRect__0_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRect__2'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Events'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRect__2_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRect__3'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Portrait'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRect__3_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRect__1'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Relations'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRect__1_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupTriangle'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupTriangle__1'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Download'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Folder'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupTriangle__2'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Your'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Account'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupTriangle__3'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Help'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox '& Info'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupTriangle__0'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Geodata'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Browser'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupTriangle__0_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='contentTabGroupTriangle0'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This is a tabgroup with triangular tab corners'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'and a double line tab. (use \"\\n\" as a line separator)'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Click on the second tab to see oversize content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectTriangle'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectTriangle__0'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Biography'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectTriangle__0_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectTriangle__1'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Relations'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectTriangle__1_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectTriangle__3'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Portrait'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectTriangle__3_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Events'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRound'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRound__0'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Biography'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRound__0_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRound__2'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Events'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRound__2_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRound__3'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Portrait'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRound__3_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRound__1'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Relations'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRound__1_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectRound'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectRound__1'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Relations'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectRound__1_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectRound__2'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Events'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectRound__2_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectRound__3'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Portrait'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectRound__3_content'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath path id='tabgroupRectRound__0'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Biography'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-dom-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-dom-removal-expected.txt index 7ba1e2c..5dcff51 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-dom-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-dom-removal-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='objectsToRemove'", - "reason": "disappeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-mask-update-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-mask-update-expected.txt index cadde7e..6ddd1d09 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-mask-update-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-mask-update-expected.txt
@@ -39,16 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGRect rect", - "reason": "style change" - }, - { - "object": "LayoutSVGRect rect", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-repaint-including-stroke-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-repaint-including-stroke-expected.txt index 9032c41..32a8551d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-repaint-including-stroke-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-repaint-including-stroke-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text id='bounce'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Repaint me!'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-rescale-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-rescale-expected.txt index 4888529..19ce9ca 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-rescale-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-rescale-expected.txt
@@ -69,132 +69,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='text1g'", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='text2g'", - "reason": "full" - }, - { - "object": "LayoutSVGContainer g id='text3g'", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "geometry" - }, - { - "object": "InlineFlowBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "LayoutSVGViewportContainer svg", - "reason": "geometry" - }, - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-selection-text-05-t-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-selection-text-05-t-expected.txt index 3bb05294..3e189f7f8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-selection-text-05-t-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-selection-text-05-t-expected.txt
@@ -449,740 +449,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1.x 1.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '4.x 1.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '2.x 1.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1.x 4.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '4.x 4.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '2.x 4.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1.x 2.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '4.x 2.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '2.x 2.y'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'text-anchor'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'start'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'text-anchor'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'middle'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'text-anchor'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox 'end'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '2'", - "reason": "selection" - }, - { - "object": "InlineTextBox '3'", - "reason": "selection" - }, - { - "object": "InlineTextBox '4'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '1'", - "reason": "selection" - }, - { - "object": "InlineTextBox '234'", - "reason": "selection" - }, - { - "object": "LayoutSVGText text id='revision'", - "reason": "selection" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "selection" - }, - { - "object": "InlineTextBox '$Revision: 1.8 $'", - "reason": "selection" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-viewbox-rescale-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-viewbox-rescale-expected.txt index 500c46c0..ca1a834f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-viewbox-rescale-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-viewbox-rescale-expected.txt
@@ -44,84 +44,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGViewportContainer svg id='inner1'", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "full" - }, - { - "object": "InlineFlowBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='inner2'", - "reason": "full" - }, - { - "object": "LayoutSVGText text", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS '", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "full" - }, - { - "object": "InlineFlowBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt index eeda48f4..3f55414 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/text-xy-updates-SVGList-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text id='ttt'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Passes, if text is at 200x20'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt index ca7e85d..dc274a19 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/tspan-dynamic-positioning-expected.txt
@@ -29,32 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutSVGTSpan tspan id='ts'", - "reason": "full" - }, - { - "object": "InlineFlowBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'This text should be at visible at 200,200'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/use-clipped-hit-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/use-clipped-hit-expected.txt index 7478302..531c147 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/use-clipped-hit-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/use-clipped-hit-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGText text id='status'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Passed'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/window-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/window-expected.txt index 61301d66..0f83a6c3 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/window-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/window-expected.txt
@@ -194,972 +194,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutSVGContainer g id='Windows'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='navWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='textNavWindow'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This window should'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'contain navigation tools'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Click on button'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox ''Resize Navigation Window' for a'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'random resize of this Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Note that this window also'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'features a window decoration'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Statusbar'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtonnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='bigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This is a big movable window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='nestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This window contains other windows'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='colourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupcolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Changing a colour changes background'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupcolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='titleBarcolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Colour Picker'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtoncolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtoncolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtoncolourPickerWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='statusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupstatusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='textStatusWindow'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This is a none-moveable'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'none-closeable status'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupstatusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='titleBarstatusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Status Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonstatusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonstatusWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='titleBarnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Nested middlesize Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtonnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonnestedWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='smallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='textSmallWindow'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This window has a callback'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'function indicating mouse'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'movements in the statusbar'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'and alerting window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'events'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Callback function is active'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='titleBarsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Small Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtonsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonsmallWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='minimalWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowMainGroupminimalWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text id='textMinimalWindow'", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'This is a minimal window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'without title and status bar.'", - "reason": "appeared" - }, - { - "object": "LayoutSVGTSpan tspan", - "reason": "appeared" - }, - { - "object": "InlineFlowBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'it is also not moveable'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupminimalWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='titleBarbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Big Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtonbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonbigWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGPath line", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer g id='Windows'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='navWindow'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'", - "reason": "geometry" - }, - { - "object": "LayoutSVGContainer g id='decoGroupnavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect", - "reason": "appeared" - }, - { - "object": "LayoutSVGRect rect id='decoGroupMinimizednavWindow'", - "reason": "appeared" - }, - { - "object": "LayoutSVGText text", - "reason": "appeared" - }, - { - "object": "RootInlineBox", - "reason": "appeared" - }, - { - "object": "LayoutSVGInlineText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'Navigation Window'", - "reason": "appeared" - }, - { - "object": "LayoutSVGContainer use id='closeButtonnavWindow'", - "reason": "full" - }, - { - "object": "LayoutSVGViewportContainer svg id='closeButton'", - "reason": "full" - }, - { - "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'", - "reason": "full" - }, - { - "object": "LayoutSVGViewportContainer svg id='maximizeButton'", - "reason": "full" - }, - { - "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'", - "reason": "full" - }, - { - "object": "LayoutSVGViewportContainer svg id='minimizeButton'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt index 201aad3..d48d59e4ee 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/cached-change-cell-sl-border-color-expected.txt
@@ -34,20 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='foo'", - "reason": "style change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='blockDiv'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/caret-contenteditable-content-after-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/caret-contenteditable-content-after-expected.txt index 1f667a8..be907d8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/caret-contenteditable-content-after-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/caret-contenteditable-content-after-expected.txt
@@ -129,104 +129,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'a'", - "reason": "appeared" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'ab'", - "reason": "full" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV id='editor'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "Caret", - "reason": "caret" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'abc'", - "reason": "full" - }, - { - "object": "LayoutTextFragment (anonymous)", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'x'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-expected.txt index b546570..62ce994 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-expected.txt
@@ -29,16 +29,6 @@ "position": [71, 96], "bounds": [58, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt index 30b0a3bb..8c8ba522 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-initial-empty-expected.txt
@@ -29,16 +29,6 @@ "position": [71, 96], "bounds": [58, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-span-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-span-expected.txt index 476df467..deec89e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-span-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-span-expected.txt
@@ -34,16 +34,6 @@ "position": [131, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt index 6940d6b..77316d3 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-col-span-initial-empty-expected.txt
@@ -34,16 +34,6 @@ "position": [131, 96], "bounds": [59, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COL id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-colgroup-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-colgroup-expected.txt index ae7c119..c46dbb1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-colgroup-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-colgroup-expected.txt
@@ -29,16 +29,6 @@ "position": [71, 96], "bounds": [58, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COLGROUP id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt index 4c0fda1a..ef5e95f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-colgroup-initial-empty-expected.txt
@@ -29,16 +29,6 @@ "position": [71, 96], "bounds": [58, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY", - "reason": "style change" - }, - { - "object": "LayoutTableCol COLGROUP id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-composited-row-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-composited-row-expected.txt index f55706e..89b9d53 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-composited-row-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-composited-row-expected.txt
@@ -35,12 +35,6 @@ "position": [71, 96], "bounds": [58, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt index 457aa71..e6bb08d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-composited-row-initial-empty-expected.txt
@@ -35,12 +35,6 @@ "position": [71, 96], "bounds": [58, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-expected.txt index 83733eda..12803c3 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-expected.txt
@@ -29,12 +29,6 @@ "position": [71, 96], "bounds": [58, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-initial-empty-expected.txt index a4ec042..e9cdbe3 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-initial-empty-expected.txt
@@ -29,12 +29,6 @@ "position": [71, 96], "bounds": [58, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt index 0beb47ad..30c5a92 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-composited-row-expected.txt
@@ -40,12 +40,6 @@ "position": [71, 96], "bounds": [58, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt index cc39a89..37dd4a5 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-composited-row-initial-empty-expected.txt
@@ -40,12 +40,6 @@ "position": [71, 96], "bounds": [58, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-expected.txt index 7bb2fb76..72e4362 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-expected.txt
@@ -35,12 +35,6 @@ "position": [71, 96], "bounds": [58, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt index 6d7c323..91626eb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-background-section-initial-empty-expected.txt
@@ -35,12 +35,6 @@ "position": [71, 96], "bounds": [58, 64] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableSection TBODY id='target'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-row-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-row-expected.txt index a25c02d..2b921185 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-row-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/composited-table-row-expected.txt
@@ -30,16 +30,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD id='target'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt index 81f5974..c8e58cd 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/resize-table-repaint-percent-size-cell-expected.txt
@@ -54,52 +54,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "incremental" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ROW1'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'ROW2'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt index 3f23015..e78d1791 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/resize-table-repaint-vertical-align-cell-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'MIDDLE'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/resize-table-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/resize-table-row-repaint-expected.txt index 1195d20..6a02baa 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/resize-table-row-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/resize-table-row-repaint-expected.txt
@@ -29,24 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'MIDDLE'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt index cb4567b5..851b9ca 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/single-line-cells-repeating-thead-break-inside-on-thead-only-expected.txt
@@ -39,40 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Col 1'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Col 1'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Col 1'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Col 1'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-cell-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-cell-collapsed-border-expected.txt index ba43044..0238385 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-cell-collapsed-border-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-cell-collapsed-border-expected.txt
@@ -54,36 +54,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='t1'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='t2'", - "reason": "style change" - }, - { - "object": "LayoutTableCell TD id='t3'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-cell-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-cell-move-expected.txt index 632bb9a..55239f92 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-cell-move-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-cell-move-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTableCell TD", - "reason": "appeared" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow DIV", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "disappeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-collapsed-border-expected.txt index c5e62bd..1e08307 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-collapsed-border-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-collapsed-border-expected.txt
@@ -144,184 +144,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutTable TABLE id='t'", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTableRow TR", - "reason": "style change" - }, - { - "object": "LayoutTable TABLE", - "reason": "full" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='r'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'sit amet'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE", - "reason": "full" - }, - { - "object": "LayoutTableSection TBODY", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR id='r2'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u00A0'", - "reason": "geometry" - }, - { - "object": "LayoutTable TABLE", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'Lorem'", - "reason": "geometry" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD id='d3'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'ipsum dolor'", - "reason": "appeared" - }, - { - "object": "LayoutTableRow TR", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'sit amet'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-shrink-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-shrink-row-repaint-expected.txt index c7c2b51..34fb11d3 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-shrink-row-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/table/table-shrink-row-repaint-expected.txt
@@ -234,208 +234,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutTableCell TD id='resizeMe'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '2'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '3'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '4'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '5'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '6'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '7'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '8'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '9'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '10'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '11'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '12'", - "reason": "geometry" - }, - { - "object": "LayoutTableCell TD", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '13'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-append-dirty-lines-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-append-dirty-lines-expected.txt index 4ae57295..1df4b299 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-append-dirty-lines-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-append-dirty-lines-expected.txt
@@ -59,36 +59,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse placerat. Morbi tristique. Mauris eu lacus sed felis'", - "reason": "full" - }, - { - "object": "InlineTextBox 'pellentesque cursus. Proin vitae nulla. Vivamus in ipsum. Etiam mi. Nam malesuada purus in sem. Sed eget elit vel erat laoreet'", - "reason": "full" - }, - { - "object": "InlineTextBox 'feugiat. Phasellus mollis pulvinar mi. Etiam ut neque sed eros egestas laoreet. Vestibulum ullamcorper, nulla non feugiat molestie, mi'", - "reason": "full" - }, - { - "object": "InlineTextBox 'lorem bibendum leo, ac gravida orci nunc nec nulla. Nunc nunc lorem, rhoncus et, rutrum ac, fermentum ut, tortor. Sed rhoncus.'", - "reason": "full" - }, - { - "object": "InlineTextBox 'Quisque enim metus, luctus tincidunt, vestibulum eu, vestibulum eu, libero. Mauris sagittis aliquam nunc. Nullam pharetra molestie'", - "reason": "full" - }, - { - "object": "InlineTextBox 'eros. Donec tempus purus ut ligula. Phasellus non nisl. Etiam eu mauris. Curabitur a velit.'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-match-document-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-match-document-change-expected.txt index b887502..8d3dc22 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-match-document-change-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/text-match-document-change-expected.txt
@@ -39,28 +39,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "VerticalScrollbar", - "reason": "scroll control" - }, - { - "object": "LayoutBlockFlow DIV id='to-be-changed'", - "reason": "full" - }, - { - "object": "RootInlineBox", - "reason": "full" - }, - { - "object": "LayoutText #text", - "reason": "appeared" - }, - { - "object": "InlineTextBox 'After change'", - "reason": "appeared" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/caret-with-transformation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/caret-with-transformation-expected.txt index 0e4ba4f3..91d8ea9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/caret-with-transformation-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/caret-with-transformation-expected.txt
@@ -29,12 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Caret", - "reason": "caret" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/subtree-layoutstate-transform-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/subtree-layoutstate-transform-expected.txt index f5f4867..f73fe39 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/subtree-layoutstate-transform-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/subtree-layoutstate-transform-expected.txt
@@ -29,16 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV class='layoutroot'", - "reason": "background" - }, - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "incremental" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/transform-inline-layered-child-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/transform-inline-layered-child-expected.txt index 4ad08be..4b57572 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/transform-inline-layered-child-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/transform-inline-layered-child-expected.txt
@@ -29,100 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='box'", - "reason": "style change" - }, - { - "object": "RootInlineBox", - "reason": "style change" - }, - { - "object": "LayoutInline (relative positioned) SPAN id='child'", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "InlineFlowBox", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - }, - { - "object": "InlineTextBox 'A B C'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'D E F'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'G H I'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'J K L'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'M N O'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'P Q R'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'S T U'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'V W X'", - "reason": "style change" - }, - { - "object": "InlineTextBox 'Y Z'", - "reason": "style change" - }, - { - "object": "LayoutText #text", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/transform-layout-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/transform-layout-repaint-expected.txt index 43ced221..de0e69d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/transform-layout-repaint-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/transform/transform-layout-repaint-expected.txt
@@ -34,24 +34,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='target'", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "full" - }, - { - "object": "InlineTextBox 'PASS'", - "reason": "full" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt index 24d1216..fa3f6b9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
@@ -37,84 +37,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'BBBB'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'CCCC'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'DDDD'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'EEEE'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'FFFF'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'GGGG'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'HHHH'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'IIII JJJJ'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'KKKK'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'LLLL'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'MMMM'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'NNNN'", - "reason": "geometry" - } ] } { @@ -156,84 +78,6 @@ ], "flattenInheritedTransform": false } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAA'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'BBBB'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'CCCC'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'DDDD'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'EEEE'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'FFFF'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'GGGG'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'HHHH'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'IIII JJJJ'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'KKKK'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'LLLL'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'MMMM'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'NNNN'", - "reason": "geometry" - } ] } { @@ -262,52 +106,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "background on scrolling contents layer" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "geometry" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAA BBBB CCCC'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'DDDD EEEE FFFF'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'GGGG HHHH IIII JJJJ'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'KKKK LLLL MMMM'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'NNNN'", - "reason": "geometry" - } ] } { @@ -386,48 +184,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "geometry" - }, - { - "object": "RootInlineBox", - "reason": "geometry" - }, - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'AAAA BBBB CCCC'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'DDDD EEEE FFFF'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'GGGG HHHH IIII JJJJ'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'KKKK LLLL MMMM'", - "reason": "geometry" - }, - { - "object": "InlineTextBox 'NNNN'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/markers/markers-zoomed-expected.png b/third_party/WebKit/LayoutTests/platform/win/paint/markers/markers-zoomed-expected.png new file mode 100644 index 0000000..51e893b9 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/win/paint/markers/markers-zoomed-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/pagination/pagination-change-clip-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/pagination/pagination-change-clip-crash-expected.txt index 36805f48..9a1217b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/paint/pagination/pagination-change-clip-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/paint/pagination/pagination-change-clip-crash-expected.txt
@@ -41,16 +41,6 @@ [8, 428, 0, 1] ] } - ], - "objectPaintInvalidations": [ - { - "object": "Scrolling Contents Layer", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow DIV id='background'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win/scrollbars/listbox-scrollbar-combinations-expected.png b/third_party/WebKit/LayoutTests/platform/win/scrollbars/listbox-scrollbar-combinations-expected.png index 226e445..bca7646 100644 --- a/third_party/WebKit/LayoutTests/platform/win/scrollbars/listbox-scrollbar-combinations-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/scrollbars/listbox-scrollbar-combinations-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/scrollbars/overflow-scrollbar-combinations-expected.png b/third_party/WebKit/LayoutTests/platform/win/scrollbars/overflow-scrollbar-combinations-expected.png index 2446796..1074b83 100644 --- a/third_party/WebKit/LayoutTests/platform/win/scrollbars/overflow-scrollbar-combinations-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/scrollbars/overflow-scrollbar-combinations-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png index f213216..f15838d0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png index ad03fd2..e7ac74a4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-01-b-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-01-b-expected.png index 80a8815..9fb13d4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-01-b-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-01-b-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-03-t-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-03-t-expected.png index b19e0fcf..337e9db 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-03-t-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-03-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-image-06-t-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-image-06-t-expected.png index b718d0a..66deffa 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-image-06-t-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-image-06-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-use-01-t-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-use-01-t-expected.png index f58a9e0a..0c9c64a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-use-01-t-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-use-01-t-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/as-border-image/svg-as-border-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/as-border-image/svg-as-border-image-expected.png index 43c7ca80..309faa6 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/as-border-image/svg-as-border-image-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/as-border-image/svg-as-border-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png index c54f4b0..5813fd52 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png index c54f4b0..5813fd52 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png index 62b13028..13807903 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/12-55-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/12-55-expected.png index cee0f46b..5d30afd 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/12-55-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/12-55-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/182-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/182-expected.png index 30e35d2..b0ba54e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/182-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/182-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/2-dht-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/2-dht-expected.png index 761060da..9af3296 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/2-dht-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/2-dht-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/23-55-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/23-55-expected.png index 7829a63..c88fabb 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/23-55-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/23-55-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/55-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/55-expected.png index d3510ec0..e3438fed 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/55-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/55-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/alt-text-wrapping-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/alt-text-wrapping-expected.png index 89f9f2e9..972e9ec 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/alt-text-wrapping-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/alt-text-wrapping-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-expected.png index 7827a5a7b..3183e81 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png-expected.png index 7827a5a7b..3183e81 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-background-image-cross-fade-png-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-border-image-source-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-border-image-source-expected.png index cba8112..0047562 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-border-image-source-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-border-image-source-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-border-radius-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-border-radius-expected.png index ec46c17..ec0e21a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-border-radius-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-border-radius-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-filter-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-filter-expected.png index 9873a9c..87082b4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-filter-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-filter-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-group-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-group-expected.png index 0a3bdb7..a3a5004 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-group-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-group-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png index ffaab03..5b6d5aa 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-expected.png index 4f00973..ac8932e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png index 1d5a810f..fcce2f9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-shape-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-shape-expected.png index 4b434ddf..d180cc5 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-shape-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-shape-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-layer-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-layer-expected.png index 255e342..96f01fc2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-layer-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-layer-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png index 0b54b20a..e6407020 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-layer-filter-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png index 27e0f94b..a48d8d11 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png index 421c3c6..5a47ee8 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-srgb-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png index 4b51a55..75dfb920 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-svg-fill-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/exif-orientation-css-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/exif-orientation-css-expected.png index 4344682..a04b8d2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/exif-orientation-css-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/exif-orientation-css-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/exif-orientation-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/exif-orientation-expected.png index 62a204f..19997ff7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/exif-orientation-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/exif-orientation-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png index 9a51861..1e79d9c1 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/exif-orientation-image-document-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/image-in-map-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/image-in-map-expected.png index 1ca8670..6856bb12 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/image-in-map-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/image-in-map-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/image-map-anchor-children-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/image-map-anchor-children-expected.png index a399851d..5c6c42b0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/image-map-anchor-children-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/image-map-anchor-children-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-zero-outline-width-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-zero-outline-width-expected.png index 0300199..3529fb4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-zero-outline-width-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/imagemap-focus-ring-zero-outline-width-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png index 84a9bac..160db21 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png index 8c5695e..75b0056 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-yuv-image-decoding-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/missing-image-border-zoom-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/missing-image-border-zoom-expected.png index 13ccbaf..3ffc2f9a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/missing-image-border-zoom-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/missing-image-border-zoom-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/png-suite/test-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/png-suite/test-expected.png index f2647404..7f06f21a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/png-suite/test-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/png-suite/test-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/png-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/png-with-color-profile-expected.png index ed9107b..9edab73c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/png-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/png-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.png index 72041a9..05ad4a7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-0px-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png index c0b4cd5..4e1a2f7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-0px-images-quirk-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.png index ed5d3064..996e1a4 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-10px-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.png index e354c89..fc87d32 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-16px-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.png index ebe8457..986dfd2 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-1px-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png index 562174b..1b93cf5 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-block-flow-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-images-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-images-expected.png index 1193657..fab2810f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-images-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/rendering-broken-images-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png index a53e7088..488d1ae 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png index b251f21..f462a54 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt index 457a740..abcb885 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/selection/japanese-rl-selection-clear-expected.txt
@@ -89,68 +89,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutText #text", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4'", - "reason": "geometry" - }, - { - "object": "InlineTextBox '\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'", - "reason": "geometry" - } ] }
diff --git a/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png index d3638f0..602635a 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/scrollbars/listbox-scrollbar-combinations-expected.png b/third_party/WebKit/LayoutTests/platform/win7/scrollbars/listbox-scrollbar-combinations-expected.png index a6df1ed..5b79efb 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/scrollbars/listbox-scrollbar-combinations-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/scrollbars/listbox-scrollbar-combinations-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png index a6df1ed..5b79efb 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win7/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/as-image/image-preserveAspectRatio-all-expected.png b/third_party/WebKit/LayoutTests/svg/as-image/image-preserveAspectRatio-all-expected.png index f752f80..42a0058 100644 --- a/third_party/WebKit/LayoutTests/svg/as-image/image-preserveAspectRatio-all-expected.png +++ b/third_party/WebKit/LayoutTests/svg/as-image/image-preserveAspectRatio-all-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/custom/group-opacity-expected.png b/third_party/WebKit/LayoutTests/svg/custom/group-opacity-expected.png index 4587a8b..902fd50 100644 --- a/third_party/WebKit/LayoutTests/svg/custom/group-opacity-expected.png +++ b/third_party/WebKit/LayoutTests/svg/custom/group-opacity-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/filters/feImage-preserveAspectRatio-all-expected.png b/third_party/WebKit/LayoutTests/svg/filters/feImage-preserveAspectRatio-all-expected.png index 16aef86f..268a0ed 100644 --- a/third_party/WebKit/LayoutTests/svg/filters/feImage-preserveAspectRatio-all-expected.png +++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-preserveAspectRatio-all-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/filters/feImage-preserveAspectratio-expected.png b/third_party/WebKit/LayoutTests/svg/filters/feImage-preserveAspectratio-expected.png index 5b5ab2d..6b189d2 100644 --- a/third_party/WebKit/LayoutTests/svg/filters/feImage-preserveAspectratio-expected.png +++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-preserveAspectratio-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/filters/filter-source-position-expected.png b/third_party/WebKit/LayoutTests/svg/filters/filter-source-position-expected.png index 3ffb072..129a924 100644 --- a/third_party/WebKit/LayoutTests/svg/filters/filter-source-position-expected.png +++ b/third_party/WebKit/LayoutTests/svg/filters/filter-source-position-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/filters/filteredImage-expected.png b/third_party/WebKit/LayoutTests/svg/filters/filteredImage-expected.png index ebceb68b..ade998f 100644 --- a/third_party/WebKit/LayoutTests/svg/filters/filteredImage-expected.png +++ b/third_party/WebKit/LayoutTests/svg/filters/filteredImage-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/2-comp-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/2-comp-expected.png index 52ccfa7..a985777 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/2-comp-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/2-comp-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-jpeg-with-color-profile-expected.png index d74fd5e..d531c23a 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-jpeg-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-jpeg-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-expected.png index c27ac87..ce8f2e3 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-rotate-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-rotate-expected.png index 11f794b..f7d5e2c7 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-rotate-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-animate-rotate-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-clip-text-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-clip-text-expected.png index 24a17d4..95dc8bf8 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-clip-text-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-clip-text-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-cover-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-cover-expected.png index a9885ad..e1f17141 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-cover-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-cover-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-repeat-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-repeat-expected.png index 66e6569..519bb33d 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-repeat-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-repeat-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-space-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-space-expected.png index 7cc74a9..506f9b7 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-space-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-background-image-space-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-border-image-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-border-image-expected.png index 3e855d7..d31a0d1 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-border-image-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-border-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-clip-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-clip-expected.png index b5d20ca..cfa5879 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-clip-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-clip-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-iframe-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-iframe-expected.png index 62791bf..9cec15fc 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-iframe-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-iframe-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-expected.png index 28bbd5d..fc82e61 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-pattern-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-pattern-expected.png index bdcfbd9..94f8dbf 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-pattern-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-canvas-pattern-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-object-fit-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-object-fit-expected.png index 977e8bca1..875d17d 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-object-fit-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-object-fit-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-profile-match-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-profile-match-expected.png index 495e0a8..2fbd523f 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-profile-match-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-profile-match-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-pseudo-content-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-pseudo-content-expected.png index ca8518b..3a4bcb0b 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-pseudo-content-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-pseudo-content-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-svg-resource-url-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-svg-resource-url-expected.png index a6e1828..cb36d93 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-svg-resource-url-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-image-svg-resource-url-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-mask-image-svg-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-mask-image-svg-expected.png index 0a67821..08938e7 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-mask-image-svg-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-mask-image-svg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-object-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-object-expected.png index 906811d..99a99d1 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-object-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-object-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-svg-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-svg-expected.png index 58a4b1b..f2b4808 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-svg-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-svg-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-svg-foreign-object-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-svg-foreign-object-expected.png index bb55402..7afc49eb 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-svg-foreign-object-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/color-profile-svg-foreign-object-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/embed-image-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/embed-image-expected.png index 7271cb0..7512119d2 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/embed-image-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/embed-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/exif-orientation-height-image-document-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/exif-orientation-height-image-document-expected.png index 6f2523d2..6367f02 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/exif-orientation-height-image-document-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/exif-orientation-height-image-document-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/gif-short-app-extension-string-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/gif-short-app-extension-string-expected.png index f44ff0a6..5687593 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/gif-short-app-extension-string-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/gif-short-app-extension-string-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/gray-scale-jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/gray-scale-jpeg-with-color-profile-expected.png index cacf9720..2c97afcd 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/gray-scale-jpeg-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/gray-scale-jpeg-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/gray-scale-png-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/gray-scale-png-with-color-profile-expected.png index 89657ed..1c548d1 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/gray-scale-png-with-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/gray-scale-png-with-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/icon-decoding-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/icon-decoding-expected.png index 7177158..29b3202d 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/icon-decoding-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/icon-decoding-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/jpeg-yuv-progressive-image-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/jpeg-yuv-progressive-image-expected.png index 04c9909..f1db6761 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/jpeg-yuv-progressive-image-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/jpeg-yuv-progressive-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/motion-jpeg-single-frame-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/motion-jpeg-single-frame-expected.png index 99e07dc..20dc548b 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/motion-jpeg-single-frame-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/motion-jpeg-single-frame-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/object-image-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/object-image-expected.png index 7271cb0..7512119d2 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/object-image-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/object-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/pixelated-composited-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/pixelated-composited-expected.png new file mode 100644 index 0000000..8b5a41f0 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/pixelated-composited-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/png-color-profile-ignore-gamma-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/png-color-profile-ignore-gamma-expected.png index 3017e77..724117f 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/png-color-profile-ignore-gamma-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/png-color-profile-ignore-gamma-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/rgb-jpeg-with-adobe-marker-only-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/rgb-jpeg-with-adobe-marker-only-expected.png index 636dc07..748926ef 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/rgb-jpeg-with-adobe-marker-only-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/rgb-jpeg-with-adobe-marker-only-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/rgb-png-with-cmyk-color-profile-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/rgb-png-with-cmyk-color-profile-expected.png index 1b582df..52383303 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/rgb-png-with-cmyk-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/rgb-png-with-cmyk-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/webp-color-profile-lossy-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/webp-color-profile-lossy-expected.png index 31c3853..d4e3429 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/webp-color-profile-lossy-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/webp-color-profile-lossy-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/ycbcr-with-cmyk-color-profile-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/ycbcr-with-cmyk-color-profile-expected.png index 87f6cdca..c0528ca 100644 --- a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/ycbcr-with-cmyk-color-profile-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/ycbcr-with-cmyk-color-profile-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png index aa7dbea5..89bbbc4 100644 --- a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png index aec1516..b6dee39 100644 --- a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png +++ b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/do-not-paint-below-image-baseline-expected.txt b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/do-not-paint-below-image-baseline-expected.txt index 3faad71b..6c5beb19 100644 --- a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/do-not-paint-below-image-baseline-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/do-not-paint-below-image-baseline-expected.txt
@@ -16,12 +16,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutImage IMG", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/fixed-img-src-change-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/fixed-img-src-change-after-scroll-expected.txt index d6809a4..403a2f35 100644 --- a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/fixed-img-src-change-after-scroll-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/fixed-img-src-change-after-scroll-expected.txt
@@ -21,12 +21,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutImage (positioned) IMG id='img'", - "reason": "subtree" - } ] }
diff --git a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/repaint-subrect-grid-expected.txt b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/repaint-subrect-grid-expected.txt index 02f264a4..565b482 100644 --- a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/repaint-subrect-grid-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/images/repaint-subrect-grid-expected.txt
@@ -121,52 +121,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "bounds change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "bounds change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "bounds change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "bounds change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "bounds change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "bounds change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "bounds change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "bounds change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "bounds change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "bounds change" - }, - { - "object": "LayoutBlockFlow (positioned) DIV id='mask'", - "reason": "bounds change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-expected.txt index 06f56bc..04d5ee33 100644 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-expected.txt
@@ -62,12 +62,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='container'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-content-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-content-expected.txt index 92ea667..d33706e 100644 --- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-content-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-content-expected.txt
@@ -68,12 +68,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutBlockFlow DIV id='indicator'", - "reason": "style change" - } ] }
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt index 3fa1ede9..8a4dbe2b 100644 --- a/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -696,6 +696,7 @@ attribute @@toStringTag getter action getter notification + getter reply method constructor interface OffscreenCanvas : EventTarget attribute @@toStringTag
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/paint/invalidation/iframe-display-block-to-display-none-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/paint/invalidation/iframe-display-block-to-display-none-expected.txt index 4efe539..941dd7bd 100644 --- a/third_party/WebKit/LayoutTests/virtual/stable/paint/invalidation/iframe-display-block-to-display-none-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/stable/paint/invalidation/iframe-display-block-to-display-none-expected.txt
@@ -24,32 +24,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutIFrame IFRAME id='iframe'", - "reason": "layoutObject removal" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "layoutObject removal" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "layoutObject removal" - }, - { - "object": "LayoutView #document", - "reason": "full" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "layoutObject insertion" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "layoutObject insertion" - } ] }
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/paint/invalidation/iframe-display-none-to-display-block-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/paint/invalidation/iframe-display-none-to-display-block-expected.txt index 7c0c841..884e4f6 100644 --- a/third_party/WebKit/LayoutTests/virtual/stable/paint/invalidation/iframe-display-none-to-display-block-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/stable/paint/invalidation/iframe-display-none-to-display-block-expected.txt
@@ -29,40 +29,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutIFrame IFRAME id='iframe'", - "reason": "layoutObject insertion" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "layoutObject removal" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "layoutObject removal" - }, - { - "object": "VerticalScrollbar", - "reason": "scroll" - }, - { - "object": "LayoutView #document", - "reason": "scroll" - }, - { - "object": "LayoutView #document", - "reason": "full" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "layoutObject insertion" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "layoutObject insertion" - } ] }
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt index 21103afe..c7e3965a 100644 --- a/third_party/WebKit/LayoutTests/virtual/stable/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/stable/paint/invalidation/shift-relative-positioned-container-with-image-removal-expected.txt
@@ -54,60 +54,6 @@ } ] } - ], - "objectPaintInvalidations": [ - { - "object": "LayoutIFrame IFRAME id='iframe'", - "reason": "layoutObject removal" - }, - { - "object": "LayoutText #text", - "reason": "layoutObject removal" - }, - { - "object": "LayoutBlockFlow (anonymous)", - "reason": "layoutObject removal" - }, - { - "object": "LayoutView #document", - "reason": "incremental" - }, - { - "object": "LayoutBlockFlow (relative positioned) DIV class='relative paddingTop'", - "reason": "bounds change" - }, - { - "object": "RootInlineBox", - "reason": "bounds change" - }, - { - "object": "LayoutImage IMG", - "reason": "bounds change" - }, - { - "object": "LayoutText #text", - "reason": "location change" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "layoutObject removal" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "layoutObject removal" - }, - { - "object": "LayoutView #document", - "reason": "full" - }, - { - "object": "LayoutBlockFlow HTML", - "reason": "layoutObject insertion" - }, - { - "object": "LayoutBlockFlow BODY", - "reason": "layoutObject insertion" - } ] }
diff --git a/third_party/android_async_task/OWNERS b/third_party/android_async_task/OWNERS index ceb69e5..c723862 100644 --- a/third_party/android_async_task/OWNERS +++ b/third_party/android_async_task/OWNERS
@@ -1,4 +1,5 @@ agrieve@chromium.org hartmanng@chromium.org +smaier@chromium.org torne@chromium.org wnwen@chromium.org
diff --git a/third_party/blink/public/mojom/dom_storage/storage_area.mojom b/third_party/blink/public/mojom/dom_storage/storage_area.mojom index a7aeaef3..33de2bb0 100644 --- a/third_party/blink/public/mojom/dom_storage/storage_area.mojom +++ b/third_party/blink/public/mojom/dom_storage/storage_area.mojom
@@ -38,6 +38,16 @@ // The mojo interface representing the connection to a single DOMStorage Area. interface StorageArea { + // The quota for each storage area. + // This value is enforced in renderer processes and the browser process. + const uint32 kPerStorageAreaQuota = 10485760; // 10 MiB + + // In the browser process we allow some overage to + // accommodate concurrent writes from different renderers + // that were allowed because the limit imposed in the renderer + // wasn't exceeded. + const uint32 kPerStorageAreaOverQuotaAllowance = 102400; // 100 KiB + AddObserver(associated StorageAreaObserver observer); // Set the database entry for |key| to |value|.
diff --git a/third_party/blink/public/platform/modules/webauthn/authenticator.mojom b/third_party/blink/public/platform/modules/webauthn/authenticator.mojom index 17f9a84..dfa4909 100644 --- a/third_party/blink/public/platform/modules/webauthn/authenticator.mojom +++ b/third_party/blink/public/platform/modules/webauthn/authenticator.mojom
@@ -65,11 +65,10 @@ array<uint8>? user_handle; // True if getClientExtensionResults() called on the returned - // PublicKeyCredential instance should yield an - // AuthenticationExtensionsClientOutputs dictionary that contains the `appid: - // true` extension output, which indicates to the relying party that the - // `appid` extension was acted upon. + // PublicKeyCredential instance should contain an `appid` extension output. + // If so, |appid_extension| contains the actual value. bool echo_appid_extension; + bool appid_extension; }; // Information about the relying party. These fields take arbitrary input.
diff --git a/third_party/blink/public/platform/web_runtime_features.h b/third_party/blink/public/platform/web_runtime_features.h index b06f7c52..46daddce 100644 --- a/third_party/blink/public/platform/web_runtime_features.h +++ b/third_party/blink/public/platform/web_runtime_features.h
@@ -99,6 +99,8 @@ BLINK_PLATFORM_EXPORT static void EnableLayoutNG(bool); BLINK_PLATFORM_EXPORT static void EnableLazyFrameLoading(bool); BLINK_PLATFORM_EXPORT static void EnableLazyFrameVisibleLoadTimeMetrics(bool); + BLINK_PLATFORM_EXPORT static void EnableLazyImageLoading(bool); + BLINK_PLATFORM_EXPORT static void EnableLazyImageVisibleLoadTimeMetrics(bool); BLINK_PLATFORM_EXPORT static void EnableLazyParseCSS(bool); BLINK_PLATFORM_EXPORT static void EnableMediaCapture(bool); BLINK_PLATFORM_EXPORT static void EnableMediaSession(bool);
diff --git a/third_party/blink/renderer/bindings/IDLExtendedAttributes.md b/third_party/blink/renderer/bindings/IDLExtendedAttributes.md index 1370c71..6464d7b70 100644 --- a/third_party/blink/renderer/bindings/IDLExtendedAttributes.md +++ b/third_party/blink/renderer/bindings/IDLExtendedAttributes.md
@@ -1036,16 +1036,6 @@ **FIXME:** Currently, `[OriginTrialEnabled]` can only be applied to interfaces, attributes, and constants. Methods (including those generated by `iterable`, `setlike`, `maplike`, `serializer` and `stringifier`) are not supported. See [Bug 621641](https://crbug.com/621641). *** -### [PostMessage] _(m)_ - -Summary: Tells the code generator to generate postMessage method used in Workers, Service Workers etc. - -Usage: `[PostMessage]` can be specified on methods - -```webidl -[PostMessage] void postMessage(any message, optional sequence<Transferable> transfer); -``` - ### [RaisesException] _(i, m, a)_ Summary: Tells the code generator to append an `ExceptionState&` argument when calling the Blink implementation.
diff --git a/third_party/blink/renderer/bindings/IDLExtendedAttributes.txt b/third_party/blink/renderer/bindings/IDLExtendedAttributes.txt index ac0bab0..980ae47 100644 --- a/third_party/blink/renderer/bindings/IDLExtendedAttributes.txt +++ b/third_party/blink/renderer/bindings/IDLExtendedAttributes.txt
@@ -79,7 +79,6 @@ PartialInterfaceImplementedAs=* PermissiveDictionaryConversion PerWorldBindings -PostMessage PrimaryGlobal=|* PutForwards=* RaisesException=|Getter|Setter|Constructor
diff --git a/third_party/blink/renderer/bindings/bindings.gni b/third_party/blink/renderer/bindings/bindings.gni index d07f8140..cf10f506 100644 --- a/third_party/blink/renderer/bindings/bindings.gni +++ b/third_party/blink/renderer/bindings/bindings.gni
@@ -112,8 +112,8 @@ "core/v8/v8_embedder_graph_builder.h", "core/v8/v8_error_handler.cc", "core/v8/v8_error_handler.h", - "core/v8/v8_event_listener.cc", - "core/v8/v8_event_listener.h", + "core/v8/v8_event_listener_or_event_handler.cc", + "core/v8/v8_event_listener_or_event_handler.h", "core/v8/v8_event_listener_helper.cc", "core/v8/v8_event_listener_helper.h", "core/v8/v8_event_listener_info.h", @@ -156,6 +156,8 @@ "core/v8/window_proxy_manager.h", "core/v8/worker_or_worklet_script_controller.cc", "core/v8/worker_or_worklet_script_controller.h", + "core/v8/serialization/post_message_helper.cc", + "core/v8/serialization/post_message_helper.h", "core/v8/serialization/serialized_color_params.cc", "core/v8/serialization/serialized_color_params.h", "core/v8/serialization/serialization_tag.h",
diff --git a/third_party/blink/renderer/bindings/core/v8/custom/v8_window_custom.cc b/third_party/blink/renderer/bindings/core/v8/custom/v8_window_custom.cc index 5871aa0..61a3918 100644 --- a/third_party/blink/renderer/bindings/core/v8/custom/v8_window_custom.cc +++ b/third_party/blink/renderer/bindings/core/v8/custom/v8_window_custom.cc
@@ -35,7 +35,7 @@ #include "third_party/blink/renderer/bindings/core/v8/script_source_code.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/bindings/core/v8/v8_event.h" -#include "third_party/blink/renderer/bindings/core/v8/v8_event_listener.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_event_listener_or_event_handler.h" #include "third_party/blink/renderer/bindings/core/v8/v8_html_collection.h" #include "third_party/blink/renderer/bindings/core/v8/v8_node.h" #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
diff --git a/third_party/blink/renderer/bindings/core/v8/script_wrappable_marking_visitor_test.cc b/third_party/blink/renderer/bindings/core/v8/script_wrappable_marking_visitor_test.cc index 4f28a9b..8433fcd 100644 --- a/third_party/blink/renderer/bindings/core/v8/script_wrappable_marking_visitor_test.cc +++ b/third_party/blink/renderer/bindings/core/v8/script_wrappable_marking_visitor_test.cc
@@ -16,123 +16,31 @@ namespace blink { -namespace { - -// Temporarily swaps out the underlying v8 heap controller from a given -// v8::Isolate. Gracefully finalized potentially running garbage collections. -class TemporaryV8HeapControllerScope { - WTF_MAKE_NONCOPYABLE(TemporaryV8HeapControllerScope); - STACK_ALLOCATED(); - - public: - TemporaryV8HeapControllerScope(v8::Isolate* isolate, - std::unique_ptr<V8HeapController> controller) - : isolate_(isolate), saved_controller_(std::move(controller)) { - SwapWithV8PerIsolateDataVisitor(); - } - ~TemporaryV8HeapControllerScope() { SwapWithV8PerIsolateDataVisitor(); } - - V8HeapController* CurrentController() { - return V8PerIsolateData::From(isolate_)->GetV8HeapController(); - } - - private: - void SwapWithV8PerIsolateDataVisitor() { - V8HeapController* current = CurrentController(); - if (current) - current->FinalizeAndCleanup(); - V8PerIsolateData::From(isolate_)->SwapV8HeapController(saved_controller_); - isolate_->SetEmbedderHeapTracer(CurrentController()); - } - - v8::Isolate* const isolate_; - std::unique_ptr<V8HeapController> saved_controller_; -}; - -class InterceptingScriptWrappableMarkingVisitor - : public blink::ScriptWrappableMarkingVisitor { - public: - InterceptingScriptWrappableMarkingVisitor(v8::Isolate* isolate) - : ScriptWrappableMarkingVisitor(isolate), - marked_wrappers_(new size_t(0)) {} - ~InterceptingScriptWrappableMarkingVisitor() override { - delete marked_wrappers_; - } - - void Visit(const TraceWrapperV8Reference<v8::Value>&) override { - *marked_wrappers_ += 1; - // Do not actually mark this visitor, as this would call into v8, which - // would require executing an actual GC. - } - - size_t NumberOfMarkedWrappers() const { return *marked_wrappers_; } - - void Start() { TracePrologue(); } - - void End() { - // Gracefully terminate tracing. - AdvanceTracing( - 0, - v8::EmbedderHeapTracer::AdvanceTracingActions( - v8::EmbedderHeapTracer::ForceCompletionAction::FORCE_COMPLETION)); - AbortTracing(); - } - - private: - size_t* marked_wrappers_; // Indirection required because of const override. -}; - -class InterceptingScriptWrappableMarkingVisitorScope - : public TemporaryV8HeapControllerScope { - WTF_MAKE_NONCOPYABLE(InterceptingScriptWrappableMarkingVisitorScope); - STACK_ALLOCATED(); - - public: - InterceptingScriptWrappableMarkingVisitorScope(v8::Isolate* isolate) - : TemporaryV8HeapControllerScope( - isolate, - std::unique_ptr<InterceptingScriptWrappableMarkingVisitor>{ - new InterceptingScriptWrappableMarkingVisitor(isolate)}) { - Visitor()->Start(); - } - - virtual ~InterceptingScriptWrappableMarkingVisitorScope() { - Visitor()->End(); - } - - InterceptingScriptWrappableMarkingVisitor* Visitor() { - return static_cast<InterceptingScriptWrappableMarkingVisitor*>( - CurrentController()); - } -}; - -void PreciselyCollectGarbage() { +static void PreciselyCollectGarbage() { ThreadState::Current()->CollectAllGarbage(); } -void RunV8Scavenger(v8::Isolate* isolate) { +static void RunV8Scavenger(v8::Isolate* isolate) { V8GCController::CollectGarbage(isolate, true); } -void RunV8FullGc(v8::Isolate* isolate) { +static void RunV8FullGc(v8::Isolate* isolate) { V8GCController::CollectGarbage(isolate, false); } -} // namespace - TEST(ScriptWrappableMarkingVisitorTest, ScriptWrappableMarkingVisitorTracesWrappers) { - V8TestingScope testing_scope; - - // The graph needs to be set up before starting tracing as otherwise the - // conservative write barrier would trigger. + V8TestingScope scope; + ScriptWrappableMarkingVisitor* visitor = + V8PerIsolateData::From(scope.GetIsolate()) + ->GetScriptWrappableMarkingVisitor(); DeathAwareScriptWrappable* target = DeathAwareScriptWrappable::Create(); DeathAwareScriptWrappable* dependency = DeathAwareScriptWrappable::Create(); target->SetWrappedDependency(dependency); - InterceptingScriptWrappableMarkingVisitorScope intercepting_scope( - testing_scope.GetIsolate()); - ScriptWrappableMarkingVisitor* visitor = intercepting_scope.Visitor(); + // The graph needs to be set up before starting tracing as otherwise the + // conservative write barrier would trigger. + visitor->TracePrologue(); HeapObjectHeader* target_header = HeapObjectHeader::FromPayload(target); HeapObjectHeader* dependency_header = @@ -153,6 +61,8 @@ EXPECT_EQ(visitor->MarkingDeque()->size(), 0ul); EXPECT_TRUE(target_header->IsWrapperHeaderMarked()); EXPECT_TRUE(dependency_header->IsWrapperHeaderMarked()); + + visitor->AbortTracing(); } TEST(ScriptWrappableMarkingVisitorTest, @@ -235,47 +145,51 @@ } TEST(ScriptWrappableMarkingVisitorTest, OilpanClearsHeadersWhenObjectDied) { - V8TestingScope testing_scope; + V8TestingScope scope; DeathAwareScriptWrappable* object = DeathAwareScriptWrappable::Create(); - - // The graph needs to be set up before starting tracing as otherwise the - // conservative write barrier would trigger. - InterceptingScriptWrappableMarkingVisitorScope intercepting_scope( - testing_scope.GetIsolate()); - ScriptWrappableMarkingVisitor* visitor = intercepting_scope.Visitor(); - + ScriptWrappableMarkingVisitor* visitor = + V8PerIsolateData::From(scope.GetIsolate()) + ->GetScriptWrappableMarkingVisitor(); + visitor->TracePrologue(); auto* header = HeapObjectHeader::FromPayload(object); visitor->headers_to_unmark_.push_back(header); + PreciselyCollectGarbage(); + EXPECT_FALSE(visitor->headers_to_unmark_.Contains(header)); + visitor->AbortTracing(); } TEST(ScriptWrappableMarkingVisitorTest, OilpanClearsMarkingDequeWhenObjectDied) { - V8TestingScope testing_scope; + V8TestingScope scope; DeathAwareScriptWrappable* object = DeathAwareScriptWrappable::Create(); - - // The graph needs to be set up before starting tracing as otherwise the - // conservative write barrier would trigger. - InterceptingScriptWrappableMarkingVisitorScope intercepting_scope( - testing_scope.GetIsolate()); - ScriptWrappableMarkingVisitor* visitor = intercepting_scope.Visitor(); + ScriptWrappableMarkingVisitor* visitor = + V8PerIsolateData::From(scope.GetIsolate()) + ->GetScriptWrappableMarkingVisitor(); + visitor->TracePrologue(); visitor->TraceWithWrappers(object); EXPECT_EQ(visitor->MarkingDeque()->front().RawObjectPointer(), object); + PreciselyCollectGarbage(); + EXPECT_EQ(visitor->MarkingDeque()->front().RawObjectPointer(), nullptr); + + visitor->AbortTracing(); } TEST(ScriptWrappableMarkingVisitorTest, MarkedObjectDoesNothingOnWriteBarrierHitWhenDependencyIsMarkedToo) { - V8TestingScope testing_scope; - InterceptingScriptWrappableMarkingVisitorScope intercepting_scope( - testing_scope.GetIsolate()); - ScriptWrappableMarkingVisitor* visitor = intercepting_scope.Visitor(); + V8TestingScope scope; + + ScriptWrappableMarkingVisitor* visitor = + V8PerIsolateData::From(scope.GetIsolate()) + ->GetScriptWrappableMarkingVisitor(); + visitor->TracePrologue(); DeathAwareScriptWrappable* target = DeathAwareScriptWrappable::Create(); DeathAwareScriptWrappable* dependencies[] = { @@ -288,18 +202,23 @@ } EXPECT_TRUE(visitor->MarkingDeque()->IsEmpty()); + target->SetWrappedDependency(dependencies[0]); target->AddWrappedVectorDependency(dependencies[1]); target->AddWrappedHashMapDependency(dependencies[2], dependencies[3]); + EXPECT_TRUE(visitor->MarkingDeque()->IsEmpty()); + visitor->AbortTracing(); } TEST(ScriptWrappableMarkingVisitorTest, MarkedObjectMarksDependencyOnWriteBarrierHitWhenNotMarked) { - V8TestingScope testing_scope; - InterceptingScriptWrappableMarkingVisitorScope intercepting_scope( - testing_scope.GetIsolate()); - ScriptWrappableMarkingVisitor* visitor = intercepting_scope.Visitor(); + V8TestingScope scope; + + ScriptWrappableMarkingVisitor* visitor = + V8PerIsolateData::From(scope.GetIsolate()) + ->GetScriptWrappableMarkingVisitor(); + visitor->TracePrologue(); DeathAwareScriptWrappable* target = DeathAwareScriptWrappable::Create(); DeathAwareScriptWrappable* dependencies[] = { @@ -317,6 +236,8 @@ for (int i = 0; i < 4; i++) { EXPECT_TRUE(visitor->MarkingDequeContains(dependencies[i])); } + + visitor->AbortTracing(); } namespace { @@ -341,6 +262,63 @@ TraceWrapperV8Reference<v8::String> handle_; }; +class InterceptingScriptWrappableMarkingVisitor + : public blink::ScriptWrappableMarkingVisitor { + public: + InterceptingScriptWrappableMarkingVisitor(v8::Isolate* isolate) + : ScriptWrappableMarkingVisitor(isolate), + marked_wrappers_(new size_t(0)) {} + ~InterceptingScriptWrappableMarkingVisitor() override { + delete marked_wrappers_; + } + + void Visit(const TraceWrapperV8Reference<v8::Value>&) override { + *marked_wrappers_ += 1; + // Do not actually mark this visitor, as this would call into v8, which + // would require executing an actual GC. + } + + size_t NumberOfMarkedWrappers() const { return *marked_wrappers_; } + + void Start() { TracePrologue(); } + + void end() { + // Gracefully terminate tracing. + AdvanceTracing( + 0, + v8::EmbedderHeapTracer::AdvanceTracingActions( + v8::EmbedderHeapTracer::ForceCompletionAction::FORCE_COMPLETION)); + AbortTracing(); + } + + private: + size_t* marked_wrappers_; // Indirection required because of const override. +}; + +class InterceptingScriptWrappableMarkingVisitorScope + : public V8PerIsolateData::TemporaryScriptWrappableVisitorScope { + WTF_MAKE_NONCOPYABLE(InterceptingScriptWrappableMarkingVisitorScope); + STACK_ALLOCATED(); + + public: + InterceptingScriptWrappableMarkingVisitorScope(v8::Isolate* isolate) + : V8PerIsolateData::TemporaryScriptWrappableVisitorScope( + isolate, + std::unique_ptr<InterceptingScriptWrappableMarkingVisitor>( + new InterceptingScriptWrappableMarkingVisitor(isolate))) { + Visitor()->Start(); + } + + virtual ~InterceptingScriptWrappableMarkingVisitorScope() { + Visitor()->end(); + } + + InterceptingScriptWrappableMarkingVisitor* Visitor() { + return reinterpret_cast<InterceptingScriptWrappableMarkingVisitor*>( + CurrentVisitor()); + } +}; + } // namespace TEST(ScriptWrappableMarkingVisitorTest, WriteBarrierOnUnmarkedContainer) { @@ -378,12 +356,25 @@ CHECK_EQ(1u, raw_visitor->NumberOfMarkedWrappers()); } +TEST(ScriptWrappableMarkingVisitorTest, VtableAtObjectStart) { + // This test makes sure that the subobject v8::EmbedderHeapTracer is placed + // at the start of a ScriptWrappableMarkingVisitor object. We do this to + // mitigate potential problems that could be caused by LTO when passing + // v8::EmbedderHeapTracer across the API boundary. + V8TestingScope scope; + std::unique_ptr<blink::ScriptWrappableMarkingVisitor> visitor( + new ScriptWrappableMarkingVisitor(scope.GetIsolate())); + CHECK_EQ( + static_cast<void*>(visitor.get()), + static_cast<void*>(dynamic_cast<v8::EmbedderHeapTracer*>(visitor.get()))); +} + TEST(ScriptWrappableMarkingVisitor, WriteBarrierForScriptWrappable) { // Regression test for crbug.com/702490. V8TestingScope scope; - InterceptingScriptWrappableMarkingVisitorScope intercepting_scope( + InterceptingScriptWrappableMarkingVisitorScope visitor_scope( scope.GetIsolate()); - auto* raw_visitor = intercepting_scope.Visitor(); + auto* raw_visitor = visitor_scope.Visitor(); // Mark the ScriptWrappable. DeathAwareScriptWrappable* target = DeathAwareScriptWrappable::Create(); @@ -405,6 +396,9 @@ TEST(ScriptWrappableMarkingVisitorTest, WriteBarrierOnHeapVectorSwap1) { V8TestingScope scope; + ScriptWrappableMarkingVisitor* visitor = + V8PerIsolateData::From(scope.GetIsolate()) + ->GetScriptWrappableMarkingVisitor(); HeapVector<DeathAwareScriptWrappable::Wrapper> vector1; DeathAwareScriptWrappable* entry1 = DeathAwareScriptWrappable::Create(); @@ -413,18 +407,22 @@ DeathAwareScriptWrappable* entry2 = DeathAwareScriptWrappable::Create(); vector2.push_back(entry2); - InterceptingScriptWrappableMarkingVisitorScope intercepting_scope( - scope.GetIsolate()); - ScriptWrappableMarkingVisitor* visitor = intercepting_scope.Visitor(); + visitor->TracePrologue(); EXPECT_TRUE(visitor->MarkingDeque()->IsEmpty()); swap(vector1, vector2); + EXPECT_TRUE(visitor->MarkingDequeContains(entry1)); EXPECT_TRUE(visitor->MarkingDequeContains(entry2)); + + visitor->AbortTracing(); } TEST(ScriptWrappableMarkingVisitorTest, WriteBarrierOnHeapVectorSwap2) { V8TestingScope scope; + ScriptWrappableMarkingVisitor* visitor = + V8PerIsolateData::From(scope.GetIsolate()) + ->GetScriptWrappableMarkingVisitor(); HeapVector<DeathAwareScriptWrappable::Wrapper> vector1; DeathAwareScriptWrappable* entry1 = DeathAwareScriptWrappable::Create(); @@ -433,15 +431,16 @@ DeathAwareScriptWrappable* entry2 = DeathAwareScriptWrappable::Create(); vector2.push_back(entry2); - InterceptingScriptWrappableMarkingVisitorScope intercepting_scope( - scope.GetIsolate()); - ScriptWrappableMarkingVisitor* visitor = intercepting_scope.Visitor(); + visitor->TracePrologue(); EXPECT_TRUE(visitor->MarkingDeque()->IsEmpty()); swap(vector1, vector2); + // Only entry2 is held alive by TraceWrapperMember, so we only expect this // barrier to fire. EXPECT_TRUE(visitor->MarkingDequeContains(entry2)); + + visitor->AbortTracing(); } namespace { @@ -496,6 +495,9 @@ TEST(ScriptWrappableMarkingVisitorTest, MixinTracing) { V8TestingScope scope; + ScriptWrappableMarkingVisitor* visitor = + V8PerIsolateData::From(scope.GetIsolate()) + ->GetScriptWrappableMarkingVisitor(); DeathAwareScriptWrappable* base_wrapper = DeathAwareScriptWrappable::Create(); DeathAwareScriptWrappable* mixin_wrapper = @@ -508,9 +510,7 @@ // Make sure that mixin does not point to the object header. EXPECT_NE(static_cast<void*>(base), static_cast<void*>(mixin)); - InterceptingScriptWrappableMarkingVisitorScope intercepting_scope( - scope.GetIsolate()); - ScriptWrappableMarkingVisitor* visitor = intercepting_scope.Visitor(); + visitor->TracePrologue(); EXPECT_TRUE(visitor->MarkingDeque()->IsEmpty()); @@ -531,6 +531,7 @@ HeapObjectHeader::FromPayload(mixin_wrapper)->IsWrapperHeaderMarked()); mixin_handle = nullptr; + visitor->AbortTracing(); } } // namespace blink
diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.cc b/third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.cc new file mode 100644 index 0000000..71a99c9 --- /dev/null +++ b/third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.cc
@@ -0,0 +1,85 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h" + +#include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h" +#include "third_party/blink/renderer/core/imagebitmap/image_bitmap.h" +#include "third_party/blink/renderer/core/messaging/post_message_options.h" + +namespace blink { + +scoped_refptr<SerializedScriptValue> PostMessageHelper::SerializeMessageByMove( + v8::Isolate* isolate, + const ScriptValue& message, + const PostMessageOptions& options, + Transferables& transferables, + ExceptionState& exception_state) { + if (options.hasTransfer() && !options.transfer().IsEmpty()) { + if (!SerializedScriptValue::ExtractTransferables( + isolate, options.transfer(), transferables, exception_state)) { + return nullptr; + } + } + + SerializedScriptValue::SerializeOptions serialize_options; + serialize_options.transferables = &transferables; + scoped_refptr<SerializedScriptValue> serialized_message = + SerializedScriptValue::Serialize(isolate, message.V8Value(), + serialize_options, exception_state); + if (exception_state.HadException()) + return nullptr; + + serialized_message->UnregisterMemoryAllocatedWithCurrentScriptContext(); + return serialized_message; +} + +scoped_refptr<SerializedScriptValue> PostMessageHelper::SerializeMessageByCopy( + v8::Isolate* isolate, + const ScriptValue& message, + const PostMessageOptions& options, + Transferables& transferables, + ExceptionState& exception_state) { + if (options.hasTransfer() && !options.transfer().IsEmpty()) { + if (!SerializedScriptValue::ExtractTransferables( + isolate, options.transfer(), transferables, exception_state)) { + return nullptr; + } + } + + // Copying the transferables by move semantics is not supported for the + // caller of this function so emulate it by copy-and-neuter semantics + // that sends array buffers and image + // bitmaps via structured clone and then neuters the original objects. + // Clear references to array buffers and image bitmaps from transferables + // so that the serializer can consider the array buffers as + // non-transferable and serialize them into the message. + ArrayBufferArray transferable_array_buffers = + SerializedScriptValue::ExtractNonSharedArrayBuffers(transferables); + ImageBitmapArray transferable_image_bitmaps = transferables.image_bitmaps; + transferables.image_bitmaps.clear(); + SerializedScriptValue::SerializeOptions serialize_options; + serialize_options.transferables = &transferables; + scoped_refptr<SerializedScriptValue> serialized_message = + SerializedScriptValue::Serialize(isolate, message.V8Value(), + serialize_options, exception_state); + if (exception_state.HadException()) + return nullptr; + + // Neuter the original array buffers on the sender context. + SerializedScriptValue::TransferArrayBufferContents( + isolate, transferable_array_buffers, exception_state); + if (exception_state.HadException()) + return nullptr; + // Neuter the original image bitmaps on the sender context. + SerializedScriptValue::TransferImageBitmapContents( + isolate, transferable_image_bitmaps, exception_state); + if (exception_state.HadException()) + return nullptr; + + serialized_message->UnregisterMemoryAllocatedWithCurrentScriptContext(); + return serialized_message; +} + +} // namespace blink
diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h b/third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h new file mode 100644 index 0000000..07d7fb3 --- /dev/null +++ b/third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h
@@ -0,0 +1,42 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_SERIALIZATION_POST_MESSAGE_HELPER_H_ +#define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_SERIALIZATION_POST_MESSAGE_HELPER_H_ + +#include "base/memory/scoped_refptr.h" +#include "third_party/blink/renderer/core/core_export.h" +#include "third_party/blink/renderer/platform/wtf/allocator.h" +#include "v8/include/v8.h" + +namespace blink { + +class ExceptionState; +class PostMessageOptions; +class ScriptValue; +class SerializedScriptValue; +class Transferables; + +class CORE_EXPORT PostMessageHelper { + STATIC_ONLY(PostMessageHelper); + + public: + static scoped_refptr<SerializedScriptValue> SerializeMessageByMove( + v8::Isolate*, + const ScriptValue& message, + const PostMessageOptions& options, + Transferables& transferables, + ExceptionState&); + + static scoped_refptr<SerializedScriptValue> SerializeMessageByCopy( + v8::Isolate*, + const ScriptValue& message, + const PostMessageOptions& options, + Transferables& transferables, + ExceptionState&); +}; + +} // namespace blink + +#endif
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_dom_configuration.cc b/third_party/blink/renderer/bindings/core/v8/v8_dom_configuration.cc index ed999f3f..02c13e9f 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_dom_configuration.cc +++ b/third_party/blink/renderer/bindings/core/v8/v8_dom_configuration.cc
@@ -52,6 +52,67 @@ return true; } +void DoInstallAttribute( + v8::Local<v8::ObjectTemplate> object_template, + v8::Local<v8::Name> name, + const V8DOMConfiguration::AttributeConfiguration& attribute) { + v8::SideEffectType getter_side_effect_type = + attribute.getter_side_effect_type == V8DOMConfiguration::kHasNoSideEffect + ? v8::SideEffectType::kHasNoSideEffect + : v8::SideEffectType::kHasSideEffect; + switch (static_cast<V8DOMConfiguration::AttributeGetterBehavior>( + attribute.getter_behavior)) { + case V8DOMConfiguration::kAlwaysCallGetter: + object_template->SetNativeDataProperty( + name, attribute.getter, attribute.setter, v8::Local<v8::Value>(), + static_cast<v8::PropertyAttribute>(attribute.attribute), + v8::Local<v8::AccessorSignature>(), v8::AccessControl::DEFAULT, + getter_side_effect_type); + break; + case V8DOMConfiguration::kReplaceWithDataProperty: + DCHECK(!attribute.setter); + DCHECK_EQ(attribute.world_configuration, V8DOMConfiguration::kAllWorlds); + object_template->SetLazyDataProperty( + name, attribute.getter, v8::Local<v8::Value>(), + static_cast<v8::PropertyAttribute>(attribute.attribute), + getter_side_effect_type); + break; + } +} + +void DoInstallAttribute( + v8::Local<v8::Context> context, + v8::Local<v8::Object> object, + v8::Local<v8::Name> name, + const V8DOMConfiguration::AttributeConfiguration& attribute) { + v8::SideEffectType getter_side_effect_type = + attribute.getter_side_effect_type == V8DOMConfiguration::kHasNoSideEffect + ? v8::SideEffectType::kHasNoSideEffect + : v8::SideEffectType::kHasSideEffect; + switch (static_cast<V8DOMConfiguration::AttributeGetterBehavior>( + attribute.getter_behavior)) { + case V8DOMConfiguration::kAlwaysCallGetter: + object + ->SetNativeDataProperty( + context, name, attribute.getter, attribute.setter, + v8::Local<v8::Value>(), + static_cast<v8::PropertyAttribute>(attribute.attribute), + getter_side_effect_type) + .ToChecked(); + break; + case V8DOMConfiguration::kReplaceWithDataProperty: + DCHECK(!attribute.setter); + DCHECK_EQ(attribute.world_configuration, V8DOMConfiguration::kAllWorlds); + object + ->SetLazyDataProperty( + context, name, attribute.getter, v8::Local<v8::Value>(), + static_cast<v8::PropertyAttribute>(attribute.attribute), + getter_side_effect_type) + .ToChecked(); + break; + } +} + void InstallAttributeInternal( v8::Isolate* isolate, v8::Local<v8::ObjectTemplate> instance_template, @@ -62,32 +123,13 @@ return; v8::Local<v8::Name> name = V8AtomicString(isolate, attribute.name); - v8::AccessorNameGetterCallback getter = attribute.getter; - v8::AccessorNameSetterCallback setter = attribute.setter; - - v8::SideEffectType getter_side_effect_type = - attribute.getter_side_effect_type == V8DOMConfiguration::kHasNoSideEffect - ? v8::SideEffectType::kHasNoSideEffect - : v8::SideEffectType::kHasSideEffect; - DCHECK(attribute.property_location_configuration); - if (attribute.property_location_configuration & - V8DOMConfiguration::kOnInstance) { - instance_template->SetNativeDataProperty( - name, getter, setter, v8::Local<v8::Value>(), - static_cast<v8::PropertyAttribute>(attribute.attribute), - v8::Local<v8::AccessorSignature>(), v8::AccessControl::DEFAULT, - getter_side_effect_type); - } - if (attribute.property_location_configuration & - V8DOMConfiguration::kOnPrototype) { - prototype_template->SetNativeDataProperty( - name, getter, setter, v8::Local<v8::Value>(), - static_cast<v8::PropertyAttribute>(attribute.attribute), - v8::Local<v8::AccessorSignature>(), v8::AccessControl::DEFAULT, - getter_side_effect_type); - } - if (attribute.property_location_configuration & - V8DOMConfiguration::kOnInterface) + const unsigned location = attribute.property_location_configuration; + DCHECK(location); + if (location & V8DOMConfiguration::kOnInstance) + DoInstallAttribute(instance_template, name, attribute); + if (location & V8DOMConfiguration::kOnPrototype) + DoInstallAttribute(prototype_template, name, attribute); + if (location & V8DOMConfiguration::kOnInterface) NOTREACHED(); } @@ -102,71 +144,17 @@ return; v8::Local<v8::Name> name = V8AtomicString(isolate, config.name); - v8::AccessorNameGetterCallback getter = config.getter; - v8::AccessorNameSetterCallback setter = config.setter; - v8::PropertyAttribute attribute = - static_cast<v8::PropertyAttribute>(config.attribute); const unsigned location = config.property_location_configuration; DCHECK(location); - - v8::SideEffectType getter_side_effect_type = - config.getter_side_effect_type == V8DOMConfiguration::kHasNoSideEffect - ? v8::SideEffectType::kHasNoSideEffect - : v8::SideEffectType::kHasSideEffect; v8::Local<v8::Context> context = isolate->GetCurrentContext(); - if (location & V8DOMConfiguration::kOnInstance && !instance.IsEmpty()) { - instance - ->SetNativeDataProperty(context, name, getter, setter, - v8::Local<v8::Value>(), attribute, - getter_side_effect_type) - .ToChecked(); - } - if (location & V8DOMConfiguration::kOnPrototype && !prototype.IsEmpty()) { - prototype - ->SetNativeDataProperty(context, name, getter, setter, - v8::Local<v8::Value>(), attribute, - getter_side_effect_type) - .ToChecked(); - } + if (location & V8DOMConfiguration::kOnInstance && !instance.IsEmpty()) + DoInstallAttribute(context, instance, name, config); + if (location & V8DOMConfiguration::kOnPrototype && !prototype.IsEmpty()) + DoInstallAttribute(context, prototype, name, config); if (location & V8DOMConfiguration::kOnInterface) NOTREACHED(); } -void InstallLazyDataAttributeInternal( - v8::Isolate* isolate, - v8::Local<v8::ObjectTemplate> instance_template, - v8::Local<v8::ObjectTemplate> prototype_template, - const V8DOMConfiguration::AttributeConfiguration& attribute, - const DOMWrapperWorld& world) { - v8::Local<v8::Name> name = V8AtomicString(isolate, attribute.name); - v8::AccessorNameGetterCallback getter = attribute.getter; - DCHECK(!attribute.setter); - DCHECK_EQ(attribute.world_configuration, V8DOMConfiguration::kAllWorlds); - - v8::SideEffectType getter_side_effect_type = - attribute.getter_side_effect_type == V8DOMConfiguration::kHasNoSideEffect - ? v8::SideEffectType::kHasNoSideEffect - : v8::SideEffectType::kHasSideEffect; - DCHECK(attribute.property_location_configuration); - if (attribute.property_location_configuration & - V8DOMConfiguration::kOnInstance) { - instance_template->SetLazyDataProperty( - name, getter, v8::Local<v8::Value>(), - static_cast<v8::PropertyAttribute>(attribute.attribute), - getter_side_effect_type); - } - if (attribute.property_location_configuration & - V8DOMConfiguration::kOnPrototype) { - prototype_template->SetLazyDataProperty( - name, getter, v8::Local<v8::Value>(), - static_cast<v8::PropertyAttribute>(attribute.attribute), - getter_side_effect_type); - } - if (attribute.property_location_configuration & - V8DOMConfiguration::kOnInterface) - NOTREACHED(); -} - template <class FunctionOrTemplate> v8::Local<FunctionOrTemplate> CreateAccessorFunctionOrTemplate( v8::Isolate*, @@ -265,6 +253,7 @@ DCHECK(!IsObjectAndEmpty(instance_or_template) || !IsObjectAndEmpty(prototype_or_template) || !IsObjectAndEmpty(interface_or_template)); + DCHECK_EQ(config.getter_behavior, V8DOMConfiguration::kAlwaysCallGetter); if (!WorldConfigurationApplies(config, world)) return; @@ -598,19 +587,6 @@ InstallAttributeInternal(isolate, instance, prototype, attribute, world); } -void V8DOMConfiguration::InstallLazyDataAttributes( - v8::Isolate* isolate, - const DOMWrapperWorld& world, - v8::Local<v8::ObjectTemplate> instance_template, - v8::Local<v8::ObjectTemplate> prototype_template, - const AttributeConfiguration* attributes, - size_t attribute_count) { - for (size_t i = 0; i < attribute_count; ++i) { - InstallLazyDataAttributeInternal(isolate, instance_template, - prototype_template, attributes[i], world); - } -} - void V8DOMConfiguration::InstallAccessors( v8::Isolate* isolate, const DOMWrapperWorld& world,
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_dom_configuration.h b/third_party/blink/renderer/bindings/core/v8/v8_dom_configuration.h index db20705..e41cea3 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_dom_configuration.h +++ b/third_party/blink/renderer/bindings/core/v8/v8_dom_configuration.h
@@ -71,6 +71,14 @@ kHasNoSideEffect, }; + enum AttributeGetterBehavior : unsigned { + // The getter will be called each time the property is gotten. + kAlwaysCallGetter, + // After the first access, the property will be turned into a plain data + // property, taking the value returned by the getter. + kReplaceWithDataProperty, + }; + // Bit field to select which worlds the member will be defined in. enum WorldConfiguration : unsigned { kMainWorld = 1 << 0, @@ -95,6 +103,8 @@ unsigned holder_check_configuration : 1; // SideEffectConfiguration unsigned getter_side_effect_type : 1; + // AttributeGetterBehavior + unsigned getter_behavior : 1; // WorldConfiguration unsigned world_configuration : 2; }; @@ -126,20 +136,6 @@ v8::Local<v8::Object> prototype, const AttributeConfiguration&); - // A lazy data attribute is like one of the attributes added via - // installAttributes(), however, V8 will attempt to replace it with the value - // returned by the getter callback, turning it into a real data value. - // - // This also means that the AttributeConfiguration must not specify a setter, - // nor any non-default attributes. - static void InstallLazyDataAttributes( - v8::Isolate*, - const DOMWrapperWorld&, - v8::Local<v8::ObjectTemplate> instance_template, - v8::Local<v8::ObjectTemplate> prototype_template, - const AttributeConfiguration*, - size_t attribute_count); - // AccessorConfiguration translates into calls to SetAccessorProperty() on // either of instance, prototype, or interface object (or their object // template). @@ -159,6 +155,8 @@ unsigned holder_check_configuration : 1; // SideEffectConfiguration unsigned getter_side_effect_type : 1; + // AttributeGetterBehavior (should always be kReplaceWithDataProperty) + unsigned getter_behavior : 1; // WorldConfiguration unsigned world_configuration : 2; };
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_error_handler.cc b/third_party/blink/renderer/bindings/core/v8/v8_error_handler.cc index 9035a82..bdb6dd4 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_error_handler.cc +++ b/third_party/blink/renderer/bindings/core/v8/v8_error_handler.cc
@@ -40,15 +40,17 @@ namespace blink { V8ErrorHandler::V8ErrorHandler(bool is_inline, ScriptState* script_state) - : V8EventListener(is_inline, script_state) {} + : V8EventListenerOrEventHandler(is_inline, script_state) {} v8::Local<v8::Value> V8ErrorHandler::CallListenerFunction( ScriptState* script_state, v8::Local<v8::Value> js_event, Event* event) { DCHECK(!js_event.IsEmpty()); - if (!event->HasInterface(EventNames::ErrorEvent)) - return V8EventListener::CallListenerFunction(script_state, js_event, event); + if (!event->HasInterface(EventNames::ErrorEvent)) { + return V8EventListenerOrEventHandler::CallListenerFunction(script_state, + js_event, event); + } ErrorEvent* error_event = static_cast<ErrorEvent*>(event); if (error_event->World() && error_event->World() != &World())
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_error_handler.h b/third_party/blink/renderer/bindings/core/v8/v8_error_handler.h index 843113c..7a5d197 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_error_handler.h +++ b/third_party/blink/renderer/bindings/core/v8/v8_error_handler.h
@@ -32,14 +32,14 @@ #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_V8_ERROR_HANDLER_H_ #include "base/memory/scoped_refptr.h" -#include "third_party/blink/renderer/bindings/core/v8/v8_event_listener.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_event_listener_or_event_handler.h" #include "v8/include/v8.h" namespace blink { class ErrorEvent; -class V8ErrorHandler final : public V8EventListener { +class V8ErrorHandler final : public V8EventListenerOrEventHandler { public: static V8ErrorHandler* Create(v8::Local<v8::Object> listener, bool is_inline,
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_event_listener_helper.cc b/third_party/blink/renderer/bindings/core/v8/v8_event_listener_helper.cc index ddabd2e9..b853703 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_event_listener_helper.cc +++ b/third_party/blink/renderer/bindings/core/v8/v8_event_listener_helper.cc
@@ -33,7 +33,6 @@ #include "third_party/blink/renderer/bindings/core/v8/custom_wrappable_adapter.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" #include "third_party/blink/renderer/bindings/core/v8/v8_error_handler.h" -#include "third_party/blink/renderer/bindings/core/v8/v8_event_listener.h" #include "third_party/blink/renderer/bindings/core/v8/v8_window.h" #include "third_party/blink/renderer/platform/bindings/v8_private_property.h" @@ -73,14 +72,16 @@ v8::Isolate* isolate = script_state->GetIsolate(); V8PrivateProperty::Symbol listener_property = is_attribute - ? V8PrivateProperty::GetV8EventListenerAttributeListener(isolate) - : V8PrivateProperty::GetV8EventListenerListener(isolate); + ? V8PrivateProperty:: + GetV8EventListenerOrEventHandlerAttributeListener(isolate) + : V8PrivateProperty::GetV8EventListenerOrEventHandlerListener( + isolate); return GetEventListenerInternal<V8AbstractEventListener>( script_state, object, listener_property, lookup, [object, is_attribute, script_state, listener_property]() { - return V8EventListener::Create(object, is_attribute, script_state, - listener_property); + return V8EventListenerOrEventHandler::Create( + object, is_attribute, script_state, listener_property); }); }
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_event_listener_helper.h b/third_party/blink/renderer/bindings/core/v8/v8_event_listener_helper.h index e7551ea0..9c58515 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_event_listener_helper.h +++ b/third_party/blink/renderer/bindings/core/v8/v8_event_listener_helper.h
@@ -32,14 +32,13 @@ #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_V8_EVENT_LISTENER_HELPER_H_ #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" -#include "third_party/blink/renderer/bindings/core/v8/v8_event_listener.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_event_listener_or_event_handler.h" #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/platform/wtf/allocator.h" #include "v8/include/v8.h" namespace blink { -class V8EventListener; class V8ErrorHandler; enum ListenerLookupType { @@ -47,8 +46,8 @@ kListenerFindOrCreate, }; -// This is a container for V8EventListener objects that uses hidden properties -// of v8::Object to speed up lookups. +// This is a container for V8EventListenerOrEventHandler objects that uses +// hidden properties of v8::Object to speed up lookups. class V8EventListenerHelper { STATIC_ONLY(V8EventListenerHelper);
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_event_listener.cc b/third_party/blink/renderer/bindings/core/v8/v8_event_listener_or_event_handler.cc similarity index 93% rename from third_party/blink/renderer/bindings/core/v8/v8_event_listener.cc rename to third_party/blink/renderer/bindings/core/v8/v8_event_listener_or_event_handler.cc index 1fa1f7d..27e606b3 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_event_listener.cc +++ b/third_party/blink/renderer/bindings/core/v8/v8_event_listener_or_event_handler.cc
@@ -28,7 +28,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "third_party/blink/renderer/bindings/core/v8/v8_event_listener.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_event_listener_or_event_handler.h" #include "third_party/blink/renderer/bindings/core/v8/script_controller.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h" @@ -39,12 +39,14 @@ namespace blink { -V8EventListener::V8EventListener(bool is_attribute, ScriptState* script_state) +V8EventListenerOrEventHandler::V8EventListenerOrEventHandler( + bool is_attribute, + ScriptState* script_state) : V8AbstractEventListener(script_state->GetIsolate(), is_attribute, script_state->World()) {} -v8::Local<v8::Function> V8EventListener::GetListenerFunction( +v8::Local<v8::Function> V8EventListenerOrEventHandler::GetListenerFunction( ScriptState* script_state) { v8::Local<v8::Object> listener = GetListenerObject(ExecutionContext::From(script_state)); @@ -85,7 +87,7 @@ return v8::Local<v8::Function>(); } -v8::Local<v8::Value> V8EventListener::CallListenerFunction( +v8::Local<v8::Value> V8EventListenerOrEventHandler::CallListenerFunction( ScriptState* script_state, v8::Local<v8::Value> js_event, Event* event) {
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_event_listener.h b/third_party/blink/renderer/bindings/core/v8/v8_event_listener_or_event_handler.h similarity index 76% rename from third_party/blink/renderer/bindings/core/v8/v8_event_listener.h rename to third_party/blink/renderer/bindings/core/v8/v8_event_listener_or_event_handler.h index 79975681..c6c9680 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_event_listener.h +++ b/third_party/blink/renderer/bindings/core/v8/v8_event_listener_or_event_handler.h
@@ -28,8 +28,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_V8_EVENT_LISTENER_H_ -#define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_V8_EVENT_LISTENER_H_ +#ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_V8_EVENT_LISTENER_OR_EVENT_HANDLER_H_ +#define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_V8_EVENT_LISTENER_OR_EVENT_HANDLER_H_ #include "base/memory/scoped_refptr.h" #include "third_party/blink/renderer/bindings/core/v8/v8_abstract_event_listener.h" @@ -39,23 +39,24 @@ class Event; -// V8EventListener is a wrapper of a JS object implements EventListener -// interface (has handleEvent(event) method), or a JS function that can handle -// the event. -class V8EventListener : public V8AbstractEventListener { +// V8EventListenerOrEventHandler is a wrapper of a JS object implements +// EventListener interface (has handleEvent(event) method), or a JS function +// that can handle the event. +class V8EventListenerOrEventHandler : public V8AbstractEventListener { public: - static V8EventListener* Create(v8::Local<v8::Object> listener, - bool is_attribute, - ScriptState* script_state, - const V8PrivateProperty::Symbol& property) { - V8EventListener* event_listener = - new V8EventListener(is_attribute, script_state); + static V8EventListenerOrEventHandler* Create( + v8::Local<v8::Object> listener, + bool is_attribute, + ScriptState* script_state, + const V8PrivateProperty::Symbol& property) { + V8EventListenerOrEventHandler* event_listener = + new V8EventListenerOrEventHandler(is_attribute, script_state); event_listener->SetListenerObject(script_state, listener, property); return event_listener; } protected: - V8EventListener(bool is_attribute, ScriptState*); + V8EventListenerOrEventHandler(bool is_attribute, ScriptState*); v8::Local<v8::Function> GetListenerFunction(ScriptState*); v8::Local<v8::Value> CallListenerFunction(ScriptState*, v8::Local<v8::Value>, @@ -64,4 +65,4 @@ } // namespace blink -#endif // THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_V8_EVENT_LISTENER_H_ +#endif // THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_V8_EVENT_LISTENER_OR_EVENT_HANDLER_H_
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc b/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc index 833c8df..3ce2910 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc +++ b/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
@@ -65,7 +65,6 @@ #include "third_party/blink/renderer/platform/bindings/script_wrappable_marking_visitor.h" #include "third_party/blink/renderer/platform/bindings/v8_per_context_data.h" #include "third_party/blink/renderer/platform/bindings/v8_private_property.h" -#include "third_party/blink/renderer/platform/heap/v8_heap_controller.h" #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h" #include "third_party/blink/renderer/platform/loader/fetch/access_control_status.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" @@ -623,11 +622,12 @@ static void InitializeV8Common(v8::Isolate* isolate) { isolate->AddGCPrologueCallback(V8GCController::GcPrologue); isolate->AddGCEpilogueCallback(V8GCController::GcEpilogue); - V8PerIsolateData::From(isolate)->SetV8HeapController( - std::unique_ptr<V8HeapController>{ - new ScriptWrappableMarkingVisitor(isolate)}); + std::unique_ptr<ScriptWrappableMarkingVisitor> visitor( + new ScriptWrappableMarkingVisitor(isolate)); + V8PerIsolateData::From(isolate)->SetScriptWrappableMarkingVisitor( + std::move(visitor)); isolate->SetEmbedderHeapTracer( - V8PerIsolateData::From(isolate)->GetV8HeapController()); + V8PerIsolateData::From(isolate)->GetScriptWrappableMarkingVisitor()); isolate->SetMicrotasksPolicy(v8::MicrotasksPolicy::kScoped);
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_lazy_event_listener.cc b/third_party/blink/renderer/bindings/core/v8/v8_lazy_event_listener.cc index 037eb873..df7680a 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_lazy_event_listener.cc +++ b/third_party/blink/renderer/bindings/core/v8/v8_lazy_event_listener.cc
@@ -203,9 +203,9 @@ wrapped_function->SetName(V8String(GetIsolate(), function_name_)); - SetListenerObject( - script_state, wrapped_function, - V8PrivateProperty::GetV8EventListenerListener(GetIsolate())); + SetListenerObject(script_state, wrapped_function, + V8PrivateProperty::GetV8EventListenerOrEventHandlerListener( + GetIsolate())); } void V8LazyEventListener::FireErrorEvent(v8::Local<v8::Context> v8_context,
diff --git a/third_party/blink/renderer/bindings/scripts/v8_attributes.py b/third_party/blink/renderer/bindings/scripts/v8_attributes.py index 082c09b1..734c72ef 100644 --- a/third_party/blink/renderer/bindings/scripts/v8_attributes.py +++ b/third_party/blink/renderer/bindings/scripts/v8_attributes.py
@@ -124,6 +124,14 @@ if 'LogActivity' in extended_attributes: includes.add('platform/bindings/v8_per_context_data.h') + # [DeprecateAs], [MeasureAs] + deprecate_as = v8_utilities.deprecate_as(attribute) + measure_as = v8_utilities.measure_as(attribute, interface) + + is_lazy_data_attribute = \ + (constructor_type and not (measure_as or deprecate_as)) or \ + (str(idl_type) == 'Window' and attribute.name in ('frames', 'self', 'window')) + context = { 'activity_logging_world_list_for_getter': v8_utilities.activity_logging_world_list(attribute, 'Getter'), # [ActivityLogging] 'activity_logging_world_list_for_setter': v8_utilities.activity_logging_world_list(attribute, 'Setter'), # [ActivityLogging] @@ -134,7 +142,7 @@ 'cpp_name': cpp_name(attribute), 'cpp_type': idl_type.cpp_type, 'cpp_type_initializer': idl_type.cpp_type_initializer, - 'deprecate_as': v8_utilities.deprecate_as(attribute), # [DeprecateAs] + 'deprecate_as': deprecate_as, 'enum_type': idl_type.enum_type, 'enum_values': idl_type.enum_values, 'exposed_test': v8_utilities.exposed(attribute, interface), # [Exposed] @@ -161,6 +169,7 @@ 'RaisesException' in extended_attributes and extended_attributes['RaisesException'] in (None, 'Getter'), 'is_keep_alive_for_gc': keep_alive_for_gc, + 'is_lazy_data_attribute': is_lazy_data_attribute, 'is_lenient_setter': 'LenientSetter' in extended_attributes, 'is_lenient_this': 'LenientThis' in extended_attributes, 'is_nullable': idl_type.is_nullable, @@ -182,7 +191,7 @@ 'on_prototype': v8_utilities.on_prototype(interface, attribute), 'origin_trial_feature_name': v8_utilities.origin_trial_feature_name(attribute), # [OriginTrialEnabled] 'use_output_parameter_for_result': idl_type.use_output_parameter_for_result, - 'measure_as': v8_utilities.measure_as(attribute, interface), # [MeasureAs] + 'measure_as': measure_as, 'name': attribute.name, 'property_attributes': property_attributes(interface, attribute), 'reflect_empty': extended_attributes.get('ReflectEmpty'), @@ -261,20 +270,8 @@ attribute['is_data_type_property']) -def is_lazy_data_attribute(attribute): - return ((attribute['constructor_type'] and not - (attribute['measure_as'] or attribute['deprecate_as'])) or - (attribute['idl_type'] == 'Window' and attribute['name'] == 'frames') or - (attribute['idl_type'] == 'Window' and attribute['name'] == 'self') or - (attribute['idl_type'] == 'Window' and attribute['name'] == 'window')) - - def filter_data_attributes(attributes): - return [attribute for attribute in attributes if is_data_attribute(attribute) and not is_lazy_data_attribute(attribute)] - - -def filter_lazy_data_attributes(attributes): - return [attribute for attribute in attributes if is_data_attribute(attribute) and is_lazy_data_attribute(attribute)] + return [attribute for attribute in attributes if is_data_attribute(attribute)] def filter_runtime_enabled(attributes):
diff --git a/third_party/blink/renderer/bindings/scripts/v8_interface.py b/third_party/blink/renderer/bindings/scripts/v8_interface.py index 038eefe1..f4f67a9b 100644 --- a/third_party/blink/renderer/bindings/scripts/v8_interface.py +++ b/third_party/blink/renderer/bindings/scripts/v8_interface.py
@@ -402,7 +402,6 @@ # Elements in attributes are broken in following members. 'accessors': v8_attributes.filter_accessors(attributes), 'data_attributes': v8_attributes.filter_data_attributes(attributes), - 'lazy_data_attributes': v8_attributes.filter_lazy_data_attributes(attributes), 'runtime_enabled_attributes': v8_attributes.filter_runtime_enabled(attributes), })
diff --git a/third_party/blink/renderer/bindings/scripts/v8_methods.py b/third_party/blink/renderer/bindings/scripts/v8_methods.py index 4e5e737..824bcae 100644 --- a/third_party/blink/renderer/bindings/scripts/v8_methods.py +++ b/third_party/blink/renderer/bindings/scripts/v8_methods.py
@@ -163,12 +163,6 @@ is_raises_exception = 'RaisesException' in extended_attributes is_custom_call_prologue = has_extended_attribute_value(method, 'Custom', 'CallPrologue') is_custom_call_epilogue = has_extended_attribute_value(method, 'Custom', 'CallEpilogue') - is_post_message = 'PostMessage' in extended_attributes - if is_post_message: - includes.add('bindings/core/v8/serialization/serialized_script_value_factory.h') - includes.add('bindings/core/v8/serialization/transferables.h') - includes.add('core/typed_arrays/dom_array_buffer_base.h') - includes.add('core/imagebitmap/image_bitmap.h') if 'LenientThis' in extended_attributes: raise Exception('[LenientThis] is not supported for operations.') @@ -224,7 +218,6 @@ 'is_partial_interface_member': 'PartialInterfaceImplementedAs' in extended_attributes, 'is_per_world_bindings': 'PerWorldBindings' in extended_attributes, - 'is_post_message': is_post_message, 'is_raises_exception': is_raises_exception, 'is_static': is_static, 'is_unforgeable': is_unforgeable(interface, method),
diff --git a/third_party/blink/renderer/bindings/scripts/v8_types.py b/third_party/blink/renderer/bindings/scripts/v8_types.py index 9ca54bb..9783a7dd 100644 --- a/third_party/blink/renderer/bindings/scripts/v8_types.py +++ b/third_party/blink/renderer/bindings/scripts/v8_types.py
@@ -525,7 +525,8 @@ includes_for_type.add('platform/wtf/text/wtf_string.h') if idl_type.is_callback_function: component = IdlType.callback_functions[base_idl_type]['component_dir'] - return set(['bindings/%s/v8/%s' % (component, binding_header_filename(base_idl_type))]) + return set(['bindings/%s/v8/%s' % (component, binding_header_filename(base_idl_type)), + 'platform/bindings/trace_wrapper_member.h']) if base_idl_type in interfaces_info: interface_info = interfaces_info[base_idl_type] includes_for_type.add(interface_info['include_path'])
diff --git a/third_party/blink/renderer/bindings/templates/attributes.cpp.tmpl b/third_party/blink/renderer/bindings/templates/attributes.cpp.tmpl index 050de28a..7e54f95 100644 --- a/third_party/blink/renderer/bindings/templates/attributes.cpp.tmpl +++ b/third_party/blink/renderer/bindings/templates/attributes.cpp.tmpl
@@ -533,6 +533,8 @@ else 'V8DOMConfiguration::kCheckHolder' %} {% set getter_side_effect_type = 'V8DOMConfiguration::kHasNoSideEffect' if attribute.getter_has_no_side_effect else 'V8DOMConfiguration::kHasSideEffect' %} +{% set getter_behavior = 'V8DOMConfiguration::kAlwaysCallGetter' + if not attribute.is_lazy_data_attribute else 'V8DOMConfiguration::kReplaceWithDataProperty' %} {% if attribute.is_per_world_bindings %} {% set getter_callback_for_main_world = '%sForMainWorld' % getter_callback %} {% set setter_callback_for_main_world = @@ -556,6 +558,7 @@ property_location(attribute), holder_check, getter_side_effect_type, + getter_behavior, ] %} {% if attribute.is_per_world_bindings %}
diff --git a/third_party/blink/renderer/bindings/templates/interface.cpp.tmpl b/third_party/blink/renderer/bindings/templates/interface.cpp.tmpl index 9bd2681..00aa053 100644 --- a/third_party/blink/renderer/bindings/templates/interface.cpp.tmpl +++ b/third_party/blink/renderer/bindings/templates/interface.cpp.tmpl
@@ -886,10 +886,10 @@ {% set getter_callback_for_main_world = '%sForMainWorld' % getter_callback %} {% set setter_callback_for_main_world = '%sForMainWorld' % setter_callback if not method.is_unforgeable else 'nullptr' %} - {"{{method.name}}", {{getter_callback_for_main_world}}, {{setter_callback_for_main_world}}, {{property_attribute}}, {{property_location(method)}}, {{holder_check}}, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::MainWorld}, - {"{{method.name}}", {{getter_callback}}, {{setter_callback}}, {{property_attribute}}, {{property_location(method)}}, {{holder_check}}, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::NonMainWorlds}} + {"{{method.name}}", {{getter_callback_for_main_world}}, {{setter_callback_for_main_world}}, {{property_attribute}}, {{property_location(method)}}, {{holder_check}}, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::MainWorld}, + {"{{method.name}}", {{getter_callback}}, {{setter_callback}}, {{property_attribute}}, {{property_location(method)}}, {{holder_check}}, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::NonMainWorlds}} {% else %} - {"{{method.name}}", {{getter_callback}}, {{setter_callback}}, {{property_attribute}}, {{property_location(method)}}, {{holder_check}}, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds} + {"{{method.name}}", {{getter_callback}}, {{setter_callback}}, {{property_attribute}}, {{property_location(method)}}, {{holder_check}}, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds} {% endif %} }; for (const auto& attributeConfig : {{method.name}}OriginSafeAttributeConfiguration)
diff --git a/third_party/blink/renderer/bindings/templates/interface_base.cpp.tmpl b/third_party/blink/renderer/bindings/templates/interface_base.cpp.tmpl index afa46eb9..af6790d 100644 --- a/third_party/blink/renderer/bindings/templates/interface_base.cpp.tmpl +++ b/third_party/blink/renderer/bindings/templates/interface_base.cpp.tmpl
@@ -101,17 +101,13 @@ {# Methods #} {% from 'methods.cpp.tmpl' import generate_method, overload_resolution_method, origin_safe_method_getter, generate_constructor, - generate_post_message_impl, runtime_determined_length_method, - runtime_determined_maxarg_method + runtime_determined_length_method, runtime_determined_maxarg_method with context %} {% for method in methods %} {% for world_suffix in method.world_suffixes %} -{% if not method.is_custom and not method.is_post_message and method.visible %} +{% if not method.is_custom and method.visible %} {{generate_method(method, world_suffix)}} {% endif %} -{% if method.is_post_message and not is_partial %} -{{generate_post_message_impl(method)}} -{% endif %} {% if method.overloads and method.overloads.visible %} {% if method.overloads.runtime_determined_lengths %} {{runtime_determined_length_method(method.overloads)}} @@ -374,27 +370,6 @@ {% endif %} {% endblock %} {##############################################################################} -{% block install_lazy_data_attributes %} -{% from 'attributes.cpp.tmpl' import attribute_configuration with context %} -{% if lazy_data_attributes %} -// Suppress warning: global constructors, because AttributeConfiguration is trivial -// and does not depend on another global objects. -#if defined(COMPONENT_BUILD) && defined(WIN32) && defined(__clang__) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wglobal-constructors" -#endif -static const V8DOMConfiguration::AttributeConfiguration {{v8_class}}LazyDataAttributes[] = { - {% for data_attribute in lazy_data_attributes %} - {{attribute_configuration(data_attribute) | trim | indent(4)}}, - {% endfor %} -}; -#if defined(COMPONENT_BUILD) && defined(WIN32) && defined(__clang__) -#pragma clang diagnostic pop -#endif - -{% endif %} -{% endblock %} -{##############################################################################} {% block install_accessors %} {% from 'attributes.cpp.tmpl' import accessor_configuration with context %} {% if accessors %} @@ -496,11 +471,6 @@ isolate, world, instanceTemplate, prototypeTemplate, {{'%sAttributes' % v8_class}}, {{'base::size(%sAttributes)' % v8_class}}); {% endif %} - {% if lazy_data_attributes %} - V8DOMConfiguration::InstallLazyDataAttributes( - isolate, world, instanceTemplate, prototypeTemplate, - {{'%sLazyDataAttributes' % v8_class}}, {{'base::size(%sLazyDataAttributes)' % v8_class}}); - {% endif %} {% if accessors %} V8DOMConfiguration::InstallAccessors( isolate, world, instanceTemplate, prototypeTemplate, interfaceTemplate,
diff --git a/third_party/blink/renderer/bindings/templates/methods.cpp.tmpl b/third_party/blink/renderer/bindings/templates/methods.cpp.tmpl index 1c81b4f..8b8f8929 100644 --- a/third_party/blink/renderer/bindings/templates/methods.cpp.tmpl +++ b/third_party/blink/renderer/bindings/templates/methods.cpp.tmpl
@@ -458,66 +458,6 @@ {% endmacro %} -{##############################################################################} -{% macro generate_post_message_impl(method) %} -static void postMessageImpl(const char* interfaceName, {{cpp_class}}* instance, const v8::FunctionCallbackInfo<v8::Value>& info) { - ExceptionState exceptionState(info.GetIsolate(), ExceptionState::kExecutionContext, interfaceName, "postMessage"); - if (UNLIKELY(info.Length() < {{method.number_of_required_arguments}})) { - exceptionState.ThrowTypeError(ExceptionMessages::NotEnoughArguments({{method.number_of_required_arguments}}, info.Length())); - return; - } - - Transferables transferables; - if (info.Length() > 1) { - const int transferablesArgIndex = 1; - if (!SerializedScriptValue::ExtractTransferables(info.GetIsolate(), info[transferablesArgIndex], transferablesArgIndex, transferables, exceptionState)) { - return; - } - } - - scoped_refptr<SerializedScriptValue> message; - if (instance->CanTransferArrayBuffersAndImageBitmaps()) { - // This instance supports sending array buffers by move semantics. - SerializedScriptValue::SerializeOptions options; - options.transferables = &transferables; - message = SerializedScriptValue::Serialize(info.GetIsolate(), info[0], options, exceptionState); - if (exceptionState.HadException()) - return; - } else { - // This instance doesn't support sending array buffers and image bitmaps - // by move semantics. Emulate it by copy-and-neuter semantics that sends - // array buffers and image bitmaps via structured clone and then neuters - // the original objects - - // Clear references to array buffers and image bitmaps from transferables - // so that the serializer can consider the array buffers as - // non-transferable and serialize them into the message. - ArrayBufferArray transferableArrayBuffers = SerializedScriptValue::ExtractNonSharedArrayBuffers(transferables); - ImageBitmapArray transferableImageBitmaps = transferables.image_bitmaps; - transferables.image_bitmaps.clear(); - SerializedScriptValue::SerializeOptions options; - options.transferables = &transferables; - message = SerializedScriptValue::Serialize(info.GetIsolate(), info[0], options, exceptionState); - if (exceptionState.HadException()) - return; - - // Neuter the original array buffers on the sender context. - SerializedScriptValue::TransferArrayBufferContents(info.GetIsolate(), transferableArrayBuffers, exceptionState); - if (exceptionState.HadException()) - return; - // Neuter the original image bitmaps on the sender context. - SerializedScriptValue::TransferImageBitmapContents(info.GetIsolate(), transferableImageBitmaps, exceptionState); - if (exceptionState.HadException()) - return; - } - - // FIXME: Only pass scriptState/exceptionState if instance really requires it. - ScriptState* scriptState = ScriptState::Current(info.GetIsolate()); - message->UnregisterMemoryAllocatedWithCurrentScriptContext(); - instance->postMessage(scriptState, std::move(message), transferables.message_ports, exceptionState); -} -{% endmacro %} - {##############################################################################} {% macro method_callback(method, world_suffix) %} @@ -548,8 +488,6 @@ {% endif %} {% if method.is_custom %} {{v8_class}}::{{method.name}}MethodCustom(info); - {% elif method.is_post_message %} - {{cpp_class_or_partial}}V8Internal::postMessageImpl("{{interface_name}}", {{v8_class}}::ToImpl(info.Holder()), info); {% else %} {{cpp_class_or_partial}}V8Internal::{{method.name}}Method{{world_suffix}}(info); {% endif %}
diff --git a/third_party/blink/renderer/bindings/tests/idls/core/test_object.idl b/third_party/blink/renderer/bindings/tests/idls/core/test_object.idl index e020fbc..110a131 100644 --- a/third_party/blink/renderer/bindings/tests/idls/core/test_object.idl +++ b/third_party/blink/renderer/bindings/tests/idls/core/test_object.idl
@@ -513,7 +513,6 @@ // [OriginTrialEnabled=FeatureName3] void partiallyOriginTrialEnabledOverloadedVoidMethod(long longArg, DOMString stringArg, TestInterface testInterfaceArg); [PerWorldBindings] void perWorldBindingsVoidMethod(); [PerWorldBindings] void perWorldBindingsVoidMethodTestInterfaceEmptyArg(TestInterfaceEmpty testInterfaceEmptyArg); - [PostMessage, RaisesException] void postMessage(SerializedScriptValue message, optional sequence<object> transfer); [LogActivity, LogAllWorlds, PerWorldBindings] void activityLoggingForAllWorldsPerWorldBindingsVoidMethod(); [LogActivity, PerWorldBindings] void activityLoggingForIsolatedWorldsPerWorldBindingsVoidMethod(); [RaisesException] void raisesExceptionVoidMethod();
diff --git a/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.h b/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.h index 14e20ae0..e0148a8 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.h +++ b/third_party/blink/renderer/bindings/tests/results/core/test_dictionary.h
@@ -28,6 +28,7 @@ #include "third_party/blink/renderer/core/testing/internal_dictionary.h" #include "third_party/blink/renderer/core/typed_arrays/array_buffer_view_helpers.h" #include "third_party/blink/renderer/core/typed_arrays/dom_typed_array.h" +#include "third_party/blink/renderer/platform/bindings/trace_wrapper_member.h" #include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "third_party/blink/renderer/platform/wtf/vector.h"
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_svg_test_interface.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_svg_test_interface.cc index 0dba502..ddc78e0 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_svg_test_interface.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_svg_test_interface.cc
@@ -109,7 +109,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8SVGTestInterfaceAccessors[] = { - { "type", V8SVGTestInterface::typeAttributeGetterCallback, V8SVGTestInterface::typeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "type", V8SVGTestInterface::typeAttributeGetterCallback, V8SVGTestInterface::typeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static void installV8SVGTestInterfaceTemplate(
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_attributes.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_attributes.cc index 991def30..68079506 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_attributes.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_attributes.cc
@@ -198,12 +198,12 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestAttributesAccessors[] = { - { "lenientThisLongAttribute", V8TestAttributes::lenientThisLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kDoNotCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "stringPromiseAttribute", V8TestAttributes::stringPromiseAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kDoNotCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "lenientThisStringPromiseAttribute", V8TestAttributes::lenientThisStringPromiseAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kDoNotCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "raisesExceptionShortPromiseAttribute", V8TestAttributes::raisesExceptionShortPromiseAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kDoNotCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "lenientSetterBoolAttribute", V8TestAttributes::lenientSetterBoolAttributeAttributeGetterCallback, V8TestAttributes::lenientSetterBoolAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "floatAttribute", V8TestAttributes::floatAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "lenientThisLongAttribute", V8TestAttributes::lenientThisLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kDoNotCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "stringPromiseAttribute", V8TestAttributes::stringPromiseAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kDoNotCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "lenientThisStringPromiseAttribute", V8TestAttributes::lenientThisStringPromiseAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kDoNotCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "raisesExceptionShortPromiseAttribute", V8TestAttributes::raisesExceptionShortPromiseAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kDoNotCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "lenientSetterBoolAttribute", V8TestAttributes::lenientSetterBoolAttributeAttributeGetterCallback, V8TestAttributes::lenientSetterBoolAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "floatAttribute", V8TestAttributes::floatAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static void installV8TestAttributesTemplate(
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_callback_functions.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_callback_functions.cc index ce89481..915b9ea 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_callback_functions.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_callback_functions.cc
@@ -256,7 +256,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestCallbackFunctionsAccessors[] = { - { "customElementsCallbacksReadonlyAttribute", V8TestCallbackFunctions::customElementsCallbacksReadonlyAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "customElementsCallbacksReadonlyAttribute", V8TestCallbackFunctions::customElementsCallbacksReadonlyAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestCallbackFunctionsMethods[] = {
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_integer_indexed.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_integer_indexed.cc index 835da88b..28d9d4e 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_integer_indexed.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_integer_indexed.cc
@@ -316,7 +316,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestIntegerIndexedAccessors[] = { - { "length", V8TestIntegerIndexed::lengthAttributeGetterCallback, V8TestIntegerIndexed::lengthAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "length", V8TestIntegerIndexed::lengthAttributeGetterCallback, V8TestIntegerIndexed::lengthAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestIntegerIndexedMethods[] = {
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_integer_indexed_global.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_integer_indexed_global.cc index 9efd7e2..b8d720e 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_integer_indexed_global.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_integer_indexed_global.cc
@@ -238,7 +238,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestIntegerIndexedGlobalAccessors[] = { - { "length", V8TestIntegerIndexedGlobal::lengthAttributeGetterCallback, V8TestIntegerIndexedGlobal::lengthAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "length", V8TestIntegerIndexedGlobal::lengthAttributeGetterCallback, V8TestIntegerIndexedGlobal::lengthAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestIntegerIndexedGlobalMethods[] = {
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_integer_indexed_primary_global.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_integer_indexed_primary_global.cc index 1f994bb9..8ee0752 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_integer_indexed_primary_global.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_integer_indexed_primary_global.cc
@@ -238,7 +238,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestIntegerIndexedPrimaryGlobalAccessors[] = { - { "length", V8TestIntegerIndexedPrimaryGlobal::lengthAttributeGetterCallback, V8TestIntegerIndexedPrimaryGlobal::lengthAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "length", V8TestIntegerIndexedPrimaryGlobal::lengthAttributeGetterCallback, V8TestIntegerIndexedPrimaryGlobal::lengthAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestIntegerIndexedPrimaryGlobalMethods[] = {
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.cc index 64b4166..e1b3c85 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface.cc
@@ -3632,46 +3632,46 @@ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wglobal-constructors" #endif -static const V8DOMConfiguration::AttributeConfiguration V8TestInterfaceLazyDataAttributes[] = { - { "testInterfaceConstructorAttribute", V8TestInterface::testInterfaceConstructorAttributeConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "TestInterface", V8TestInterface::TestInterfaceConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "TestInterface2", V8TestInterface::TestInterface2ConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, +static const V8DOMConfiguration::AttributeConfiguration V8TestInterfaceAttributes[] = { + { "testInterfaceConstructorAttribute", V8TestInterface::testInterfaceConstructorAttributeConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kReplaceWithDataProperty, V8DOMConfiguration::kAllWorlds }, + { "TestInterface", V8TestInterface::TestInterfaceConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kReplaceWithDataProperty, V8DOMConfiguration::kAllWorlds }, + { "TestInterface2", V8TestInterface::TestInterface2ConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kReplaceWithDataProperty, V8DOMConfiguration::kAllWorlds }, }; #if defined(COMPONENT_BUILD) && defined(WIN32) && defined(__clang__) #pragma clang diagnostic pop #endif static const V8DOMConfiguration::AccessorConfiguration V8TestInterfaceAccessors[] = { - { "testInterfaceAttribute", V8TestInterface::testInterfaceAttributeAttributeGetterCallback, V8TestInterface::testInterfaceAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "doubleAttribute", V8TestInterface::doubleAttributeAttributeGetterCallback, V8TestInterface::doubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "floatAttribute", V8TestInterface::floatAttributeAttributeGetterCallback, V8TestInterface::floatAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "unrestrictedDoubleAttribute", V8TestInterface::unrestrictedDoubleAttributeAttributeGetterCallback, V8TestInterface::unrestrictedDoubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "unrestrictedFloatAttribute", V8TestInterface::unrestrictedFloatAttributeAttributeGetterCallback, V8TestInterface::unrestrictedFloatAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "testEnumAttribute", V8TestInterface::testEnumAttributeAttributeGetterCallback, V8TestInterface::testEnumAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "testEnumOrNullAttribute", V8TestInterface::testEnumOrNullAttributeAttributeGetterCallback, V8TestInterface::testEnumOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "stringOrDoubleAttribute", V8TestInterface::stringOrDoubleAttributeAttributeGetterCallback, V8TestInterface::stringOrDoubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "withExtendedAttributeStringAttribute", V8TestInterface::withExtendedAttributeStringAttributeAttributeGetterCallback, V8TestInterface::withExtendedAttributeStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "uncapitalAttribute", V8TestInterface::uncapitalAttributeAttributeGetterCallback, V8TestInterface::uncapitalAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "staticStringAttribute", V8TestInterface::staticStringAttributeAttributeGetterCallback, V8TestInterface::staticStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "staticReturnDOMWrapperAttribute", V8TestInterface::staticReturnDOMWrapperAttributeAttributeGetterCallback, V8TestInterface::staticReturnDOMWrapperAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "staticReadOnlyStringAttribute", V8TestInterface::staticReadOnlyStringAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "staticReadOnlyReturnDOMWrapperAttribute", V8TestInterface::staticReadOnlyReturnDOMWrapperAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "legacyInterfaceTypeCheckingAttribute", V8TestInterface::legacyInterfaceTypeCheckingAttributeAttributeGetterCallback, V8TestInterface::legacyInterfaceTypeCheckingAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "stringNullAsEmptyAttribute", V8TestInterface::stringNullAsEmptyAttributeAttributeGetterCallback, V8TestInterface::stringNullAsEmptyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "usvStringOrNullAttribute", V8TestInterface::usvStringOrNullAttributeAttributeGetterCallback, V8TestInterface::usvStringOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "alwaysExposedAttribute", V8TestInterface::alwaysExposedAttributeAttributeGetterCallback, V8TestInterface::alwaysExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "lenientThisAttribute", V8TestInterface::lenientThisAttributeAttributeGetterCallback, V8TestInterface::lenientThisAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kDoNotCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "attributeWithSideEffectFreeGetter", V8TestInterface::attributeWithSideEffectFreeGetterAttributeGetterCallback, V8TestInterface::attributeWithSideEffectFreeGetterAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasNoSideEffect, V8DOMConfiguration::kAllWorlds }, - { "implementsStaticReadOnlyLongAttribute", V8TestInterface::implementsStaticReadOnlyLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "implementsStaticStringAttribute", V8TestInterface::implementsStaticStringAttributeAttributeGetterCallback, V8TestInterface::implementsStaticStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "implementsReadonlyStringAttribute", V8TestInterface::implementsReadonlyStringAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "implementsStringAttribute", V8TestInterface::implementsStringAttributeAttributeGetterCallback, V8TestInterface::implementsStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "implementsNodeAttribute", V8TestInterface::implementsNodeAttributeAttributeGetterCallback, V8TestInterface::implementsNodeAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "implementsEventHandlerAttribute", V8TestInterface::implementsEventHandlerAttributeAttributeGetterCallback, V8TestInterface::implementsEventHandlerAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "implements3StringAttribute", V8TestInterface::implements3StringAttributeAttributeGetterCallback, V8TestInterface::implements3StringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "implements3StaticStringAttribute", V8TestInterface::implements3StaticStringAttributeAttributeGetterCallback, V8TestInterface::implements3StaticStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "partial2LongAttribute", V8TestInterface::partial2LongAttributeAttributeGetterCallback, V8TestInterface::partial2LongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "partial2StaticLongAttribute", V8TestInterface::partial2StaticLongAttributeAttributeGetterCallback, V8TestInterface::partial2StaticLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceAttribute", V8TestInterface::testInterfaceAttributeAttributeGetterCallback, V8TestInterface::testInterfaceAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "doubleAttribute", V8TestInterface::doubleAttributeAttributeGetterCallback, V8TestInterface::doubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "floatAttribute", V8TestInterface::floatAttributeAttributeGetterCallback, V8TestInterface::floatAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "unrestrictedDoubleAttribute", V8TestInterface::unrestrictedDoubleAttributeAttributeGetterCallback, V8TestInterface::unrestrictedDoubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "unrestrictedFloatAttribute", V8TestInterface::unrestrictedFloatAttributeAttributeGetterCallback, V8TestInterface::unrestrictedFloatAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "testEnumAttribute", V8TestInterface::testEnumAttributeAttributeGetterCallback, V8TestInterface::testEnumAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "testEnumOrNullAttribute", V8TestInterface::testEnumOrNullAttributeAttributeGetterCallback, V8TestInterface::testEnumOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "stringOrDoubleAttribute", V8TestInterface::stringOrDoubleAttributeAttributeGetterCallback, V8TestInterface::stringOrDoubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "withExtendedAttributeStringAttribute", V8TestInterface::withExtendedAttributeStringAttributeAttributeGetterCallback, V8TestInterface::withExtendedAttributeStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "uncapitalAttribute", V8TestInterface::uncapitalAttributeAttributeGetterCallback, V8TestInterface::uncapitalAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "staticStringAttribute", V8TestInterface::staticStringAttributeAttributeGetterCallback, V8TestInterface::staticStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "staticReturnDOMWrapperAttribute", V8TestInterface::staticReturnDOMWrapperAttributeAttributeGetterCallback, V8TestInterface::staticReturnDOMWrapperAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "staticReadOnlyStringAttribute", V8TestInterface::staticReadOnlyStringAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "staticReadOnlyReturnDOMWrapperAttribute", V8TestInterface::staticReadOnlyReturnDOMWrapperAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "legacyInterfaceTypeCheckingAttribute", V8TestInterface::legacyInterfaceTypeCheckingAttributeAttributeGetterCallback, V8TestInterface::legacyInterfaceTypeCheckingAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "stringNullAsEmptyAttribute", V8TestInterface::stringNullAsEmptyAttributeAttributeGetterCallback, V8TestInterface::stringNullAsEmptyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "usvStringOrNullAttribute", V8TestInterface::usvStringOrNullAttributeAttributeGetterCallback, V8TestInterface::usvStringOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "alwaysExposedAttribute", V8TestInterface::alwaysExposedAttributeAttributeGetterCallback, V8TestInterface::alwaysExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "lenientThisAttribute", V8TestInterface::lenientThisAttributeAttributeGetterCallback, V8TestInterface::lenientThisAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kDoNotCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "attributeWithSideEffectFreeGetter", V8TestInterface::attributeWithSideEffectFreeGetterAttributeGetterCallback, V8TestInterface::attributeWithSideEffectFreeGetterAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasNoSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "implementsStaticReadOnlyLongAttribute", V8TestInterface::implementsStaticReadOnlyLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "implementsStaticStringAttribute", V8TestInterface::implementsStaticStringAttributeAttributeGetterCallback, V8TestInterface::implementsStaticStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "implementsReadonlyStringAttribute", V8TestInterface::implementsReadonlyStringAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "implementsStringAttribute", V8TestInterface::implementsStringAttributeAttributeGetterCallback, V8TestInterface::implementsStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "implementsNodeAttribute", V8TestInterface::implementsNodeAttributeAttributeGetterCallback, V8TestInterface::implementsNodeAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "implementsEventHandlerAttribute", V8TestInterface::implementsEventHandlerAttributeAttributeGetterCallback, V8TestInterface::implementsEventHandlerAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "implements3StringAttribute", V8TestInterface::implements3StringAttributeAttributeGetterCallback, V8TestInterface::implements3StringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "implements3StaticStringAttribute", V8TestInterface::implements3StaticStringAttributeAttributeGetterCallback, V8TestInterface::implements3StaticStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "partial2LongAttribute", V8TestInterface::partial2LongAttributeAttributeGetterCallback, V8TestInterface::partial2LongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "partial2StaticLongAttribute", V8TestInterface::partial2StaticLongAttributeAttributeGetterCallback, V8TestInterface::partial2StaticLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestInterfaceMethods[] = { @@ -3732,9 +3732,9 @@ V8DOMConfiguration::InstallConstants( isolate, interfaceTemplate, prototypeTemplate, V8TestInterfaceConstants, base::size(V8TestInterfaceConstants)); - V8DOMConfiguration::InstallLazyDataAttributes( + V8DOMConfiguration::InstallAttributes( isolate, world, instanceTemplate, prototypeTemplate, - V8TestInterfaceLazyDataAttributes, base::size(V8TestInterfaceLazyDataAttributes)); + V8TestInterfaceAttributes, base::size(V8TestInterfaceAttributes)); V8DOMConfiguration::InstallAccessors( isolate, world, instanceTemplate, prototypeTemplate, interfaceTemplate, signature, V8TestInterfaceAccessors, base::size(V8TestInterfaceAccessors)); @@ -3801,9 +3801,9 @@ if (RuntimeEnabledFeatures::FeatureNameEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "conditionalReadOnlyLongAttribute", V8TestInterface::conditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "staticConditionalReadOnlyLongAttribute", V8TestInterface::staticConditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "conditionalLongAttribute", V8TestInterface::conditionalLongAttributeAttributeGetterCallback, V8TestInterface::conditionalLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "conditionalReadOnlyLongAttribute", V8TestInterface::conditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "staticConditionalReadOnlyLongAttribute", V8TestInterface::staticConditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "conditionalLongAttribute", V8TestInterface::conditionalLongAttributeAttributeGetterCallback, V8TestInterface::conditionalLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instance_template, prototype_template, interface_template, @@ -3812,8 +3812,8 @@ } if (RuntimeEnabledFeatures::Implements2FeatureNameEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "implements2StaticStringAttribute", V8TestInterface::implements2StaticStringAttributeAttributeGetterCallback, V8TestInterface::implements2StaticStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "implements2StringAttribute", V8TestInterface::implements2StringAttributeAttributeGetterCallback, V8TestInterface::implements2StringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "implements2StaticStringAttribute", V8TestInterface::implements2StaticStringAttributeAttributeGetterCallback, V8TestInterface::implements2StaticStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "implements2StringAttribute", V8TestInterface::implements2StringAttributeAttributeGetterCallback, V8TestInterface::implements2StringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instance_template, prototype_template, interface_template, @@ -3822,7 +3822,7 @@ } if (RuntimeEnabledFeatures::ImplementsFeatureNameEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "implementsRuntimeEnabledNodeAttribute", V8TestInterface::implementsRuntimeEnabledNodeAttributeAttributeGetterCallback, V8TestInterface::implementsRuntimeEnabledNodeAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "implementsRuntimeEnabledNodeAttribute", V8TestInterface::implementsRuntimeEnabledNodeAttributeAttributeGetterCallback, V8TestInterface::implementsRuntimeEnabledNodeAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instance_template, prototype_template, interface_template, @@ -3831,10 +3831,10 @@ } if (RuntimeEnabledFeatures::PartialFeatureNameEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partialCallWithExecutionContextLongAttribute", V8TestInterface::partialCallWithExecutionContextLongAttributeAttributeGetterCallback, V8TestInterface::partialCallWithExecutionContextLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "partialLongAttribute", V8TestInterface::partialLongAttributeAttributeGetterCallback, V8TestInterface::partialLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "partialPartialEnumTypeAttribute", V8TestInterface::partialPartialEnumTypeAttributeAttributeGetterCallback, V8TestInterface::partialPartialEnumTypeAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "partialStaticLongAttribute", V8TestInterface::partialStaticLongAttributeAttributeGetterCallback, V8TestInterface::partialStaticLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "partialCallWithExecutionContextLongAttribute", V8TestInterface::partialCallWithExecutionContextLongAttributeAttributeGetterCallback, V8TestInterface::partialCallWithExecutionContextLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "partialLongAttribute", V8TestInterface::partialLongAttributeAttributeGetterCallback, V8TestInterface::partialLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "partialPartialEnumTypeAttribute", V8TestInterface::partialPartialEnumTypeAttributeAttributeGetterCallback, V8TestInterface::partialPartialEnumTypeAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "partialStaticLongAttribute", V8TestInterface::partialStaticLongAttributeAttributeGetterCallback, V8TestInterface::partialStaticLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instance_template, prototype_template, interface_template, @@ -3933,9 +3933,9 @@ if (!prototypeObject.IsEmpty() || !interfaceObject.IsEmpty()) { if (isSecureContext) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partial2SecureContextAttribute", V8TestInterface::partial2SecureContextAttributeAttributeGetterCallback, V8TestInterface::partial2SecureContextAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "partialSecureContextAttribute", V8TestInterface::partialSecureContextAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "secureContextAttribute", V8TestInterface::secureContextAttributeAttributeGetterCallback, V8TestInterface::secureContextAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "partial2SecureContextAttribute", V8TestInterface::partial2SecureContextAttributeAttributeGetterCallback, V8TestInterface::partial2SecureContextAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "partialSecureContextAttribute", V8TestInterface::partialSecureContextAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "secureContextAttribute", V8TestInterface::secureContextAttributeAttributeGetterCallback, V8TestInterface::secureContextAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -3943,7 +3943,7 @@ base::size(accessor_configurations)); if (RuntimeEnabledFeatures::PartialFeatureNameEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partialSecureContextLongAttribute", V8TestInterface::partialSecureContextLongAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "partialSecureContextLongAttribute", V8TestInterface::partialSecureContextLongAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -3952,8 +3952,8 @@ } if (RuntimeEnabledFeatures::SecureFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partialSecureContextRuntimeEnabledAttribute", V8TestInterface::partialSecureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "secureContextRuntimeEnabledAttribute", V8TestInterface::secureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::secureContextRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "partialSecureContextRuntimeEnabledAttribute", V8TestInterface::partialSecureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "secureContextRuntimeEnabledAttribute", V8TestInterface::secureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::secureContextRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -3963,7 +3963,7 @@ } if (isSecureContext || !RuntimeEnabledFeatures::SecureContextnessFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextnessRuntimeEnabledAttribute", V8TestInterface::secureContextnessRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::secureContextnessRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "secureContextnessRuntimeEnabledAttribute", V8TestInterface::secureContextnessRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::secureContextnessRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -3972,7 +3972,7 @@ } if (executionContext && (executionContext->IsDocument())) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "windowExposedAttribute", V8TestInterface::windowExposedAttributeAttributeGetterCallback, V8TestInterface::windowExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "windowExposedAttribute", V8TestInterface::windowExposedAttributeAttributeGetterCallback, V8TestInterface::windowExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -3980,8 +3980,8 @@ base::size(accessor_configurations)); if (isSecureContext) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partialSecureContextWindowExposedAttribute", V8TestInterface::partialSecureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWindowExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "secureContextWindowExposedAttribute", V8TestInterface::secureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterface::secureContextWindowExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "partialSecureContextWindowExposedAttribute", V8TestInterface::partialSecureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWindowExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "secureContextWindowExposedAttribute", V8TestInterface::secureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterface::secureContextWindowExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -3989,8 +3989,8 @@ base::size(accessor_configurations)); if (RuntimeEnabledFeatures::SecureFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partialSecureContextWindowExposedRuntimeEnabledAttribute", V8TestInterface::partialSecureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "secureContextWindowExposedRuntimeEnabledAttribute", V8TestInterface::secureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::secureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "partialSecureContextWindowExposedRuntimeEnabledAttribute", V8TestInterface::partialSecureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "secureContextWindowExposedRuntimeEnabledAttribute", V8TestInterface::secureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::secureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -4001,7 +4001,7 @@ } if (executionContext && (executionContext->IsWorkerGlobalScope())) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "workerExposedAttribute", V8TestInterface::workerExposedAttributeAttributeGetterCallback, V8TestInterface::workerExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "workerExposedAttribute", V8TestInterface::workerExposedAttributeAttributeGetterCallback, V8TestInterface::workerExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -4009,8 +4009,8 @@ base::size(accessor_configurations)); if (isSecureContext) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partialSecureContextWorkerExposedAttribute", V8TestInterface::partialSecureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWorkerExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "secureContextWorkerExposedAttribute", V8TestInterface::secureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterface::secureContextWorkerExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "partialSecureContextWorkerExposedAttribute", V8TestInterface::partialSecureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWorkerExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "secureContextWorkerExposedAttribute", V8TestInterface::secureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterface::secureContextWorkerExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -4018,8 +4018,8 @@ base::size(accessor_configurations)); if (RuntimeEnabledFeatures::SecureFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "partialSecureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterface::partialSecureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "secureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterface::secureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::secureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "partialSecureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterface::partialSecureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::partialSecureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "secureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterface::secureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterface::secureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject,
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_2.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_2.cc index c3d9468..9f720f0 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_2.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_2.cc
@@ -654,7 +654,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestInterface2Accessors[] = { - { "size", V8TestInterface2::sizeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontEnum | v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "size", V8TestInterface2::sizeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontEnum | v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestInterface2Methods[] = {
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_3.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_3.cc index 8ee7de8..a8f61da 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_3.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_3.cc
@@ -237,8 +237,8 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestInterface3Accessors[] = { - { "length", V8TestInterface3::lengthAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "readonlyStringifierAttribute", V8TestInterface3::readonlyStringifierAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "length", V8TestInterface3::lengthAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "readonlyStringifierAttribute", V8TestInterface3::readonlyStringifierAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestInterface3Methods[] = {
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc index aeb5da3..82c3f299 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_check_security.cc
@@ -687,18 +687,18 @@ #pragma clang diagnostic ignored "-Wglobal-constructors" #endif static const V8DOMConfiguration::AttributeConfiguration V8TestInterfaceCheckSecurityAttributes[] = { - { "doNotCheckSecurityLongAttribute", V8TestInterfaceCheckSecurity::doNotCheckSecurityLongAttributeAttributeGetterCallback, V8TestInterfaceCheckSecurity::doNotCheckSecurityLongAttributeAttributeSetterCallback, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "doNotCheckSecurityReadonlyLongAttribute", V8TestInterfaceCheckSecurity::doNotCheckSecurityReadonlyLongAttributeAttributeGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "doNotCheckSecurityOnSetterLongAttribute", V8TestInterfaceCheckSecurity::doNotCheckSecurityOnSetterLongAttributeAttributeGetterCallback, V8TestInterfaceCheckSecurity::doNotCheckSecurityOnSetterLongAttributeAttributeSetterCallback, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "doNotCheckSecurityReplaceableReadonlyLongAttribute", V8TestInterfaceCheckSecurity::doNotCheckSecurityReplaceableReadonlyLongAttributeAttributeGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "doNotCheckSecurityLongAttribute", V8TestInterfaceCheckSecurity::doNotCheckSecurityLongAttributeAttributeGetterCallback, V8TestInterfaceCheckSecurity::doNotCheckSecurityLongAttributeAttributeSetterCallback, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "doNotCheckSecurityReadonlyLongAttribute", V8TestInterfaceCheckSecurity::doNotCheckSecurityReadonlyLongAttributeAttributeGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "doNotCheckSecurityOnSetterLongAttribute", V8TestInterfaceCheckSecurity::doNotCheckSecurityOnSetterLongAttributeAttributeGetterCallback, V8TestInterfaceCheckSecurity::doNotCheckSecurityOnSetterLongAttributeAttributeSetterCallback, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "doNotCheckSecurityReplaceableReadonlyLongAttribute", V8TestInterfaceCheckSecurity::doNotCheckSecurityReplaceableReadonlyLongAttributeAttributeGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; #if defined(COMPONENT_BUILD) && defined(WIN32) && defined(__clang__) #pragma clang diagnostic pop #endif static const V8DOMConfiguration::AccessorConfiguration V8TestInterfaceCheckSecurityAccessors[] = { - { "readonlyLongAttribute", V8TestInterfaceCheckSecurity::readonlyLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "longAttribute", V8TestInterfaceCheckSecurity::longAttributeAttributeGetterCallback, V8TestInterfaceCheckSecurity::longAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "readonlyLongAttribute", V8TestInterfaceCheckSecurity::readonlyLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "longAttribute", V8TestInterfaceCheckSecurity::longAttributeAttributeGetterCallback, V8TestInterfaceCheckSecurity::longAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestInterfaceCheckSecurityMethods[] = { @@ -750,23 +750,23 @@ // Custom signature static const V8DOMConfiguration::AttributeConfiguration doNotCheckSecurityVoidMethodOriginSafeAttributeConfiguration[] = { - {"doNotCheckSecurityVoidMethod", V8TestInterfaceCheckSecurity::doNotCheckSecurityVoidMethodOriginSafeMethodGetterCallback, V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeMethodSetterCallback, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds} + {"doNotCheckSecurityVoidMethod", V8TestInterfaceCheckSecurity::doNotCheckSecurityVoidMethodOriginSafeMethodGetterCallback, V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeMethodSetterCallback, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds} }; for (const auto& attributeConfig : doNotCheckSecurityVoidMethodOriginSafeAttributeConfiguration) V8DOMConfiguration::InstallAttribute(isolate, world, instanceTemplate, prototypeTemplate, attributeConfig); static const V8DOMConfiguration::AttributeConfiguration doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeAttributeConfiguration[] = { - {"doNotCheckSecurityPerWorldBindingsVoidMethod", V8TestInterfaceCheckSecurity::doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterCallbackForMainWorld, V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeMethodSetterCallbackForMainWorld, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::MainWorld}, - {"doNotCheckSecurityPerWorldBindingsVoidMethod", V8TestInterfaceCheckSecurity::doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterCallback, V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeMethodSetterCallback, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::NonMainWorlds}} + {"doNotCheckSecurityPerWorldBindingsVoidMethod", V8TestInterfaceCheckSecurity::doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterCallbackForMainWorld, V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeMethodSetterCallbackForMainWorld, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::MainWorld}, + {"doNotCheckSecurityPerWorldBindingsVoidMethod", V8TestInterfaceCheckSecurity::doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeMethodGetterCallback, V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeMethodSetterCallback, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::NonMainWorlds}} }; for (const auto& attributeConfig : doNotCheckSecurityPerWorldBindingsVoidMethodOriginSafeAttributeConfiguration) V8DOMConfiguration::InstallAttribute(isolate, world, instanceTemplate, prototypeTemplate, attributeConfig); static const V8DOMConfiguration::AttributeConfiguration doNotCheckSecurityUnforgeableVoidMethodOriginSafeAttributeConfiguration[] = { - {"doNotCheckSecurityUnforgeableVoidMethod", V8TestInterfaceCheckSecurity::doNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds} + {"doNotCheckSecurityUnforgeableVoidMethod", V8TestInterfaceCheckSecurity::doNotCheckSecurityUnforgeableVoidMethodOriginSafeMethodGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds} }; for (const auto& attributeConfig : doNotCheckSecurityUnforgeableVoidMethodOriginSafeAttributeConfiguration) V8DOMConfiguration::InstallAttribute(isolate, world, instanceTemplate, prototypeTemplate, attributeConfig); static const V8DOMConfiguration::AttributeConfiguration doNotCheckSecurityVoidOverloadMethodOriginSafeAttributeConfiguration[] = { - {"doNotCheckSecurityVoidOverloadMethod", V8TestInterfaceCheckSecurity::doNotCheckSecurityVoidOverloadMethodOriginSafeMethodGetterCallback, V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeMethodSetterCallback, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds} + {"doNotCheckSecurityVoidOverloadMethod", V8TestInterfaceCheckSecurity::doNotCheckSecurityVoidOverloadMethodOriginSafeMethodGetterCallback, V8TestInterfaceCheckSecurity::TestInterfaceCheckSecurityOriginSafeMethodSetterCallback, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds} }; for (const auto& attributeConfig : doNotCheckSecurityVoidOverloadMethodOriginSafeAttributeConfiguration) V8DOMConfiguration::InstallAttribute(isolate, world, instanceTemplate, prototypeTemplate, attributeConfig);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_conditional_secure_context.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_conditional_secure_context.cc index e3c0a48..0636e2b 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_conditional_secure_context.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_conditional_secure_context.cc
@@ -468,7 +468,7 @@ if (!prototypeObject.IsEmpty() || !interfaceObject.IsEmpty()) { if (isSecureContext || !RuntimeEnabledFeatures::SecureContextnessFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextAttribute", V8TestInterfaceConditionalSecureContext::secureContextAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::secureContextAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "secureContextAttribute", V8TestInterfaceConditionalSecureContext::secureContextAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::secureContextAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -476,7 +476,7 @@ base::size(accessor_configurations)); if (RuntimeEnabledFeatures::SecureFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextRuntimeEnabledAttribute", V8TestInterfaceConditionalSecureContext::secureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::secureContextRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "secureContextRuntimeEnabledAttribute", V8TestInterfaceConditionalSecureContext::secureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::secureContextRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -487,7 +487,7 @@ if (executionContext && (executionContext->IsDocument())) { if (isSecureContext || !RuntimeEnabledFeatures::SecureContextnessFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextWindowExposedAttribute", V8TestInterfaceConditionalSecureContext::secureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::secureContextWindowExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "secureContextWindowExposedAttribute", V8TestInterfaceConditionalSecureContext::secureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::secureContextWindowExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -495,7 +495,7 @@ base::size(accessor_configurations)); if (RuntimeEnabledFeatures::SecureFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextWindowExposedRuntimeEnabledAttribute", V8TestInterfaceConditionalSecureContext::secureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::secureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "secureContextWindowExposedRuntimeEnabledAttribute", V8TestInterfaceConditionalSecureContext::secureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::secureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -507,7 +507,7 @@ if (executionContext && (executionContext->IsWorkerGlobalScope())) { if (isSecureContext || !RuntimeEnabledFeatures::SecureContextnessFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextWorkerExposedAttribute", V8TestInterfaceConditionalSecureContext::secureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::secureContextWorkerExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "secureContextWorkerExposedAttribute", V8TestInterfaceConditionalSecureContext::secureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::secureContextWorkerExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -515,7 +515,7 @@ base::size(accessor_configurations)); if (RuntimeEnabledFeatures::SecureFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterfaceConditionalSecureContext::secureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::secureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "secureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterfaceConditionalSecureContext::secureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceConditionalSecureContext::secureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject,
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_document.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_document.cc index 5076209..2903f9c 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_document.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_document.cc
@@ -114,7 +114,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestInterfaceDocumentAccessors[] = { - { "location", V8TestInterfaceDocument::locationAttributeGetterCallback, V8TestInterfaceDocument::locationAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasNoSideEffect, V8DOMConfiguration::kAllWorlds }, + { "location", V8TestInterfaceDocument::locationAttributeGetterCallback, V8TestInterfaceDocument::locationAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasNoSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static void installV8TestInterfaceDocumentTemplate(
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_event_init_constructor.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_event_init_constructor.cc index 40c35a6..d99e4b0 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_event_init_constructor.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_event_init_constructor.cc
@@ -126,8 +126,8 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestInterfaceEventInitConstructorAccessors[] = { - { "readonlyStringAttribute", V8TestInterfaceEventInitConstructor::readonlyStringAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "isTrusted", V8TestInterfaceEventInitConstructor::isTrustedAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete | v8::ReadOnly), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "readonlyStringAttribute", V8TestInterfaceEventInitConstructor::readonlyStringAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "isTrusted", V8TestInterfaceEventInitConstructor::isTrustedAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete | v8::ReadOnly), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; void V8TestInterfaceEventInitConstructor::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_named_constructor.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_named_constructor.cc index ab2112a7..973e7378 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_named_constructor.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_named_constructor.cc
@@ -81,8 +81,8 @@ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wglobal-constructors" #endif -static const V8DOMConfiguration::AttributeConfiguration V8TestInterfaceNamedConstructorLazyDataAttributes[] = { - { "testNamedConstructorConstructorAttribute", V8TestInterfaceNamedConstructor::testNamedConstructorConstructorAttributeConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, +static const V8DOMConfiguration::AttributeConfiguration V8TestInterfaceNamedConstructorAttributes[] = { + { "testNamedConstructorConstructorAttribute", V8TestInterfaceNamedConstructor::testNamedConstructorConstructorAttributeConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kReplaceWithDataProperty, V8DOMConfiguration::kAllWorlds }, }; #if defined(COMPONENT_BUILD) && defined(WIN32) && defined(__clang__) #pragma clang diagnostic pop @@ -250,9 +250,9 @@ ALLOW_UNUSED_LOCAL(prototypeTemplate); // Register IDL constants, attributes and operations. - V8DOMConfiguration::InstallLazyDataAttributes( + V8DOMConfiguration::InstallAttributes( isolate, world, instanceTemplate, prototypeTemplate, - V8TestInterfaceNamedConstructorLazyDataAttributes, base::size(V8TestInterfaceNamedConstructorLazyDataAttributes)); + V8TestInterfaceNamedConstructorAttributes, base::size(V8TestInterfaceNamedConstructorAttributes)); // Custom signature
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_node.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_node.cc index b9b5bf1f..8d7ecc3 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_node.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_node.cc
@@ -405,14 +405,14 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestInterfaceNodeAccessors[] = { - { "nodeName", V8TestInterfaceNode::nodeNameAttributeGetterCallback, V8TestInterfaceNode::nodeNameAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "stringAttribute", V8TestInterfaceNode::stringAttributeAttributeGetterCallback, V8TestInterfaceNode::stringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "readonlyTestInterfaceEmptyAttribute", V8TestInterfaceNode::readonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "eventHandlerAttribute", V8TestInterfaceNode::eventHandlerAttributeAttributeGetterCallback, V8TestInterfaceNode::eventHandlerAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestInterfaceNode::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallbackForMainWorld, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kMainWorld }, - { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestInterfaceNode::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kNonMainWorlds }, - { "reflectStringAttribute", V8TestInterfaceNode::reflectStringAttributeAttributeGetterCallback, V8TestInterfaceNode::reflectStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "reflectUrlStringAttribute", V8TestInterfaceNode::reflectUrlStringAttributeAttributeGetterCallback, V8TestInterfaceNode::reflectUrlStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "nodeName", V8TestInterfaceNode::nodeNameAttributeGetterCallback, V8TestInterfaceNode::nodeNameAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "stringAttribute", V8TestInterfaceNode::stringAttributeAttributeGetterCallback, V8TestInterfaceNode::stringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "readonlyTestInterfaceEmptyAttribute", V8TestInterfaceNode::readonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "eventHandlerAttribute", V8TestInterfaceNode::eventHandlerAttributeAttributeGetterCallback, V8TestInterfaceNode::eventHandlerAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestInterfaceNode::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallbackForMainWorld, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kMainWorld }, + { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestInterfaceNode::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kNonMainWorlds }, + { "reflectStringAttribute", V8TestInterfaceNode::reflectStringAttributeAttributeGetterCallback, V8TestInterfaceNode::reflectStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "reflectUrlStringAttribute", V8TestInterfaceNode::reflectUrlStringAttributeAttributeGetterCallback, V8TestInterfaceNode::reflectUrlStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestInterfaceNodeMethods[] = {
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_origin_trial_enabled.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_origin_trial_enabled.cc index 69e5255d..63cb40e 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_origin_trial_enabled.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_origin_trial_enabled.cc
@@ -286,8 +286,8 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestInterfaceOriginTrialEnabledAccessors[] = { - { "doubleAttribute", V8TestInterfaceOriginTrialEnabled::doubleAttributeAttributeGetterCallback, V8TestInterfaceOriginTrialEnabled::doubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "staticStringAttribute", V8TestInterfaceOriginTrialEnabled::staticStringAttributeAttributeGetterCallback, V8TestInterfaceOriginTrialEnabled::staticStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "doubleAttribute", V8TestInterfaceOriginTrialEnabled::doubleAttributeAttributeGetterCallback, V8TestInterfaceOriginTrialEnabled::doubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "staticStringAttribute", V8TestInterfaceOriginTrialEnabled::staticStringAttributeAttributeGetterCallback, V8TestInterfaceOriginTrialEnabled::staticStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestInterfaceOriginTrialEnabledMethods[] = { @@ -347,9 +347,9 @@ if (RuntimeEnabledFeatures::FeatureNameEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "conditionalReadOnlyLongAttribute", V8TestInterfaceOriginTrialEnabled::conditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "staticConditionalReadOnlyLongAttribute", V8TestInterfaceOriginTrialEnabled::staticConditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "conditionalLongAttribute", V8TestInterfaceOriginTrialEnabled::conditionalLongAttributeAttributeGetterCallback, V8TestInterfaceOriginTrialEnabled::conditionalLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "conditionalReadOnlyLongAttribute", V8TestInterfaceOriginTrialEnabled::conditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "staticConditionalReadOnlyLongAttribute", V8TestInterfaceOriginTrialEnabled::staticConditionalReadOnlyLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "conditionalLongAttribute", V8TestInterfaceOriginTrialEnabled::conditionalLongAttributeAttributeGetterCallback, V8TestInterfaceOriginTrialEnabled::conditionalLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instance_template, prototype_template, interface_template,
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_secure_context.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_secure_context.cc index a396c222..fe616b64 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_secure_context.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_interface_secure_context.cc
@@ -468,7 +468,7 @@ if (!prototypeObject.IsEmpty() || !interfaceObject.IsEmpty()) { if (isSecureContext) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextAttribute", V8TestInterfaceSecureContext::secureContextAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "secureContextAttribute", V8TestInterfaceSecureContext::secureContextAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -476,7 +476,7 @@ base::size(accessor_configurations)); if (RuntimeEnabledFeatures::SecureFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextRuntimeEnabledAttribute", V8TestInterfaceSecureContext::secureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "secureContextRuntimeEnabledAttribute", V8TestInterfaceSecureContext::secureContextRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -487,7 +487,7 @@ if (executionContext && (executionContext->IsDocument())) { if (isSecureContext) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextWindowExposedAttribute", V8TestInterfaceSecureContext::secureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWindowExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "secureContextWindowExposedAttribute", V8TestInterfaceSecureContext::secureContextWindowExposedAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWindowExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -495,7 +495,7 @@ base::size(accessor_configurations)); if (RuntimeEnabledFeatures::SecureFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextWindowExposedRuntimeEnabledAttribute", V8TestInterfaceSecureContext::secureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "secureContextWindowExposedRuntimeEnabledAttribute", V8TestInterfaceSecureContext::secureContextWindowExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWindowExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -507,7 +507,7 @@ if (executionContext && (executionContext->IsWorkerGlobalScope())) { if (isSecureContext) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextWorkerExposedAttribute", V8TestInterfaceSecureContext::secureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWorkerExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "secureContextWorkerExposedAttribute", V8TestInterfaceSecureContext::secureContextWorkerExposedAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWorkerExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -515,7 +515,7 @@ base::size(accessor_configurations)); if (RuntimeEnabledFeatures::SecureFeatureEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "secureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterfaceSecureContext::secureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "secureContextWorkerExposedRuntimeEnabledAttribute", V8TestInterfaceSecureContext::secureContextWorkerExposedRuntimeEnabledAttributeAttributeGetterCallback, V8TestInterfaceSecureContext::secureContextWorkerExposedRuntimeEnabledAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject,
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_node.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_node.cc index e2cf734..27388218 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_node.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_node.cc
@@ -238,10 +238,10 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestNodeAccessors[] = { - { "href", V8TestNode::hrefAttributeGetterCallback, V8TestNode::hrefAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "hrefThrows", V8TestNode::hrefThrowsAttributeGetterCallback, V8TestNode::hrefThrowsAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "hrefCallWith", V8TestNode::hrefCallWithAttributeGetterCallback, V8TestNode::hrefCallWithAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "hrefByteString", V8TestNode::hrefByteStringAttributeGetterCallback, V8TestNode::hrefByteStringAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "href", V8TestNode::hrefAttributeGetterCallback, V8TestNode::hrefAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "hrefThrows", V8TestNode::hrefThrowsAttributeGetterCallback, V8TestNode::hrefThrowsAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "hrefCallWith", V8TestNode::hrefCallWithAttributeGetterCallback, V8TestNode::hrefCallWithAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "hrefByteString", V8TestNode::hrefByteStringAttributeGetterCallback, V8TestNode::hrefByteStringAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; void V8TestNode::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc index 99136cd..0f6c0d0 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc
@@ -20,7 +20,6 @@ #include "third_party/blink/renderer/bindings/core/v8/script_value.h" #include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h" #include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value_factory.h" -#include "third_party/blink/renderer/bindings/core/v8/serialization/transferables.h" #include "third_party/blink/renderer/bindings/core/v8/v8_abstract_event_listener.h" #include "third_party/blink/renderer/bindings/core/v8/v8_array_buffer.h" #include "third_party/blink/renderer/bindings/core/v8/v8_array_buffer_view.h" @@ -61,12 +60,10 @@ #include "third_party/blink/renderer/core/html/html_collection.h" #include "third_party/blink/renderer/core/html/html_table_rows_collection.h" #include "third_party/blink/renderer/core/html_names.h" -#include "third_party/blink/renderer/core/imagebitmap/image_bitmap.h" #include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/core/inspector/script_arguments.h" #include "third_party/blink/renderer/core/origin_trials/origin_trials.h" #include "third_party/blink/renderer/core/typed_arrays/array_buffer_view_helpers.h" -#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer_base.h" #include "third_party/blink/renderer/core/typed_arrays/flexible_array_buffer_view.h" #include "third_party/blink/renderer/platform/bindings/exception_messages.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" @@ -8399,63 +8396,6 @@ impl->perWorldBindingsVoidMethodTestInterfaceEmptyArg(testInterfaceEmptyArg); } -static void postMessageImpl(const char* interfaceName, TestObject* instance, const v8::FunctionCallbackInfo<v8::Value>& info) { - ExceptionState exceptionState(info.GetIsolate(), ExceptionState::kExecutionContext, interfaceName, "postMessage"); - if (UNLIKELY(info.Length() < 1)) { - exceptionState.ThrowTypeError(ExceptionMessages::NotEnoughArguments(1, info.Length())); - return; - } - - Transferables transferables; - if (info.Length() > 1) { - const int transferablesArgIndex = 1; - if (!SerializedScriptValue::ExtractTransferables(info.GetIsolate(), info[transferablesArgIndex], transferablesArgIndex, transferables, exceptionState)) { - return; - } - } - - scoped_refptr<SerializedScriptValue> message; - if (instance->CanTransferArrayBuffersAndImageBitmaps()) { - // This instance supports sending array buffers by move semantics. - SerializedScriptValue::SerializeOptions options; - options.transferables = &transferables; - message = SerializedScriptValue::Serialize(info.GetIsolate(), info[0], options, exceptionState); - if (exceptionState.HadException()) - return; - } else { - // This instance doesn't support sending array buffers and image bitmaps - // by move semantics. Emulate it by copy-and-neuter semantics that sends - // array buffers and image bitmaps via structured clone and then neuters - // the original objects - - // Clear references to array buffers and image bitmaps from transferables - // so that the serializer can consider the array buffers as - // non-transferable and serialize them into the message. - ArrayBufferArray transferableArrayBuffers = SerializedScriptValue::ExtractNonSharedArrayBuffers(transferables); - ImageBitmapArray transferableImageBitmaps = transferables.image_bitmaps; - transferables.image_bitmaps.clear(); - SerializedScriptValue::SerializeOptions options; - options.transferables = &transferables; - message = SerializedScriptValue::Serialize(info.GetIsolate(), info[0], options, exceptionState); - if (exceptionState.HadException()) - return; - - // Neuter the original array buffers on the sender context. - SerializedScriptValue::TransferArrayBufferContents(info.GetIsolate(), transferableArrayBuffers, exceptionState); - if (exceptionState.HadException()) - return; - // Neuter the original image bitmaps on the sender context. - SerializedScriptValue::TransferImageBitmapContents(info.GetIsolate(), transferableImageBitmaps, exceptionState); - if (exceptionState.HadException()) - return; - } - - // FIXME: Only pass scriptState/exceptionState if instance really requires it. - ScriptState* scriptState = ScriptState::Current(info.GetIsolate()); - message->UnregisterMemoryAllocatedWithCurrentScriptContext(); - instance->postMessage(scriptState, std::move(message), transferables.message_ports, exceptionState); -} - static void activityLoggingForAllWorldsPerWorldBindingsVoidMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) { TestObject* impl = V8TestObject::ToImpl(info.Holder()); @@ -12647,12 +12587,6 @@ TestObjectV8Internal::perWorldBindingsVoidMethodTestInterfaceEmptyArgMethodForMainWorld(info); } -void V8TestObject::postMessageMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { - RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestObject_postMessage"); - - TestObjectV8Internal::postMessageImpl("TestObject", V8TestObject::ToImpl(info.Holder()), info); -} - void V8TestObject::activityLoggingForAllWorldsPerWorldBindingsVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { RUNTIME_CALL_TIMER_SCOPE_DISABLED_BY_DEFAULT(info.GetIsolate(), "Blink_TestObject_activityLoggingForAllWorldsPerWorldBindingsVoidMethod"); @@ -12978,177 +12912,165 @@ #pragma clang diagnostic ignored "-Wglobal-constructors" #endif static const V8DOMConfiguration::AttributeConfiguration V8TestObjectAttributes[] = { - { "testInterfaceEmptyConstructorAttribute", V8TestObject::testInterfaceEmptyConstructorAttributeConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "measureAsFeatureNameTestInterfaceEmptyConstructorAttribute", V8TestObject::measureAsFeatureNameTestInterfaceEmptyConstructorAttributeConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, -}; -#if defined(COMPONENT_BUILD) && defined(WIN32) && defined(__clang__) -#pragma clang diagnostic pop -#endif - -// Suppress warning: global constructors, because AttributeConfiguration is trivial -// and does not depend on another global objects. -#if defined(COMPONENT_BUILD) && defined(WIN32) && defined(__clang__) -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wglobal-constructors" -#endif -static const V8DOMConfiguration::AttributeConfiguration V8TestObjectLazyDataAttributes[] = { - { "testInterfaceEmptyConstructorAttribute", V8TestObject::testInterfaceEmptyConstructorAttributeConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceEmptyConstructorAttribute", V8TestObject::testInterfaceEmptyConstructorAttributeConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kReplaceWithDataProperty, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceEmptyConstructorAttribute", V8TestObject::testInterfaceEmptyConstructorAttributeConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "measureAsFeatureNameTestInterfaceEmptyConstructorAttribute", V8TestObject::measureAsFeatureNameTestInterfaceEmptyConstructorAttributeConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; #if defined(COMPONENT_BUILD) && defined(WIN32) && defined(__clang__) #pragma clang diagnostic pop #endif static const V8DOMConfiguration::AccessorConfiguration V8TestObjectAccessors[] = { - { "stringifierAttribute", V8TestObject::stringifierAttributeAttributeGetterCallback, V8TestObject::stringifierAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "readonlyStringAttribute", V8TestObject::readonlyStringAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "readonlyTestInterfaceEmptyAttribute", V8TestObject::readonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "readonlyLongAttribute", V8TestObject::readonlyLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "dateAttribute", V8TestObject::dateAttributeAttributeGetterCallback, V8TestObject::dateAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "stringAttribute", V8TestObject::stringAttributeAttributeGetterCallback, V8TestObject::stringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "byteStringAttribute", V8TestObject::byteStringAttributeAttributeGetterCallback, V8TestObject::byteStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "usvStringAttribute", V8TestObject::usvStringAttributeAttributeGetterCallback, V8TestObject::usvStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "domTimeStampAttribute", V8TestObject::domTimeStampAttributeAttributeGetterCallback, V8TestObject::domTimeStampAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "booleanAttribute", V8TestObject::booleanAttributeAttributeGetterCallback, V8TestObject::booleanAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "byteAttribute", V8TestObject::byteAttributeAttributeGetterCallback, V8TestObject::byteAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "doubleAttribute", V8TestObject::doubleAttributeAttributeGetterCallback, V8TestObject::doubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "floatAttribute", V8TestObject::floatAttributeAttributeGetterCallback, V8TestObject::floatAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "longAttribute", V8TestObject::longAttributeAttributeGetterCallback, V8TestObject::longAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "longLongAttribute", V8TestObject::longLongAttributeAttributeGetterCallback, V8TestObject::longLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "octetAttribute", V8TestObject::octetAttributeAttributeGetterCallback, V8TestObject::octetAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "shortAttribute", V8TestObject::shortAttributeAttributeGetterCallback, V8TestObject::shortAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "unrestrictedDoubleAttribute", V8TestObject::unrestrictedDoubleAttributeAttributeGetterCallback, V8TestObject::unrestrictedDoubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "unrestrictedFloatAttribute", V8TestObject::unrestrictedFloatAttributeAttributeGetterCallback, V8TestObject::unrestrictedFloatAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "unsignedLongAttribute", V8TestObject::unsignedLongAttributeAttributeGetterCallback, V8TestObject::unsignedLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "unsignedLongLongAttribute", V8TestObject::unsignedLongLongAttributeAttributeGetterCallback, V8TestObject::unsignedLongLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "unsignedShortAttribute", V8TestObject::unsignedShortAttributeAttributeGetterCallback, V8TestObject::unsignedShortAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "testInterfaceEmptyAttribute", V8TestObject::testInterfaceEmptyAttributeAttributeGetterCallback, V8TestObject::testInterfaceEmptyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "testObjectAttribute", V8TestObject::testObjectAttributeAttributeGetterCallback, V8TestObject::testObjectAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "cssAttribute", V8TestObject::cssAttributeAttributeGetterCallback, V8TestObject::cssAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "imeAttribute", V8TestObject::imeAttributeAttributeGetterCallback, V8TestObject::imeAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "svgAttribute", V8TestObject::svgAttributeAttributeGetterCallback, V8TestObject::svgAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "xmlAttribute", V8TestObject::xmlAttributeAttributeGetterCallback, V8TestObject::xmlAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "nodeFilterAttribute", V8TestObject::nodeFilterAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "serializedScriptValueAttribute", V8TestObject::serializedScriptValueAttributeAttributeGetterCallback, V8TestObject::serializedScriptValueAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "anyAttribute", V8TestObject::anyAttributeAttributeGetterCallback, V8TestObject::anyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "promiseAttribute", V8TestObject::promiseAttributeAttributeGetterCallback, V8TestObject::promiseAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kDoNotCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "windowAttribute", V8TestObject::windowAttributeAttributeGetterCallback, V8TestObject::windowAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "documentAttribute", V8TestObject::documentAttributeAttributeGetterCallback, V8TestObject::documentAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "documentFragmentAttribute", V8TestObject::documentFragmentAttributeAttributeGetterCallback, V8TestObject::documentFragmentAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "documentTypeAttribute", V8TestObject::documentTypeAttributeAttributeGetterCallback, V8TestObject::documentTypeAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "elementAttribute", V8TestObject::elementAttributeAttributeGetterCallback, V8TestObject::elementAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "nodeAttribute", V8TestObject::nodeAttributeAttributeGetterCallback, V8TestObject::nodeAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "shadowRootAttribute", V8TestObject::shadowRootAttributeAttributeGetterCallback, V8TestObject::shadowRootAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "arrayBufferAttribute", V8TestObject::arrayBufferAttributeAttributeGetterCallback, V8TestObject::arrayBufferAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "float32ArrayAttribute", V8TestObject::float32ArrayAttributeAttributeGetterCallback, V8TestObject::float32ArrayAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "uint8ArrayAttribute", V8TestObject::uint8ArrayAttributeAttributeGetterCallback, V8TestObject::uint8ArrayAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "self", V8TestObject::selfAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "readonlyEventTargetAttribute", V8TestObject::readonlyEventTargetAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "readonlyEventTargetOrNullAttribute", V8TestObject::readonlyEventTargetOrNullAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "readonlyWindowAttribute", V8TestObject::readonlyWindowAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "htmlCollectionAttribute", V8TestObject::htmlCollectionAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "htmlElementAttribute", V8TestObject::htmlElementAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "stringFrozenArrayAttribute", V8TestObject::stringFrozenArrayAttributeAttributeGetterCallback, V8TestObject::stringFrozenArrayAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "testInterfaceEmptyFrozenArrayAttribute", V8TestObject::testInterfaceEmptyFrozenArrayAttributeAttributeGetterCallback, V8TestObject::testInterfaceEmptyFrozenArrayAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "booleanOrNullAttribute", V8TestObject::booleanOrNullAttributeAttributeGetterCallback, V8TestObject::booleanOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "stringOrNullAttribute", V8TestObject::stringOrNullAttributeAttributeGetterCallback, V8TestObject::stringOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "longOrNullAttribute", V8TestObject::longOrNullAttributeAttributeGetterCallback, V8TestObject::longOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "testInterfaceOrNullAttribute", V8TestObject::testInterfaceOrNullAttributeAttributeGetterCallback, V8TestObject::testInterfaceOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "testEnumAttribute", V8TestObject::testEnumAttributeAttributeGetterCallback, V8TestObject::testEnumAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "testEnumOrNullAttribute", V8TestObject::testEnumOrNullAttributeAttributeGetterCallback, V8TestObject::testEnumOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "staticStringAttribute", V8TestObject::staticStringAttributeAttributeGetterCallback, V8TestObject::staticStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "staticLongAttribute", V8TestObject::staticLongAttributeAttributeGetterCallback, V8TestObject::staticLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "eventHandlerAttribute", V8TestObject::eventHandlerAttributeAttributeGetterCallback, V8TestObject::eventHandlerAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "doubleOrStringAttribute", V8TestObject::doubleOrStringAttributeAttributeGetterCallback, V8TestObject::doubleOrStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "doubleOrStringOrNullAttribute", V8TestObject::doubleOrStringOrNullAttributeAttributeGetterCallback, V8TestObject::doubleOrStringOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "doubleOrNullStringAttribute", V8TestObject::doubleOrNullStringAttributeAttributeGetterCallback, V8TestObject::doubleOrNullStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "stringOrStringSequenceAttribute", V8TestObject::stringOrStringSequenceAttributeAttributeGetterCallback, V8TestObject::stringOrStringSequenceAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "testEnumOrDoubleAttribute", V8TestObject::testEnumOrDoubleAttributeAttributeGetterCallback, V8TestObject::testEnumOrDoubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "unrestrictedDoubleOrStringAttribute", V8TestObject::unrestrictedDoubleOrStringAttributeAttributeGetterCallback, V8TestObject::unrestrictedDoubleOrStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "nestedUnionAtribute", V8TestObject::nestedUnionAtributeAttributeGetterCallback, V8TestObject::nestedUnionAtributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "activityLoggingAccessForAllWorldsLongAttribute", V8TestObject::activityLoggingAccessForAllWorldsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingAccessForAllWorldsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "activityLoggingGetterForAllWorldsLongAttribute", V8TestObject::activityLoggingGetterForAllWorldsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingGetterForAllWorldsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "activityLoggingSetterForAllWorldsLongAttribute", V8TestObject::activityLoggingSetterForAllWorldsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingSetterForAllWorldsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "cachedAttributeAnyAttribute", V8TestObject::cachedAttributeAnyAttributeAttributeGetterCallback, V8TestObject::cachedAttributeAnyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "cachedArrayAttribute", V8TestObject::cachedArrayAttributeAttributeGetterCallback, V8TestObject::cachedArrayAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "cachedStringOrNoneAttribute", V8TestObject::cachedStringOrNoneAttributeAttributeGetterCallback, V8TestObject::cachedStringOrNoneAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "callWithExecutionContextAnyAttribute", V8TestObject::callWithExecutionContextAnyAttributeAttributeGetterCallback, V8TestObject::callWithExecutionContextAnyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "callWithScriptStateAnyAttribute", V8TestObject::callWithScriptStateAnyAttributeAttributeGetterCallback, V8TestObject::callWithScriptStateAnyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "callWithExecutionContextAndScriptStateAnyAttribute", V8TestObject::callWithExecutionContextAndScriptStateAnyAttributeAttributeGetterCallback, V8TestObject::callWithExecutionContextAndScriptStateAnyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "checkSecurityForNodeReadonlyDocumentAttribute", V8TestObject::checkSecurityForNodeReadonlyDocumentAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "customObjectAttribute", V8TestObject::customObjectAttributeAttributeGetterCallback, V8TestObject::customObjectAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "customGetterLongAttribute", V8TestObject::customGetterLongAttributeAttributeGetterCallback, V8TestObject::customGetterLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "customGetterReadonlyObjectAttribute", V8TestObject::customGetterReadonlyObjectAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "customSetterLongAttribute", V8TestObject::customSetterLongAttributeAttributeGetterCallback, V8TestObject::customSetterLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "deprecatedLongAttribute", V8TestObject::deprecatedLongAttributeAttributeGetterCallback, V8TestObject::deprecatedLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "enforceRangeLongAttribute", V8TestObject::enforceRangeLongAttributeAttributeGetterCallback, V8TestObject::enforceRangeLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "implementedAsLongAttribute", V8TestObject::implementedAsLongAttributeAttributeGetterCallback, V8TestObject::implementedAsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "customImplementedAsLongAttribute", V8TestObject::customImplementedAsLongAttributeAttributeGetterCallback, V8TestObject::customImplementedAsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "customGetterImplementedAsLongAttribute", V8TestObject::customGetterImplementedAsLongAttributeAttributeGetterCallback, V8TestObject::customGetterImplementedAsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "customSetterImplementedAsLongAttribute", V8TestObject::customSetterImplementedAsLongAttributeAttributeGetterCallback, V8TestObject::customSetterImplementedAsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "measureAsLongAttribute", V8TestObject::measureAsLongAttributeAttributeGetterCallback, V8TestObject::measureAsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "notEnumerableLongAttribute", V8TestObject::notEnumerableLongAttributeAttributeGetterCallback, V8TestObject::notEnumerableLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestObject::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallbackForMainWorld, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kMainWorld }, - { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestObject::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kNonMainWorlds }, - { "activityLoggingAccessPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kMainWorld }, - { "activityLoggingAccessPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kNonMainWorlds }, - { "activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kMainWorld }, - { "activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kNonMainWorlds }, - { "activityLoggingGetterPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kMainWorld }, - { "activityLoggingGetterPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kNonMainWorlds }, - { "activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kMainWorld }, - { "activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kNonMainWorlds }, - { "location", V8TestObject::locationAttributeGetterCallback, V8TestObject::locationAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "locationWithException", V8TestObject::locationWithExceptionAttributeGetterCallback, V8TestObject::locationWithExceptionAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "locationWithCallWith", V8TestObject::locationWithCallWithAttributeGetterCallback, V8TestObject::locationWithCallWithAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "locationByteString", V8TestObject::locationByteStringAttributeGetterCallback, V8TestObject::locationByteStringAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "locationWithPerWorldBindings", V8TestObject::locationWithPerWorldBindingsAttributeGetterCallbackForMainWorld, V8TestObject::locationWithPerWorldBindingsAttributeSetterCallbackForMainWorld, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kMainWorld }, - { "locationWithPerWorldBindings", V8TestObject::locationWithPerWorldBindingsAttributeGetterCallback, V8TestObject::locationWithPerWorldBindingsAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kNonMainWorlds }, - { "locationLegacyInterfaceTypeChecking", V8TestObject::locationLegacyInterfaceTypeCheckingAttributeGetterCallback, V8TestObject::locationLegacyInterfaceTypeCheckingAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "raisesExceptionLongAttribute", V8TestObject::raisesExceptionLongAttributeAttributeGetterCallback, V8TestObject::raisesExceptionLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "raisesExceptionGetterLongAttribute", V8TestObject::raisesExceptionGetterLongAttributeAttributeGetterCallback, V8TestObject::raisesExceptionGetterLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "setterRaisesExceptionLongAttribute", V8TestObject::setterRaisesExceptionLongAttributeAttributeGetterCallback, V8TestObject::setterRaisesExceptionLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "raisesExceptionTestInterfaceEmptyAttribute", V8TestObject::raisesExceptionTestInterfaceEmptyAttributeAttributeGetterCallback, V8TestObject::raisesExceptionTestInterfaceEmptyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "cachedAttributeRaisesExceptionGetterAnyAttribute", V8TestObject::cachedAttributeRaisesExceptionGetterAnyAttributeAttributeGetterCallback, V8TestObject::cachedAttributeRaisesExceptionGetterAnyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "reflectTestInterfaceAttribute", V8TestObject::reflectTestInterfaceAttributeAttributeGetterCallback, V8TestObject::reflectTestInterfaceAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "reflectReflectedNameAttributeTestAttribute", V8TestObject::reflectReflectedNameAttributeTestAttributeAttributeGetterCallback, V8TestObject::reflectReflectedNameAttributeTestAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "reflectBooleanAttribute", V8TestObject::reflectBooleanAttributeAttributeGetterCallback, V8TestObject::reflectBooleanAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "reflectLongAttribute", V8TestObject::reflectLongAttributeAttributeGetterCallback, V8TestObject::reflectLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "reflectUnsignedShortAttribute", V8TestObject::reflectUnsignedShortAttributeAttributeGetterCallback, V8TestObject::reflectUnsignedShortAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "reflectUnsignedLongAttribute", V8TestObject::reflectUnsignedLongAttributeAttributeGetterCallback, V8TestObject::reflectUnsignedLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "id", V8TestObject::idAttributeGetterCallback, V8TestObject::idAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "name", V8TestObject::nameAttributeGetterCallback, V8TestObject::nameAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "class", V8TestObject::classAttributeGetterCallback, V8TestObject::classAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "reflectedId", V8TestObject::reflectedIdAttributeGetterCallback, V8TestObject::reflectedIdAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "reflectedName", V8TestObject::reflectedNameAttributeGetterCallback, V8TestObject::reflectedNameAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "reflectedClass", V8TestObject::reflectedClassAttributeGetterCallback, V8TestObject::reflectedClassAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "limitedToOnlyOneAttribute", V8TestObject::limitedToOnlyOneAttributeAttributeGetterCallback, V8TestObject::limitedToOnlyOneAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "limitedToOnlyAttribute", V8TestObject::limitedToOnlyAttributeAttributeGetterCallback, V8TestObject::limitedToOnlyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "limitedToOnlyOtherAttribute", V8TestObject::limitedToOnlyOtherAttributeAttributeGetterCallback, V8TestObject::limitedToOnlyOtherAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "limitedWithMissingDefaultAttribute", V8TestObject::limitedWithMissingDefaultAttributeAttributeGetterCallback, V8TestObject::limitedWithMissingDefaultAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "limitedWithInvalidMissingDefaultAttribute", V8TestObject::limitedWithInvalidMissingDefaultAttributeAttributeGetterCallback, V8TestObject::limitedWithInvalidMissingDefaultAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "corsSettingAttribute", V8TestObject::corsSettingAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "limitedWithEmptyMissingInvalidAttribute", V8TestObject::limitedWithEmptyMissingInvalidAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "RuntimeCallStatsCounterAttribute", V8TestObject::RuntimeCallStatsCounterAttributeAttributeGetterCallback, V8TestObject::RuntimeCallStatsCounterAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "RuntimeCallStatsCounterReadOnlyAttribute", V8TestObject::RuntimeCallStatsCounterReadOnlyAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "replaceableReadonlyLongAttribute", V8TestObject::replaceableReadonlyLongAttributeAttributeGetterCallback, V8TestObject::replaceableReadonlyLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "locationPutForwards", V8TestObject::locationPutForwardsAttributeGetterCallback, V8TestObject::locationPutForwardsAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "setterCallWithCurrentWindowAndEnteredWindowStringAttribute", V8TestObject::setterCallWithCurrentWindowAndEnteredWindowStringAttributeAttributeGetterCallback, V8TestObject::setterCallWithCurrentWindowAndEnteredWindowStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "setterCallWithExecutionContextStringAttribute", V8TestObject::setterCallWithExecutionContextStringAttributeAttributeGetterCallback, V8TestObject::setterCallWithExecutionContextStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "treatNullAsEmptyStringStringAttribute", V8TestObject::treatNullAsEmptyStringStringAttributeAttributeGetterCallback, V8TestObject::treatNullAsEmptyStringStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "treatNullAsNullStringStringAttribute", V8TestObject::treatNullAsNullStringStringAttributeAttributeGetterCallback, V8TestObject::treatNullAsNullStringStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "legacyInterfaceTypeCheckingFloatAttribute", V8TestObject::legacyInterfaceTypeCheckingFloatAttributeAttributeGetterCallback, V8TestObject::legacyInterfaceTypeCheckingFloatAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "legacyInterfaceTypeCheckingTestInterfaceAttribute", V8TestObject::legacyInterfaceTypeCheckingTestInterfaceAttributeAttributeGetterCallback, V8TestObject::legacyInterfaceTypeCheckingTestInterfaceAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "legacyInterfaceTypeCheckingTestInterfaceOrNullAttribute", V8TestObject::legacyInterfaceTypeCheckingTestInterfaceOrNullAttributeAttributeGetterCallback, V8TestObject::legacyInterfaceTypeCheckingTestInterfaceOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "urlStringAttribute", V8TestObject::urlStringAttributeAttributeGetterCallback, V8TestObject::urlStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "urlStringAttribute", V8TestObject::urlStringAttributeAttributeGetterCallback, V8TestObject::urlStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "unforgeableLongAttribute", V8TestObject::unforgeableLongAttributeAttributeGetterCallback, V8TestObject::unforgeableLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "measuredLongAttribute", V8TestObject::measuredLongAttributeAttributeGetterCallback, V8TestObject::measuredLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "sameObjectAttribute", V8TestObject::sameObjectAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "saveSameObjectAttribute", V8TestObject::saveSameObjectAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "staticSaveSameObjectAttribute", V8TestObject::staticSaveSameObjectAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "unscopableLongAttribute", V8TestObject::unscopableLongAttributeAttributeGetterCallback, V8TestObject::unscopableLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "testInterfaceAttribute", V8TestObject::testInterfaceAttributeAttributeGetterCallback, V8TestObject::testInterfaceAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "size", V8TestObject::sizeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontEnum | v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "stringifierAttribute", V8TestObject::stringifierAttributeAttributeGetterCallback, V8TestObject::stringifierAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "readonlyStringAttribute", V8TestObject::readonlyStringAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "readonlyTestInterfaceEmptyAttribute", V8TestObject::readonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "readonlyLongAttribute", V8TestObject::readonlyLongAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "dateAttribute", V8TestObject::dateAttributeAttributeGetterCallback, V8TestObject::dateAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "stringAttribute", V8TestObject::stringAttributeAttributeGetterCallback, V8TestObject::stringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "byteStringAttribute", V8TestObject::byteStringAttributeAttributeGetterCallback, V8TestObject::byteStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "usvStringAttribute", V8TestObject::usvStringAttributeAttributeGetterCallback, V8TestObject::usvStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "domTimeStampAttribute", V8TestObject::domTimeStampAttributeAttributeGetterCallback, V8TestObject::domTimeStampAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "booleanAttribute", V8TestObject::booleanAttributeAttributeGetterCallback, V8TestObject::booleanAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "byteAttribute", V8TestObject::byteAttributeAttributeGetterCallback, V8TestObject::byteAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "doubleAttribute", V8TestObject::doubleAttributeAttributeGetterCallback, V8TestObject::doubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "floatAttribute", V8TestObject::floatAttributeAttributeGetterCallback, V8TestObject::floatAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "longAttribute", V8TestObject::longAttributeAttributeGetterCallback, V8TestObject::longAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "longLongAttribute", V8TestObject::longLongAttributeAttributeGetterCallback, V8TestObject::longLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "octetAttribute", V8TestObject::octetAttributeAttributeGetterCallback, V8TestObject::octetAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "shortAttribute", V8TestObject::shortAttributeAttributeGetterCallback, V8TestObject::shortAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "unrestrictedDoubleAttribute", V8TestObject::unrestrictedDoubleAttributeAttributeGetterCallback, V8TestObject::unrestrictedDoubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "unrestrictedFloatAttribute", V8TestObject::unrestrictedFloatAttributeAttributeGetterCallback, V8TestObject::unrestrictedFloatAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "unsignedLongAttribute", V8TestObject::unsignedLongAttributeAttributeGetterCallback, V8TestObject::unsignedLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "unsignedLongLongAttribute", V8TestObject::unsignedLongLongAttributeAttributeGetterCallback, V8TestObject::unsignedLongLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "unsignedShortAttribute", V8TestObject::unsignedShortAttributeAttributeGetterCallback, V8TestObject::unsignedShortAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceEmptyAttribute", V8TestObject::testInterfaceEmptyAttributeAttributeGetterCallback, V8TestObject::testInterfaceEmptyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "testObjectAttribute", V8TestObject::testObjectAttributeAttributeGetterCallback, V8TestObject::testObjectAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "cssAttribute", V8TestObject::cssAttributeAttributeGetterCallback, V8TestObject::cssAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "imeAttribute", V8TestObject::imeAttributeAttributeGetterCallback, V8TestObject::imeAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "svgAttribute", V8TestObject::svgAttributeAttributeGetterCallback, V8TestObject::svgAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "xmlAttribute", V8TestObject::xmlAttributeAttributeGetterCallback, V8TestObject::xmlAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "nodeFilterAttribute", V8TestObject::nodeFilterAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "serializedScriptValueAttribute", V8TestObject::serializedScriptValueAttributeAttributeGetterCallback, V8TestObject::serializedScriptValueAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "anyAttribute", V8TestObject::anyAttributeAttributeGetterCallback, V8TestObject::anyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "promiseAttribute", V8TestObject::promiseAttributeAttributeGetterCallback, V8TestObject::promiseAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kDoNotCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "windowAttribute", V8TestObject::windowAttributeAttributeGetterCallback, V8TestObject::windowAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "documentAttribute", V8TestObject::documentAttributeAttributeGetterCallback, V8TestObject::documentAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "documentFragmentAttribute", V8TestObject::documentFragmentAttributeAttributeGetterCallback, V8TestObject::documentFragmentAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "documentTypeAttribute", V8TestObject::documentTypeAttributeAttributeGetterCallback, V8TestObject::documentTypeAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "elementAttribute", V8TestObject::elementAttributeAttributeGetterCallback, V8TestObject::elementAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "nodeAttribute", V8TestObject::nodeAttributeAttributeGetterCallback, V8TestObject::nodeAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "shadowRootAttribute", V8TestObject::shadowRootAttributeAttributeGetterCallback, V8TestObject::shadowRootAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "arrayBufferAttribute", V8TestObject::arrayBufferAttributeAttributeGetterCallback, V8TestObject::arrayBufferAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "float32ArrayAttribute", V8TestObject::float32ArrayAttributeAttributeGetterCallback, V8TestObject::float32ArrayAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "uint8ArrayAttribute", V8TestObject::uint8ArrayAttributeAttributeGetterCallback, V8TestObject::uint8ArrayAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "self", V8TestObject::selfAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "readonlyEventTargetAttribute", V8TestObject::readonlyEventTargetAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "readonlyEventTargetOrNullAttribute", V8TestObject::readonlyEventTargetOrNullAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "readonlyWindowAttribute", V8TestObject::readonlyWindowAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "htmlCollectionAttribute", V8TestObject::htmlCollectionAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "htmlElementAttribute", V8TestObject::htmlElementAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "stringFrozenArrayAttribute", V8TestObject::stringFrozenArrayAttributeAttributeGetterCallback, V8TestObject::stringFrozenArrayAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceEmptyFrozenArrayAttribute", V8TestObject::testInterfaceEmptyFrozenArrayAttributeAttributeGetterCallback, V8TestObject::testInterfaceEmptyFrozenArrayAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "booleanOrNullAttribute", V8TestObject::booleanOrNullAttributeAttributeGetterCallback, V8TestObject::booleanOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "stringOrNullAttribute", V8TestObject::stringOrNullAttributeAttributeGetterCallback, V8TestObject::stringOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "longOrNullAttribute", V8TestObject::longOrNullAttributeAttributeGetterCallback, V8TestObject::longOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceOrNullAttribute", V8TestObject::testInterfaceOrNullAttributeAttributeGetterCallback, V8TestObject::testInterfaceOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "testEnumAttribute", V8TestObject::testEnumAttributeAttributeGetterCallback, V8TestObject::testEnumAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "testEnumOrNullAttribute", V8TestObject::testEnumOrNullAttributeAttributeGetterCallback, V8TestObject::testEnumOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "staticStringAttribute", V8TestObject::staticStringAttributeAttributeGetterCallback, V8TestObject::staticStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "staticLongAttribute", V8TestObject::staticLongAttributeAttributeGetterCallback, V8TestObject::staticLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "eventHandlerAttribute", V8TestObject::eventHandlerAttributeAttributeGetterCallback, V8TestObject::eventHandlerAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "doubleOrStringAttribute", V8TestObject::doubleOrStringAttributeAttributeGetterCallback, V8TestObject::doubleOrStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "doubleOrStringOrNullAttribute", V8TestObject::doubleOrStringOrNullAttributeAttributeGetterCallback, V8TestObject::doubleOrStringOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "doubleOrNullStringAttribute", V8TestObject::doubleOrNullStringAttributeAttributeGetterCallback, V8TestObject::doubleOrNullStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "stringOrStringSequenceAttribute", V8TestObject::stringOrStringSequenceAttributeAttributeGetterCallback, V8TestObject::stringOrStringSequenceAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "testEnumOrDoubleAttribute", V8TestObject::testEnumOrDoubleAttributeAttributeGetterCallback, V8TestObject::testEnumOrDoubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "unrestrictedDoubleOrStringAttribute", V8TestObject::unrestrictedDoubleOrStringAttributeAttributeGetterCallback, V8TestObject::unrestrictedDoubleOrStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "nestedUnionAtribute", V8TestObject::nestedUnionAtributeAttributeGetterCallback, V8TestObject::nestedUnionAtributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "activityLoggingAccessForAllWorldsLongAttribute", V8TestObject::activityLoggingAccessForAllWorldsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingAccessForAllWorldsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "activityLoggingGetterForAllWorldsLongAttribute", V8TestObject::activityLoggingGetterForAllWorldsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingGetterForAllWorldsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "activityLoggingSetterForAllWorldsLongAttribute", V8TestObject::activityLoggingSetterForAllWorldsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingSetterForAllWorldsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "cachedAttributeAnyAttribute", V8TestObject::cachedAttributeAnyAttributeAttributeGetterCallback, V8TestObject::cachedAttributeAnyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "cachedArrayAttribute", V8TestObject::cachedArrayAttributeAttributeGetterCallback, V8TestObject::cachedArrayAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "cachedStringOrNoneAttribute", V8TestObject::cachedStringOrNoneAttributeAttributeGetterCallback, V8TestObject::cachedStringOrNoneAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "callWithExecutionContextAnyAttribute", V8TestObject::callWithExecutionContextAnyAttributeAttributeGetterCallback, V8TestObject::callWithExecutionContextAnyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "callWithScriptStateAnyAttribute", V8TestObject::callWithScriptStateAnyAttributeAttributeGetterCallback, V8TestObject::callWithScriptStateAnyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "callWithExecutionContextAndScriptStateAnyAttribute", V8TestObject::callWithExecutionContextAndScriptStateAnyAttributeAttributeGetterCallback, V8TestObject::callWithExecutionContextAndScriptStateAnyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "checkSecurityForNodeReadonlyDocumentAttribute", V8TestObject::checkSecurityForNodeReadonlyDocumentAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "customObjectAttribute", V8TestObject::customObjectAttributeAttributeGetterCallback, V8TestObject::customObjectAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "customGetterLongAttribute", V8TestObject::customGetterLongAttributeAttributeGetterCallback, V8TestObject::customGetterLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "customGetterReadonlyObjectAttribute", V8TestObject::customGetterReadonlyObjectAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "customSetterLongAttribute", V8TestObject::customSetterLongAttributeAttributeGetterCallback, V8TestObject::customSetterLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "deprecatedLongAttribute", V8TestObject::deprecatedLongAttributeAttributeGetterCallback, V8TestObject::deprecatedLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "enforceRangeLongAttribute", V8TestObject::enforceRangeLongAttributeAttributeGetterCallback, V8TestObject::enforceRangeLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "implementedAsLongAttribute", V8TestObject::implementedAsLongAttributeAttributeGetterCallback, V8TestObject::implementedAsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "customImplementedAsLongAttribute", V8TestObject::customImplementedAsLongAttributeAttributeGetterCallback, V8TestObject::customImplementedAsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "customGetterImplementedAsLongAttribute", V8TestObject::customGetterImplementedAsLongAttributeAttributeGetterCallback, V8TestObject::customGetterImplementedAsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "customSetterImplementedAsLongAttribute", V8TestObject::customSetterImplementedAsLongAttributeAttributeGetterCallback, V8TestObject::customSetterImplementedAsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "measureAsLongAttribute", V8TestObject::measureAsLongAttributeAttributeGetterCallback, V8TestObject::measureAsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "notEnumerableLongAttribute", V8TestObject::notEnumerableLongAttributeAttributeGetterCallback, V8TestObject::notEnumerableLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestObject::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallbackForMainWorld, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kMainWorld }, + { "perWorldBindingsReadonlyTestInterfaceEmptyAttribute", V8TestObject::perWorldBindingsReadonlyTestInterfaceEmptyAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kNonMainWorlds }, + { "activityLoggingAccessPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kMainWorld }, + { "activityLoggingAccessPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingAccessPerWorldBindingsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kNonMainWorlds }, + { "activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kMainWorld }, + { "activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kNonMainWorlds }, + { "activityLoggingGetterPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kMainWorld }, + { "activityLoggingGetterPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingGetterPerWorldBindingsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kNonMainWorlds }, + { "activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallbackForMainWorld, V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallbackForMainWorld, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kMainWorld }, + { "activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttribute", V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeGetterCallback, V8TestObject::activityLoggingGetterForIsolatedWorldsPerWorldBindingsLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kNonMainWorlds }, + { "location", V8TestObject::locationAttributeGetterCallback, V8TestObject::locationAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "locationWithException", V8TestObject::locationWithExceptionAttributeGetterCallback, V8TestObject::locationWithExceptionAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "locationWithCallWith", V8TestObject::locationWithCallWithAttributeGetterCallback, V8TestObject::locationWithCallWithAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "locationByteString", V8TestObject::locationByteStringAttributeGetterCallback, V8TestObject::locationByteStringAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "locationWithPerWorldBindings", V8TestObject::locationWithPerWorldBindingsAttributeGetterCallbackForMainWorld, V8TestObject::locationWithPerWorldBindingsAttributeSetterCallbackForMainWorld, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kMainWorld }, + { "locationWithPerWorldBindings", V8TestObject::locationWithPerWorldBindingsAttributeGetterCallback, V8TestObject::locationWithPerWorldBindingsAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kNonMainWorlds }, + { "locationLegacyInterfaceTypeChecking", V8TestObject::locationLegacyInterfaceTypeCheckingAttributeGetterCallback, V8TestObject::locationLegacyInterfaceTypeCheckingAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "raisesExceptionLongAttribute", V8TestObject::raisesExceptionLongAttributeAttributeGetterCallback, V8TestObject::raisesExceptionLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "raisesExceptionGetterLongAttribute", V8TestObject::raisesExceptionGetterLongAttributeAttributeGetterCallback, V8TestObject::raisesExceptionGetterLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "setterRaisesExceptionLongAttribute", V8TestObject::setterRaisesExceptionLongAttributeAttributeGetterCallback, V8TestObject::setterRaisesExceptionLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "raisesExceptionTestInterfaceEmptyAttribute", V8TestObject::raisesExceptionTestInterfaceEmptyAttributeAttributeGetterCallback, V8TestObject::raisesExceptionTestInterfaceEmptyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "cachedAttributeRaisesExceptionGetterAnyAttribute", V8TestObject::cachedAttributeRaisesExceptionGetterAnyAttributeAttributeGetterCallback, V8TestObject::cachedAttributeRaisesExceptionGetterAnyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "reflectTestInterfaceAttribute", V8TestObject::reflectTestInterfaceAttributeAttributeGetterCallback, V8TestObject::reflectTestInterfaceAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "reflectReflectedNameAttributeTestAttribute", V8TestObject::reflectReflectedNameAttributeTestAttributeAttributeGetterCallback, V8TestObject::reflectReflectedNameAttributeTestAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "reflectBooleanAttribute", V8TestObject::reflectBooleanAttributeAttributeGetterCallback, V8TestObject::reflectBooleanAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "reflectLongAttribute", V8TestObject::reflectLongAttributeAttributeGetterCallback, V8TestObject::reflectLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "reflectUnsignedShortAttribute", V8TestObject::reflectUnsignedShortAttributeAttributeGetterCallback, V8TestObject::reflectUnsignedShortAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "reflectUnsignedLongAttribute", V8TestObject::reflectUnsignedLongAttributeAttributeGetterCallback, V8TestObject::reflectUnsignedLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "id", V8TestObject::idAttributeGetterCallback, V8TestObject::idAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "name", V8TestObject::nameAttributeGetterCallback, V8TestObject::nameAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "class", V8TestObject::classAttributeGetterCallback, V8TestObject::classAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "reflectedId", V8TestObject::reflectedIdAttributeGetterCallback, V8TestObject::reflectedIdAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "reflectedName", V8TestObject::reflectedNameAttributeGetterCallback, V8TestObject::reflectedNameAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "reflectedClass", V8TestObject::reflectedClassAttributeGetterCallback, V8TestObject::reflectedClassAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "limitedToOnlyOneAttribute", V8TestObject::limitedToOnlyOneAttributeAttributeGetterCallback, V8TestObject::limitedToOnlyOneAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "limitedToOnlyAttribute", V8TestObject::limitedToOnlyAttributeAttributeGetterCallback, V8TestObject::limitedToOnlyAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "limitedToOnlyOtherAttribute", V8TestObject::limitedToOnlyOtherAttributeAttributeGetterCallback, V8TestObject::limitedToOnlyOtherAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "limitedWithMissingDefaultAttribute", V8TestObject::limitedWithMissingDefaultAttributeAttributeGetterCallback, V8TestObject::limitedWithMissingDefaultAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "limitedWithInvalidMissingDefaultAttribute", V8TestObject::limitedWithInvalidMissingDefaultAttributeAttributeGetterCallback, V8TestObject::limitedWithInvalidMissingDefaultAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "corsSettingAttribute", V8TestObject::corsSettingAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "limitedWithEmptyMissingInvalidAttribute", V8TestObject::limitedWithEmptyMissingInvalidAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "RuntimeCallStatsCounterAttribute", V8TestObject::RuntimeCallStatsCounterAttributeAttributeGetterCallback, V8TestObject::RuntimeCallStatsCounterAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "RuntimeCallStatsCounterReadOnlyAttribute", V8TestObject::RuntimeCallStatsCounterReadOnlyAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "replaceableReadonlyLongAttribute", V8TestObject::replaceableReadonlyLongAttributeAttributeGetterCallback, V8TestObject::replaceableReadonlyLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "locationPutForwards", V8TestObject::locationPutForwardsAttributeGetterCallback, V8TestObject::locationPutForwardsAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "setterCallWithCurrentWindowAndEnteredWindowStringAttribute", V8TestObject::setterCallWithCurrentWindowAndEnteredWindowStringAttributeAttributeGetterCallback, V8TestObject::setterCallWithCurrentWindowAndEnteredWindowStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "setterCallWithExecutionContextStringAttribute", V8TestObject::setterCallWithExecutionContextStringAttributeAttributeGetterCallback, V8TestObject::setterCallWithExecutionContextStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "treatNullAsEmptyStringStringAttribute", V8TestObject::treatNullAsEmptyStringStringAttributeAttributeGetterCallback, V8TestObject::treatNullAsEmptyStringStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "treatNullAsNullStringStringAttribute", V8TestObject::treatNullAsNullStringStringAttributeAttributeGetterCallback, V8TestObject::treatNullAsNullStringStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "legacyInterfaceTypeCheckingFloatAttribute", V8TestObject::legacyInterfaceTypeCheckingFloatAttributeAttributeGetterCallback, V8TestObject::legacyInterfaceTypeCheckingFloatAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "legacyInterfaceTypeCheckingTestInterfaceAttribute", V8TestObject::legacyInterfaceTypeCheckingTestInterfaceAttributeAttributeGetterCallback, V8TestObject::legacyInterfaceTypeCheckingTestInterfaceAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "legacyInterfaceTypeCheckingTestInterfaceOrNullAttribute", V8TestObject::legacyInterfaceTypeCheckingTestInterfaceOrNullAttributeAttributeGetterCallback, V8TestObject::legacyInterfaceTypeCheckingTestInterfaceOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "urlStringAttribute", V8TestObject::urlStringAttributeAttributeGetterCallback, V8TestObject::urlStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "urlStringAttribute", V8TestObject::urlStringAttributeAttributeGetterCallback, V8TestObject::urlStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "unforgeableLongAttribute", V8TestObject::unforgeableLongAttributeAttributeGetterCallback, V8TestObject::unforgeableLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "measuredLongAttribute", V8TestObject::measuredLongAttributeAttributeGetterCallback, V8TestObject::measuredLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "sameObjectAttribute", V8TestObject::sameObjectAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "saveSameObjectAttribute", V8TestObject::saveSameObjectAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "staticSaveSameObjectAttribute", V8TestObject::staticSaveSameObjectAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "unscopableLongAttribute", V8TestObject::unscopableLongAttributeAttributeGetterCallback, V8TestObject::unscopableLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceAttribute", V8TestObject::testInterfaceAttributeAttributeGetterCallback, V8TestObject::testInterfaceAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "size", V8TestObject::sizeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontEnum | v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestObjectMethods[] = { @@ -13352,7 +13274,6 @@ {"perWorldBindingsVoidMethod", V8TestObject::perWorldBindingsVoidMethodMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kNonMainWorlds}, {"perWorldBindingsVoidMethodTestInterfaceEmptyArg", V8TestObject::perWorldBindingsVoidMethodTestInterfaceEmptyArgMethodCallbackForMainWorld, 1, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kMainWorld}, {"perWorldBindingsVoidMethodTestInterfaceEmptyArg", V8TestObject::perWorldBindingsVoidMethodTestInterfaceEmptyArgMethodCallback, 1, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kNonMainWorlds}, - {"postMessage", V8TestObject::postMessageMethodCallback, 1, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds}, {"activityLoggingForAllWorldsPerWorldBindingsVoidMethod", V8TestObject::activityLoggingForAllWorldsPerWorldBindingsVoidMethodMethodCallbackForMainWorld, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kMainWorld}, {"activityLoggingForAllWorldsPerWorldBindingsVoidMethod", V8TestObject::activityLoggingForAllWorldsPerWorldBindingsVoidMethodMethodCallback, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kNonMainWorlds}, {"activityLoggingForIsolatedWorldsPerWorldBindingsVoidMethod", V8TestObject::activityLoggingForIsolatedWorldsPerWorldBindingsVoidMethodMethodCallbackForMainWorld, 0, v8::None, V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kDoNotCheckAccess, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kMainWorld}, @@ -13403,9 +13324,6 @@ V8DOMConfiguration::InstallAttributes( isolate, world, instanceTemplate, prototypeTemplate, V8TestObjectAttributes, base::size(V8TestObjectAttributes)); - V8DOMConfiguration::InstallLazyDataAttributes( - isolate, world, instanceTemplate, prototypeTemplate, - V8TestObjectLazyDataAttributes, base::size(V8TestObjectLazyDataAttributes)); V8DOMConfiguration::InstallAccessors( isolate, world, instanceTemplate, prototypeTemplate, interfaceTemplate, signature, V8TestObjectAccessors, base::size(V8TestObjectAccessors)); @@ -13469,8 +13387,8 @@ if (RuntimeEnabledFeatures::FeatureNameEnabled()) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "runtimeEnabledLongAttribute", V8TestObject::runtimeEnabledLongAttributeAttributeGetterCallback, V8TestObject::runtimeEnabledLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "unscopableRuntimeEnabledLongAttribute", V8TestObject::unscopableRuntimeEnabledLongAttributeAttributeGetterCallback, V8TestObject::unscopableRuntimeEnabledLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "runtimeEnabledLongAttribute", V8TestObject::runtimeEnabledLongAttributeAttributeGetterCallback, V8TestObject::runtimeEnabledLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "unscopableRuntimeEnabledLongAttribute", V8TestObject::unscopableRuntimeEnabledLongAttributeAttributeGetterCallback, V8TestObject::unscopableRuntimeEnabledLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instance_template, prototype_template, interface_template, @@ -13522,12 +13440,12 @@ v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate); ALLOW_UNUSED_LOCAL(signature); static const V8DOMConfiguration::AccessorConfiguration accessororiginTrialEnabledLongAttributeConfiguration[] = { - { "originTrialEnabledLongAttribute", V8TestObject::originTrialEnabledLongAttributeAttributeGetterCallback, V8TestObject::originTrialEnabledLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds } + { "originTrialEnabledLongAttribute", V8TestObject::originTrialEnabledLongAttributeAttributeGetterCallback, V8TestObject::originTrialEnabledLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds } }; for (const auto& accessorConfig : accessororiginTrialEnabledLongAttributeConfiguration) V8DOMConfiguration::InstallAccessor(isolate, world, instance, prototype, interface, signature, accessorConfig); static const V8DOMConfiguration::AccessorConfiguration accessorunscopableOriginTrialEnabledLongAttributeConfiguration[] = { - { "unscopableOriginTrialEnabledLongAttribute", V8TestObject::unscopableOriginTrialEnabledLongAttributeAttributeGetterCallback, V8TestObject::unscopableOriginTrialEnabledLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds } + { "unscopableOriginTrialEnabledLongAttribute", V8TestObject::unscopableOriginTrialEnabledLongAttributeAttributeGetterCallback, V8TestObject::unscopableOriginTrialEnabledLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds } }; for (const auto& accessorConfig : accessorunscopableOriginTrialEnabledLongAttributeConfiguration) V8DOMConfiguration::InstallAccessor(isolate, world, instance, prototype, interface, signature, accessorConfig);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.h b/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.h index 0aa33a6..0b1cbf9 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.h +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.h
@@ -572,7 +572,6 @@ CORE_EXPORT static void perWorldBindingsVoidMethodMethodCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void perWorldBindingsVoidMethodTestInterfaceEmptyArgMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void perWorldBindingsVoidMethodTestInterfaceEmptyArgMethodCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>&); - CORE_EXPORT static void postMessageMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void activityLoggingForAllWorldsPerWorldBindingsVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void activityLoggingForAllWorldsPerWorldBindingsVoidMethodMethodCallbackForMainWorld(const v8::FunctionCallbackInfo<v8::Value>&); CORE_EXPORT static void activityLoggingForIsolatedWorldsPerWorldBindingsVoidMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>&);
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_typedefs.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_typedefs.cc index 0f2df66d..c45a4c6bb 100644 --- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_typedefs.cc +++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_typedefs.cc
@@ -527,17 +527,17 @@ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wglobal-constructors" #endif -static const V8DOMConfiguration::AttributeConfiguration V8TestTypedefsLazyDataAttributes[] = { - { "tAttribute", V8TestTypedefs::tAttributeConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, +static const V8DOMConfiguration::AttributeConfiguration V8TestTypedefsAttributes[] = { + { "tAttribute", V8TestTypedefs::tAttributeConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kReplaceWithDataProperty, V8DOMConfiguration::kAllWorlds }, }; #if defined(COMPONENT_BUILD) && defined(WIN32) && defined(__clang__) #pragma clang diagnostic pop #endif static const V8DOMConfiguration::AccessorConfiguration V8TestTypedefsAccessors[] = { - { "uLongLongAttribute", V8TestTypedefs::uLongLongAttributeAttributeGetterCallback, V8TestTypedefs::uLongLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "longWithClampAttribute", V8TestTypedefs::longWithClampAttributeAttributeGetterCallback, V8TestTypedefs::longWithClampAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "domStringOrDoubleOrNullAttribute", V8TestTypedefs::domStringOrDoubleOrNullAttributeAttributeGetterCallback, V8TestTypedefs::domStringOrDoubleOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "uLongLongAttribute", V8TestTypedefs::uLongLongAttributeAttributeGetterCallback, V8TestTypedefs::uLongLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "longWithClampAttribute", V8TestTypedefs::longWithClampAttributeAttributeGetterCallback, V8TestTypedefs::longWithClampAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "domStringOrDoubleOrNullAttribute", V8TestTypedefs::domStringOrDoubleOrNullAttributeAttributeGetterCallback, V8TestTypedefs::domStringOrDoubleOrNullAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestTypedefsMethods[] = { @@ -589,9 +589,9 @@ ALLOW_UNUSED_LOCAL(prototypeTemplate); // Register IDL constants, attributes and operations. - V8DOMConfiguration::InstallLazyDataAttributes( + V8DOMConfiguration::InstallAttributes( isolate, world, instanceTemplate, prototypeTemplate, - V8TestTypedefsLazyDataAttributes, base::size(V8TestTypedefsLazyDataAttributes)); + V8TestTypedefsAttributes, base::size(V8TestTypedefsAttributes)); V8DOMConfiguration::InstallAccessors( isolate, world, instanceTemplate, prototypeTemplate, interfaceTemplate, signature, V8TestTypedefsAccessors, base::size(V8TestTypedefsAccessors));
diff --git a/third_party/blink/renderer/bindings/tests/results/modules/v8_test_inherited_legacy_unenumerable_named_properties.cc b/third_party/blink/renderer/bindings/tests/results/modules/v8_test_inherited_legacy_unenumerable_named_properties.cc index 006a43e..0ce7006c 100644 --- a/third_party/blink/renderer/bindings/tests/results/modules/v8_test_inherited_legacy_unenumerable_named_properties.cc +++ b/third_party/blink/renderer/bindings/tests/results/modules/v8_test_inherited_legacy_unenumerable_named_properties.cc
@@ -184,7 +184,7 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestInheritedLegacyUnenumerableNamedPropertiesAccessors[] = { - { "longAttribute", V8TestInheritedLegacyUnenumerableNamedProperties::longAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "longAttribute", V8TestInheritedLegacyUnenumerableNamedProperties::longAttributeAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static void installV8TestInheritedLegacyUnenumerableNamedPropertiesTemplate(
diff --git a/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_5.cc b/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_5.cc index 30a7bb56..a11e985 100644 --- a/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_5.cc +++ b/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_5.cc
@@ -913,22 +913,22 @@ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wglobal-constructors" #endif -static const V8DOMConfiguration::AttributeConfiguration V8TestInterface5LazyDataAttributes[] = { - { "testInterfaceConstructorAttribute", V8TestInterface5::testInterfaceConstructorAttributeConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, +static const V8DOMConfiguration::AttributeConfiguration V8TestInterface5Attributes[] = { + { "testInterfaceConstructorAttribute", V8TestInterface5::testInterfaceConstructorAttributeConstructorGetterCallback, nullptr, static_cast<v8::PropertyAttribute>(v8::DontEnum), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kReplaceWithDataProperty, V8DOMConfiguration::kAllWorlds }, }; #if defined(COMPONENT_BUILD) && defined(WIN32) && defined(__clang__) #pragma clang diagnostic pop #endif static const V8DOMConfiguration::AccessorConfiguration V8TestInterface5Accessors[] = { - { "testInterfaceAttribute", V8TestInterface5::testInterfaceAttributeAttributeGetterCallback, V8TestInterface5::testInterfaceAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "doubleAttribute", V8TestInterface5::doubleAttributeAttributeGetterCallback, V8TestInterface5::doubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "floatAttribute", V8TestInterface5::floatAttributeAttributeGetterCallback, V8TestInterface5::floatAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "unrestrictedDoubleAttribute", V8TestInterface5::unrestrictedDoubleAttributeAttributeGetterCallback, V8TestInterface5::unrestrictedDoubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "unrestrictedFloatAttribute", V8TestInterface5::unrestrictedFloatAttributeAttributeGetterCallback, V8TestInterface5::unrestrictedFloatAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "staticStringAttribute", V8TestInterface5::staticStringAttributeAttributeGetterCallback, V8TestInterface5::staticStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "length", V8TestInterface5::lengthAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "alwaysExposedAttribute", V8TestInterface5::alwaysExposedAttributeAttributeGetterCallback, V8TestInterface5::alwaysExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "testInterfaceAttribute", V8TestInterface5::testInterfaceAttributeAttributeGetterCallback, V8TestInterface5::testInterfaceAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "doubleAttribute", V8TestInterface5::doubleAttributeAttributeGetterCallback, V8TestInterface5::doubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "floatAttribute", V8TestInterface5::floatAttributeAttributeGetterCallback, V8TestInterface5::floatAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "unrestrictedDoubleAttribute", V8TestInterface5::unrestrictedDoubleAttributeAttributeGetterCallback, V8TestInterface5::unrestrictedDoubleAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "unrestrictedFloatAttribute", V8TestInterface5::unrestrictedFloatAttributeAttributeGetterCallback, V8TestInterface5::unrestrictedFloatAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "staticStringAttribute", V8TestInterface5::staticStringAttributeAttributeGetterCallback, V8TestInterface5::staticStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "length", V8TestInterface5::lengthAttributeGetterCallback, nullptr, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::ReadOnly), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "alwaysExposedAttribute", V8TestInterface5::alwaysExposedAttributeAttributeGetterCallback, V8TestInterface5::alwaysExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static const V8DOMConfiguration::MethodConfiguration V8TestInterface5Methods[] = { @@ -972,9 +972,9 @@ V8DOMConfiguration::InstallConstants( isolate, interfaceTemplate, prototypeTemplate, V8TestInterface5Constants, base::size(V8TestInterface5Constants)); - V8DOMConfiguration::InstallLazyDataAttributes( + V8DOMConfiguration::InstallAttributes( isolate, world, instanceTemplate, prototypeTemplate, - V8TestInterface5LazyDataAttributes, base::size(V8TestInterface5LazyDataAttributes)); + V8TestInterface5Attributes, base::size(V8TestInterface5Attributes)); V8DOMConfiguration::InstallAccessors( isolate, world, instanceTemplate, prototypeTemplate, interfaceTemplate, signature, V8TestInterface5Accessors, base::size(V8TestInterface5Accessors)); @@ -1079,7 +1079,7 @@ if (!prototypeObject.IsEmpty() || !interfaceObject.IsEmpty()) { if (executionContext && (executionContext->IsDocument())) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "windowExposedAttribute", V8TestInterface5::windowExposedAttributeAttributeGetterCallback, V8TestInterface5::windowExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "windowExposedAttribute", V8TestInterface5::windowExposedAttributeAttributeGetterCallback, V8TestInterface5::windowExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject, @@ -1088,7 +1088,7 @@ } if (executionContext && (executionContext->IsWorkerGlobalScope())) { static const V8DOMConfiguration::AccessorConfiguration accessor_configurations[] = { - { "workerExposedAttribute", V8TestInterface5::workerExposedAttributeAttributeGetterCallback, V8TestInterface5::workerExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "workerExposedAttribute", V8TestInterface5::workerExposedAttributeAttributeGetterCallback, V8TestInterface5::workerExposedAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; V8DOMConfiguration::InstallAccessors( isolate, world, instanceObject, prototypeObject, interfaceObject,
diff --git a/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_partial.cc b/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_partial.cc index 4e96d6d..239a538e 100644 --- a/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_partial.cc +++ b/third_party/blink/renderer/bindings/tests/results/modules/v8_test_interface_partial.cc
@@ -506,14 +506,14 @@ bool isSecureContext = (executionContext && executionContext->IsSecureContext()); if (isSecureContext) { static const V8DOMConfiguration::AccessorConfiguration accessorpartial4LongAttributeConfiguration[] = { - { "partial4LongAttribute", V8TestInterfacePartial::partial4LongAttributeAttributeGetterCallback, V8TestInterfacePartial::partial4LongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds } + { "partial4LongAttribute", V8TestInterfacePartial::partial4LongAttributeAttributeGetterCallback, V8TestInterfacePartial::partial4LongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnPrototype, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds } }; for (const auto& accessorConfig : accessorpartial4LongAttributeConfiguration) V8DOMConfiguration::InstallAccessor(isolate, world, instance, prototype, interface, signature, accessorConfig); } if (isSecureContext) { static const V8DOMConfiguration::AccessorConfiguration accessorpartial4StaticLongAttributeConfiguration[] = { - { "partial4StaticLongAttribute", V8TestInterfacePartial::partial4StaticLongAttributeAttributeGetterCallback, V8TestInterfacePartial::partial4StaticLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds } + { "partial4StaticLongAttribute", V8TestInterfacePartial::partial4StaticLongAttributeAttributeGetterCallback, V8TestInterfacePartial::partial4StaticLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::kOnInterface, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds } }; for (const auto& accessorConfig : accessorpartial4StaticLongAttributeConfiguration) V8DOMConfiguration::InstallAccessor(isolate, world, instance, prototype, interface, signature, accessorConfig);
diff --git a/third_party/blink/renderer/bindings/tests/results/modules/v8_test_sub_object.cc b/third_party/blink/renderer/bindings/tests/results/modules/v8_test_sub_object.cc index 6e700b8..95e53da 100644 --- a/third_party/blink/renderer/bindings/tests/results/modules/v8_test_sub_object.cc +++ b/third_party/blink/renderer/bindings/tests/results/modules/v8_test_sub_object.cc
@@ -146,8 +146,8 @@ } static const V8DOMConfiguration::AccessorConfiguration V8TestSubObjectAccessors[] = { - { "unforgeableStringAttribute", V8TestSubObject::unforgeableStringAttributeAttributeGetterCallback, V8TestSubObject::unforgeableStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, - { "unforgeableLongAttribute", V8TestSubObject::unforgeableLongAttributeAttributeGetterCallback, V8TestSubObject::unforgeableLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAllWorlds }, + { "unforgeableStringAttribute", V8TestSubObject::unforgeableStringAttributeAttributeGetterCallback, V8TestSubObject::unforgeableStringAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, + { "unforgeableLongAttribute", V8TestSubObject::unforgeableLongAttributeAttributeGetterCallback, V8TestSubObject::unforgeableLongAttributeAttributeSetterCallback, V8PrivateProperty::kNoCachedAccessor, static_cast<v8::PropertyAttribute>(v8::DontDelete), V8DOMConfiguration::kOnInstance, V8DOMConfiguration::kCheckHolder, V8DOMConfiguration::kHasSideEffect, V8DOMConfiguration::kAlwaysCallGetter, V8DOMConfiguration::kAllWorlds }, }; static void installV8TestSubObjectTemplate(
diff --git a/third_party/blink/renderer/core/css/font_face_cache_test.cc b/third_party/blink/renderer/core/css/font_face_cache_test.cc index ce44d55..b80e262 100644 --- a/third_party/blink/renderer/core/css/font_face_cache_test.cc +++ b/third_party/blink/renderer/core/css/font_face_cache_test.cc
@@ -223,7 +223,7 @@ } // Flaky; https://crbug.com/871812 -TEST_F(FontFaceCacheTest, FLAKY_MatchCombinations) { +TEST_F(FontFaceCacheTest, DISABLED_MatchCombinations) { CSSValue* widths[] = {CSSIdentifierValue::Create(CSSValueCondensed), CSSIdentifierValue::Create(CSSValueExpanded)}; CSSValue* slopes[] = {CSSIdentifierValue::Create(CSSValueNormal),
diff --git a/third_party/blink/renderer/core/css/resolver/font_builder.cc b/third_party/blink/renderer/core/css/resolver/font_builder.cc index feb1b80..dac4217 100644 --- a/third_party/blink/renderer/core/css/resolver/font_builder.cc +++ b/third_party/blink/renderer/core/css/resolver/font_builder.cc
@@ -344,7 +344,7 @@ font_description, style.EffectiveZoom(), adjusted_size); adjusted_size = TextAutosizer::ComputeAutosizedFontSize( - adjusted_size, style.TextAutosizingMultiplier()); + adjusted_size, style.TextAutosizingMultiplier(), style.EffectiveZoom()); font_description.SetAdjustedSize(adjusted_size); } @@ -354,7 +354,7 @@ GetComputedSizeFromSpecifiedSize(font_description, style.EffectiveZoom(), font_description.SpecifiedSize()); computed_size = TextAutosizer::ComputeAutosizedFontSize( - computed_size, style.TextAutosizingMultiplier()); + computed_size, style.TextAutosizingMultiplier(), style.EffectiveZoom()); font_description.SetComputedSize(computed_size); }
diff --git a/third_party/blink/renderer/core/editing/caret_display_item_client_test.cc b/third_party/blink/renderer/core/editing/caret_display_item_client_test.cc index 19cc6e4..a94bb12 100644 --- a/third_party/blink/renderer/core/editing/caret_display_item_client_test.cc +++ b/third_party/blink/renderer/core/editing/caret_display_item_client_test.cc
@@ -4,6 +4,7 @@ #include "third_party/blink/renderer/core/editing/caret_display_item_client.h" +#include "testing/gmock/include/gmock/gmock-matchers.h" #include "testing/gmock/include/gmock/gmock.h" #include "third_party/blink/renderer/core/editing/frame_selection.h" #include "third_party/blink/renderer/core/editing/selection_template.h" @@ -16,6 +17,8 @@ namespace blink { +using PaintInvalidation = LocalFrameView::ObjectPaintInvalidation; +using ::testing::ElementsAre; using ::testing::UnorderedElementsAre; class CaretDisplayItemClientTest : public PaintAndRasterInvalidationTest { @@ -94,13 +97,9 @@ RasterInvalidationInfo{&GetCaretDisplayItemClient(), "Caret", EnclosingIntRect(caret_visual_rect), PaintInvalidationReason::kAppeared})); - - std::unique_ptr<JSONArray> object_invalidations = - GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); - ASSERT_EQ(1u, object_invalidations->size()); - String s; - JSONObject::Cast(object_invalidations->at(0))->Get("object")->AsString(&s); - EXPECT_EQ("Caret", s); + EXPECT_THAT( + *GetDocument().View()->TrackedObjectPaintInvalidations(), + ElementsAre(PaintInvalidation{"Caret", PaintInvalidationReason::kCaret})); GetDocument().View()->SetTracksPaintInvalidations(false); // Move the caret to the end of the text. Should invalidate both the old and @@ -125,12 +124,9 @@ RasterInvalidationInfo{&GetCaretDisplayItemClient(), "Caret", EnclosingIntRect(new_caret_visual_rect), PaintInvalidationReason::kCaret})); - - object_invalidations = - GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); - ASSERT_EQ(1u, object_invalidations->size()); - JSONObject::Cast(object_invalidations->at(0))->Get("object")->AsString(&s); - EXPECT_EQ("Caret", s); + EXPECT_THAT( + *GetDocument().View()->TrackedObjectPaintInvalidations(), + ElementsAre(PaintInvalidation{"Caret", PaintInvalidationReason::kCaret})); GetDocument().View()->SetTracksPaintInvalidations(false); // Remove selection. Should invalidate the old caret. @@ -146,12 +142,9 @@ &GetCaretDisplayItemClient(), "Caret", EnclosingIntRect(old_caret_visual_rect), PaintInvalidationReason::kDisappeared})); - - object_invalidations = - GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); - ASSERT_EQ(1u, object_invalidations->size()); - JSONObject::Cast(object_invalidations->at(0))->Get("object")->AsString(&s); - EXPECT_EQ("Caret", s); + EXPECT_THAT( + *GetDocument().View()->TrackedObjectPaintInvalidations(), + ElementsAre(PaintInvalidation{"Caret", PaintInvalidationReason::kCaret})); GetDocument().View()->SetTracksPaintInvalidations(false); } @@ -198,10 +191,10 @@ RasterInvalidationInfo{&GetCaretDisplayItemClient(), "Caret", EnclosingIntRect(caret_visual_rect2), PaintInvalidationReason::kCaret})); - - std::unique_ptr<JSONArray> object_invalidations = - GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); - ASSERT_EQ(2u, object_invalidations->size()); + EXPECT_THAT( + *GetDocument().View()->TrackedObjectPaintInvalidations(), + ElementsAre(PaintInvalidation{"Caret", PaintInvalidationReason::kCaret}, + PaintInvalidation{"Caret", PaintInvalidationReason::kCaret})); GetDocument().View()->SetTracksPaintInvalidations(false); // Move the caret back into block1. @@ -224,10 +217,10 @@ RasterInvalidationInfo{&GetCaretDisplayItemClient(), "Caret", EnclosingIntRect(caret_visual_rect2), PaintInvalidationReason::kCaret})); - - object_invalidations = - GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); - ASSERT_EQ(2u, object_invalidations->size()); + EXPECT_THAT( + *GetDocument().View()->TrackedObjectPaintInvalidations(), + ElementsAre(PaintInvalidation{"Caret", PaintInvalidationReason::kCaret}, + PaintInvalidation{"Caret", PaintInvalidationReason::kCaret})); GetDocument().View()->SetTracksPaintInvalidations(false); } @@ -331,13 +324,9 @@ RasterInvalidationInfo{&GetCaretDisplayItemClient(), "Caret", EnclosingIntRect(new_caret_visual_rect), PaintInvalidationReason::kCaret})); - - auto object_invalidations = - GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); - ASSERT_EQ(1u, object_invalidations->size()); - String s; - JSONObject::Cast(object_invalidations->at(0))->Get("object")->AsString(&s); - EXPECT_EQ("Caret", s); + EXPECT_THAT( + *GetDocument().View()->TrackedObjectPaintInvalidations(), + ElementsAre(PaintInvalidation{"Caret", PaintInvalidationReason::kCaret})); GetDocument().View()->SetTracksPaintInvalidations(false); }
diff --git a/third_party/blink/renderer/core/editing/frame_selection.cc b/third_party/blink/renderer/core/editing/frame_selection.cc index 76bed03..32c8ba8 100644 --- a/third_party/blink/renderer/core/editing/frame_selection.cc +++ b/third_party/blink/renderer/core/editing/frame_selection.cc
@@ -1096,6 +1096,13 @@ // for avoiding unnecessary canonicalization. VisiblePosition start = StartOfWord(position, word_side); VisiblePosition end = EndOfWord(position, word_side); + + // TODO(editing-dev): |StartOfWord()| and |EndOfWord()| should not make null + // for non-null parameter. + // See http://crbug.com/872443 + if (start.DeepEquivalent().IsNull() || end.DeepEquivalent().IsNull()) + continue; + String text = PlainText(EphemeralRange(start.DeepEquivalent(), end.DeepEquivalent())); if (!text.IsEmpty() && !IsSeparator(text.CharacterStartingAt(0))) {
diff --git a/third_party/blink/renderer/core/frame/dom_window.cc b/third_party/blink/renderer/core/frame/dom_window.cc index c9b8887..3c1da181 100644 --- a/third_party/blink/renderer/core/frame/dom_window.cc +++ b/third_party/blink/renderer/core/frame/dom_window.cc
@@ -6,6 +6,7 @@ #include <memory> +#include "third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h" #include "third_party/blink/renderer/bindings/core/v8/window_proxy_manager.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/events/message_event.h" @@ -135,22 +136,12 @@ v8::Isolate* isolate = window_proxy_manager_->GetIsolate(); Transferables transferables; - if (options.hasTransfer() && !options.transfer().IsEmpty()) { - if (!SerializedScriptValue::ExtractTransferables( - isolate, options.transfer(), transferables, exception_state)) { - return; - } - } - - SerializedScriptValue::SerializeOptions serialize_options; - serialize_options.transferables = &transferables; scoped_refptr<SerializedScriptValue> serialized_message = - SerializedScriptValue::Serialize(isolate, message.V8Value(), - serialize_options, exception_state); + PostMessageHelper::SerializeMessageByMove(isolate, message, options, + transferables, exception_state); if (exception_state.HadException()) return; - - serialized_message->UnregisterMemoryAllocatedWithCurrentScriptContext(); + DCHECK(serialized_message); DoPostMessage(std::move(serialized_message), transferables.message_ports, options, incumbent_window, exception_state); }
diff --git a/third_party/blink/renderer/core/frame/history.cc b/third_party/blink/renderer/core/frame/history.cc index 7ef06a4..1b4b8ae 100644 --- a/third_party/blink/renderer/core/frame/history.cc +++ b/third_party/blink/renderer/core/frame/history.cc
@@ -134,11 +134,21 @@ } HistoryScrollRestorationType History::ScrollRestorationInternal() const { - HistoryItem* history_item = - GetFrame() ? GetFrame()->Loader().GetDocumentLoader()->GetHistoryItem() - : nullptr; - return history_item ? history_item->ScrollRestorationType() - : kScrollRestorationAuto; + constexpr HistoryScrollRestorationType default_type = kScrollRestorationAuto; + + LocalFrame* frame = GetFrame(); + if (!frame) + return default_type; + + DocumentLoader* document_loader = frame->Loader().GetDocumentLoader(); + if (!document_loader) + return default_type; + + HistoryItem* history_item = document_loader->GetHistoryItem(); + if (!history_item) + return default_type; + + return history_item->ScrollRestorationType(); } // TODO(crbug.com/394296): This is not the long-term fix to IPC flooding that we @@ -148,28 +158,22 @@ if (!GetFrame()->GetSettings()->GetShouldThrottlePushState()) return false; - if (state_flood_guard.tokens > 0) { - state_flood_guard.tokens--; - return false; + const int kStateUpdateLimit = 50; + + if (state_flood_guard.count > kStateUpdateLimit) { + static constexpr auto kStateUpdateLimitResetInterval = + TimeDelta::FromSeconds(10); + const auto now = CurrentTimeTicks(); + if (now - state_flood_guard.last_updated > kStateUpdateLimitResetInterval) { + state_flood_guard.count = 0; + state_flood_guard.last_updated = now; + return false; + } + return true; } - const auto now = TimeTicks::Now(); - const TimeDelta elapsed = now - state_flood_guard.last_token_grant; - static constexpr base::TimeDelta kTimePerToken = - base::TimeDelta::FromMilliseconds(16); - static constexpr int kMaxTokens = 50; - // It is OK to truncate from int64_t to int here. - const int tokens_earned = std::min<int>(elapsed / kTimePerToken, kMaxTokens); - - if (tokens_earned > 0) { - state_flood_guard.tokens = tokens_earned - 1; // One consumed immediately. - state_flood_guard.last_token_grant = now; - return false; - } - - // Drop this event (though ideally it would be delivered once there are tokens - // again, unless obsoleted by a subsequent state object change). - return true; + state_flood_guard.count++; + return false; } bool History::stateChanged() const {
diff --git a/third_party/blink/renderer/core/frame/history.h b/third_party/blink/renderer/core/frame/history.h index 87b47d71..95e5a638 100644 --- a/third_party/blink/renderer/core/frame/history.h +++ b/third_party/blink/renderer/core/frame/history.h
@@ -107,8 +107,8 @@ scoped_refptr<SerializedScriptValue> last_state_object_requested_; struct { - int tokens = 0; - TimeTicks last_token_grant; + int count; + TimeTicks last_updated; } state_flood_guard; };
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc index 69c10f7..f42e6fde 100644 --- a/third_party/blink/renderer/core/frame/local_frame.cc +++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -844,18 +844,6 @@ static_cast<LayerTreeFlags>(flags)); } } - - if (flags & kLayerTreeIncludesPaintInvalidations) { - std::unique_ptr<JSONArray> object_paint_invalidations = - view_->TrackedObjectPaintInvalidationsAsJSON(); - if (!layers) - layers = JSONObject::Create(); - if (object_paint_invalidations && object_paint_invalidations->size()) { - layers->SetArray("objectPaintInvalidations", - std::move(object_paint_invalidations)); - } - } - return layers ? layers->ToPrettyJSONString() : String(); }
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 84badf40..905491f 100644 --- a/third_party/blink/renderer/core/frame/local_frame_view.cc +++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -129,7 +129,6 @@ #include "third_party/blink/renderer/platform/histogram.h" #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h" #include "third_party/blink/renderer/platform/instrumentation/tracing/traced_value.h" -#include "third_party/blink/renderer/platform/json/json_values.h" #include "third_party/blink/renderer/platform/language.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" @@ -3406,32 +3405,6 @@ tracked_object_paint_invalidations_->push_back(invalidation); } -std::unique_ptr<JSONArray> -LocalFrameView::TrackedObjectPaintInvalidationsAsJSON() const { - if (!tracked_object_paint_invalidations_) - return nullptr; - - std::unique_ptr<JSONArray> result = JSONArray::Create(); - for (Frame* frame = &frame_->Tree().Top(); frame; - frame = frame->Tree().TraverseNext()) { - if (!frame->IsLocalFrame()) - continue; - if (auto* layout_view = ToLocalFrame(frame)->ContentLayoutObject()) { - if (!layout_view->GetFrameView()->tracked_object_paint_invalidations_) - continue; - for (const auto& item : - *layout_view->GetFrameView()->tracked_object_paint_invalidations_) { - std::unique_ptr<JSONObject> item_json = JSONObject::Create(); - item_json->SetString("object", item.name); - item_json->SetString("reason", - PaintInvalidationReasonToString(item.reason)); - result->PushObject(std::move(item_json)); - } - } - } - return result; -} - void LocalFrameView::AddResizerArea(LayoutBox& resizer_box) { if (!resizer_areas_) resizer_areas_ = std::make_unique<ResizerAreaSet>();
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.h b/third_party/blink/renderer/core/frame/local_frame_view.h index d753520..b8103714 100644 --- a/third_party/blink/renderer/core/frame/local_frame_view.h +++ b/third_party/blink/renderer/core/frame/local_frame_view.h
@@ -56,7 +56,6 @@ class FloatSize; class FrameViewAutoSizeInfo; class IntRect; -class JSONArray; class JSONObject; class LayoutEmbeddedContent; class LocalFrame; @@ -390,7 +389,13 @@ } void TrackObjectPaintInvalidation(const DisplayItemClient&, PaintInvalidationReason); - std::unique_ptr<JSONArray> TrackedObjectPaintInvalidationsAsJSON() const; + struct ObjectPaintInvalidation { + String name; + PaintInvalidationReason reason; + }; + Vector<ObjectPaintInvalidation>* TrackedObjectPaintInvalidations() const { + return tracked_object_paint_invalidations_.get(); + } using ScrollableAreaSet = HeapHashSet<Member<PaintLayerScrollableArea>>; void AddScrollableArea(PaintLayerScrollableArea*); @@ -932,10 +937,6 @@ mutable std::unique_ptr<ScrollingCoordinatorContext> scrolling_context_; // For testing. - struct ObjectPaintInvalidation { - String name; - PaintInvalidationReason reason; - }; std::unique_ptr<Vector<ObjectPaintInvalidation>> tracked_object_paint_invalidations_; @@ -983,6 +984,20 @@ SetIsVisuallyNonEmpty(); } +inline bool operator==(const LocalFrameView::ObjectPaintInvalidation& a, + const LocalFrameView::ObjectPaintInvalidation& b) { + return a.name == b.name && a.reason == b.reason; +} +inline bool operator!=(const LocalFrameView::ObjectPaintInvalidation& a, + const LocalFrameView::ObjectPaintInvalidation& b) { + return !(a == b); +} +inline std::ostream& operator<<( + std::ostream& os, + const LocalFrameView::ObjectPaintInvalidation& info) { + return os << info.name << " reason=" << info.reason; +} + DEFINE_TYPE_CASTS(LocalFrameView, EmbeddedContentView, embedded_content_view,
diff --git a/third_party/blink/renderer/core/input/pointer_event_manager.cc b/third_party/blink/renderer/core/input/pointer_event_manager.cc index 6986dedf..8283468 100644 --- a/third_party/blink/renderer/core/input/pointer_event_manager.cc +++ b/third_party/blink/renderer/core/input/pointer_event_manager.cc
@@ -150,18 +150,6 @@ const int pointer_id = pointer_event->pointerId(); const AtomicString& event_type = pointer_event->type(); - if ((event_type == EventTypeNames::pointerout || - event_type == EventTypeNames::pointerover) && - node_under_pointer_.Contains(pointer_id)) { - EventTarget* target_under_pointer = - node_under_pointer_.at(pointer_id).target; - if (target_under_pointer == target) { - node_under_pointer_.Set( - pointer_id, - EventTargetAttributes(target_under_pointer, - event_type == EventTypeNames::pointerover)); - } - } if (!frame_ || !HasPointerEventListener(frame_->GetEventHandlerRegistry())) return WebInputEventResult::kNotHandled; @@ -240,12 +228,12 @@ } else if (target != node_under_pointer_.at(pointer_event->pointerId()).target) { node_under_pointer_.Set(pointer_event->pointerId(), - EventTargetAttributes(target, false)); + EventTargetAttributes(target)); } SendBoundaryEvents(node.target, target, pointer_event); } else if (target) { node_under_pointer_.insert(pointer_event->pointerId(), - EventTargetAttributes(target, false)); + EventTargetAttributes(target)); SendBoundaryEvents(nullptr, target, pointer_event); } }
diff --git a/third_party/blink/renderer/core/input/pointer_event_manager.h b/third_party/blink/renderer/core/input/pointer_event_manager.h index 7bf0088b4..a079904 100644 --- a/third_party/blink/renderer/core/input/pointer_event_manager.h +++ b/third_party/blink/renderer/core/input/pointer_event_manager.h
@@ -109,10 +109,9 @@ public: void Trace(blink::Visitor* visitor) { visitor->Trace(target); } Member<EventTarget> target; - bool has_recieved_over_event; - EventTargetAttributes() : target(nullptr), has_recieved_over_event(false) {} - EventTargetAttributes(EventTarget* target, bool has_recieved_over_event) - : target(target), has_recieved_over_event(has_recieved_over_event) {} + EventTargetAttributes() : target(nullptr) {} + EventTargetAttributes(EventTarget* target) + : target(target) {} }; class PointerEventBoundaryEventDispatcher : public BoundaryEventDispatcher {
diff --git a/third_party/blink/renderer/core/inspector/thread_debugger.cc b/third_party/blink/renderer/core/inspector/thread_debugger.cc index 20bab9dc..c44a833 100644 --- a/third_party/blink/renderer/core/inspector/thread_debugger.cc +++ b/third_party/blink/renderer/core/inspector/thread_debugger.cc
@@ -12,9 +12,9 @@ #include "third_party/blink/renderer/bindings/core/v8/v8_dom_exception.h" #include "third_party/blink/renderer/bindings/core/v8/v8_dom_token_list.h" #include "third_party/blink/renderer/bindings/core/v8/v8_event.h" -#include "third_party/blink/renderer/bindings/core/v8/v8_event_listener.h" #include "third_party/blink/renderer/bindings/core/v8/v8_event_listener_helper.h" #include "third_party/blink/renderer/bindings/core/v8/v8_event_listener_info.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_event_listener_or_event_handler.h" #include "third_party/blink/renderer/bindings/core/v8/v8_html_all_collection.h" #include "third_party/blink/renderer/bindings/core/v8/v8_html_collection.h" #include "third_party/blink/renderer/bindings/core/v8/v8_node.h"
diff --git a/third_party/blink/renderer/core/layout/layout_inline.cc b/third_party/blink/renderer/core/layout/layout_inline.cc index 85cf7b4..09e6e2c 100644 --- a/third_party/blink/renderer/core/layout/layout_inline.cc +++ b/third_party/blink/renderer/core/layout/layout_inline.cc
@@ -1177,7 +1177,10 @@ child_rect.offset += child.offset_to_container_box; result.Unite(child_rect); } - return result.ToLayoutRect(); + LayoutRect rect = result.ToLayoutRect(); + if (HasFlippedBlocksWritingMode()) + ContainingBlock()->FlipForWritingMode(rect); + return rect; } if (!AlwaysCreateLineBoxes())
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h index fb7fe55..087a72af 100644 --- a/third_party/blink/renderer/core/layout/layout_object.h +++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -726,9 +726,16 @@ virtual void SetNeedsTransformUpdate() {} virtual void SetNeedsBoundariesUpdate(); + // Per the spec, mix-blend-mode applies to all non-SVG elements, and SVG + // elements that are container elements, graphics elements or graphics + // referencing elements. + // https://www.w3.org/TR/compositing-1/#propdef-mix-blend-mode bool IsBlendingAllowed() const { - return !IsSVG() || (IsSVGContainer() && !IsSVGHiddenContainer()) || - IsSVGShape() || IsSVGImage() || IsSVGText(); + return !IsSVG() || IsSVGShape() || IsSVGImage() || IsSVGText() || + IsSVGInline() || IsSVGRoot() || IsSVGForeignObject() || + // TODO(pdr): According to the current spec, blending should apply to + // hidden containers (e.g. pattern). + (IsSVGContainer() && !IsSVGHiddenContainer()); } virtual bool HasNonIsolatedBlendingDescendants() const { // This is only implemented for layout objects that containt SVG flow.
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc index dde3252..6fb04b017 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc
@@ -223,12 +223,19 @@ // Create box fragments for parent if the current box has properties (e.g., // margin) that make it tricky to compute the parent's rects. if (box->ParentNeedsBoxFragment(parent_box)) - parent_box.SetNeedsBoxFragment(); + parent_box.SetNeedsBoxFragment(nullptr); } -void NGInlineBoxState::SetNeedsBoxFragment() { +void NGInlineBoxState::SetNeedsBoxFragment( + const LayoutObject* inline_container) { + // Note: inline_container can also be incorrectly passed as null. + // when being set for parent_box. This is ok, because inline_container + // is already set correctly inside inline_layout_algorithm. DCHECK(item); needs_box_fragment = true; + // Assign inline_container only if it has not been set. + if (!this->inline_container) + this->inline_container = inline_container; } bool NGInlineBoxState::ParentNeedsBoxFragment( @@ -281,6 +288,7 @@ BoxData{box->fragment_start, fragment_end, box->item, size}); BoxData& box_data = box_data_list_.back(); box_data.padding = box->padding; + box_data.inline_container = box->inline_container; if (box->has_start_edge) { box_data.has_line_left_edge = true; box_data.margin_line_left = box->margin_inline_start; @@ -525,7 +533,7 @@ // NGInlineLayoutAlgorithm can handle them later. DCHECK(!child.HasInFlowFragment()); } - box.MoveOutOfFlowDescendantCandidatesToDescendants(); + box.MoveOutOfFlowDescendantCandidatesToDescendants(inline_container); return box.ToInlineBoxFragment(); }
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h index dd9e4438..a155e88e 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h
@@ -15,6 +15,7 @@ namespace blink { +class LayoutObject; class NGInlineItem; struct NGInlineItemResult; class ShapeResult; @@ -36,6 +37,7 @@ unsigned fragment_start = 0; const NGInlineItem* item = nullptr; const ComputedStyle* style = nullptr; + const LayoutObject* inline_container = nullptr; // The united metrics for the current box. This includes all objects in this // box, including descendants, and adjusted by placement properties such as @@ -83,7 +85,7 @@ void AccumulateUsedFonts(const ShapeResult*, FontBaseline); // Create a box fragment for this box. - void SetNeedsBoxFragment(); + void SetNeedsBoxFragment(const LayoutObject* inline_container); // In certain circumstances, the parent's rects is not a simple union of its // children fragments' rects, e.g., when children have margin. In such cases, @@ -178,6 +180,7 @@ const NGInlineItem* item; NGLogicalSize size; + const LayoutObject* inline_container = nullptr; bool has_line_left_edge = false; bool has_line_right_edge = false; NGLineBoxStrut padding;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc index 089fb15..2f991ab 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
@@ -119,8 +119,10 @@ // https://drafts.csswg.org/css2/visudet.html#line-height if (!quirks_mode_ || !item.IsEmptyItem()) box->ComputeTextMetrics(*item.Style(), baseline_type_); - if (item.ShouldCreateBoxFragment()) - box->SetNeedsBoxFragment(); + if (item.ShouldCreateBoxFragment()) { + box->SetNeedsBoxFragment( + box_states_->ContainingLayoutObjectForAbsolutePositionObjects()); + } return box; } @@ -234,8 +236,10 @@ } else if (item.Type() == NGInlineItem::kOpenTag) { box = HandleOpenTag(item, item_result); } else if (item.Type() == NGInlineItem::kCloseTag) { - if (!box->needs_box_fragment && item_result.inline_size) - box->SetNeedsBoxFragment(); + if (!box->needs_box_fragment && item_result.inline_size) { + box->SetNeedsBoxFragment( + box_states_->ContainingLayoutObjectForAbsolutePositionObjects()); + } if (quirks_mode_ && box->needs_box_fragment) box->EnsureTextMetrics(*item.Style(), baseline_type_); box = box_states_->OnCloseTag(&line_box_, box, baseline_type_, @@ -798,7 +802,7 @@ container_builder_.SetExclusionSpace( exclusion_space ? std::move(exclusion_space) : std::move(initial_exclusion_space)); - container_builder_.MoveOutOfFlowDescendantCandidatesToDescendants(); + container_builder_.MoveOutOfFlowDescendantCandidatesToDescendants(nullptr); return container_builder_.ToLineBoxFragment(); }
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.cc b/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.cc index 6100ce6..84c3924b 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.cc +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.cc
@@ -149,6 +149,8 @@ container_builder.SetInlineSize(container_border_box_logical_width); container_builder.SetBlockSize(container_border_box_logical_height); + container_builder.SetBorders( + ComputeBorders(*constraint_space, *container_style)); container_builder.SetPadding( ComputePadding(*constraint_space, *container_style));
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc index 39d8d52..cb2b6c2 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
@@ -347,8 +347,12 @@ } scoped_refptr<NGLayoutResult> NGBlockLayoutAlgorithm::Layout() { + NGBoxStrut borders = ComputeBorders(ConstraintSpace(), Node()); + NGBoxStrut padding = ComputePadding(ConstraintSpace(), Node()); border_scrollbar_padding_ = - CalculateBorderScrollbarPadding(ConstraintSpace(), Node()); + ConstraintSpace().IsAnonymous() + ? NGBoxStrut() + : borders + padding + Node().GetScrollbarSizes(); NGLogicalSize border_box_size = CalculateBorderBoxSize( ConstraintSpace(), Node(), CalculateDefaultBlockSize()); @@ -630,7 +634,8 @@ container_builder_.SetEndMarginStrut(end_margin_strut); container_builder_.SetIntrinsicBlockSize(intrinsic_block_size_); - container_builder_.SetPadding(ComputePadding(ConstraintSpace(), Style())); + container_builder_.SetPadding(padding); + container_builder_.SetBorders(borders); // We only finalize for fragmentation if the fragment has a BFC block offset. // This may occur with a zero block size fragment. We need to know the BFC @@ -1877,7 +1882,7 @@ } space_builder.SetClearanceOffset(clearance_offset); if (child_data.force_clearance) - space_builder.SetShouldForceClearance(); + space_builder.SetShouldForceClearance(true); LayoutUnit space_available; if (ConstraintSpace().HasBlockFragmentation()) {
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc index a4d6837f..d120691 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
@@ -29,6 +29,7 @@ #include "third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.h" #include "third_party/blink/renderer/core/layout/shapes/shape_outside_info.h" #include "third_party/blink/renderer/core/paint/paint_layer.h" +#include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/text/writing_mode.h" @@ -241,8 +242,20 @@ box_->ComputePreferredLogicalWidths(); } + bool preferred_logical_widths_were_dirty = + box_->PreferredLogicalWidthsDirty(); layout_result = LayoutWithAlgorithm(*this, constraint_space, break_token, /* ignored */ nullptr); + if (!preferred_logical_widths_were_dirty && + box_->PreferredLogicalWidthsDirty()) { + // The only thing that should dirty preferred widths at this point is the + // addition of overflow:auto scrollbars in a descendant. To avoid a + // potential infinite loop, run layout again with auto scrollbars frozen in + // their current state. + PaintLayerScrollableArea::FreezeScrollbarsScope freeze_scrollbars; + layout_result = LayoutWithAlgorithm(*this, constraint_space, break_token, + /* ignored */ nullptr); + } if (block_flow) { block_flow->SetCachedLayoutResult(constraint_space, break_token, layout_result); @@ -446,7 +459,7 @@ logical_height += fragment_logical_size.block_size; intrinsic_content_logical_height += layout_result.IntrinsicBlockSize(); - NGBoxStrut borders = ComputeBorders(constraint_space, Style()); + NGBoxStrut borders = fragment.Borders(); NGBoxStrut scrollbars = GetScrollbarSizes(); NGBoxStrut padding = fragment.Padding(); NGBoxStrut border_scrollbar_padding = borders + scrollbars + padding; @@ -710,6 +723,12 @@ } else { box_->ForceLayout(); } + + // Reset the containing block size override size, now that we're done with + // subtree layout. Min/max calculation that depends on the block size of the + // container (e.g. objects with intrinsic ratio and percentage block size) + // in a subsequent layout pass might otherwise become wrong. + box_->ClearOverrideContainingBlockContentSize(); } NGLogicalSize box_size(box_->LogicalWidth(), box_->LogicalHeight()); // TODO(kojii): Implement use_first_line_style. @@ -718,7 +737,12 @@ builder.SetIsOldLayoutRoot(); builder.SetInlineSize(box_size.inline_size); builder.SetBlockSize(box_size.block_size); - builder.SetPadding(ComputePadding(constraint_space, box_->StyleRef())); + NGBoxStrut borders(box_->BorderStart(), box_->BorderEnd(), + box_->BorderBefore(), box_->BorderAfter()); + builder.SetBorders(borders); + NGBoxStrut padding(box_->PaddingStart(), box_->PaddingEnd(), + box_->PaddingBefore(), box_->PaddingAfter()); + builder.SetPadding(padding); CopyBaselinesFromOldLayout(constraint_space, &builder); UpdateShapeOutsideInfoIfNeeded(
diff --git a/third_party/blink/renderer/core/layout/ng/ng_box_fragment.cc b/third_party/blink/renderer/core/layout/ng/ng_box_fragment.cc index 7dcf098..516c635 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_box_fragment.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_box_fragment.cc
@@ -83,6 +83,12 @@ return NGLineHeightMetrics(block_size - block_size / 2, block_size / 2); } +NGBoxStrut NGBoxFragment::Borders() const { + const auto& physical_fragment = ToNGPhysicalBoxFragment(physical_fragment_); + return physical_fragment.Borders().ConvertToLogical(GetWritingMode(), + direction_); +} + NGBoxStrut NGBoxFragment::Padding() const { const auto& physical_fragment = ToNGPhysicalBoxFragment(physical_fragment_); return physical_fragment.Padding().ConvertToLogical(GetWritingMode(),
diff --git a/third_party/blink/renderer/core/layout/ng/ng_box_fragment.h b/third_party/blink/renderer/core/layout/ng/ng_box_fragment.h index 09ebade..b109472c 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_box_fragment.h +++ b/third_party/blink/renderer/core/layout/ng/ng_box_fragment.h
@@ -36,9 +36,10 @@ NGLineHeightMetrics BaselineMetrics(const NGBaselineRequest&, const NGConstraintSpace&) const; + NGBoxStrut Borders() const; NGBoxStrut Padding() const; - private: + protected: TextDirection direction_; };
diff --git a/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc index 6ae4c0f..17dfe750 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc
@@ -183,6 +183,7 @@ } container_builder_.SetInlineSize(border_box_size.inline_size); container_builder_.SetBlockSize(border_box_size.block_size); + container_builder_.SetBorders(ComputeBorders(ConstraintSpace(), Style())); container_builder_.SetPadding(ComputePadding(ConstraintSpace(), Style())); return container_builder_.ToBoxFragment();
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.cc b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.cc index c2e84dd5..4b0ca0d4 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.cc
@@ -17,7 +17,6 @@ NGConstraintSpace::NGConstraintSpace( WritingMode writing_mode, - bool is_orthogonal_writing_mode_root, TextDirection direction, NGLogicalSize available_size, NGLogicalSize percentage_resolution_size, @@ -25,24 +24,15 @@ NGPhysicalSize initial_containing_block_size, LayoutUnit fragmentainer_block_size, LayoutUnit fragmentainer_space_at_bfc_start, - bool is_fixed_size_inline, - bool is_fixed_size_block, - bool fixed_size_block_is_definite, - bool is_shrink_to_fit, - bool is_intermediate_layout, NGFragmentationType block_direction_fragmentation_type, - bool separate_leading_fragmentainer_margins, - bool is_new_fc, - bool is_anonymous, - bool use_first_line_style, - bool should_force_clearance, NGFloatTypes adjoining_floats, const NGMarginStrut& margin_strut, const NGBfcOffset& bfc_offset, const base::Optional<LayoutUnit>& floats_bfc_block_offset, const NGExclusionSpace& exclusion_space, LayoutUnit clearance_offset, - Vector<NGBaselineRequest>& baseline_requests) + Vector<NGBaselineRequest>& baseline_requests, + unsigned flags) : available_size_(available_size), percentage_resolution_size_(percentage_resolution_size), parent_percentage_resolution_inline_size_( @@ -50,22 +40,11 @@ initial_containing_block_size_(initial_containing_block_size), fragmentainer_block_size_(fragmentainer_block_size), fragmentainer_space_at_bfc_start_(fragmentainer_space_at_bfc_start), - is_fixed_size_inline_(is_fixed_size_inline), - is_fixed_size_block_(is_fixed_size_block), - fixed_size_block_is_definite_(fixed_size_block_is_definite), - is_shrink_to_fit_(is_shrink_to_fit), - is_intermediate_layout_(is_intermediate_layout), block_direction_fragmentation_type_(block_direction_fragmentation_type), - separate_leading_fragmentainer_margins_( - separate_leading_fragmentainer_margins), - is_new_fc_(is_new_fc), - is_anonymous_(is_anonymous), - use_first_line_style_(use_first_line_style), - should_force_clearance_(should_force_clearance), adjoining_floats_(adjoining_floats), writing_mode_(static_cast<unsigned>(writing_mode)), - is_orthogonal_writing_mode_root_(is_orthogonal_writing_mode_root), direction_(static_cast<unsigned>(direction)), + flags_(flags), margin_strut_(margin_strut), bfc_offset_(bfc_offset), floats_bfc_block_offset_(floats_bfc_block_offset), @@ -219,17 +198,9 @@ fragmentainer_block_size_ == other.fragmentainer_block_size_ && fragmentainer_space_at_bfc_start_ == other.fragmentainer_space_at_bfc_start_ && - is_fixed_size_inline_ == other.is_fixed_size_inline_ && - is_fixed_size_block_ == other.is_fixed_size_block_ && - is_shrink_to_fit_ == other.is_shrink_to_fit_ && - is_intermediate_layout_ == other.is_intermediate_layout_ && block_direction_fragmentation_type_ == other.block_direction_fragmentation_type_ && - is_new_fc_ == other.is_new_fc_ && - separate_leading_fragmentainer_margins_ == - other.separate_leading_fragmentainer_margins_ && - is_anonymous_ == other.is_anonymous_ && - should_force_clearance_ == other.should_force_clearance_ && + flags_ == other.flags_ && adjoining_floats_ == other.adjoining_floats_ && writing_mode_ == other.writing_mode_ && direction_ == other.direction_ &&
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h index 0273adb..73c7bd7b 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h +++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h
@@ -35,6 +35,23 @@ class CORE_EXPORT NGConstraintSpace final : public RefCounted<NGConstraintSpace> { public: + enum ConstraintSpaceFlags { + kOrthogonalWritingModeRoot = 1 << 0, + kFixedSizeInline = 1 << 1, + kFixedSizeBlock = 1 << 2, + kFixedSizeBlockIsDefinite = 1 << 3, + kShrinkToFit = 1 << 4, + kIntermediateLayout = 1 << 5, + kSeparateLeadingFragmentainerMargins = 1 << 6, + kNewFormattingContext = 1 << 7, + kAnonymous = 1 << 8, + kUseFirstLineStyle = 1 << 9, + kForceClearance = 1 << 10, + + // Size of bitfield used to store the flags. + kNumberOfConstraintSpaceFlags = 11 + }; + // Creates NGConstraintSpace representing LayoutObject's containing block. // This should live on NGBlockNode or another layout bridge and probably take // a root NGConstraintSpace. @@ -52,7 +69,7 @@ } bool IsOrthogonalWritingModeRoot() const { - return is_orthogonal_writing_mode_root_; + return HasFlag(kOrthogonalWritingModeRoot); } // The size to use for percentage resolution. @@ -93,7 +110,7 @@ // Whether the current constraint space is for the newly established // Formatting Context. - bool IsNewFormattingContext() const { return is_new_fc_; } + bool IsNewFormattingContext() const { return HasFlag(kNewFormattingContext); } // Return true if we are to separate (i.e. honor, rather than collapse) // block-start margins at the beginning of fragmentainers. This only makes a @@ -101,20 +118,20 @@ // block-start margins at the beginning of a fragmentainers are to be // truncated to 0 if they occur after a soft (unforced) break. bool HasSeparateLeadingFragmentainerMargins() const { - return separate_leading_fragmentainer_margins_; + return HasFlag(kSeparateLeadingFragmentainerMargins); } // Whether the fragment produced from layout should be anonymous, (e.g. it // may be a column in a multi-column layout). In such cases it shouldn't have // any borders or padding. - bool IsAnonymous() const { return is_anonymous_; } + bool IsAnonymous() const { return HasFlag(kAnonymous); } // Whether to use the ':first-line' style or not. // Note, this is not about the first line of the content to layout, but // whether the constraint space itself is on the first line, such as when it's // an inline block. // Also note this is true only when the document has ':first-line' rules. - bool UseFirstLineStyle() const { return use_first_line_style_; } + bool UseFirstLineStyle() const { return HasFlag(kUseFirstLineStyle); } // Some layout modes “stretch” their children to a fixed size (e.g. flex, // grid). These flags represented whether a layout needs to produce a @@ -123,23 +140,23 @@ // // If these flags are true, the AvailableSize() is interpreted as the fixed // border-box size of this box in the respective dimension. - bool IsFixedSizeInline() const { return is_fixed_size_inline_; } + bool IsFixedSizeInline() const { return HasFlag(kFixedSizeInline); } - bool IsFixedSizeBlock() const { return is_fixed_size_block_; } + bool IsFixedSizeBlock() const { return HasFlag(kFixedSizeBlock); } // Whether a fixed block size should be considered definite. bool FixedSizeBlockIsDefinite() const { - return fixed_size_block_is_definite_; + return HasFlag(kFixedSizeBlockIsDefinite); } // Whether an auto inline-size should be interpreted as shrink-to-fit // (ie. fit-content). This is used for inline-block, floats, etc. - bool IsShrinkToFit() const { return is_shrink_to_fit_; } + bool IsShrinkToFit() const { return HasFlag(kShrinkToFit); } // Whether this constraint space is used for an intermediate layout in a // multi-pass layout. In such a case, we should not copy back the resulting // layout data to the legacy tree or create a paint fragment from it. - bool IsIntermediateLayout() const { return is_intermediate_layout_; } + bool IsIntermediateLayout() const { return HasFlag(kIntermediateLayout); } // If specified a layout should produce a Fragment which fragments at the // blockSize if possible. @@ -223,7 +240,7 @@ // float). So it would just be wrong to check for clearance when we position // #clearee. Nothing can prevent clearance here. A large margin on the cleared // child will be canceled out with negative clearance. - bool ShouldForceClearance() const { return should_force_clearance_; } + bool ShouldForceClearance() const { return HasFlag(kForceClearance); } const Vector<NGBaselineRequest>& BaselineRequests() const { return baseline_requests_; @@ -238,7 +255,6 @@ friend class NGConstraintSpaceBuilder; // Default constructor. NGConstraintSpace(WritingMode, - bool is_orthogonal_writing_mode_root, TextDirection, NGLogicalSize available_size, NGLogicalSize percentage_resolution_size, @@ -246,24 +262,19 @@ NGPhysicalSize initial_containing_block_size, LayoutUnit fragmentainer_block_size, LayoutUnit fragmentainer_space_at_bfc_start, - bool is_fixed_size_inline, - bool is_fixed_size_block, - bool fixed_size_block_is_definite, - bool is_shrink_to_fit, - bool is_intermediate_layout, NGFragmentationType block_direction_fragmentation_type, - bool separate_leading_fragmentainer_margins_, - bool is_new_fc, - bool is_anonymous, - bool use_first_line_style, - bool should_force_clearance, NGFloatTypes adjoining_floats, const NGMarginStrut& margin_strut, const NGBfcOffset& bfc_offset, const base::Optional<LayoutUnit>& floats_bfc_block_offset, const NGExclusionSpace& exclusion_space, LayoutUnit clearance_offset, - Vector<NGBaselineRequest>& baseline_requests); + Vector<NGBaselineRequest>& baseline_requests, + unsigned flags); + + bool HasFlag(ConstraintSpaceFlags mask) const { + return flags_ & static_cast<unsigned>(mask); + } NGLogicalSize available_size_; NGLogicalSize percentage_resolution_size_; @@ -273,28 +284,11 @@ LayoutUnit fragmentainer_block_size_; LayoutUnit fragmentainer_space_at_bfc_start_; - unsigned is_fixed_size_inline_ : 1; - unsigned is_fixed_size_block_ : 1; - unsigned fixed_size_block_is_definite_ : 1; - - unsigned is_shrink_to_fit_ : 1; - unsigned is_intermediate_layout_ : 1; - unsigned block_direction_fragmentation_type_ : 2; - unsigned separate_leading_fragmentainer_margins_ : 1; - - // Whether the current constraint space is for the newly established - // formatting Context - unsigned is_new_fc_ : 1; - - unsigned is_anonymous_ : 1; - unsigned use_first_line_style_ : 1; - unsigned should_force_clearance_ : 1; unsigned adjoining_floats_ : 2; // NGFloatTypes - unsigned writing_mode_ : 3; - unsigned is_orthogonal_writing_mode_root_ : 1; unsigned direction_ : 1; + unsigned flags_ : kNumberOfConstraintSpaceFlags; // ConstraintSpaceFlags NGMarginStrut margin_strut_; NGBfcOffset bfc_offset_;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.cc b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.cc index 24dc7cb..fb9e2d2 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.cc
@@ -13,13 +13,18 @@ : NGConstraintSpaceBuilder(parent_space.GetWritingMode(), parent_space.InitialContainingBlockSize()) { parent_percentage_resolution_size_ = parent_space.PercentageResolutionSize(); - is_intermediate_layout_ = parent_space.IsIntermediateLayout(); + + flags_ = NGConstraintSpace::kFixedSizeBlockIsDefinite; + if (parent_space.IsIntermediateLayout()) + flags_ |= NGConstraintSpace::kIntermediateLayout; } NGConstraintSpaceBuilder::NGConstraintSpaceBuilder(WritingMode writing_mode, NGPhysicalSize icb_size) : initial_containing_block_size_(icb_size), - parent_writing_mode_(writing_mode) {} + parent_writing_mode_(writing_mode) { + flags_ = NGConstraintSpace::kFixedSizeBlockIsDefinite; +} NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetAvailableSize( NGLogicalSize available_size) { @@ -69,60 +74,12 @@ return *this; } -NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetIsFixedSizeInline( - bool is_fixed_size_inline) { - is_fixed_size_inline_ = is_fixed_size_inline; - return *this; -} - -NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetIsFixedSizeBlock( - bool is_fixed_size_block) { - is_fixed_size_block_ = is_fixed_size_block; - return *this; -} - -NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetFixedSizeBlockIsDefinite( - bool fixed_size_block_is_definite) { - fixed_size_block_is_definite_ = fixed_size_block_is_definite; - return *this; -} - -NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetIsShrinkToFit( - bool shrink_to_fit) { - is_shrink_to_fit_ = shrink_to_fit; - return *this; -} - -NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetIsIntermediateLayout( - bool is_intermediate_layout) { - is_intermediate_layout_ = is_intermediate_layout; - return *this; -} - NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetFragmentationType( NGFragmentationType fragmentation_type) { fragmentation_type_ = fragmentation_type; return *this; } -NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetIsNewFormattingContext( - bool is_new_fc) { - is_new_fc_ = is_new_fc; - return *this; -} - -NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetIsAnonymous( - bool is_anonymous) { - is_anonymous_ = is_anonymous; - return *this; -} - -NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetUseFirstLineStyle( - bool use_first_line_style) { - use_first_line_style_ = use_first_line_style; - return *this; -} - void NGConstraintSpaceBuilder::AddBaselineRequests( const Vector<NGBaselineRequest>& requests) { DCHECK(baseline_requests_.IsEmpty()); @@ -150,17 +107,25 @@ NGLogicalSize percentage_resolution_size = percentage_resolution_size_; NGLogicalSize parent_percentage_resolution_size = parent_percentage_resolution_size_.value_or(percentage_resolution_size); - bool is_fixed_size_inline = is_fixed_size_inline_; - bool is_fixed_size_block = is_fixed_size_block_; - bool fixed_size_block_is_definite = fixed_size_block_is_definite_; + + unsigned resolved_flags = flags_; + auto SetResolvedFlag = [&resolved_flags](unsigned mask, bool value) { + resolved_flags = (resolved_flags & ~static_cast<unsigned>(mask)) | + (-(int32_t)value & static_cast<unsigned>(mask)); + }; if (!is_in_parallel_flow) { available_size.Flip(); percentage_resolution_size.Flip(); parent_percentage_resolution_size.Flip(); - is_fixed_size_inline = is_fixed_size_block_; - is_fixed_size_block = is_fixed_size_inline_; - fixed_size_block_is_definite = true; + SetResolvedFlag(NGConstraintSpace::kFixedSizeInline, + flags_ & NGConstraintSpace::kFixedSizeBlock); + SetResolvedFlag(NGConstraintSpace::kFixedSizeBlock, + flags_ & NGConstraintSpace::kFixedSizeInline); + SetResolvedFlag(NGConstraintSpace::kFixedSizeBlockIsDefinite, true); + SetResolvedFlag(NGConstraintSpace::kOrthogonalWritingModeRoot, true); } + DCHECK_EQ(resolved_flags & NGConstraintSpace::kOrthogonalWritingModeRoot, + !is_in_parallel_flow); // If inline size is indefinite, use size of initial containing block. // https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto @@ -183,10 +148,10 @@ } } - DEFINE_STATIC_LOCAL(NGExclusionSpace, empty_exclusion_space, ()); - + bool is_new_fc_ = flags_ & NGConstraintSpace::kNewFormattingContext; DCHECK(!is_new_fc_ || !adjoining_floats_); + DEFINE_STATIC_LOCAL(NGExclusionSpace, empty_exclusion_space, ()); const NGExclusionSpace& exclusion_space = (is_new_fc_ || !exclusion_space_) ? empty_exclusion_space : *exclusion_space_; @@ -198,16 +163,12 @@ is_new_fc_ ? base::nullopt : floats_bfc_block_offset_; return base::AdoptRef(new NGConstraintSpace( - out_writing_mode, !is_in_parallel_flow, text_direction_, available_size, + out_writing_mode, text_direction_, available_size, percentage_resolution_size, parent_percentage_resolution_size.inline_size, initial_containing_block_size_, fragmentainer_block_size_, - fragmentainer_space_at_bfc_start_, is_fixed_size_inline, - is_fixed_size_block, fixed_size_block_is_definite, is_shrink_to_fit_, - is_intermediate_layout_, fragmentation_type_, - separate_leading_fragmentainer_margins_, is_new_fc_, is_anonymous_, - use_first_line_style_, should_force_clearance_, adjoining_floats_, + fragmentainer_space_at_bfc_start_, fragmentation_type_, adjoining_floats_, margin_strut, bfc_offset, floats_bfc_block_offset, exclusion_space, - clearance_offset, baseline_requests_)); + clearance_offset, baseline_requests_, resolved_flags)); } } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h index 83324bb..de7e02e 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h +++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h
@@ -46,26 +46,51 @@ NGConstraintSpaceBuilder& SetTextDirection(TextDirection); - NGConstraintSpaceBuilder& SetIsFixedSizeInline(bool is_fixed_size_inline); - NGConstraintSpaceBuilder& SetIsFixedSizeBlock(bool is_fixed_size_block); - NGConstraintSpaceBuilder& SetFixedSizeBlockIsDefinite( - bool fixed_size_block_is_definite); - - NGConstraintSpaceBuilder& SetIsShrinkToFit(bool shrink_to_fit); - - NGConstraintSpaceBuilder& SetIsIntermediateLayout( - bool is_intermediate_layout); - - NGConstraintSpaceBuilder& SetFragmentationType(NGFragmentationType); - - NGConstraintSpaceBuilder& SetSeparateLeadingFragmentainerMargins(bool val) { - separate_leading_fragmentainer_margins_ = val; + NGConstraintSpaceBuilder& SetIsFixedSizeInline(bool b) { + SetFlag(NGConstraintSpace::kFixedSizeInline, b); return *this; } - NGConstraintSpaceBuilder& SetIsNewFormattingContext(bool is_new_fc); - NGConstraintSpaceBuilder& SetIsAnonymous(bool is_anonymous); - NGConstraintSpaceBuilder& SetUseFirstLineStyle(bool use_first_line_style); + NGConstraintSpaceBuilder& SetIsFixedSizeBlock(bool b) { + SetFlag(NGConstraintSpace::kFixedSizeBlock, b); + return *this; + } + + NGConstraintSpaceBuilder& SetFixedSizeBlockIsDefinite(bool b) { + SetFlag(NGConstraintSpace::kFixedSizeBlockIsDefinite, b); + return *this; + } + + NGConstraintSpaceBuilder& SetIsShrinkToFit(bool b) { + SetFlag(NGConstraintSpace::kShrinkToFit, b); + return *this; + } + + NGConstraintSpaceBuilder& SetIsIntermediateLayout(bool b) { + SetFlag(NGConstraintSpace::kIntermediateLayout, b); + return *this; + } + + NGConstraintSpaceBuilder& SetFragmentationType(NGFragmentationType); + + NGConstraintSpaceBuilder& SetSeparateLeadingFragmentainerMargins(bool b) { + SetFlag(NGConstraintSpace::kSeparateLeadingFragmentainerMargins, b); + return *this; + } + + NGConstraintSpaceBuilder& SetIsNewFormattingContext(bool b) { + SetFlag(NGConstraintSpace::kNewFormattingContext, b); + return *this; + } + NGConstraintSpaceBuilder& SetIsAnonymous(bool b) { + SetFlag(NGConstraintSpace::kAnonymous, b); + return *this; + } + + NGConstraintSpaceBuilder& SetUseFirstLineStyle(bool b) { + SetFlag(NGConstraintSpace::kUseFirstLineStyle, b); + return *this; + } NGConstraintSpaceBuilder& SetAdjoiningFloatTypes(NGFloatTypes floats) { adjoining_floats_ = floats; @@ -80,8 +105,8 @@ NGConstraintSpaceBuilder& SetClearanceOffset(LayoutUnit clearance_offset); - NGConstraintSpaceBuilder& SetShouldForceClearance() { - should_force_clearance_ = true; + NGConstraintSpaceBuilder& SetShouldForceClearance(bool b) { + SetFlag(NGConstraintSpace::kForceClearance, b); return *this; } @@ -102,6 +127,11 @@ scoped_refptr<NGConstraintSpace> ToConstraintSpace(WritingMode); private: + void SetFlag(NGConstraintSpace::ConstraintSpaceFlags mask, bool value) { + flags_ = (flags_ & ~static_cast<unsigned>(mask)) | + (-(int32_t)value & static_cast<unsigned>(mask)); + } + // Relative to parent_writing_mode_. NGLogicalSize available_size_; // Relative to parent_writing_mode_. @@ -115,16 +145,8 @@ NGFragmentationType fragmentation_type_ = kFragmentNone; NGFloatTypes adjoining_floats_ = kFloatTypeNone; TextDirection text_direction_ = TextDirection::kLtr; - bool is_fixed_size_inline_ = false; - bool is_fixed_size_block_ = false; - bool fixed_size_block_is_definite_ = true; - bool is_shrink_to_fit_ = false; - bool is_intermediate_layout_ = false; - bool separate_leading_fragmentainer_margins_ = false; - bool is_new_fc_ = false; - bool is_anonymous_ = false; - bool use_first_line_style_ = false; - bool should_force_clearance_ = false; + + unsigned flags_; NGMarginStrut margin_strut_; NGBfcOffset bfc_offset_;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.cc b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.cc index e0e0790..fd5e5e5 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.cc
@@ -197,10 +197,16 @@ oof_positioned_candidates_.clear(); } -void NGContainerFragmentBuilder:: - MoveOutOfFlowDescendantCandidatesToDescendants() { +void NGContainerFragmentBuilder::MoveOutOfFlowDescendantCandidatesToDescendants( + const LayoutObject* inline_container) { GetAndClearOutOfFlowDescendantCandidates(&oof_positioned_descendants_, nullptr); + if (inline_container) { + for (auto& descendant : oof_positioned_descendants_) { + if (!descendant.inline_container) + descendant.inline_container = inline_container; + } + } } #ifndef NDEBUG
diff --git a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h index 2101c323..a9bc193 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h +++ b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h
@@ -128,8 +128,9 @@ const LayoutObject* container); // Utility routine to move all OOF descendant candidates to descendants. - // Use if fragment cannot hold any OOF children. - void MoveOutOfFlowDescendantCandidatesToDescendants(); + // Use if fragment cannot position any OOF children. + void MoveOutOfFlowDescendantCandidatesToDescendants( + const LayoutObject* inline_container); NGContainerFragmentBuilder& SetIsPushedByFloats() { is_pushed_by_floats_ = true;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc index 064ad8b..ed84346c 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc
@@ -158,6 +158,8 @@ ConstraintSpace(), Style(), intrinsic_block_size); container_builder_.SetBlockSize(block_size); container_builder_.SetInlineSize(flex_container_border_box_inline_size); + container_builder_.SetBorders(ComputeBorders(ConstraintSpace(), Style())); + container_builder_.SetPadding(ComputePadding(ConstraintSpace(), Style())); return container_builder_.ToBoxFragment(); }
diff --git a/third_party/blink/renderer/core/layout/ng/ng_fragment_builder.cc b/third_party/blink/renderer/core/layout/ng/ng_fragment_builder.cc index 80e0055..465c952 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_fragment_builder.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_fragment_builder.cc
@@ -68,6 +68,12 @@ return *this; } +NGFragmentBuilder& NGFragmentBuilder::SetBorders(const NGBoxStrut& border) { + DCHECK_NE(BoxType(), NGPhysicalFragment::kInlineBox); + borders_ = border; + return *this; +} + NGFragmentBuilder& NGFragmentBuilder::SetPadding(const NGBoxStrut& padding) { DCHECK_NE(BoxType(), NGPhysicalFragment::kInlineBox); padding_ = padding; @@ -308,6 +314,7 @@ scoped_refptr<NGPhysicalBoxFragment> fragment = base::AdoptRef(new NGPhysicalBoxFragment( layout_object_, Style(), style_variant_, physical_size, children_, + borders_.ConvertToPhysical(GetWritingMode(), Direction()), padding_.ConvertToPhysical(GetWritingMode(), Direction()), contents_ink_overflow, baselines_, BoxType(), is_old_layout_root_, border_edges_.ToPhysical(GetWritingMode()), std::move(break_token)));
diff --git a/third_party/blink/renderer/core/layout/ng/ng_fragment_builder.h b/third_party/blink/renderer/core/layout/ng/ng_fragment_builder.h index c1512e5..6674545 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_fragment_builder.h +++ b/third_party/blink/renderer/core/layout/ng/ng_fragment_builder.h
@@ -40,6 +40,7 @@ ~NGFragmentBuilder() override; NGFragmentBuilder& SetIntrinsicBlockSize(LayoutUnit); + NGFragmentBuilder& SetBorders(const NGBoxStrut&); NGFragmentBuilder& SetPadding(const NGBoxStrut&); NGFragmentBuilder& SetPadding(const NGLineBoxStrut&); @@ -186,6 +187,7 @@ LayoutObject* layout_object_; LayoutUnit intrinsic_block_size_; + NGBoxStrut borders_; NGBoxStrut padding_; NGPhysicalFragment::NGBoxType box_type_;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc index d8923953..faad6af 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc
@@ -340,6 +340,16 @@ const MinMaxSizeInput& input, const NGConstraintSpace* constraint_space) { LayoutBox* box = node.GetLayoutBox(); + + if (box->NeedsPreferredWidthsRecalculation()) { + // Some objects (when there's an intrinsic ratio) have their min/max inline + // size affected by the block size of their container. We don't really know + // whether the containing block of this child did change or is going to + // change size. However, this is our only opportunity to make sure that it + // gets its min/max widths calculated. + box->SetPreferredLogicalWidthsDirty(); + } + if (IsParallelWritingMode(writing_mode, node.Style().GetWritingMode())) { if (!box->PreferredLogicalWidthsDirty()) { return {box->MinPreferredLogicalWidth(), box->MaxPreferredLogicalWidth()}; @@ -420,6 +430,10 @@ } else { min_and_max = node.ComputeMinMaxSize(space.GetWritingMode(), MinMaxSizeInput(), &space); + // Cache these computed values + MinMaxSize contribution = ComputeMinAndMaxContentContribution( + style.GetWritingMode(), style, min_and_max); + box->SetPreferredLogicalWidthsFromNG(contribution); } } @@ -674,6 +688,22 @@ return borders; } +NGBoxStrut ComputeBorders(const NGConstraintSpace& constraint_space, + const NGLayoutInputNode node) { + // If we are producing an anonymous fragment (e.g. a column), it has no + // borders, padding or scrollbars. Using the ones from the container can only + // cause trouble. + if (constraint_space.IsAnonymous()) + return NGBoxStrut(); + + if (node.GetLayoutBox()->IsTableCell()) { + LayoutBox* box = node.GetLayoutBox(); + return NGBoxStrut(box->BorderStart(), box->BorderEnd(), box->BorderBefore(), + box->BorderAfter()); + } + return ComputeBorders(constraint_space, node.Style()); +} + NGBoxStrut ComputePadding(const NGConstraintSpace& constraint_space, const ComputedStyle& style) { // If we are producing an anonymous fragment (e.g. a column) we shouldn't @@ -693,6 +723,27 @@ return padding; } +NGBoxStrut ComputePadding(const NGConstraintSpace& constraint_space, + const NGLayoutInputNode node) { + // If we are producing an anonymous fragment (e.g. a column), it has no + // borders, padding or scrollbars. Using the ones from the container can only + // cause trouble. + if (constraint_space.IsAnonymous()) + return NGBoxStrut(); + + NGBoxStrut padding = ComputePadding(constraint_space, node.Style()); + if (node.GetLayoutBox()->IsTableCell()) { + // Use values calculated by the table layout code + const LayoutTableCell* cell = ToLayoutTableCell(node.GetLayoutBox()); + // TODO(karlo): intrinsic padding can sometimes be negative; that + // seems insane, but works in the old code; in NG it trips + // DCHECKs. + padding.block_start += LayoutUnit(cell->IntrinsicPaddingBefore()); + padding.block_end += LayoutUnit(cell->IntrinsicPaddingAfter()); + } + return padding; +} + void ResolveInlineMargins(const ComputedStyle& style, const ComputedStyle& containing_block_style, LayoutUnit available_inline_size, @@ -803,29 +854,13 @@ NGBoxStrut CalculateBorderScrollbarPadding( const NGConstraintSpace& constraint_space, const NGBlockNode node) { - const ComputedStyle& style = node.Style(); - // If we are producing an anonymous fragment (e.g. a column), it has no // borders, padding or scrollbars. Using the ones from the container can only // cause trouble. if (constraint_space.IsAnonymous()) return NGBoxStrut(); - NGBoxStrut border_intrinsic_padding; - if (node.GetLayoutBox()->IsTableCell()) { - // Use values calculated by the table layout code - const LayoutTableCell* cell = ToLayoutTableCell(node.GetLayoutBox()); - // TODO(karlo): intrinsic padding can sometimes be negative; that - // seems insane, but works in the old code; in NG it trips - // DCHECKs. - border_intrinsic_padding = NGBoxStrut( - cell->BorderStart(), cell->BorderEnd(), - cell->BorderBefore() + LayoutUnit(cell->IntrinsicPaddingBefore()), - cell->BorderAfter() + LayoutUnit(cell->IntrinsicPaddingAfter())); - } else { - border_intrinsic_padding = ComputeBorders(constraint_space, style); - } - return border_intrinsic_padding + ComputePadding(constraint_space, style) + - node.GetScrollbarSizes(); + return ComputeBorders(constraint_space, node) + + ComputePadding(constraint_space, node) + node.GetScrollbarSizes(); } NGLogicalSize CalculateBorderBoxSize(const NGConstraintSpace& constraint_space,
diff --git a/third_party/blink/renderer/core/layout/ng/ng_length_utils.h b/third_party/blink/renderer/core/layout/ng/ng_length_utils.h index bfabf58d6..770dd17 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_length_utils.h +++ b/third_party/blink/renderer/core/layout/ng/ng_length_utils.h
@@ -168,12 +168,18 @@ CORE_EXPORT NGBoxStrut ComputeMinMaxMargins(const ComputedStyle& parent_style, NGLayoutInputNode child); -CORE_EXPORT NGBoxStrut ComputeBorders(const NGConstraintSpace& constraint_space, +CORE_EXPORT NGBoxStrut ComputeBorders(const NGConstraintSpace&, const ComputedStyle&); +CORE_EXPORT NGBoxStrut ComputeBorders(const NGConstraintSpace&, + const NGLayoutInputNode); + CORE_EXPORT NGBoxStrut ComputePadding(const NGConstraintSpace&, const ComputedStyle&); +CORE_EXPORT NGBoxStrut ComputePadding(const NGConstraintSpace&, + const NGLayoutInputNode); + // Convert inline margins from computed to used values. This will resolve 'auto' // values and over-constrainedness. This uses the available size from the // constraint space and inline size to compute the margins that are auto, if
diff --git a/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_positioned_descendant.h b/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_positioned_descendant.h index d3d9d36..2f38cb50 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_positioned_descendant.h +++ b/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_positioned_descendant.h
@@ -25,11 +25,11 @@ struct CORE_EXPORT NGOutOfFlowPositionedDescendant { NGBlockNode node; NGStaticPosition static_position; - LayoutObject* inline_container; + const LayoutObject* inline_container; NGOutOfFlowPositionedDescendant( NGBlockNode node_param, NGStaticPosition static_position_param, - LayoutObject* inline_container_param = nullptr) + const LayoutObject* inline_container_param = nullptr) : node(node_param), static_position(static_position_param), inline_container(inline_container_param) {}
diff --git a/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.cc index 9620257..6d7320a 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.cc
@@ -71,6 +71,7 @@ border_box_size.block_size = ComputeBlockSizeForFragment( ConstraintSpace(), Style(), intrinsic_block_size); container_builder_.SetBlockSize(border_box_size.block_size); + container_builder_.SetBorders(ComputeBorders(ConstraintSpace(), Style())); container_builder_.SetPadding(ComputePadding(ConstraintSpace(), Style())); NGOutOfFlowLayoutPart(&container_builder_, Node().IsAbsoluteContainer(),
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc index aff29b78..717477d 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc
@@ -22,6 +22,7 @@ NGStyleVariant style_variant, NGPhysicalSize size, Vector<scoped_refptr<NGPhysicalFragment>>& children, + const NGPhysicalBoxStrut& borders, const NGPhysicalBoxStrut& padding, const NGPhysicalOffsetRect& contents_ink_overflow, Vector<NGBaseline>& baselines, @@ -39,6 +40,7 @@ contents_ink_overflow, std::move(break_token)), baselines_(std::move(baselines)), + borders_(borders), padding_(padding) { DCHECK(baselines.IsEmpty()); // Ensure move semantics is used. is_old_layout_root_ = is_old_layout_root; @@ -248,7 +250,7 @@ scoped_refptr<NGPhysicalFragment> physical_fragment = base::AdoptRef(new NGPhysicalBoxFragment( layout_object_, Style(), StyleVariant(), size_, children_copy, - padding_, contents_ink_overflow_, baselines_copy, BoxType(), + borders_, padding_, contents_ink_overflow_, baselines_copy, BoxType(), is_old_layout_root_, border_edge_, break_token_)); return physical_fragment; }
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h index 3e7f084..a94d22b 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h +++ b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h
@@ -22,6 +22,7 @@ NGStyleVariant style_variant, NGPhysicalSize size, Vector<scoped_refptr<NGPhysicalFragment>>& children, + const NGPhysicalBoxStrut& border, const NGPhysicalBoxStrut& padding, const NGPhysicalOffsetRect& contents_ink_overflow, Vector<NGBaseline>& baselines, @@ -32,7 +33,10 @@ const NGBaseline* Baseline(const NGBaselineRequest&) const; - const NGPhysicalBoxStrut& Padding() const { return padding_; } + const NGPhysicalBoxStrut Borders() const { return borders_; } + + const NGPhysicalBoxStrut Padding() const { return padding_; } + NGPixelSnappedPhysicalBoxStrut PixelSnappedPadding() const { return padding_.SnapToDevicePixels(); } @@ -72,6 +76,7 @@ private: Vector<NGBaseline> baselines_; + NGPhysicalBoxStrut borders_; NGPhysicalBoxStrut padding_; NGPhysicalOffsetRect descendant_outlines_; };
diff --git a/third_party/blink/renderer/core/layout/text_autosizer.cc b/third_party/blink/renderer/core/layout/text_autosizer.cc index e819f7b4..520cfbf 100644 --- a/third_party/blink/renderer/core/layout/text_autosizer.cc +++ b/third_party/blink/renderer/core/layout/text_autosizer.cc
@@ -1386,12 +1386,13 @@ } } -float TextAutosizer::ComputeAutosizedFontSize(float specified_size, - float multiplier) { +float TextAutosizer::ComputeAutosizedFontSize(float computed_size, + float multiplier, + float effective_zoom) { DCHECK_GE(multiplier, 0); // Somewhat arbitrary "pleasant" font size. - const float kPleasantSize = 16; + const float kPleasantSize = 16 * effective_zoom; // Multiply fonts that the page author has specified to be larger than // pleasantSize by less and less, until huge fonts are not increased at all. @@ -1405,19 +1406,19 @@ // then every 1px increase in specifiedSize increases computedSize by 1px). const float kGradientAfterPleasantSize = 0.5; - float computed_size; + float auto_sized_size; // Skip linear backoff for multipliers that shrink the size or when the font // sizes are small. - if (multiplier <= 1 || specified_size <= kPleasantSize) { - computed_size = multiplier * specified_size; + if (multiplier <= 1 || computed_size <= kPleasantSize) { + auto_sized_size = multiplier * computed_size; } else { - computed_size = + auto_sized_size = multiplier * kPleasantSize + - kGradientAfterPleasantSize * (specified_size - kPleasantSize); - if (computed_size < specified_size) - computed_size = specified_size; + kGradientAfterPleasantSize * (computed_size - kPleasantSize); + if (auto_sized_size < computed_size) + auto_sized_size = computed_size; } - return computed_size; + return auto_sized_size; } void TextAutosizer::CheckSuperclusterConsistency() {
diff --git a/third_party/blink/renderer/core/layout/text_autosizer.h b/third_party/blink/renderer/core/layout/text_autosizer.h index 33a925a..2940200 100644 --- a/third_party/blink/renderer/core/layout/text_autosizer.h +++ b/third_party/blink/renderer/core/layout/text_autosizer.h
@@ -64,7 +64,11 @@ static TextAutosizer* Create(const Document* document) { return new TextAutosizer(document); } - static float ComputeAutosizedFontSize(float specified_size, float multiplier); + + // computed_size should include zoom. + static float ComputeAutosizedFontSize(float computed_size, + float multiplier, + float effective_zoom); void UpdatePageInfoInAllFrames(); void UpdatePageInfo();
diff --git a/third_party/blink/renderer/core/messaging/message_port.cc b/third_party/blink/renderer/core/messaging/message_port.cc index ac04a2c..683855e 100644 --- a/third_party/blink/renderer/core/messaging/message_port.cc +++ b/third_party/blink/renderer/core/messaging/message_port.cc
@@ -31,14 +31,14 @@ #include "mojo/public/cpp/base/big_buffer_mojom_traits.h" #include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/public/platform/web_string.h" -#include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h" -#include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value_factory.h" +#include "third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h" #include "third_party/blink/renderer/core/events/message_event.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/use_counter.h" #include "third_party/blink/renderer/core/inspector/thread_debugger.h" #include "third_party/blink/renderer/core/messaging/blink_transferable_message_struct_traits.h" +#include "third_party/blink/renderer/core/messaging/post_message_options.h" #include "third_party/blink/renderer/core/workers/worker_global_scope.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" @@ -63,20 +63,30 @@ } void MessagePort::postMessage(ScriptState* script_state, - scoped_refptr<SerializedScriptValue> message, - const MessagePortArray& ports, + const ScriptValue& message, + Vector<ScriptValue>& transfer, ExceptionState& exception_state) { if (!IsEntangled()) return; DCHECK(GetExecutionContext()); DCHECK(!IsNeutered()); + PostMessageOptions options; BlinkTransferableMessage msg; - msg.message = message; + Transferables transferables; + if (!transfer.IsEmpty()) + options.setTransfer(transfer); + + msg.message = PostMessageHelper::SerializeMessageByMove( + script_state->GetIsolate(), message, options, transferables, + exception_state); + if (exception_state.HadException()) + return; + DCHECK(msg.message); // Make sure we aren't connected to any of the passed-in ports. - for (unsigned i = 0; i < ports.size(); ++i) { - if (ports[i] == this) { + for (unsigned i = 0; i < transferables.message_ports.size(); ++i) { + if (transferables.message_ports[i] == this) { exception_state.ThrowDOMException( DOMExceptionCode::kDataCloneError, "Port at index " + String::Number(i) + " contains the source port."); @@ -84,7 +94,8 @@ } } msg.ports = MessagePort::DisentanglePorts( - ExecutionContext::From(script_state), ports, exception_state); + ExecutionContext::From(script_state), transferables.message_ports, + exception_state); if (exception_state.HadException()) return; @@ -92,7 +103,7 @@ if (debugger) msg.sender_stack_trace_id = debugger->StoreCurrentStackTrace("postMessage"); - if (message->IsLockedToAgentCluster()) { + if (msg.message->IsLockedToAgentCluster()) { msg.locked_agent_cluster_id = GetExecutionContext()->GetAgentClusterID(); } else { msg.locked_agent_cluster_id = base::nullopt;
diff --git a/third_party/blink/renderer/core/messaging/message_port.h b/third_party/blink/renderer/core/messaging/message_port.h index f940655..3ea81ef 100644 --- a/third_party/blink/renderer/core/messaging/message_port.h +++ b/third_party/blink/renderer/core/messaging/message_port.h
@@ -47,7 +47,6 @@ class ExceptionState; class ExecutionContext; class ScriptState; -class SerializedScriptValue; class CORE_EXPORT MessagePort : public EventTargetWithInlineData, public mojo::MessageReceiver, @@ -61,10 +60,9 @@ ~MessagePort() override; void postMessage(ScriptState*, - scoped_refptr<SerializedScriptValue> message, - const MessagePortArray&, + const ScriptValue& message, + Vector<ScriptValue>& transfer, ExceptionState&); - static bool CanTransferArrayBuffersAndImageBitmaps() { return true; } void start(); void close();
diff --git a/third_party/blink/renderer/core/messaging/message_port.idl b/third_party/blink/renderer/core/messaging/message_port.idl index 094c323..30f10371 100644 --- a/third_party/blink/renderer/core/messaging/message_port.idl +++ b/third_party/blink/renderer/core/messaging/message_port.idl
@@ -31,7 +31,7 @@ ActiveScriptWrappable, Exposed=(Window,Worker,AudioWorklet) ] interface MessagePort : EventTarget { - [PostMessage, RaisesException, Measure] void postMessage(any message, optional sequence<object> transfer = []); + [CallWith=ScriptState, RaisesException, Measure] void postMessage(any message, optional sequence<object> transfer = []); [Measure] void start(); [Measure] void close();
diff --git a/third_party/blink/renderer/core/paint/block_painter.cc b/third_party/blink/renderer/core/paint/block_painter.cc index c055a97a..5359ce1 100644 --- a/third_party/blink/renderer/core/paint/block_painter.cc +++ b/third_party/blink/renderer/core/paint/block_painter.cc
@@ -74,7 +74,7 @@ const PaintInfo& paint_info, const LayoutPoint& paint_offset) { if (layout_block_.HasOverflowClip() && - layout_block_.Style()->Visibility() == EVisibility::kVisible && + layout_block_.StyleRef().Visibility() == EVisibility::kVisible && ShouldPaintSelfBlockBackground(paint_info.phase)) { ScrollableAreaPainter(*layout_block_.Layer()->GetScrollableArea()) .PaintOverflowControls(paint_info, RoundedIntPoint(paint_offset), @@ -189,7 +189,7 @@ const PaintPhase paint_phase = paint_info.phase; if (ShouldPaintSelfBlockBackground(paint_phase)) { - if (layout_block_.Style()->Visibility() == EVisibility::kVisible && + if (layout_block_.StyleRef().Visibility() == EVisibility::kVisible && layout_block_.HasBoxDecorationBackground()) layout_block_.PaintBoxDecorationBackground(paint_info, paint_offset); if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) @@ -205,7 +205,7 @@ } if (paint_phase == PaintPhase::kMask && - layout_block_.Style()->Visibility() == EVisibility::kVisible) { + layout_block_.StyleRef().Visibility() == EVisibility::kVisible) { layout_block_.PaintMask(paint_info, paint_offset); return; }
diff --git a/third_party/blink/renderer/core/paint/box_painter.cc b/third_party/blink/renderer/core/paint/box_painter.cc index 59fbcce..b856f70 100644 --- a/third_party/blink/renderer/core/paint/box_painter.cc +++ b/third_party/blink/renderer/core/paint/box_painter.cc
@@ -218,7 +218,7 @@ BackgroundImageGeometry geometry(layout_box_); BoxModelObjectPainter box_model_painter(layout_box_); box_model_painter.PaintFillLayers(paint_info, background_color, - layout_box_.Style()->BackgroundLayers(), + layout_box_.StyleRef().BackgroundLayers(), paint_rect, geometry, bleed_avoidance); } @@ -227,7 +227,7 @@ DCHECK_EQ(PaintPhase::kMask, paint_info.phase); if (!layout_box_.HasMask() || - layout_box_.Style()->Visibility() != EVisibility::kVisible) + layout_box_.StyleRef().Visibility() != EVisibility::kVisible) return; if (DrawingRecorder::UseCachedDrawingIfPossible(
diff --git a/third_party/blink/renderer/core/paint/collapsed_border_painter.cc b/third_party/blink/renderer/core/paint/collapsed_border_painter.cc index 135bfca6..445cd1fb 100644 --- a/third_party/blink/renderer/core/paint/collapsed_border_painter.cc +++ b/third_party/blink/renderer/core/paint/collapsed_border_painter.cc
@@ -335,7 +335,7 @@ void CollapsedBorderPainter::PaintCollapsedBorders( const PaintInfo& paint_info) { - if (cell_.Style()->Visibility() != EVisibility::kVisible) + if (cell_.StyleRef().Visibility() != EVisibility::kVisible) return; if (!cell_.GetCollapsedBorderValues())
diff --git a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc index 36b3c46..59ddfd7 100644 --- a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc +++ b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
@@ -148,7 +148,7 @@ return false; // If there is no background, there is nothing to support. - if (!layout_object.Style()->HasBackground()) + if (!layout_object.StyleRef().HasBackground()) return true; // Simple background that is contained within the contents rect. @@ -172,7 +172,7 @@ // Returns true if the compositor will be responsible for applying the sticky // position offset for this composited layer. static bool UsesCompositedStickyPosition(PaintLayer& layer) { - return layer.GetLayoutObject().Style()->HasStickyConstrainedPosition() && + return layer.GetLayoutObject().StyleRef().HasStickyConstrainedPosition() && layer.AncestorOverflowLayer()->NeedsCompositedScrolling(); } @@ -605,7 +605,7 @@ // decorations. if ((layer->GetLayoutObject().HasOverflowClip() || layer->GetLayoutObject().IsLayoutEmbeddedContent()) && - layer->GetLayoutObject().Style()->HasBorderRadius() && + layer->GetLayoutObject().StyleRef().HasBorderRadius() && InContainingBlockChain(&owning_layer_, layer)) { LayoutPoint delta; layer->ConvertToLayerCoords(clip_inheritance_ancestor_, delta); @@ -772,16 +772,16 @@ // If the outline needs to draw over the composited scrolling contents layer // or scrollbar layers it needs to be drawn into a separate layer. - int min_border_width = - std::min(layout_object.Style()->BorderTopWidth(), - std::min(layout_object.Style()->BorderLeftWidth(), - std::min(layout_object.Style()->BorderRightWidth(), - layout_object.Style()->BorderBottomWidth()))); + int min_border_width = std::min( + layout_object.StyleRef().BorderTopWidth(), + std::min(layout_object.StyleRef().BorderLeftWidth(), + std::min(layout_object.StyleRef().BorderRightWidth(), + layout_object.StyleRef().BorderBottomWidth()))); bool needs_decoration_outline_layer = owning_layer_.GetScrollableArea() && owning_layer_.GetScrollableArea()->UsesCompositedScrolling() && - layout_object.Style()->HasOutline() && - layout_object.Style()->OutlineOffset() < -min_border_width; + layout_object.StyleRef().HasOutline() && + layout_object.StyleRef().OutlineOffset() < -min_border_width; if (UpdateDecorationOutlineLayer(needs_decoration_outline_layer)) layer_config_changed = true; @@ -1173,14 +1173,14 @@ // Set transform property, if it is not animating. We have to do this here // because the transform is affected by the layer dimensions. - if (!GetLayoutObject().Style()->IsRunningTransformAnimationOnCompositor()) + if (!GetLayoutObject().StyleRef().IsRunningTransformAnimationOnCompositor()) UpdateTransform(GetLayoutObject().StyleRef()); // Set opacity, if it is not animating. - if (!GetLayoutObject().Style()->IsRunningOpacityAnimationOnCompositor()) + if (!GetLayoutObject().StyleRef().IsRunningOpacityAnimationOnCompositor()) UpdateOpacity(GetLayoutObject().StyleRef()); - if (!GetLayoutObject().Style()->IsRunningFilterAnimationOnCompositor()) + if (!GetLayoutObject().StyleRef().IsRunningFilterAnimationOnCompositor()) UpdateFilters(); if (!GetLayoutObject() @@ -1329,7 +1329,7 @@ graphics_layer_->SetContentsVisible(contents_visible); graphics_layer_->SetBackfaceVisibility( - GetLayoutObject().Style()->BackfaceVisibility() == + GetLayoutObject().StyleRef().BackfaceVisibility() == EBackfaceVisibility::kVisible); } @@ -1524,7 +1524,7 @@ overflow_controls_host_layer_->SetSize(border_box.Size()); overflow_controls_host_layer_->SetMasksToBounds(true); overflow_controls_host_layer_->SetBackfaceVisibility( - owning_layer_.GetLayoutObject().Style()->BackfaceVisibility() == + owning_layer_.GetLayoutObject().StyleRef().BackfaceVisibility() == EBackfaceVisibility::kVisible); } @@ -1559,7 +1559,7 @@ } if (child_clipping_mask_layer_ && !scrolling_layer_ && - !GetLayoutObject().Style()->ClipPath()) { + !GetLayoutObject().StyleRef().ClipPath()) { if (child_clipping_mask_layer_->Size() != child_containment_layer_->Size()) { child_clipping_mask_layer_->SetSize(child_containment_layer_->Size()); @@ -1658,7 +1658,7 @@ scrolling_layer_->SetOffsetFromLayoutObject( ToIntSize(overflow_clip_rect.Location())); - if (child_clipping_mask_layer_ && !GetLayoutObject().Style()->ClipPath()) { + if (child_clipping_mask_layer_ && !GetLayoutObject().StyleRef().ClipPath()) { child_clipping_mask_layer_->SetPosition(scrolling_layer_->GetPosition()); if (child_clipping_mask_layer_->Size() != scrolling_layer_->Size()) { child_clipping_mask_layer_->SetSize(scrolling_layer_->Size()); @@ -1698,7 +1698,7 @@ } void CompositedLayerMapping::UpdateChildClippingMaskLayerGeometry() { - if (!child_clipping_mask_layer_ || !GetLayoutObject().Style()->ClipPath() || + if (!child_clipping_mask_layer_ || !GetLayoutObject().StyleRef().ClipPath() || !GetLayoutObject().IsBox()) return; LayoutBox& layout_box = ToLayoutBox(GetLayoutObject()); @@ -2888,7 +2888,8 @@ LayoutObject::ShouldRespectImageOrientation(&image_layout_object)); graphics_layer_->SetFilterQuality( - GetLayoutObject().Style()->ImageRendering() == EImageRendering::kPixelated + GetLayoutObject().StyleRef().ImageRendering() == + EImageRendering::kPixelated ? kNone_SkFilterQuality : kLow_SkFilterQuality);
diff --git a/third_party/blink/renderer/core/paint/compositing/compositing_layer_assigner.cc b/third_party/blink/renderer/core/paint/compositing/compositing_layer_assigner.cc index 7c36d14..0f9721c 100644 --- a/third_party/blink/renderer/core/paint/compositing/compositing_layer_assigner.cc +++ b/third_party/blink/renderer/core/paint/compositing/compositing_layer_assigner.cc
@@ -158,8 +158,8 @@ if (SquashingWouldExceedSparsityTolerance(layer, squashing_state)) return SquashingDisallowedReason::kSquashingSparsityExceeded; - if (layer->GetLayoutObject().Style()->HasBlendMode() || - squashing_layer.GetLayoutObject().Style()->HasBlendMode()) + if (layer->GetLayoutObject().StyleRef().HasBlendMode() || + squashing_layer.GetLayoutObject().StyleRef().HasBlendMode()) return SquashingDisallowedReason::kSquashingBlendingIsDisallowed; if (layer->ClippingContainer() != squashing_layer.ClippingContainer() && @@ -196,9 +196,12 @@ if (layer->NearestFixedPositionLayer() != squashing_layer.NearestFixedPositionLayer()) return SquashingDisallowedReason::kNearestFixedPositionMismatch; - DCHECK_NE(layer->GetLayoutObject().Style()->GetPosition(), EPosition::kFixed); + DCHECK_NE(layer->GetLayoutObject().StyleRef().GetPosition(), + EPosition::kFixed); - if ((squashing_layer.GetLayoutObject().Style()->SubtreeWillChangeContents() && + if ((squashing_layer.GetLayoutObject() + .StyleRef() + .SubtreeWillChangeContents() && squashing_layer.GetLayoutObject() .Style() ->IsRunningAnimationOnCompositor()) ||
diff --git a/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder.cc b/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder.cc index 690b4967..a0058d47 100644 --- a/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder.cc +++ b/third_party/blink/renderer/core/paint/compositing/compositing_reason_finder.cc
@@ -263,8 +263,8 @@ bool CompositingReasonFinder::RequiresCompositingForScrollDependentPosition( const PaintLayer* layer, bool ignore_lcd_text) const { - if (!layer->GetLayoutObject().Style()->HasViewportConstrainedPosition() && - !layer->GetLayoutObject().Style()->HasStickyConstrainedPosition()) + if (!layer->GetLayoutObject().StyleRef().HasViewportConstrainedPosition() && + !layer->GetLayoutObject().StyleRef().HasStickyConstrainedPosition()) return false; if (!(ignore_lcd_text || @@ -278,7 +278,7 @@ // Don't promote fixed position elements that are descendants of a non-view // container, e.g. transformed elements. They will stay fixed wrt the // container rather than the enclosing frame. - EPosition position = layer->GetLayoutObject().Style()->GetPosition(); + EPosition position = layer->GetLayoutObject().StyleRef().GetPosition(); if (position == EPosition::kFixed) { return layer->FixedToViewport() && layout_view_.GetFrameView()->LayoutViewport()->ScrollsOverflow();
diff --git a/third_party/blink/renderer/core/paint/compositing/compositing_requirements_updater.cc b/third_party/blink/renderer/core/paint/compositing/compositing_requirements_updater.cc index 7d576c1..9ee28921 100644 --- a/third_party/blink/renderer/core/paint/compositing/compositing_requirements_updater.cc +++ b/third_party/blink/renderer/core/paint/compositing/compositing_requirements_updater.cc
@@ -603,7 +603,7 @@ } if (will_be_composited_or_squashed && - layer->GetLayoutObject().Style()->HasBlendMode()) { + layer->GetLayoutObject().StyleRef().HasBlendMode()) { current_recursion_data.has_unisolated_composited_blending_descendant_ = true; } @@ -624,7 +624,7 @@ reasons_to_composite & CompositingReason::kInlineTransform; if ((!child_recursion_data.testing_overlap_ && !is_composited_clipping_layer) || - layer->GetLayoutObject().Style()->HasCurrentTransformAnimation() || + layer->GetLayoutObject().StyleRef().HasCurrentTransformAnimation() || is_composited_with_inline_transform) current_recursion_data.testing_overlap_ = false;
diff --git a/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc b/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc index ffa3a8f..d6b476c 100644 --- a/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc +++ b/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc
@@ -309,11 +309,6 @@ // isScrollable method would return a different value. root_should_always_composite_dirty_ = true; EnableCompositingModeIfNeeded(); - - // FIXME: Rather than marking the entire LayoutView as dirty, we should - // track which Layers moved during layout and only dirty those - // specific Layers. - RootLayer()->SetNeedsCompositingInputsUpdate(); } #if DCHECK_IS_ON()
diff --git a/third_party/blink/renderer/core/paint/css_mask_painter.cc b/third_party/blink/renderer/core/paint/css_mask_painter.cc index 8032067..1fa15cb 100644 --- a/third_party/blink/renderer/core/paint/css_mask_painter.cc +++ b/third_party/blink/renderer/core/paint/css_mask_painter.cc
@@ -64,7 +64,7 @@ LayoutSVGResourceMasker* masker = resources ? resources->Masker() : nullptr; if (!masker) return kColorFilterNone; - return masker->Style()->SvgStyle().MaskType() == MT_LUMINANCE + return masker->StyleRef().SvgStyle().MaskType() == MT_LUMINANCE ? kColorFilterLuminanceToAlpha : kColorFilterNone; }
diff --git a/third_party/blink/renderer/core/paint/details_marker_painter.cc b/third_party/blink/renderer/core/paint/details_marker_painter.cc index 4346363..cb86964b 100644 --- a/third_party/blink/renderer/core/paint/details_marker_painter.cc +++ b/third_party/blink/renderer/core/paint/details_marker_painter.cc
@@ -16,7 +16,7 @@ void DetailsMarkerPainter::Paint(const PaintInfo& paint_info) { if (paint_info.phase != PaintPhase::kForeground || - layout_details_marker_.Style()->Visibility() != EVisibility::kVisible) { + layout_details_marker_.StyleRef().Visibility() != EVisibility::kVisible) { BlockPainter(layout_details_marker_).Paint(paint_info); return; }
diff --git a/third_party/blink/renderer/core/paint/document_marker_painter.cc b/third_party/blink/renderer/core/paint/document_marker_painter.cc index 605b37f..4777c420 100644 --- a/third_party/blink/renderer/core/paint/document_marker_painter.cc +++ b/third_party/blink/renderer/core/paint/document_marker_painter.cc
@@ -175,6 +175,9 @@ if (marker.HasThicknessThick() && logical_height.ToInt() - baseline >= 2) line_thickness = 2; + // Line thickness should change with zoom. + line_thickness *= style.EffectiveZoom(); + Color marker_color = marker.UseTextColor() ? style.VisitedDependentColor(GetCSSPropertyWebkitTextFillColor())
diff --git a/third_party/blink/renderer/core/paint/fieldset_painter.cc b/third_party/blink/renderer/core/paint/fieldset_painter.cc index cf136c2..845d6b93 100644 --- a/third_party/blink/renderer/core/paint/fieldset_painter.cc +++ b/third_party/blink/renderer/core/paint/fieldset_painter.cc
@@ -31,7 +31,7 @@ // FIXME: We need to work with "rl" and "bt" block flow directions. In those // cases the legend is embedded in the right and bottom borders respectively. // https://bugs.webkit.org/show_bug.cgi?id=47236 - if (layout_fieldset_.Style()->IsHorizontalWritingMode()) { + if (layout_fieldset_.StyleRef().IsHorizontalWritingMode()) { LayoutUnit y_off = (legend->Location().Y() > 0) ? LayoutUnit() @@ -56,8 +56,8 @@ BackgroundImageGeometry geometry(layout_fieldset_); BoxModelObjectPainter(layout_fieldset_) .PaintFillLayers(paint_info, box_decoration_data.background_color, - layout_fieldset_.Style()->BackgroundLayers(), paint_rect, - geometry); + layout_fieldset_.StyleRef().BackgroundLayers(), + paint_rect, geometry); BoxPainterBase::PaintInsetBoxShadowWithBorderRect( paint_info, paint_rect, layout_fieldset_.StyleRef()); @@ -71,19 +71,19 @@ // FIXME: We need to work with "rl" and "bt" block flow directions. In those // cases the legend is embedded in the right and bottom borders respectively. // https://bugs.webkit.org/show_bug.cgi?id=47236 - if (layout_fieldset_.Style()->IsHorizontalWritingMode()) { + if (layout_fieldset_.StyleRef().IsHorizontalWritingMode()) { LayoutUnit clip_top = paint_rect.Y(); - LayoutUnit clip_height = - max(static_cast<LayoutUnit>(layout_fieldset_.Style()->BorderTopWidth()), - legend->Size().Height() - - ((legend->Size().Height() - layout_fieldset_.BorderTop()) / 2)); + LayoutUnit clip_height = max( + static_cast<LayoutUnit>(layout_fieldset_.StyleRef().BorderTopWidth()), + legend->Size().Height() - + ((legend->Size().Height() - layout_fieldset_.BorderTop()) / 2)); graphics_context.ClipOut( PixelSnappedIntRect(paint_rect.X() + legend->Location().X(), clip_top, legend->Size().Width(), clip_height)); } else { LayoutUnit clip_left = paint_rect.X(); LayoutUnit clip_width = max( - static_cast<LayoutUnit>(layout_fieldset_.Style()->BorderLeftWidth()), + static_cast<LayoutUnit>(layout_fieldset_.StyleRef().BorderLeftWidth()), legend->Size().Width()); graphics_context.ClipOut( PixelSnappedIntRect(clip_left, paint_rect.Y() + legend->Location().Y(), @@ -101,7 +101,7 @@ void FieldsetPainter::PaintMask(const PaintInfo& paint_info, const LayoutPoint& paint_offset) { - if (layout_fieldset_.Style()->Visibility() != EVisibility::kVisible || + if (layout_fieldset_.StyleRef().Visibility() != EVisibility::kVisible || paint_info.phase != PaintPhase::kMask) return; @@ -117,7 +117,7 @@ // FIXME: We need to work with "rl" and "bt" block flow directions. In those // cases the legend is embedded in the right and bottom borders respectively. // https://bugs.webkit.org/show_bug.cgi?id=47236 - if (layout_fieldset_.Style()->IsHorizontalWritingMode()) { + if (layout_fieldset_.StyleRef().IsHorizontalWritingMode()) { LayoutUnit y_off = (legend->Location().Y() > LayoutUnit()) ? LayoutUnit()
diff --git a/third_party/blink/renderer/core/paint/file_upload_control_painter.cc b/third_party/blink/renderer/core/paint/file_upload_control_painter.cc index 8f20777..024c736e 100644 --- a/third_party/blink/renderer/core/paint/file_upload_control_painter.cc +++ b/third_party/blink/renderer/core/paint/file_upload_control_painter.cc
@@ -16,7 +16,7 @@ void FileUploadControlPainter::PaintObject(const PaintInfo& paint_info, const LayoutPoint& paint_offset) { - if (layout_file_upload_control_.Style()->Visibility() != + if (layout_file_upload_control_.StyleRef().Visibility() != EVisibility::kVisible) return; @@ -25,7 +25,7 @@ paint_info.context, layout_file_upload_control_, paint_info.phase)) { const String& displayed_filename = layout_file_upload_control_.FileTextValue(); - const Font& font = layout_file_upload_control_.Style()->GetFont(); + const Font& font = layout_file_upload_control_.StyleRef().GetFont(); TextRun text_run = ConstructTextRun( font, displayed_filename, layout_file_upload_control_.StyleRef(), kRespectDirection | kRespectDirectionOverride); @@ -46,7 +46,7 @@ button_width + LayoutFileUploadControl::kAfterButtonSpacing); float text_width = font.Width(text_run); LayoutUnit text_x; - if (layout_file_upload_control_.Style()->IsLeftToRightDirection()) + if (layout_file_upload_control_.StyleRef().IsLeftToRightDirection()) text_x = content_left + button_and_spacing_width; else text_x = @@ -70,7 +70,7 @@ TextRunPaintInfo text_run_paint_info(text_run); const SimpleFontData* font_data = - layout_file_upload_control_.Style()->GetFont().PrimaryFont(); + layout_file_upload_control_.StyleRef().GetFont().PrimaryFont(); if (!font_data) return; // FIXME: Shouldn't these offsets be rounded? crbug.com/350474
diff --git a/third_party/blink/renderer/core/paint/inline_box_painter_base.cc b/third_party/blink/renderer/core/paint/inline_box_painter_base.cc index 6bb6132..5842732 100644 --- a/third_party/blink/renderer/core/paint/inline_box_painter_base.cc +++ b/third_party/blink/renderer/core/paint/inline_box_painter_base.cc
@@ -19,6 +19,7 @@ const LayoutPoint& paint_offset, LayoutRect adjusted_frame_rect, BackgroundImageGeometry geometry, + bool object_has_multiple_boxes, bool include_logical_left_edge, bool include_logical_right_edge) { // Shadow comes first and is behind the background and border. @@ -27,14 +28,14 @@ Color background_color = line_style_.VisitedDependentColor(GetCSSPropertyBackgroundColor()); PaintFillLayers(box_painter, paint_info, background_color, - line_style_.BackgroundLayers(), adjusted_frame_rect, - geometry); + line_style_.BackgroundLayers(), adjusted_frame_rect, geometry, + object_has_multiple_boxes); PaintInsetBoxShadow(paint_info, line_style_, adjusted_frame_rect); IntRect adjusted_clip_rect; - BorderPaintingType border_painting_type = - GetBorderPaintType(adjusted_frame_rect, adjusted_clip_rect); + BorderPaintingType border_painting_type = GetBorderPaintType( + adjusted_frame_rect, adjusted_clip_rect, object_has_multiple_boxes); switch (border_painting_type) { case kDontPaintBorders: break; @@ -65,12 +66,16 @@ const FillLayer& layer, const LayoutRect& rect, BackgroundImageGeometry& geometry, + bool object_has_multiple_boxes, SkBlendMode op) { // FIXME: This should be a for loop or similar. It's a little non-trivial to // do so, however, since the layers need to be painted in reverse order. - if (layer.Next()) - PaintFillLayers(box_painter, info, c, *layer.Next(), rect, geometry, op); - PaintFillLayer(box_painter, info, c, layer, rect, geometry, op); + if (layer.Next()) { + PaintFillLayers(box_painter, info, c, *layer.Next(), rect, geometry, + object_has_multiple_boxes, op); + } + PaintFillLayer(box_painter, info, c, layer, rect, geometry, + object_has_multiple_boxes, op); } void InlineBoxPainterBase::PaintFillLayer(BoxPainterBase& box_painter, @@ -79,11 +84,12 @@ const FillLayer& fill_layer, const LayoutRect& paint_rect, BackgroundImageGeometry& geometry, + bool object_has_multiple_boxes, SkBlendMode op) { StyleImage* img = fill_layer.GetImage(); bool has_fill_image = img && img->CanRender(); - if (!object_has_multiple_boxes_ || + if (!object_has_multiple_boxes || (!has_fill_image && !style_.HasBorderRadius())) { box_painter.PaintFillLayer(paint_info, c, fill_layer, paint_rect, kBackgroundBleedNone, geometry, op, false); @@ -91,7 +97,7 @@ } // Handle fill images that clone or spans multiple lines. - bool multi_line = object_has_multiple_boxes_ && + bool multi_line = object_has_multiple_boxes && style_.BoxDecorationBreak() != EBoxDecorationBreak::kClone; LayoutRect rect = multi_line ? PaintRectForImageStrip(paint_rect, style_.Direction()) @@ -103,20 +109,4 @@ paint_rect.Size()); } -void InlineBoxPainterBase::PaintNormalBoxShadow(const PaintInfo& info, - const ComputedStyle& s, - const LayoutRect& paint_rect) { - BoxPainterBase::PaintNormalBoxShadow( - info, paint_rect, s, include_logical_left_edge_for_box_shadow_, - include_logical_right_edge_for_box_shadow_); -} - -void InlineBoxPainterBase::PaintInsetBoxShadow(const PaintInfo& info, - const ComputedStyle& s, - const LayoutRect& paint_rect) { - BoxPainterBase::PaintInsetBoxShadowWithBorderRect( - info, paint_rect, s, include_logical_left_edge_for_box_shadow_, - include_logical_right_edge_for_box_shadow_); -} - } // namespace blink
diff --git a/third_party/blink/renderer/core/paint/inline_box_painter_base.h b/third_party/blink/renderer/core/paint/inline_box_painter_base.h index 11725e5..726ce1e 100644 --- a/third_party/blink/renderer/core/paint/inline_box_painter_base.h +++ b/third_party/blink/renderer/core/paint/inline_box_painter_base.h
@@ -43,6 +43,7 @@ const LayoutPoint& paint_offset, LayoutRect adjusted_frame_rect, BackgroundImageGeometry, + bool object_has_multiple_boxes, bool include_logical_left_edge, bool include_logical_right_edge); @@ -53,6 +54,7 @@ const FillLayer&, const LayoutRect&, BackgroundImageGeometry& geometry, + bool object_has_multiple_boxes, SkBlendMode op = SkBlendMode::kSrcOver); void PaintFillLayer(BoxPainterBase&, const PaintInfo&, @@ -60,13 +62,14 @@ const FillLayer&, const LayoutRect&, BackgroundImageGeometry& geometry, + bool object_has_multiple_boxes, SkBlendMode op); - void PaintNormalBoxShadow(const PaintInfo&, - const ComputedStyle&, - const LayoutRect& paint_rect); - void PaintInsetBoxShadow(const PaintInfo&, - const ComputedStyle&, - const LayoutRect& paint_rect); + virtual void PaintNormalBoxShadow(const PaintInfo&, + const ComputedStyle&, + const LayoutRect& paint_rect) = 0; + virtual void PaintInsetBoxShadow(const PaintInfo&, + const ComputedStyle&, + const LayoutRect& paint_rect) = 0; virtual LayoutRect PaintRectForImageStrip(const LayoutRect&, TextDirection direction) const = 0; @@ -78,7 +81,8 @@ }; virtual BorderPaintingType GetBorderPaintType( const LayoutRect& adjusted_frame_rect, - IntRect& adjusted_clip_rect) const = 0; + IntRect& adjusted_clip_rect, + bool object_has_multiple_boxes) const = 0; const ImageResourceObserver& image_observer_; Member<const Document> document_; @@ -89,10 +93,6 @@ // Style taking ::first-line into account. const ComputedStyle& line_style_; - - bool object_has_multiple_boxes_; - bool include_logical_left_edge_for_box_shadow_; - bool include_logical_right_edge_for_box_shadow_; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/paint/inline_flow_box_painter.cc b/third_party/blink/renderer/core/paint/inline_flow_box_painter.cc index da881ea..9726482 100644 --- a/third_party/blink/renderer/core/paint/inline_flow_box_painter.cc +++ b/third_party/blink/renderer/core/paint/inline_flow_box_painter.cc
@@ -42,16 +42,6 @@ flow_box.GetLineLayoutItem().StyleRef(), flow_box.GetLineLayoutItem().StyleRef(flow_box.IsFirstLineStyle())), inline_flow_box_(flow_box) { - object_has_multiple_boxes_ = inline_flow_box_.PrevForSameLayoutObject() || - inline_flow_box_.NextForSameLayoutObject(); - bool force_include_logical_edges = - (!inline_flow_box_.PrevForSameLayoutObject() && - !inline_flow_box_.NextForSameLayoutObject()) || - !inline_flow_box_.Parent(); - include_logical_left_edge_for_box_shadow_ = - force_include_logical_edges || inline_flow_box_.IncludeLogicalLeftEdge(); - include_logical_right_edge_for_box_shadow_ = - force_include_logical_edges || inline_flow_box_.IncludeLogicalRightEdge(); } void InlineFlowBoxPainter::Paint(const PaintInfo& paint_info, @@ -162,12 +152,13 @@ InlineBoxPainterBase::BorderPaintingType InlineFlowBoxPainter::GetBorderPaintType(const LayoutRect& adjusted_frame_rect, - IntRect& adjusted_clip_rect) const { + IntRect& adjusted_clip_rect, + bool object_has_multiple_boxes) const { adjusted_clip_rect = PixelSnappedIntRect(adjusted_frame_rect); if (inline_flow_box_.Parent() && - inline_flow_box_.GetLineLayoutItem().Style()->HasBorderDecoration()) { + inline_flow_box_.GetLineLayoutItem().StyleRef().HasBorderDecoration()) { const NinePieceImage& border_image = - inline_flow_box_.GetLineLayoutItem().Style()->BorderImage(); + inline_flow_box_.GetLineLayoutItem().StyleRef().BorderImage(); StyleImage* border_image_source = border_image.GetImage(); bool has_border_image = border_image_source && border_image_source->CanRender(); @@ -197,7 +188,7 @@ if (RuntimeEnabledFeatures::PaintTouchActionRectsEnabled()) RecordHitTestData(paint_info, paint_offset); - if (inline_flow_box_.GetLineLayoutItem().Style()->Visibility() != + if (inline_flow_box_.GetLineLayoutItem().StyleRef().Visibility() != EVisibility::kVisible) return; @@ -226,12 +217,14 @@ LayoutRect paint_rect = AdjustedPaintRect(paint_offset); + bool object_has_multiple_boxes = inline_flow_box_.PrevForSameLayoutObject() || + inline_flow_box_.NextForSameLayoutObject(); const auto& box_model = *ToLayoutBoxModelObject( LineLayoutAPIShim::LayoutObjectFrom(inline_flow_box_.BoxModelObject())); BackgroundImageGeometry geometry(box_model); BoxModelObjectPainter box_painter(box_model, &inline_flow_box_); PaintBoxDecorationBackground(box_painter, paint_info, paint_offset, - paint_rect, geometry, + paint_rect, geometry, object_has_multiple_boxes, inline_flow_box_.IncludeLogicalLeftEdge(), inline_flow_box_.IncludeLogicalRightEdge()); } @@ -257,12 +250,15 @@ const auto& mask_nine_piece_image = box_model.StyleRef().MaskBoxImage(); const auto* mask_box_image = mask_nine_piece_image.GetImage(); + bool object_has_multiple_boxes = inline_flow_box_.PrevForSameLayoutObject() || + inline_flow_box_.NextForSameLayoutObject(); // Figure out if we need to push a transparency layer to render our mask. BackgroundImageGeometry geometry(box_model); BoxModelObjectPainter box_painter(box_model, &inline_flow_box_); PaintFillLayers(box_painter, paint_info, Color::kTransparent, - box_model.StyleRef().MaskLayers(), paint_rect, geometry); + box_model.StyleRef().MaskLayers(), paint_rect, geometry, + object_has_multiple_boxes); bool has_box_image = mask_box_image && mask_box_image->CanRender(); if (!has_box_image || !mask_box_image->IsLoaded()) { @@ -350,4 +346,20 @@ TouchActionRect(AdjustedPaintRect(paint_offset), touch_action)); } +void InlineFlowBoxPainter::PaintNormalBoxShadow(const PaintInfo& info, + const ComputedStyle& s, + const LayoutRect& paint_rect) { + BoxPainterBase::PaintNormalBoxShadow( + info, paint_rect, s, inline_flow_box_.IncludeLogicalLeftEdge(), + inline_flow_box_.IncludeLogicalRightEdge()); +} + +void InlineFlowBoxPainter::PaintInsetBoxShadow(const PaintInfo& info, + const ComputedStyle& s, + const LayoutRect& paint_rect) { + BoxPainterBase::PaintInsetBoxShadowWithBorderRect( + info, paint_rect, s, inline_flow_box_.IncludeLogicalLeftEdge(), + inline_flow_box_.IncludeLogicalRightEdge()); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/paint/inline_flow_box_painter.h b/third_party/blink/renderer/core/paint/inline_flow_box_painter.h index f303dc8..9029b8d2 100644 --- a/third_party/blink/renderer/core/paint/inline_flow_box_painter.h +++ b/third_party/blink/renderer/core/paint/inline_flow_box_painter.h
@@ -37,6 +37,12 @@ protected: LayoutRect PaintRectForImageStrip(const LayoutRect&, TextDirection) const override; + void PaintNormalBoxShadow(const PaintInfo&, + const ComputedStyle&, + const LayoutRect& paint_rect) override; + void PaintInsetBoxShadow(const PaintInfo&, + const ComputedStyle&, + const LayoutRect& paint_rect) override; private: void PaintBackgroundBorderShadow(const PaintInfo&, @@ -45,7 +51,8 @@ BorderPaintingType GetBorderPaintType( const LayoutRect& adjusted_frame_rect, - IntRect& adjusted_clip_rect) const override; + IntRect& adjusted_clip_rect, + bool object_has_multiple_boxes) const override; LayoutRect AdjustedPaintRect(const LayoutPoint& paint_offset) const;
diff --git a/third_party/blink/renderer/core/paint/inline_text_box_painter.cc b/third_party/blink/renderer/core/paint/inline_text_box_painter.cc index f5494b3f..4d6a58f2 100644 --- a/third_party/blink/renderer/core/paint/inline_text_box_painter.cc +++ b/third_party/blink/renderer/core/paint/inline_text_box_painter.cc
@@ -101,7 +101,7 @@ if (box.Truncation() != kCNoTruncation) { bool ltr = box.IsLeftToRightDirection(); bool flow_is_ltr = - box.GetLineLayoutItem().Style()->IsLeftToRightDirection(); + box.GetLineLayoutItem().StyleRef().IsLeftToRightDirection(); width = LayoutUnit(box.GetLineLayoutItem().Width( ltr == flow_is_ltr ? box.Start() : box.Start() + box.Truncation(), ltr == flow_is_ltr ? box.Truncation() : box.Len() - box.Truncation(), @@ -430,7 +430,7 @@ // This code path is only called in PaintPhaseForeground whereas we would // expect PaintPhaseSelection. The existing haveSelection logic in paint() // tests for != PaintPhaseTextClip. - if (inline_text_box_.GetLineLayoutItem().Style()->Visibility() != + if (inline_text_box_.GetLineLayoutItem().StyleRef().Visibility() != EVisibility::kVisible || inline_text_box_.Truncation() == kCFullTruncation || !inline_text_box_.Len()) @@ -513,13 +513,14 @@ if (background_color == Color::kTransparent) return; - int delta_y = - (inline_text_box_.GetLineLayoutItem().Style()->IsFlippedLinesWritingMode() - ? inline_text_box_.Root().SelectionBottom() - - inline_text_box_.LogicalBottom() - : inline_text_box_.LogicalTop() - - inline_text_box_.Root().SelectionTop()) - .ToInt(); + int delta_y = (inline_text_box_.GetLineLayoutItem() + .StyleRef() + .IsFlippedLinesWritingMode() + ? inline_text_box_.Root().SelectionBottom() - + inline_text_box_.LogicalBottom() + : inline_text_box_.LogicalTop() - + inline_text_box_.Root().SelectionTop()) + .ToInt(); int sel_height = inline_text_box_.Root().SelectionHeight().ToInt(); FloatPoint local_origin(box_origin.X().ToFloat(), box_origin.Y().ToFloat() - delta_y); @@ -723,10 +724,12 @@ LayoutUnit selection_bottom = inline_text_box_.Root().SelectionBottom(); LayoutUnit selection_top = inline_text_box_.Root().SelectionTop(); - int delta_y = RoundToInt( - inline_text_box_.GetLineLayoutItem().Style()->IsFlippedLinesWritingMode() - ? selection_bottom - inline_text_box_.LogicalBottom() - : inline_text_box_.LogicalTop() - selection_top); + int delta_y = + RoundToInt(inline_text_box_.GetLineLayoutItem() + .StyleRef() + .IsFlippedLinesWritingMode() + ? selection_bottom - inline_text_box_.LogicalBottom() + : inline_text_box_.LogicalTop() - selection_top); int sel_height = std::max(0, RoundToInt(selection_bottom - selection_top)); FloatPoint local_origin(box_rect.X().ToFloat(),
diff --git a/third_party/blink/renderer/core/paint/link_highlight_impl.cc b/third_party/blink/renderer/core/paint/link_highlight_impl.cc index e5e55976a..6a2ea27 100644 --- a/third_party/blink/renderer/core/paint/link_highlight_impl.cc +++ b/third_party/blink/renderer/core/paint/link_highlight_impl.cc
@@ -270,7 +270,8 @@ PaintFlags flags; flags.setStyle(PaintFlags::kFill_Style); flags.setAntiAlias(true); - flags.setColor(node_->GetLayoutObject()->Style()->TapHighlightColor().Rgb()); + flags.setColor( + node_->GetLayoutObject()->StyleRef().TapHighlightColor().Rgb()); canvas->drawPath(path_.GetSkPath(), flags); display_list->StartPaint();
diff --git a/third_party/blink/renderer/core/paint/list_marker_painter.cc b/third_party/blink/renderer/core/paint/list_marker_painter.cc index 2dcc4dcc..833bda6 100644 --- a/third_party/blink/renderer/core/paint/list_marker_painter.cc +++ b/third_party/blink/renderer/core/paint/list_marker_painter.cc
@@ -54,7 +54,7 @@ if (paint_info.phase != PaintPhase::kForeground) return; - if (layout_list_marker_.Style()->Visibility() != EVisibility::kVisible) + if (layout_list_marker_.StyleRef().Visibility() != EVisibility::kVisible) return; if (DrawingRecorder::UseCachedDrawingIfPossible( @@ -115,12 +115,12 @@ // Apply the color to the list marker text. context.SetFillColor(color); - const Font& font = layout_list_marker_.Style()->GetFont(); + const Font& font = layout_list_marker_.StyleRef().GetFont(); TextRun text_run = ConstructTextRun(font, layout_list_marker_.GetText(), layout_list_marker_.StyleRef()); GraphicsContextStateSaver state_saver(context, false); - if (!layout_list_marker_.Style()->IsHorizontalWritingMode()) { + if (!layout_list_marker_.StyleRef().IsHorizontalWritingMode()) { marker.MoveBy(-box_origin); marker = marker.TransposedRect(); marker.MoveBy( @@ -135,7 +135,7 @@ TextRunPaintInfo text_run_paint_info(text_run); text_run_paint_info.bounds = FloatRect(EnclosingIntRect(marker)); const SimpleFontData* font_data = - layout_list_marker_.Style()->GetFont().PrimaryFont(); + layout_list_marker_.StyleRef().GetFont().PrimaryFont(); FloatPoint text_origin = FloatPoint(marker.X().Round(), marker.Y().Round() + @@ -157,16 +157,16 @@ } const UChar suffix = - ListMarkerText::Suffix(layout_list_marker_.Style()->ListStyleType(), + ListMarkerText::Suffix(layout_list_marker_.StyleRef().ListStyleType(), layout_list_marker_.ListItem()->Value()); UChar suffix_str[2] = {suffix, static_cast<UChar>(' ')}; TextRun suffix_run = ConstructTextRun(font, suffix_str, 2, layout_list_marker_.StyleRef(), - layout_list_marker_.Style()->Direction()); + layout_list_marker_.StyleRef().Direction()); TextRunPaintInfo suffix_run_info(suffix_run); suffix_run_info.bounds = FloatRect(EnclosingIntRect(marker)); - if (layout_list_marker_.Style()->IsLeftToRightDirection()) { + if (layout_list_marker_.StyleRef().IsLeftToRightDirection()) { context.DrawText(font, text_run_paint_info, text_origin); context.DrawText(font, suffix_run_info, text_origin + FloatSize(IntSize(font.Width(text_run), 0)));
diff --git a/third_party/blink/renderer/core/paint/multi_column_set_painter.cc b/third_party/blink/renderer/core/paint/multi_column_set_painter.cc index 04eef4d..2f55be4 100644 --- a/third_party/blink/renderer/core/paint/multi_column_set_painter.cc +++ b/third_party/blink/renderer/core/paint/multi_column_set_painter.cc
@@ -16,7 +16,7 @@ void MultiColumnSetPainter::PaintObject(const PaintInfo& paint_info, const LayoutPoint& paint_offset) { - if (layout_multi_column_set_.Style()->Visibility() != EVisibility::kVisible) + if (layout_multi_column_set_.StyleRef().Visibility() != EVisibility::kVisible) return; BlockPainter(layout_multi_column_set_).PaintObject(paint_info, paint_offset); @@ -54,7 +54,7 @@ layout_multi_column_set_.MultiColumnBlockFlow()->StyleRef(); EBorderStyle rule_style = block_style.ColumnRuleStyle(); bool left_to_right = - layout_multi_column_set_.Style()->IsLeftToRightDirection(); + layout_multi_column_set_.StyleRef().IsLeftToRightDirection(); BoxSide box_side = layout_multi_column_set_.IsHorizontalWritingMode() ? left_to_right ? BoxSide::kLeft : BoxSide::kRight : left_to_right ? BoxSide::kTop : BoxSide::kBottom;
diff --git a/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.cc index a5ebe5b..c884762 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.cc
@@ -32,15 +32,6 @@ border_edges_(NGBorderEdges::FromPhysical( inline_box_fragment.PhysicalFragment().BorderEdges(), inline_box_fragment.Style().GetWritingMode())) { - NGPaintFragment::FragmentRange fragments = - inline_box_fragment.InlineFragmentsFor( - inline_box_fragment.GetLayoutObject()); - NGPaintFragment::FragmentRange::iterator iter = fragments.begin(); - object_has_multiple_boxes_ = ++iter != fragments.end(); - include_logical_left_edge_for_box_shadow_ = - !object_has_multiple_boxes_ || border_edges_.line_left; - include_logical_right_edge_for_box_shadow_ = - !object_has_multiple_boxes_ || border_edges_.line_right; } void NGInlineBoxFragmentPainter::Paint(const PaintInfo& paint_info, @@ -87,13 +78,20 @@ LayoutRect adjusted_frame_rect = LayoutRect(adjusted_paint_offset, frame_rect.Size()); + NGPaintFragment::FragmentRange fragments = + inline_box_fragment_.InlineFragmentsFor( + inline_box_fragment_.GetLayoutObject()); + NGPaintFragment::FragmentRange::iterator iter = fragments.begin(); + bool object_has_multiple_boxes = ++iter != fragments.end(); + // TODO(eae): Switch to LayoutNG version of BackgroundImageGeometry. BackgroundImageGeometry geometry(*static_cast<const LayoutBoxModelObject*>( inline_box_fragment_.GetLayoutObject())); NGBoxFragmentPainter box_painter(inline_box_fragment_); PaintBoxDecorationBackground( box_painter, paint_info, paint_offset, adjusted_frame_rect, geometry, - border_edges_.line_left, border_edges_.line_right); + object_has_multiple_boxes, border_edges_.line_left, + border_edges_.line_right); } void NGInlineBoxFragmentPainter::ComputeFragmentOffsetOnLine( @@ -101,7 +99,6 @@ LayoutUnit* offset_on_line, LayoutUnit* total_width) const { WritingMode writing_mode = inline_box_fragment_.Style().GetWritingMode(); - DCHECK(object_has_multiple_boxes_); NGPaintFragment::FragmentRange fragments = inline_box_fragment_.InlineFragmentsFor( inline_box_fragment_.GetLayoutObject()); @@ -139,7 +136,6 @@ // multiple lines, you still paint it as though you had one single line. This // means each line has to pick up the background where the previous line left // off. - DCHECK(object_has_multiple_boxes_); LayoutUnit offset_on_line; LayoutUnit total_width; ComputeFragmentOffsetOnLine(direction, &offset_on_line, &total_width); @@ -184,7 +180,8 @@ InlineBoxPainterBase::BorderPaintingType NGInlineBoxFragmentPainter::GetBorderPaintType( const LayoutRect& adjusted_frame_rect, - IntRect& adjusted_clip_rect) const { + IntRect& adjusted_clip_rect, + bool object_has_multiple_boxes) const { adjusted_clip_rect = PixelSnappedIntRect(adjusted_frame_rect); if (inline_box_fragment_.Parent() && inline_box_fragment_.Style().HasBorderDecoration()) { @@ -199,7 +196,7 @@ // The simple case is where we either have no border image or we are the // only box for this object. In those cases only a single call to draw is // required. - if (!has_border_image || !object_has_multiple_boxes_) + if (!has_border_image || !object_has_multiple_boxes) return kPaintBordersWithoutClip; // We have a border image that spans multiple lines. @@ -211,4 +208,20 @@ return kDontPaintBorders; } +void NGInlineBoxFragmentPainter::PaintNormalBoxShadow( + const PaintInfo& info, + const ComputedStyle& s, + const LayoutRect& paint_rect) { + BoxPainterBase::PaintNormalBoxShadow( + info, paint_rect, s, border_edges_.line_left, border_edges_.line_right); +} + +void NGInlineBoxFragmentPainter::PaintInsetBoxShadow( + const PaintInfo& info, + const ComputedStyle& s, + const LayoutRect& paint_rect) { + BoxPainterBase::PaintInsetBoxShadowWithBorderRect( + info, paint_rect, s, border_edges_.line_left, border_edges_.line_right); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.h b/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.h index 1baa3b5..881e3144 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.h +++ b/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.h
@@ -37,7 +37,14 @@ BorderPaintingType GetBorderPaintType( const LayoutRect& adjusted_frame_rect, - IntRect& adjusted_clip_rect) const override; + IntRect& adjusted_clip_rect, + bool object_has_multiple_boxes) const override; + void PaintNormalBoxShadow(const PaintInfo&, + const ComputedStyle&, + const LayoutRect& paint_rect) override; + void PaintInsetBoxShadow(const PaintInfo&, + const ComputedStyle&, + const LayoutRect& paint_rect) override; private: void PaintBackgroundBorderShadow(const PaintInfo&,
diff --git a/third_party/blink/renderer/core/paint/object_paint_invalidator_test.cc b/third_party/blink/renderer/core/paint/object_paint_invalidator_test.cc index 30701f66..5f053347 100644 --- a/third_party/blink/renderer/core/paint/object_paint_invalidator_test.cc +++ b/third_party/blink/renderer/core/paint/object_paint_invalidator_test.cc
@@ -4,6 +4,7 @@ #include "third_party/blink/renderer/core/paint/object_paint_invalidator.h" +#include "testing/gmock/include/gmock/gmock-matchers.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/renderer/core/editing/frame_selection.h" #include "third_party/blink/renderer/core/layout/layout_object.h" @@ -16,6 +17,9 @@ using ObjectPaintInvalidatorTest = RenderingTest; +using PaintInvalidation = LocalFrameView::ObjectPaintInvalidation; +using ::testing::ElementsAre; + TEST_F(ObjectPaintInvalidatorTest, TraverseNonCompositingDescendantsInPaintOrder) { if (RuntimeEnabledFeatures::SlimmingPaintV2Enabled()) @@ -49,23 +53,23 @@ ObjectPaintInvalidator(*GetLayoutObjectByElementId("container")) .InvalidateDisplayItemClientsIncludingNonCompositingDescendants( PaintInvalidationReason::kSubtree); - std::unique_ptr<JSONArray> invalidations = - GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); + EXPECT_THAT(*GetDocument().View()->TrackedObjectPaintInvalidations(), + ElementsAre( + PaintInvalidation{ + GetLayoutObjectByElementId("container")->DebugName(), + PaintInvalidationReason::kSubtree}, + PaintInvalidation{ + GetLayoutObjectByElementId("normal-child")->DebugName(), + PaintInvalidationReason::kSubtree}, + PaintInvalidation{ + GetLayoutObjectByElementId("stacked-child")->DebugName(), + PaintInvalidationReason::kSubtree}, + PaintInvalidation{ + GetLayoutObjectByElementId( + "stacked-child-of-composited-non-stacking-context") + ->DebugName(), + PaintInvalidationReason::kSubtree})); GetDocument().View()->SetTracksPaintInvalidations(false); - - ASSERT_EQ(4u, invalidations->size()); - String s; - JSONObject::Cast(invalidations->at(0))->Get("object")->AsString(&s); - EXPECT_EQ(GetLayoutObjectByElementId("container")->DebugName(), s); - JSONObject::Cast(invalidations->at(1))->Get("object")->AsString(&s); - EXPECT_EQ(GetLayoutObjectByElementId("normal-child")->DebugName(), s); - JSONObject::Cast(invalidations->at(2))->Get("object")->AsString(&s); - EXPECT_EQ(GetLayoutObjectByElementId("stacked-child")->DebugName(), s); - JSONObject::Cast(invalidations->at(3))->Get("object")->AsString(&s); - EXPECT_EQ(GetLayoutObjectByElementId( - "stacked-child-of-composited-non-stacking-context") - ->DebugName(), - s); } TEST_F(ObjectPaintInvalidatorTest, TraverseFloatUnderCompositedInline) { @@ -137,21 +141,17 @@ EXPECT_TRUE(composited_container_layer->NeedsRepaint()); EXPECT_FALSE(span_layer->NeedsRepaint()); - std::unique_ptr<JSONArray> invalidations = - GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); + EXPECT_THAT( + *GetDocument().View()->TrackedObjectPaintInvalidations(), + ElementsAre(PaintInvalidation{composited_container->DebugName(), + PaintInvalidationReason::kSubtree}, + PaintInvalidation{containing_block->DebugName(), + PaintInvalidationReason::kSubtree}, + PaintInvalidation{target->DebugName(), + PaintInvalidationReason::kSubtree}, + PaintInvalidation{"LayoutText #text", + PaintInvalidationReason::kSubtree})); GetDocument().View()->SetTracksPaintInvalidations(false); - - ASSERT_EQ(4u, invalidations->size()); - String s; - JSONObject::Cast(invalidations->at(0))->Get("object")->AsString(&s); - EXPECT_EQ(composited_container->DebugName(), s); - JSONObject::Cast(invalidations->at(1))->Get("object")->AsString(&s); - EXPECT_EQ(containing_block->DebugName(), s); - JSONObject::Cast(invalidations->at(2))->Get("object")->AsString(&s); - EXPECT_EQ(target->DebugName(), s); - // This is the text node after the span. - JSONObject::Cast(invalidations->at(3))->Get("object")->AsString(&s); - EXPECT_EQ("LayoutText #text", s); } TEST_F(ObjectPaintInvalidatorTest, @@ -206,21 +206,17 @@ EXPECT_FALSE(span_layer->NeedsRepaint()); EXPECT_FALSE(inner_span_layer->NeedsRepaint()); - std::unique_ptr<JSONArray> invalidations = - GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); + EXPECT_THAT( + *GetDocument().View()->TrackedObjectPaintInvalidations(), + ElementsAre(PaintInvalidation{composited_container->DebugName(), + PaintInvalidationReason::kSubtree}, + PaintInvalidation{containing_block->DebugName(), + PaintInvalidationReason::kSubtree}, + PaintInvalidation{target->DebugName(), + PaintInvalidationReason::kSubtree}, + PaintInvalidation{"LayoutText #text", + PaintInvalidationReason::kSubtree})); GetDocument().View()->SetTracksPaintInvalidations(false); - - ASSERT_EQ(4u, invalidations->size()); - String s; - JSONObject::Cast(invalidations->at(0))->Get("object")->AsString(&s); - EXPECT_EQ(composited_container->DebugName(), s); - JSONObject::Cast(invalidations->at(1))->Get("object")->AsString(&s); - EXPECT_EQ(containing_block->DebugName(), s); - JSONObject::Cast(invalidations->at(2))->Get("object")->AsString(&s); - EXPECT_EQ(target->DebugName(), s); - // This is the text node after the span. - JSONObject::Cast(invalidations->at(3))->Get("object")->AsString(&s); - EXPECT_EQ("LayoutText #text", s); } TEST_F(ObjectPaintInvalidatorTest, TraverseStackedFloatUnderCompositedInline) { @@ -252,18 +248,15 @@ PaintInvalidationReason::kSubtree); EXPECT_TRUE(span_layer->NeedsRepaint()); - std::unique_ptr<JSONArray> invalidations = - GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); + EXPECT_THAT( + *GetDocument().View()->TrackedObjectPaintInvalidations(), + ElementsAre(PaintInvalidation{span->DebugName(), + PaintInvalidationReason::kSubtree}, + PaintInvalidation{"LayoutText #text", + PaintInvalidationReason::kSubtree}, + PaintInvalidation{target->DebugName(), + PaintInvalidationReason::kSubtree})); GetDocument().View()->SetTracksPaintInvalidations(false); - - ASSERT_EQ(3u, invalidations->size()); - String s; - JSONObject::Cast(invalidations->at(0))->Get("object")->AsString(&s); - EXPECT_EQ(span->DebugName(), s); - JSONObject::Cast(invalidations->at(1))->Get("object")->AsString(&s); - EXPECT_EQ("LayoutText #text", s); - JSONObject::Cast(invalidations->at(2))->Get("object")->AsString(&s); - EXPECT_EQ(target->DebugName(), s); } TEST_F(ObjectPaintInvalidatorTest, InvalidatePaintRectangle) { @@ -297,19 +290,12 @@ EXPECT_EQ(LayoutRect(), target->PartialInvalidationLocalRect()); EXPECT_EQ(LayoutRect(), target->PartialInvalidationVisualRect()); - auto object_invalidations = - GetDocument().View()->TrackedObjectPaintInvalidationsAsJSON(); - ASSERT_EQ(2u, object_invalidations->size()); - for (int i = 0; i < 2; i++) { - String s; - const auto* entry = JSONObject::Cast(object_invalidations->at(i)); - entry->Get("reason")->AsString(&s); - EXPECT_EQ(String(PaintInvalidationReasonToString( - PaintInvalidationReason::kRectangle)), - s); - entry->Get("object")->AsString(&s); - EXPECT_EQ(target->DebugName(), s); - } + EXPECT_THAT( + *GetDocument().View()->TrackedObjectPaintInvalidations(), + ElementsAre(PaintInvalidation{target->DebugName(), + PaintInvalidationReason::kRectangle}, + PaintInvalidation{target->DebugName(), + PaintInvalidationReason::kRectangle})); const auto& raster_invalidations = GetLayoutView() .Layer()
diff --git a/third_party/blink/renderer/core/paint/paint_and_raster_invalidation_test.cc b/third_party/blink/renderer/core/paint/paint_and_raster_invalidation_test.cc index b4e59a1..b602bf0 100644 --- a/third_party/blink/renderer/core/paint/paint_and_raster_invalidation_test.cc +++ b/third_party/blink/renderer/core/paint/paint_and_raster_invalidation_test.cc
@@ -854,6 +854,34 @@ GetDocument().View()->SetTracksPaintInvalidations(false); } +TEST_P(PaintAndRasterInvalidationTest, ResizeContainerOfFixedSizeSVG) { + SetBodyInnerHTML(R"HTML( + <div id="target" style="width: 100px; height: 100px"> + <svg viewBox="0 0 200 200" width="100" height="100"> + <rect id="rect" width="100%" height="100%"/> + </svg> + </div> + )HTML"); + + Element* target = GetDocument().getElementById("target"); + GetDocument().View()->SetTracksPaintInvalidations(true); + target->setAttribute(HTMLNames::styleAttr, "width: 200px; height: 200px"); + GetDocument().View()->UpdateAllLifecyclePhases(); + + // No raster invalidations because the resized-div doesn't paint anything by + // itself, and the svg is fixed sized. + EXPECT_THAT(GetRasterInvalidationTracking()->Invalidations(), + UnorderedElementsAre()); + // At least we don't invalidate paint of the SVG rect. + for (const auto& paint_invalidation : + *GetDocument().View()->TrackedObjectPaintInvalidations()) { + EXPECT_NE(GetLayoutObjectByElementId("rect")->DebugName(), + paint_invalidation.name); + } + + GetDocument().View()->SetTracksPaintInvalidations(false); +} + class PaintInvalidatorTestClient : public EmptyChromeClient { public: void InvalidateRect(const IntRect&) override {
diff --git a/third_party/blink/renderer/core/paint/paint_layer.cc b/third_party/blink/renderer/core/paint/paint_layer.cc index 13e0c5d5..77b9981 100644 --- a/third_party/blink/renderer/core/paint/paint_layer.cc +++ b/third_party/blink/renderer/core/paint/paint_layer.cc
@@ -325,12 +325,13 @@ void PaintLayer::UpdateLayerPositionRecursive( UpdateLayerPositionBehavior behavior) { + LayoutPoint old_location = location_; switch (behavior) { case AllLayers: UpdateLayerPosition(); break; case OnlyStickyLayers: - if (GetLayoutObject().Style()->HasStickyConstrainedPosition()) + if (GetLayoutObject().StyleRef().HasStickyConstrainedPosition()) UpdateLayerPosition(); if (PaintLayerScrollableArea* scroller = GetScrollableArea()) { if (!scroller->HasStickyDescendants()) @@ -341,12 +342,15 @@ NOTREACHED(); } + if (location_ != old_location) + SetNeedsCompositingInputsUpdate(); + for (PaintLayer* child = FirstChild(); child; child = child->NextSibling()) child->UpdateLayerPositionRecursive(behavior); } bool PaintLayer::SticksToScroller() const { - if (GetLayoutObject().Style()->GetPosition() != EPosition::kSticky) + if (GetLayoutObject().StyleRef().GetPosition() != EPosition::kSticky) return false; if (auto* ancestor_scrollable_area = AncestorOverflowLayer()->GetScrollableArea()) { @@ -358,7 +362,7 @@ } bool PaintLayer::FixedToViewport() const { - if (GetLayoutObject().Style()->GetPosition() != EPosition::kFixed) + if (GetLayoutObject().StyleRef().GetPosition() != EPosition::kFixed) return false; // TODO(pdr): This approach of calculating the nearest scroll node is O(n). @@ -433,7 +437,7 @@ LayoutBox* box = GetLayoutBox(); DCHECK(box); transform->MakeIdentity(); - box->Style()->ApplyTransform( + box->StyleRef().ApplyTransform( *transform, box->Size(), ComputedStyle::kIncludeTransformOrigin, ComputedStyle::kIncludeMotionPath, ComputedStyle::kIncludeIndependentTransformProperties); @@ -775,14 +779,14 @@ } bool previously_has_visible_content = has_visible_content_; - if (GetLayoutObject().Style()->Visibility() == EVisibility::kVisible) { + if (GetLayoutObject().StyleRef().Visibility() == EVisibility::kVisible) { has_visible_content_ = true; } else { // layer may be hidden but still have some visible content, check for this has_visible_content_ = false; LayoutObject* r = GetLayoutObject().SlowFirstChild(); while (r) { - if (r->Style()->Visibility() == EVisibility::kVisible && + if (r->StyleRef().Visibility() == EVisibility::kVisible && (!r->HasLayer() || !r->EnclosingLayer()->IsSelfPaintingLayer())) { has_visible_content_ = true; break; @@ -887,7 +891,7 @@ if (GetLayoutObject().IsOutOfFlowPositioned() && container.IsLayoutInline() && container.CanContainOutOfFlowPositionedElement( - GetLayoutObject().Style()->GetPosition())) { + GetLayoutObject().StyleRef().GetPosition())) { // Adjust offset for absolute under in-flow positioned inline. LayoutSize offset = ToLayoutInline(container).OffsetForInFlowPositionedInline( @@ -925,6 +929,9 @@ } else if (LayoutBox* box = GetLayoutBox()) { size_ = box->Size(); } + if (old_size != size_) + SetNeedsCompositingInputsUpdate(); + return old_size != size_; } @@ -1396,7 +1403,7 @@ MarkAncestorChainForDescendantDependentFlagsUpdate(); } - if (GetLayoutObject().Style()->Visibility() != EVisibility::kVisible) + if (GetLayoutObject().StyleRef().Visibility() != EVisibility::kVisible) DirtyVisibleContentStatus(); old_child->SetPreviousSibling(nullptr); @@ -1661,7 +1668,7 @@ return scrollable_area_ && (scrollable_area_->HasScrollbar() || scrollable_area_->ScrollCorner() || - GetLayoutObject().Style()->Resize() != EResize::kNone); + GetLayoutObject().StyleRef().Resize() != EResize::kNone); } void PaintLayer::AppendSingleFragmentIgnoringPagination( @@ -2457,7 +2464,7 @@ FloatRect float_reference_box(reference_box); ClipPathOperation* clip_path_operation = - GetLayoutObject().Style()->ClipPath(); + GetLayoutObject().StyleRef().ClipPath(); DCHECK(clip_path_operation); if (clip_path_operation->GetType() == ClipPathOperation::SHAPE) { ShapeClipPathOperation* clip_path = @@ -2850,7 +2857,7 @@ } bool PaintLayer::CompositesWithOpacity() const { - return OpacityAncestor() || GetLayoutObject().Style()->HasOpacity(); + return OpacityAncestor() || GetLayoutObject().StyleRef().HasOpacity(); } bool PaintLayer::BackgroundIsKnownToBeOpaqueInRect( @@ -2861,14 +2868,14 @@ // We can't use hasVisibleContent(), because that will be true if our // layoutObject is hidden, but some child is visible and that child doesn't // cover the entire rect. - if (GetLayoutObject().Style()->Visibility() != EVisibility::kVisible) + if (GetLayoutObject().StyleRef().Visibility() != EVisibility::kVisible) return false; if (GetLayoutObject().HasMask() || GetLayoutObject().HasClipPath()) return false; if (PaintsWithFilters() && - GetLayoutObject().Style()->Filter().HasFilterThatAffectsOpacity()) + GetLayoutObject().StyleRef().Filter().HasFilterThatAffectsOpacity()) return false; // FIXME: Handle simple transforms. @@ -2876,7 +2883,7 @@ return false; if (!RuntimeEnabledFeatures::CompositeOpaqueFixedPositionEnabled() && - GetLayoutObject().Style()->GetPosition() == EPosition::kFixed && + GetLayoutObject().StyleRef().GetPosition() == EPosition::kFixed && GetCompositingState() != kPaintsIntoOwnBacking) return false; @@ -2987,8 +2994,8 @@ } bool PaintLayer::HasBoxDecorationsOrBackground() const { - return GetLayoutObject().Style()->HasBoxDecorations() || - GetLayoutObject().Style()->HasBackground(); + return GetLayoutObject().StyleRef().HasBoxDecorations() || + GetLayoutObject().StyleRef().HasBackground(); } bool PaintLayer::HasVisibleBoxDecorations() const { @@ -3079,14 +3086,14 @@ // Layers even when the non-transparent Layers are already a // stacking context. if (diff.OpacityChanged() && - layout_object_.Style()->HasOpacity() != old_style->HasOpacity()) + layout_object_.StyleRef().HasOpacity() != old_style->HasOpacity()) return false; // Changes in pointer-events affect hit test visibility of the scrollable // area and its |m_scrollsOverflow| value which determines if the layer // requires composited scrolling or not. if (scrollable_area_ && - layout_object_.Style()->PointerEvents() != old_style->PointerEvents()) + layout_object_.StyleRef().PointerEvents() != old_style->PointerEvents()) return false; UpdateTransform(old_style, GetLayoutObject().StyleRef()); @@ -3144,6 +3151,9 @@ SetNeedsCompositingInputsUpdate(); } + if (diff.NeedsLayout()) + SetNeedsCompositingInputsUpdate(); + // A scroller that changes background color might become opaque or not // opaque, which in turn affects whether it can be composited on low-DPI // screens. @@ -3255,7 +3265,7 @@ // sticky viewport constrained object, it is no longer known to be // constrained by the root. if (AncestorOverflowLayer()->IsRootLayer() && - GetLayoutObject().Style()->HasStickyConstrainedPosition()) { + GetLayoutObject().StyleRef().HasStickyConstrainedPosition()) { if (LocalFrameView* frame_view = GetLayoutObject().GetFrameView()) frame_view->RemoveViewportConstrainedObject(GetLayoutObject()); } @@ -3336,7 +3346,7 @@ if (!Size().IsEmpty()) { Vector<TouchActionRect> rect; TouchAction whitelisted_touch_action = - GetLayoutObject().Style()->GetEffectiveTouchAction() & + GetLayoutObject().StyleRef().GetEffectiveTouchAction() & supported_fast_actions; if (GetLayoutBox() && GetLayoutBox()->ScrollsOverflow()) {
diff --git a/third_party/blink/renderer/core/paint/paint_layer.h b/third_party/blink/renderer/core/paint/paint_layer.h index b3c274b1..b28b60d 100644 --- a/third_party/blink/renderer/core/paint/paint_layer.h +++ b/third_party/blink/renderer/core/paint/paint_layer.h
@@ -261,7 +261,7 @@ bool IsTransparent() const { return GetLayoutObject().IsTransparent() || - GetLayoutObject().Style()->HasBlendMode() || + GetLayoutObject().StyleRef().HasBlendMode() || GetLayoutObject().HasMask(); } @@ -484,7 +484,9 @@ // Note that this transform does not have the perspective-origin baked in. TransformationMatrix PerspectiveTransform() const; FloatPoint PerspectiveOrigin() const; - bool Preserves3D() const { return GetLayoutObject().Style()->Preserves3D(); } + bool Preserves3D() const { + return GetLayoutObject().StyleRef().Preserves3D(); + } bool Has3DTransform() const { return rare_data_ && rare_data_->transform && !rare_data_->transform->IsAffine(); @@ -494,7 +496,7 @@ // https://bugs.webkit.org/show_bug.cgi?id=106959 bool ShouldPreserve3D() const { return !GetLayoutObject().HasReflection() && - GetLayoutObject().Style()->Preserves3D(); + GetLayoutObject().StyleRef().Preserves3D(); } // Returns |true| if any property that renders using filter operations is
diff --git a/third_party/blink/renderer/core/paint/paint_layer_painter.cc b/third_party/blink/renderer/core/paint/paint_layer_painter.cc index 9bcb7620..acd1965 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_painter.cc +++ b/third_party/blink/renderer/core/paint/paint_layer_painter.cc
@@ -350,12 +350,13 @@ paint_layer_.GetCompositingState() == kPaintsIntoOwnBacking ? paint_layer_.SubpixelAccumulation() : painting_info_arg.sub_pixel_accumulation; - ShouldRespectOverflowClipType respect_overflow_clip = - ShouldRespectOverflowClip(paint_flags, paint_layer_.GetLayoutObject()); PaintLayerPaintingInfo painting_info = painting_info_arg; AdjustForPaintProperties(painting_info, paint_flags); + ShouldRespectOverflowClipType respect_overflow_clip = + ShouldRespectOverflowClip(paint_flags, paint_layer_.GetLayoutObject()); + bool should_create_subsequence = ShouldCreateSubsequence( paint_layer_, context, painting_info_arg, paint_flags);
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 766fd23..5455935c 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
@@ -353,7 +353,7 @@ // (b) Both scrollbars are present. bool has_horizontal_bar = HorizontalScrollbar(); bool has_vertical_bar = VerticalScrollbar(); - bool has_resizer = GetLayoutBox()->Style()->Resize() != EResize::kNone; + bool has_resizer = GetLayoutBox()->StyleRef().Resize() != EResize::kNone; if ((has_horizontal_bar && has_vertical_bar) || (has_resizer && (has_horizontal_bar || has_vertical_bar))) { return CornerRect(GetLayoutBox()->PixelSnappedBorderBoxRect( @@ -516,7 +516,7 @@ // TODO(pdr): This invalidation can be removed if the local background // attachment is painted into the scrolling contents. if (ScrollsOverflow() && - GetLayoutBox()->Style()->BackgroundLayers().Attachment() == + GetLayoutBox()->StyleRef().BackgroundLayers().Attachment() == EFillAttachment::kLocal) { if (!UsesCompositedScrolling()) requires_paint_invalidation = true; @@ -694,6 +694,7 @@ ScrollableArea::ContentsResized(); // Need to update the bounds of the scroll property. GetLayoutBox()->SetNeedsPaintPropertyUpdate(); + Layer()->SetNeedsCompositingInputsUpdate(); } IntPoint PaintLayerScrollableArea::LastKnownMousePosition() const { @@ -803,8 +804,8 @@ } EOverflow overflow_style = (orientation == kHorizontalScrollbar) - ? GetLayoutBox()->Style()->OverflowX() - : GetLayoutBox()->Style()->OverflowY(); + ? GetLayoutBox()->StyleRef().OverflowX() + : GetLayoutBox()->StyleRef().OverflowY(); return (overflow_style == EOverflow::kScroll || overflow_style == EOverflow::kAuto || overflow_style == EOverflow::kOverlay); @@ -956,46 +957,47 @@ GetLayoutBox()->GetDocument().SetAnnotatedRegionsDirty(true); // Our proprietary overflow: overlay value doesn't trigger a layout. - // If the box is managed by LayoutNG, don't go here. We don't want to - // re-enter the NG layout algorithm for this box from here. if (((horizontal_scrollbar_should_change && - GetLayoutBox()->Style()->OverflowX() != EOverflow::kOverlay) || + GetLayoutBox()->StyleRef().OverflowX() != EOverflow::kOverlay) || (vertical_scrollbar_should_change && - GetLayoutBox()->Style()->OverflowY() != EOverflow::kOverlay)) && - !IsManagedByLayoutNG(*GetLayoutBox())) { + GetLayoutBox()->StyleRef().OverflowY() != EOverflow::kOverlay))) { if ((vertical_scrollbar_should_change && GetLayoutBox()->IsHorizontalWritingMode()) || (horizontal_scrollbar_should_change && !GetLayoutBox()->IsHorizontalWritingMode())) { GetLayoutBox()->SetPreferredLogicalWidthsDirty(); } - if (PreventRelayoutScope::RelayoutIsPrevented()) { - // We're not doing re-layout right now, but we still want to - // add the scrollbar to the logical width now, to facilitate parent - // layout. - GetLayoutBox()->UpdateLogicalWidth(); - PreventRelayoutScope::SetBoxNeedsLayout(*this, had_horizontal_scrollbar, - had_vertical_scrollbar); - } else { - in_overflow_relayout_ = true; - SubtreeLayoutScope layout_scope(*GetLayoutBox()); - layout_scope.SetNeedsLayout( - GetLayoutBox(), LayoutInvalidationReason::kScrollbarChanged); - if (GetLayoutBox()->IsLayoutBlock()) { - LayoutBlock* block = ToLayoutBlock(GetLayoutBox()); - block->ScrollbarsChanged(horizontal_scrollbar_should_change, - vertical_scrollbar_should_change); - block->UpdateBlockLayout(true); + // If the box is managed by LayoutNG, don't go here. We don't want to + // re-enter the NG layout algorithm for this box from here. + if (!IsManagedByLayoutNG(*GetLayoutBox())) { + if (PreventRelayoutScope::RelayoutIsPrevented()) { + // We're not doing re-layout right now, but we still want to + // add the scrollbar to the logical width now, to facilitate parent + // layout. + GetLayoutBox()->UpdateLogicalWidth(); + PreventRelayoutScope::SetBoxNeedsLayout( + *this, had_horizontal_scrollbar, had_vertical_scrollbar); } else { - GetLayoutBox()->UpdateLayout(); + in_overflow_relayout_ = true; + SubtreeLayoutScope layout_scope(*GetLayoutBox()); + layout_scope.SetNeedsLayout( + GetLayoutBox(), LayoutInvalidationReason::kScrollbarChanged); + if (GetLayoutBox()->IsLayoutBlock()) { + LayoutBlock* block = ToLayoutBlock(GetLayoutBox()); + block->ScrollbarsChanged(horizontal_scrollbar_should_change, + vertical_scrollbar_should_change); + block->UpdateBlockLayout(true); + } else { + GetLayoutBox()->UpdateLayout(); + } + in_overflow_relayout_ = false; + scrollbar_manager_.DestroyDetachedScrollbars(); } - in_overflow_relayout_ = false; - scrollbar_manager_.DestroyDetachedScrollbars(); - } - LayoutObject* parent = GetLayoutBox()->Parent(); - if (parent && parent->IsFlexibleBox()) { - ToLayoutFlexibleBox(parent)->ClearCachedMainSizeForChild( - *GetLayoutBox()); + LayoutObject* parent = GetLayoutBox()->Parent(); + if (parent && parent->IsFlexibleBox()) { + ToLayoutFlexibleBox(parent)->ClearCachedMainSizeForChild( + *GetLayoutBox()); + } } } } @@ -1078,7 +1080,8 @@ bool PaintLayerScrollableArea::ShouldPerformScrollAnchoring() const { return scroll_anchor_.HasScroller() && GetLayoutBox() && - GetLayoutBox()->Style()->OverflowAnchor() != EOverflowAnchor::kNone && + GetLayoutBox()->StyleRef().OverflowAnchor() != + EOverflowAnchor::kNone && !GetLayoutBox()->GetDocument().FinishingOrIsPrinting(); } @@ -1105,7 +1108,7 @@ } ScrollBehavior PaintLayerScrollableArea::ScrollBehaviorStyle() const { - return GetLayoutBox()->Style()->GetScrollBehavior(); + return GetLayoutBox()->StyleRef().GetScrollBehavior(); } bool PaintLayerScrollableArea::HasHorizontalOverflow() const { @@ -1164,7 +1167,7 @@ old_background = old_style->VisitedDependentColor(GetCSSPropertyBackgroundColor()); } - Color new_background = GetLayoutBox()->Style()->VisitedDependentColor( + Color new_background = GetLayoutBox()->StyleRef().VisitedDependentColor( GetCSSPropertyBackgroundColor()); if (new_background != old_background) { @@ -1199,13 +1202,13 @@ // When switching to another value, we need to re-enable them (see bug 11985). if (HasHorizontalScrollbar() && old_style && old_style->OverflowX() == EOverflow::kScroll && - GetLayoutBox()->Style()->OverflowX() != EOverflow::kScroll) { + GetLayoutBox()->StyleRef().OverflowX() != EOverflow::kScroll) { HorizontalScrollbar()->SetEnabled(true); } if (HasVerticalScrollbar() && old_style && old_style->OverflowY() == EOverflow::kScroll && - GetLayoutBox()->Style()->OverflowY() != EOverflow::kScroll) { + GetLayoutBox()->StyleRef().OverflowY() != EOverflow::kScroll) { VerticalScrollbar()->SetEnabled(true); } @@ -1336,13 +1339,13 @@ // can scroll. Element* body = doc.body(); if (body && body->GetLayoutObject() && body->GetLayoutObject()->IsBox() && - body->GetLayoutObject()->Style()->HasPseudoStyle(kPseudoIdScrollbar)) + body->GetLayoutObject()->StyleRef().HasPseudoStyle(kPseudoIdScrollbar)) return *body->GetLayoutObject(); // If the <body> didn't have a custom style, then the root element might. Element* doc_element = doc.documentElement(); if (doc_element && doc_element->GetLayoutObject() && - doc_element->GetLayoutObject()->Style()->HasPseudoStyle( + doc_element->GetLayoutObject()->StyleRef().HasPseudoStyle( kPseudoIdScrollbar)) return *doc_element->GetLayoutObject(); } @@ -1581,7 +1584,7 @@ return 0; if (overlay_scrollbar_clip_behavior == kIgnorePlatformAndCSSOverlayScrollbarSize && - GetLayoutBox()->Style()->OverflowY() == EOverflow::kOverlay) { + GetLayoutBox()->StyleRef().OverflowY() == EOverflow::kOverlay) { return 0; } if ((overlay_scrollbar_clip_behavior == kIgnorePlatformOverlayScrollbarSize || @@ -1600,7 +1603,7 @@ return 0; if (overlay_scrollbar_clip_behavior == kIgnorePlatformAndCSSOverlayScrollbarSize && - GetLayoutBox()->Style()->OverflowX() == EOverflow::kOverlay) { + GetLayoutBox()->StyleRef().OverflowX() == EOverflow::kOverlay) { return 0; } if ((overlay_scrollbar_clip_behavior == kIgnorePlatformOverlayScrollbarSize || @@ -1685,7 +1688,7 @@ return false; IntRect resize_control_rect; - if (GetLayoutBox()->Style()->Resize() != EResize::kNone) { + if (GetLayoutBox()->StyleRef().Resize() != EResize::kNone) { resize_control_rect = ResizerCornerRect(GetLayoutBox()->PixelSnappedBorderBoxRect( Layer()->SubpixelAccumulation()), @@ -1741,7 +1744,7 @@ IntRect PaintLayerScrollableArea::ResizerCornerRect( const IntRect& bounds, ResizerHitTestType resizer_hit_test_type) const { - if (GetLayoutBox()->Style()->Resize() == EResize::kNone) + if (GetLayoutBox()->StyleRef().Resize() == EResize::kNone) return IntRect(); IntRect corner = CornerRect(bounds); @@ -1852,7 +1855,7 @@ void PaintLayerScrollableArea::InvalidateAllStickyConstraints() { if (PaintLayerScrollableAreaRareData* d = RareData()) { for (PaintLayer* sticky_layer : d->sticky_constraints_map_.Keys()) { - if (sticky_layer->GetLayoutObject().Style()->GetPosition() == + if (sticky_layer->GetLayoutObject().StyleRef().GetPosition() == EPosition::kSticky) sticky_layer->SetNeedsCompositingInputsUpdate(); } @@ -1866,7 +1869,7 @@ if (PaintLayerScrollableAreaRareData* d = RareData()) { d->sticky_constraints_map_.erase(layer); if (needs_compositing_update && - layer->GetLayoutObject().Style()->HasStickyConstrainedPosition()) + layer->GetLayoutObject().StyleRef().HasStickyConstrainedPosition()) layer->SetNeedsCompositingInputsUpdate(); } } @@ -1937,7 +1940,7 @@ Document& document = element->GetDocument(); - float zoom_factor = GetLayoutBox()->Style()->EffectiveZoom(); + float zoom_factor = GetLayoutBox()->StyleRef().EffectiveZoom(); IntSize new_offset = OffsetFromResizeCorner(document.View()->ConvertFromRootFrame(pos)); @@ -1959,9 +1962,9 @@ current_size); bool is_box_sizing_border = - GetLayoutBox()->Style()->BoxSizing() == EBoxSizing::kBorderBox; + GetLayoutBox()->StyleRef().BoxSizing() == EBoxSizing::kBorderBox; - EResize resize = GetLayoutBox()->Style()->Resize(); + EResize resize = GetLayoutBox()->StyleRef().Resize(); if (resize != EResize::kVertical && difference.Width()) { if (element->IsFormControlElement()) { // Make implicit margins from the theme explicit (see @@ -2040,7 +2043,7 @@ params.GetScrollType() == kUserScroll); ScrollBehavior behavior = DetermineScrollBehavior(params.GetScrollBehavior(), - GetLayoutBox()->Style()->GetScrollBehavior()); + GetLayoutBox()->StyleRef().GetScrollBehavior()); GetSmoothScrollSequencer()->QueueAnimation(this, new_scroll_offset, behavior); } else { @@ -2081,7 +2084,8 @@ ((HasHorizontalOverflow() && GetLayoutBox()->ScrollsOverflowX()) || (HasVerticalOverflow() && GetLayoutBox()->ScrollsOverflowY())); - bool is_visible_to_hit_test = GetLayoutBox()->Style()->VisibleToHitTesting(); + bool is_visible_to_hit_test = + GetLayoutBox()->StyleRef().VisibleToHitTesting(); bool did_scroll_overflow = scrolls_overflow_; if (GetLayoutBox()->IsLayoutView()) { ScrollbarMode h_mode; @@ -2230,7 +2234,7 @@ // TODO(flackr): Allow integer transforms as long as all of the ancestor // transforms are also integer. bool background_supports_lcd_text = - layer->GetLayoutObject().Style()->IsStackingContext() && + layer->GetLayoutObject().StyleRef().IsStackingContext() && layer->GetBackgroundPaintLocation( &non_composited_main_thread_scrolling_reasons_) & kBackgroundPaintInScrollingContents && @@ -2257,7 +2261,7 @@ non_composited_main_thread_scrolling_reasons_ |= MainThreadScrollingReason::kBackgroundNotOpaqueInRectAndLCDText; } - if (!layer->GetLayoutObject().Style()->IsStackingContext()) { + if (!layer->GetLayoutObject().StyleRef().IsStackingContext()) { non_composited_main_thread_scrolling_reasons_ |= MainThreadScrollingReason::kIsNotStackingContextAndLCDText; }
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc index d7a4370..7af82b2 100644 --- a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc +++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
@@ -1805,6 +1805,9 @@ object_.GetMutableForPainting().SetMayNeedPaintInvalidation(); fragment_data_.SetPaintOffset(context_.current.paint_offset); fragment_data_.InvalidateClipPathCache(); + + object_.GetFrameView()->SetNeedsIntersectionObservation( + LocalFrameView::kDesired); } if (paint_offset_translation)
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc index 2345c090..51d4d08 100644 --- a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc +++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc
@@ -4733,21 +4733,49 @@ transform_outside_use_properties->Transform()->Parent()); } -TEST_P(PaintPropertyTreeBuilderTest, SVGRootBlending) { +TEST_P(PaintPropertyTreeBuilderTest, SVGBlending) { SetBodyInnerHTML(R"HTML( - <svg id='svgroot' 'width=100' height='100' + <svg id='svgroot' width='100' height='100' style='position: relative; z-index: 0'> - <rect width='100' height='100' fill='#00FF00' - style='mix-blend-mode: difference'/> + <rect id='rect' width='100' height='100' fill='#00FF00' + style='mix-blend-mode: difference'/> </svg> )HTML"); - LayoutObject& svg_root = *GetLayoutObjectByElementId("svgroot"); - const ObjectPaintProperties* svg_root_properties = - svg_root.FirstFragment().PaintProperties(); - EXPECT_TRUE(svg_root_properties->Effect()); + const auto* rect_properties = PaintPropertiesForElement("rect"); + ASSERT_TRUE(rect_properties->Effect()); + EXPECT_EQ(SkBlendMode::kDifference, rect_properties->Effect()->BlendMode()); + + const auto* svg_root_properties = PaintPropertiesForElement("svgroot"); + ASSERT_TRUE(svg_root_properties->Effect()); + EXPECT_EQ(SkBlendMode::kSrcOver, svg_root_properties->Effect()->BlendMode()); + EXPECT_EQ(&EffectPaintPropertyNode::Root(), svg_root_properties->Effect()->Parent()); + EXPECT_EQ(svg_root_properties->Effect(), rect_properties->Effect()->Parent()); +} + +TEST_P(PaintPropertyTreeBuilderTest, SVGRootBlending) { + SetBodyInnerHTML(R"HTML( + <svg id='svgroot' 'width=100' height='100' style='mix-blend-mode: multiply'> + </svg> + )HTML"); + + const auto* html_properties = GetDocument() + .documentElement() + ->GetLayoutObject() + ->FirstFragment() + .PaintProperties(); + ASSERT_TRUE(html_properties->Effect()); + EXPECT_EQ(SkBlendMode::kSrcOver, html_properties->Effect()->BlendMode()); + + const auto* svg_root_properties = PaintPropertiesForElement("svgroot"); + ASSERT_TRUE(svg_root_properties->Effect()); + EXPECT_EQ(SkBlendMode::kMultiply, svg_root_properties->Effect()->BlendMode()); + + EXPECT_EQ(&EffectPaintPropertyNode::Root(), + html_properties->Effect()->Parent()); + EXPECT_EQ(html_properties->Effect(), svg_root_properties->Effect()->Parent()); } TEST_P(PaintPropertyTreeBuilderTest, ScrollBoundsOffset) {
diff --git a/third_party/blink/renderer/core/paint/replaced_painter.cc b/third_party/blink/renderer/core/paint/replaced_painter.cc index f117c72..07ddd7b 100644 --- a/third_party/blink/renderer/core/paint/replaced_painter.cc +++ b/third_party/blink/renderer/core/paint/replaced_painter.cc
@@ -180,7 +180,7 @@ // But if it's an SVG root, there can be children, so we'll check visibility // later. if (!layout_replaced_.IsSVGRoot() && - layout_replaced_.Style()->Visibility() != EVisibility::kVisible) + layout_replaced_.StyleRef().Visibility() != EVisibility::kVisible) return false; LayoutRect local_rect(layout_replaced_.VisualOverflowRect());
diff --git a/third_party/blink/renderer/core/paint/root_inline_box_painter.cc b/third_party/blink/renderer/core/paint/root_inline_box_painter.cc index 9b62f7f..8c24758e 100644 --- a/third_party/blink/renderer/core/paint/root_inline_box_painter.cc +++ b/third_party/blink/renderer/core/paint/root_inline_box_painter.cc
@@ -16,7 +16,7 @@ LayoutUnit line_top, LayoutUnit line_bottom) const { if (root_inline_box_.HasEllipsisBox() && - root_inline_box_.GetLineLayoutItem().Style()->Visibility() == + root_inline_box_.GetLineLayoutItem().StyleRef().Visibility() == EVisibility::kVisible && paint_info.phase == PaintPhase::kForeground) root_inline_box_.GetEllipsisBox()->Paint(paint_info, paint_offset, line_top,
diff --git a/third_party/blink/renderer/core/paint/scrollable_area_painter.cc b/third_party/blink/renderer/core/paint/scrollable_area_painter.cc index 2413291..13aa91a 100644 --- a/third_party/blink/renderer/core/paint/scrollable_area_painter.cc +++ b/third_party/blink/renderer/core/paint/scrollable_area_painter.cc
@@ -24,7 +24,7 @@ void ScrollableAreaPainter::PaintResizer(GraphicsContext& context, const IntPoint& paint_offset, const CullRect& cull_rect) { - if (GetScrollableArea().GetLayoutBox()->Style()->Resize() == EResize::kNone) + if (GetScrollableArea().GetLayoutBox()->StyleRef().Resize() == EResize::kNone) return; IntRect abs_rect = GetScrollableArea().ResizerCornerRect(
diff --git a/third_party/blink/renderer/core/paint/svg_image_painter.cc b/third_party/blink/renderer/core/paint/svg_image_painter.cc index 93d3611f..9de2fcc 100644 --- a/third_party/blink/renderer/core/paint/svg_image_painter.cc +++ b/third_party/blink/renderer/core/paint/svg_image_painter.cc
@@ -19,7 +19,7 @@ void SVGImagePainter::Paint(const PaintInfo& paint_info) { if (paint_info.phase != PaintPhase::kForeground || - layout_svg_image_.Style()->Visibility() != EVisibility::kVisible || + layout_svg_image_.StyleRef().Visibility() != EVisibility::kVisible || !layout_svg_image_.ImageResource()->HasImage()) return;
diff --git a/third_party/blink/renderer/core/paint/svg_inline_text_box_painter.cc b/third_party/blink/renderer/core/paint/svg_inline_text_box_painter.cc index fd52c1f..8c2fc6fe 100644 --- a/third_party/blink/renderer/core/paint/svg_inline_text_box_painter.cc +++ b/third_party/blink/renderer/core/paint/svg_inline_text_box_painter.cc
@@ -77,7 +77,7 @@ paint_info.phase == PaintPhase::kSelection); DCHECK(svg_inline_text_box_.Truncation() == kCNoTruncation); - if (svg_inline_text_box_.GetLineLayoutItem().Style()->Visibility() != + if (svg_inline_text_box_.GetLineLayoutItem().StyleRef().Visibility() != EVisibility::kVisible || !svg_inline_text_box_.Len()) return; @@ -209,7 +209,7 @@ void SVGInlineTextBoxPainter::PaintSelectionBackground( const PaintInfo& paint_info) { - if (svg_inline_text_box_.GetLineLayoutItem().Style()->Visibility() != + if (svg_inline_text_box_.GetLineLayoutItem().StyleRef().Visibility() != EVisibility::kVisible) return; @@ -263,7 +263,7 @@ LineLayoutAPIShim::LayoutObjectFrom(parent_box->GetLineLayoutItem()); if (layout_object->Style() && - layout_object->Style()->GetTextDecoration() != TextDecoration::kNone) + layout_object->StyleRef().GetTextDecoration() != TextDecoration::kNone) break; parent_box = parent_box->Parent();
diff --git a/third_party/blink/renderer/core/paint/svg_model_object_painter.cc b/third_party/blink/renderer/core/paint/svg_model_object_painter.cc index 956f01c..ba3dc879 100644 --- a/third_party/blink/renderer/core/paint/svg_model_object_painter.cc +++ b/third_party/blink/renderer/core/paint/svg_model_object_painter.cc
@@ -31,9 +31,9 @@ void SVGModelObjectPainter::PaintOutline(const PaintInfo& paint_info) { if (paint_info.phase != PaintPhase::kForeground) return; - if (layout_svg_model_object_.Style()->Visibility() != EVisibility::kVisible) + if (layout_svg_model_object_.StyleRef().Visibility() != EVisibility::kVisible) return; - if (!layout_svg_model_object_.Style()->OutlineWidth()) + if (!layout_svg_model_object_.StyleRef().OutlineWidth()) return; PaintInfo outline_paint_info(paint_info);
diff --git a/third_party/blink/renderer/core/paint/svg_shape_painter.cc b/third_party/blink/renderer/core/paint/svg_shape_painter.cc index 8d28aa24..fd425ee 100644 --- a/third_party/blink/renderer/core/paint/svg_shape_painter.cc +++ b/third_party/blink/renderer/core/paint/svg_shape_painter.cc
@@ -57,7 +57,7 @@ void SVGShapePainter::Paint(const PaintInfo& paint_info) { if (paint_info.phase != PaintPhase::kForeground || - layout_svg_shape_.Style()->Visibility() != EVisibility::kVisible || + layout_svg_shape_.StyleRef().Visibility() != EVisibility::kVisible || layout_svg_shape_.IsShapeEmpty()) return; @@ -84,7 +84,8 @@ DrawingRecorder recorder(paint_context.GetPaintInfo().context, layout_svg_shape_, paint_context.GetPaintInfo().phase); - const SVGComputedStyle& svg_style = layout_svg_shape_.Style()->SvgStyle(); + const SVGComputedStyle& svg_style = + layout_svg_shape_.StyleRef().SvgStyle(); bool should_anti_alias = svg_style.ShapeRendering() != SR_CRISPEDGES && svg_style.ShapeRendering() != SR_OPTIMIZESPEED; @@ -193,7 +194,7 @@ void SVGShapePainter::StrokeShape(GraphicsContext& context, const PaintFlags& flags) { - if (!layout_svg_shape_.Style()->SvgStyle().HasVisibleStroke()) + if (!layout_svg_shape_.StyleRef().SvgStyle().HasVisibleStroke()) return; switch (layout_svg_shape_.GeometryCodePath()) {
diff --git a/third_party/blink/renderer/core/paint/table_cell_painter.cc b/third_party/blink/renderer/core/paint/table_cell_painter.cc index af876cc6..4d2ec4d1 100644 --- a/third_party/blink/renderer/core/paint/table_cell_painter.cc +++ b/third_party/blink/renderer/core/paint/table_cell_painter.cc
@@ -23,12 +23,12 @@ const LayoutObject& background_object) { DCHECK(background_object != layout_table_cell_); - if (layout_table_cell_.Style()->Visibility() != EVisibility::kVisible) + if (layout_table_cell_.StyleRef().Visibility() != EVisibility::kVisible) return; LayoutTable* table = layout_table_cell_.Table(); if (!table->ShouldCollapseBorders() && - layout_table_cell_.Style()->EmptyCells() == EEmptyCells::kHide && + layout_table_cell_.StyleRef().EmptyCells() == EEmptyCells::kHide && !layout_table_cell_.FirstChild()) return; @@ -124,13 +124,13 @@ void TableCellPainter::PaintMask(const PaintInfo& paint_info, const LayoutPoint& paint_offset) { - if (layout_table_cell_.Style()->Visibility() != EVisibility::kVisible || + if (layout_table_cell_.StyleRef().Visibility() != EVisibility::kVisible || paint_info.phase != PaintPhase::kMask) return; LayoutTable* table_elt = layout_table_cell_.Table(); if (!table_elt->ShouldCollapseBorders() && - layout_table_cell_.Style()->EmptyCells() == EEmptyCells::kHide && + layout_table_cell_.StyleRef().EmptyCells() == EEmptyCells::kHide && !layout_table_cell_.FirstChild()) return;
diff --git a/third_party/blink/renderer/core/paint/table_painter.cc b/third_party/blink/renderer/core/paint/table_painter.cc index d02f2e4..58f8976 100644 --- a/third_party/blink/renderer/core/paint/table_painter.cc +++ b/third_party/blink/renderer/core/paint/table_painter.cc
@@ -44,7 +44,7 @@ if (layout_table_.HasCollapsedBorders() && ShouldPaintDescendantBlockBackgrounds(paint_phase) && - layout_table_.Style()->Visibility() == EVisibility::kVisible) { + layout_table_.StyleRef().Visibility() == EVisibility::kVisible) { PaintCollapsedBorders(paint_info_for_descendants); } } @@ -57,7 +57,7 @@ const PaintInfo& paint_info, const LayoutPoint& paint_offset) { if (!layout_table_.HasBoxDecorationBackground() || - layout_table_.Style()->Visibility() != EVisibility::kVisible) + layout_table_.StyleRef().Visibility() != EVisibility::kVisible) return; LayoutRect rect(paint_offset, layout_table_.Size()); @@ -68,7 +68,7 @@ void TablePainter::PaintMask(const PaintInfo& paint_info, const LayoutPoint& paint_offset) { - if (layout_table_.Style()->Visibility() != EVisibility::kVisible || + if (layout_table_.StyleRef().Visibility() != EVisibility::kVisible || paint_info.phase != PaintPhase::kMask) return;
diff --git a/third_party/blink/renderer/core/paint/view_painter.cc b/third_party/blink/renderer/core/paint/view_painter.cc index 7b9edc2..f9a0e750 100644 --- a/third_party/blink/renderer/core/paint/view_painter.cc +++ b/third_party/blink/renderer/core/paint/view_painter.cc
@@ -87,7 +87,7 @@ document.GetSettings()->GetShouldClearDocumentBackground()); Color base_background_color = paints_base_background ? frame_view.BaseBackgroundColor() : Color(); - Color root_background_color = layout_view_.Style()->VisitedDependentColor( + Color root_background_color = layout_view_.StyleRef().VisitedDependentColor( GetCSSPropertyBackgroundColor()); const LayoutObject* root_object = document.documentElement() ? document.documentElement()->GetLayoutObject() @@ -104,7 +104,7 @@ // If for any reason the view background is not transparent, paint white // instead, otherwise keep transparent as is. if (paints_base_background || root_background_color.Alpha() || - layout_view_.Style()->BackgroundLayers().GetImage()) + layout_view_.StyleRef().BackgroundLayers().GetImage()) context.FillRect(background_rect, Color::kWhite, SkBlendMode::kSrc); return; } @@ -165,7 +165,7 @@ bool should_draw_background_in_separate_buffer = BoxModelObjectPainter(layout_view_) .CalculateFillLayerOcclusionCulling( - reversed_paint_list, layout_view_.Style()->BackgroundLayers()); + reversed_paint_list, layout_view_.StyleRef().BackgroundLayers()); DCHECK(reversed_paint_list.size()); // If the root background color is opaque, isolation group can be skipped
diff --git a/third_party/blink/renderer/core/style/computed_style.cc b/third_party/blink/renderer/core/style/computed_style.cc index c20bd46..774f7bf 100644 --- a/third_party/blink/renderer/core/style/computed_style.cc +++ b/third_party/blink/renderer/core/style/computed_style.cc
@@ -1754,9 +1754,9 @@ // too, though this involves messily poking into CalcExpressionLength. if (lh.IsFixed()) { float multiplier = TextAutosizingMultiplier(); - return Length( - TextAutosizer::ComputeAutosizedFontSize(lh.Value(), multiplier), - kFixed); + return Length(TextAutosizer::ComputeAutosizedFontSize( + lh.Value(), multiplier, EffectiveZoom()), + kFixed); } return lh; @@ -1822,12 +1822,12 @@ FontSelector* current_font_selector = GetFont().GetFontSelector(); FontDescription desc(GetFontDescription()); desc.SetSpecifiedSize(size); - desc.SetComputedSize(size); - float autosized_font_size = - TextAutosizer::ComputeAutosizedFontSize(size, multiplier); - float computed_size = autosized_font_size * EffectiveZoom(); - desc.SetComputedSize(std::min(kMaximumAllowedFontSize, computed_size)); + float computed_size = size * EffectiveZoom(); + + float autosized_font_size = TextAutosizer::ComputeAutosizedFontSize( + computed_size, multiplier, EffectiveZoom()); + desc.SetComputedSize(std::min(kMaximumAllowedFontSize, autosized_font_size)); SetFontDescription(desc); GetFont().Update(current_font_selector);
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.cc b/third_party/blink/renderer/core/workers/dedicated_worker.cc index ed773e19..1547fad 100644 --- a/third_party/blink/renderer/core/workers/dedicated_worker.cc +++ b/third_party/blink/renderer/core/workers/dedicated_worker.cc
@@ -12,6 +12,7 @@ #include "third_party/blink/public/platform/web_content_settings_client.h" #include "third_party/blink/public/platform/web_layer_tree_view.h" #include "third_party/blink/public/web/web_local_frame_client.h" +#include "third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h" #include "third_party/blink/renderer/core/core_initializer.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/events/message_event.h" @@ -19,6 +20,7 @@ #include "third_party/blink/renderer/core/frame/use_counter.h" #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h" #include "third_party/blink/renderer/core/inspector/main_thread_debugger.h" +#include "third_party/blink/renderer/core/messaging/post_message_options.h" #include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h" #include "third_party/blink/renderer/core/page/page.h" #include "third_party/blink/renderer/core/probe/core_probes.h" @@ -110,19 +112,34 @@ } void DedicatedWorker::postMessage(ScriptState* script_state, - scoped_refptr<SerializedScriptValue> message, - const MessagePortArray& ports, + const ScriptValue& message, + Vector<ScriptValue>& transfer, ExceptionState& exception_state) { DCHECK(GetExecutionContext()->IsContextThread()); + + PostMessageOptions options; + if (!transfer.IsEmpty()) + options.setTransfer(transfer); + + Transferables transferables; + scoped_refptr<SerializedScriptValue> serialized_message = + PostMessageHelper::SerializeMessageByMove(script_state->GetIsolate(), + message, options, transferables, + exception_state); + if (exception_state.HadException()) + return; + DCHECK(serialized_message); + // Disentangle the port in preparation for sending it to the remote context. auto channels = MessagePort::DisentanglePorts( - ExecutionContext::From(script_state), ports, exception_state); + ExecutionContext::From(script_state), transferables.message_ports, + exception_state); if (exception_state.HadException()) return; v8_inspector::V8StackTraceId stack_id = ThreadDebugger::From(script_state->GetIsolate()) ->StoreCurrentStackTrace("Worker.postMessage"); - context_proxy_->PostMessageToWorkerGlobalScope(std::move(message), + context_proxy_->PostMessageToWorkerGlobalScope(std::move(serialized_message), std::move(channels), stack_id); }
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.h b/third_party/blink/renderer/core/workers/dedicated_worker.h index 61cd853..f793f5e 100644 --- a/third_party/blink/renderer/core/workers/dedicated_worker.h +++ b/third_party/blink/renderer/core/workers/dedicated_worker.h
@@ -55,10 +55,9 @@ ~DedicatedWorker() override; void postMessage(ScriptState*, - scoped_refptr<SerializedScriptValue> message, - const MessagePortArray&, + const ScriptValue& message, + Vector<ScriptValue>& transfer, ExceptionState&); - static bool CanTransferArrayBuffersAndImageBitmaps() { return true; } void terminate(); BeginFrameProviderParams CreateBeginFrameProviderParams();
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc index 58166d3..1e0f8250 100644 --- a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc +++ b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.cc
@@ -31,11 +31,13 @@ #include "third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h" #include <memory> +#include "third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h" #include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h" #include "third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h" #include "third_party/blink/renderer/core/inspector/thread_debugger.h" +#include "third_party/blink/renderer/core/messaging/post_message_options.h" #include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h" #include "third_party/blink/renderer/core/script/fetch_client_settings_object_snapshot.h" #include "third_party/blink/renderer/core/script/modulator.h" @@ -82,20 +84,32 @@ new WorkerModuleTreeClient(modulator)); } -void DedicatedWorkerGlobalScope::postMessage( - ScriptState* script_state, - scoped_refptr<SerializedScriptValue> message, - const MessagePortArray& ports, - ExceptionState& exception_state) { +void DedicatedWorkerGlobalScope::postMessage(ScriptState* script_state, + const ScriptValue& message, + Vector<ScriptValue>& transfer, + ExceptionState& exception_state) { + PostMessageOptions options; + if (!transfer.IsEmpty()) + options.setTransfer(transfer); + + Transferables transferables; + scoped_refptr<SerializedScriptValue> serialized_message = + PostMessageHelper::SerializeMessageByMove(script_state->GetIsolate(), + message, options, transferables, + exception_state); + if (exception_state.HadException()) + return; + DCHECK(serialized_message); // Disentangle the port in preparation for sending it to the remote context. auto channels = MessagePort::DisentanglePorts( - ExecutionContext::From(script_state), ports, exception_state); + ExecutionContext::From(script_state), transferables.message_ports, + exception_state); if (exception_state.HadException()) return; ThreadDebugger* debugger = ThreadDebugger::From(script_state->GetIsolate()); v8_inspector::V8StackTraceId stack_id = debugger->StoreCurrentStackTrace("postMessage"); - WorkerObjectProxy().PostMessageToWorkerObject(std::move(message), + WorkerObjectProxy().PostMessageToWorkerObject(std::move(serialized_message), std::move(channels), stack_id); }
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h index 6455651..c080e96 100644 --- a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h +++ b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.h
@@ -65,12 +65,10 @@ network::mojom::FetchCredentialsMode) override; void postMessage(ScriptState*, - scoped_refptr<SerializedScriptValue>, - const MessagePortArray&, + const ScriptValue& message, + Vector<ScriptValue>& transfer, ExceptionState&); - static bool CanTransferArrayBuffersAndImageBitmaps() { return true; } - DEFINE_ATTRIBUTE_EVENT_LISTENER(message); DEFINE_ATTRIBUTE_EVENT_LISTENER(messageerror);
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.idl b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.idl index 3e9922e..756b04d1 100644 --- a/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.idl +++ b/third_party/blink/renderer/core/workers/dedicated_worker_global_scope.idl
@@ -34,7 +34,7 @@ Global=(Worker,DedicatedWorker), Exposed=DedicatedWorker ] interface DedicatedWorkerGlobalScope : WorkerGlobalScope { - [PostMessage, RaisesException] void postMessage(any message, optional sequence<object> transfer = []); + [CallWith=ScriptState, RaisesException] void postMessage(any message, optional sequence<object> transfer = []); void close();
diff --git a/third_party/blink/renderer/core/workers/worker.idl b/third_party/blink/renderer/core/workers/worker.idl index 7cd1f5c..b7590335 100644 --- a/third_party/blink/renderer/core/workers/worker.idl +++ b/third_party/blink/renderer/core/workers/worker.idl
@@ -37,7 +37,7 @@ ] interface Worker : EventTarget { void terminate(); - [PostMessage, RaisesException] void postMessage(any message, optional sequence<object> transfer); + [CallWith=ScriptState, RaisesException] void postMessage(any message, optional sequence<object> transfer=[]); attribute EventHandler onmessage; };
diff --git a/third_party/blink/renderer/devtools/front_end/console/ConsoleViewMessage.js b/third_party/blink/renderer/devtools/front_end/console/ConsoleViewMessage.js index de0d78f..783c7ca 100644 --- a/third_party/blink/renderer/devtools/front_end/console/ConsoleViewMessage.js +++ b/third_party/blink/renderer/devtools/front_end/console/ConsoleViewMessage.js
@@ -796,6 +796,8 @@ } function integerFormatter(obj) { + if (obj.type === 'bigint') + return obj.description; if (typeof obj.value !== 'number') return 'NaN'; return Math.floor(obj.value);
diff --git a/third_party/blink/renderer/devtools/front_end/timeline/TimelineUIUtils.js b/third_party/blink/renderer/devtools/front_end/timeline/TimelineUIUtils.js index 59f25d6..5416ef9 100644 --- a/third_party/blink/renderer/devtools/front_end/timeline/TimelineUIUtils.js +++ b/third_party/blink/renderer/devtools/front_end/timeline/TimelineUIUtils.js
@@ -179,10 +179,6 @@ eventStyles[recordTypes.LatencyInfo] = new Timeline.TimelineRecordStyle(Common.UIString('Input Latency'), categories['scripting']); - eventStyles[recordTypes.GCIdleLazySweep] = - new Timeline.TimelineRecordStyle(Common.UIString('DOM GC'), categories['scripting']); - eventStyles[recordTypes.GCCompleteSweep] = - new Timeline.TimelineRecordStyle(Common.UIString('DOM GC'), categories['scripting']); eventStyles[recordTypes.GCCollectGarbage] = new Timeline.TimelineRecordStyle(Common.UIString('DOM GC'), categories['scripting']); @@ -604,18 +600,6 @@ detailsText = eventData && eventData['name']; break; - case recordType.GCIdleLazySweep: - detailsText = Common.UIString('idle sweep'); - break; - - case recordType.GCCompleteSweep: - detailsText = Common.UIString('complete sweep'); - break; - - case recordType.GCCollectGarbage: - detailsText = Common.UIString('collect'); - break; - case recordType.AsyncTask: detailsText = eventData ? eventData['name'] : null; break; @@ -688,9 +672,6 @@ case recordType.WebSocketSendHandshakeRequest: case recordType.WebSocketReceiveHandshakeResponse: case recordType.WebSocketDestroy: - case recordType.GCIdleLazySweep: - case recordType.GCCompleteSweep: - case recordType.GCCollectGarbage: detailsText = Timeline.TimelineUIUtils.buildDetailsTextForTraceEvent(event, target); break; case recordType.PaintImage:
diff --git a/third_party/blink/renderer/devtools/front_end/timeline_model/TimelineModel.js b/third_party/blink/renderer/devtools/front_end/timeline_model/TimelineModel.js index fb70f04..02d563d 100644 --- a/third_party/blink/renderer/devtools/front_end/timeline_model/TimelineModel.js +++ b/third_party/blink/renderer/devtools/front_end/timeline_model/TimelineModel.js
@@ -1275,9 +1275,7 @@ InputLatencyMouseMove: 'InputLatency::MouseMove', InputLatencyMouseWheel: 'InputLatency::MouseWheel', ImplSideFling: 'InputHandlerProxy::HandleGestureFling::started', - GCIdleLazySweep: 'ThreadState::performIdleLazySweep', - GCCompleteSweep: 'ThreadState::completeSweep', - GCCollectGarbage: 'BlinkGCMarking', + GCCollectGarbage: 'BlinkGC.AtomicPhase', CryptoDoEncrypt: 'DoEncrypt', CryptoDoEncryptReply: 'DoEncryptReply',
diff --git a/third_party/blink/renderer/modules/DEPS b/third_party/blink/renderer/modules/DEPS index f861230e..20352caf 100644 --- a/third_party/blink/renderer/modules/DEPS +++ b/third_party/blink/renderer/modules/DEPS
@@ -1,6 +1,7 @@ include_rules = [ "+base/atomic_sequence_num.h", "+base/memory/scoped_refptr.h", + "+mojo/public/cpp/bindings", "+services/network/public/cpp/shared_url_loader_factory.h", "+services/service_manager/public/mojom/interface_provider.mojom-blink.h", "+third_party/blink/public/common",
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc index b4aa9a6..b124938 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -95,7 +95,9 @@ {"application", kApplicationRole}, {"article", kArticleRole}, {"banner", kBannerRole}, + {"blockquote", kBlockquoteRole}, {"button", kButtonRole}, + {"caption", kCaptionRole}, {"cell", kCellRole}, {"checkbox", kCheckBoxRole}, {"columnheader", kColumnHeaderRole}, @@ -183,6 +185,7 @@ {"none", kNoneRole}, {"note", kNoteRole}, {"option", kListBoxOptionRole}, + {"paragraph", kParagraphRole}, {"presentation", kPresentationalRole}, {"progressbar", kProgressIndicatorRole}, {"radio", kRadioButtonRole},
diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc b/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc index 1aecedf..419441d 100644 --- a/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc +++ b/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.cc
@@ -13,12 +13,15 @@ #include "third_party/blink/renderer/modules/background_fetch/background_fetch_bridge.h" #include "third_party/blink/renderer/modules/manifest/image_resource.h" #include "third_party/blink/renderer/modules/manifest/image_resource_type_converters.h" +#include "third_party/blink/renderer/platform/cross_thread_functional.h" #include "third_party/blink/renderer/platform/graphics/color_behavior.h" #include "third_party/blink/renderer/platform/heap/heap_allocator.h" #include "third_party/blink/renderer/platform/image-decoders/image_decoder.h" #include "third_party/blink/renderer/platform/image-decoders/image_frame.h" +#include "third_party/blink/renderer/platform/image-decoders/segment_reader.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_request.h" +#include "third_party/blink/renderer/platform/scheduler/public/background_scheduler.h" #include "third_party/blink/renderer/platform/weborigin/kurl.h" #include "third_party/blink/renderer/platform/wtf/text/string_impl.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" @@ -28,8 +31,13 @@ namespace { -const unsigned long kIconFetchTimeoutInMs = 30000; -const int kMinimumIconSizeInPx = 0; +constexpr unsigned long kIconFetchTimeoutInMs = 30000; +constexpr int kMinimumIconSizeInPx = 0; + +// Because including base::ClampToRange would be a dependency violation. +int ClampToRange(const int value, const int min, const int max) { + return std::min(std::max(value, min), max); +} } // namespace @@ -58,13 +66,16 @@ ExecutionContext* execution_context, IconCallback icon_callback, const WebSize& icon_display_size_pixels) { - if (icon_display_size_pixels.IsEmpty()) { + icon_display_size_pixels_ = icon_display_size_pixels; + + // If |icon_display_size_pixels_| is empty then no image will be displayed by + // the UI powering Background Fetch. Bail out immediately. + if (icon_display_size_pixels_.IsEmpty()) { std::move(icon_callback).Run(SkBitmap()); return; } - KURL best_icon_url = - PickBestIconForDisplay(execution_context, icon_display_size_pixels); + KURL best_icon_url = PickBestIconForDisplay(execution_context); if (best_icon_url.IsEmpty()) { // None of the icons provided was suitable. std::move(icon_callback).Run(SkBitmap()); @@ -90,8 +101,7 @@ } KURL BackgroundFetchIconLoader::PickBestIconForDisplay( - ExecutionContext* execution_context, - const WebSize& icon_display_size_pixels) { + ExecutionContext* execution_context) { std::vector<Manifest::ImageResource> icons; for (auto& icon : icons_) { // Update the src of |icon| to include the base URL in case relative paths @@ -102,7 +112,7 @@ // TODO(crbug.com/868875): Handle cases where `sizes` or `purpose` is empty. return KURL(ManifestIconSelector::FindBestMatchingIcon( - std::move(icons), icon_display_size_pixels.height, kMinimumIconSizeInPx, + std::move(icons), icon_display_size_pixels_.height, kMinimumIconSizeInPx, Manifest::ImageResource::Purpose::ANY)); } @@ -128,22 +138,69 @@ unsigned long resource_identifier) { if (stopped_) return; - if (data_) { - // Decode data. - const bool data_complete = true; - std::unique_ptr<ImageDecoder> decoder = ImageDecoder::Create( - data_, data_complete, ImageDecoder::kAlphaPremultiplied, - ImageDecoder::kDefaultBitDepth, ColorBehavior::TransformToSRGB()); - if (decoder) { - // the |ImageFrame*| is owned by the decoder. - ImageFrame* image_frame = decoder->DecodeFrameBufferAtIndex(0); - if (image_frame) { - std::move(icon_callback_).Run(image_frame->Bitmap()); - return; + + if (!data_) { + RunCallbackWithEmptyBitmap(); + return; + } + + scoped_refptr<base::SingleThreadTaskRunner> task_runner = + Platform::Current()->CurrentThread()->GetTaskRunner(); + + BackgroundScheduler::PostOnBackgroundThread( + FROM_HERE, + CrossThreadBind( + &BackgroundFetchIconLoader::DecodeAndResizeImageOnBackgroundThread, + WrapCrossThreadPersistent(this), std::move(task_runner), + SegmentReader::CreateFromSharedBuffer(std::move(data_)))); +} + +void BackgroundFetchIconLoader::DecodeAndResizeImageOnBackgroundThread( + scoped_refptr<base::SingleThreadTaskRunner> task_runner, + scoped_refptr<SegmentReader> data) { + DCHECK(task_runner); + DCHECK(data); + + // Explicitly pass in the |icon_display_size_pixels_| to benefit from decoders + // that have optimizations for partial decoding. + std::unique_ptr<ImageDecoder> decoder = ImageDecoder::Create( + std::move(data), /* data_complete= */ true, + ImageDecoder::kAlphaPremultiplied, ImageDecoder::kDefaultBitDepth, + ColorBehavior::TransformToSRGB(), + {icon_display_size_pixels_.width, icon_display_size_pixels_.height}); + + if (decoder) { + ImageFrame* image_frame = decoder->DecodeFrameBufferAtIndex(0); + if (image_frame) { + decoded_icon_ = image_frame->Bitmap(); + + int width = decoded_icon_.width(); + int height = decoded_icon_.height(); + + // If the |decoded_icon_| is larger than |icon_display_size_pixels_| + // permits, we need to resize it as well. This can be done synchronously + // given that we're on a background thread already. + double scale = std::min( + static_cast<double>(icon_display_size_pixels_.width) / width, + static_cast<double>(icon_display_size_pixels_.height) / height); + + if (scale < 1) { + width = ClampToRange(scale * width, 1, icon_display_size_pixels_.width); + height = + ClampToRange(scale * height, 1, icon_display_size_pixels_.height); + + // Use the RESIZE_GOOD quality allowing the implementation to pick an + // appropriate method for the resize. Can be increased to RESIZE_BETTER + // or RESIZE_BEST if the quality looks poor. + decoded_icon_ = skia::ImageOperations::Resize( + decoded_icon_, skia::ImageOperations::RESIZE_GOOD, width, height); } } } - RunCallbackWithEmptyBitmap(); + + PostCrossThreadTask(*task_runner, FROM_HERE, + CrossThreadBind(&BackgroundFetchIconLoader::RunCallback, + WrapCrossThreadPersistent(this))); } void BackgroundFetchIconLoader::DidFail(const ResourceError& error) { @@ -154,13 +211,18 @@ RunCallbackWithEmptyBitmap(); } -void BackgroundFetchIconLoader::RunCallbackWithEmptyBitmap() { +void BackgroundFetchIconLoader::RunCallback() { // If this has been stopped it is not desirable to trigger further work, // there is a shutdown of some sort in progress. if (stopped_) return; - std::move(icon_callback_).Run(SkBitmap()); + std::move(icon_callback_).Run(decoded_icon_); +} + +void BackgroundFetchIconLoader::RunCallbackWithEmptyBitmap() { + DCHECK(decoded_icon_.isNull()); + RunCallback(); } } // namespace blink
diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.h b/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.h index 52c44fff..2e7a2c8 100644 --- a/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.h +++ b/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader.h
@@ -17,6 +17,7 @@ namespace blink { class BackgroundFetchBridge; +class SegmentReader; struct WebSize; class MODULES_EXPORT BackgroundFetchIconLoader final @@ -30,16 +31,12 @@ BackgroundFetchIconLoader(); ~BackgroundFetchIconLoader() override; - // Scales down |icon| and returns result. If it is already small enough, - // |icon| is returned unchanged. - static SkBitmap ScaleDownIfNeeded(const SkBitmap& icon); - // Asynchronously download an icon from the given url, decodes the loaded // data, and passes the bitmap to the given callback. void Start(BackgroundFetchBridge* bridge, ExecutionContext* execution_context, HeapVector<ManifestImageResource> icons, - IconCallback callback); + IconCallback icon_callback); // Cancels the pending load, if there is one. The |icon_callback_| will not // be run. @@ -58,6 +55,8 @@ private: friend class BackgroundFetchIconLoaderTest; + + void RunCallback(); void RunCallbackWithEmptyBitmap(); // Callback for BackgroundFetchBridge::GetIconDisplaySize() @@ -67,16 +66,37 @@ const WebSize& icon_display_size_pixels); // Picks the best icon from the list of developer provided icons, for current - // display, given the ideal |icon_display_size_pixels|, and returns its KURL. + // display, given the ideal |icon_display_size_pixels_|, and returns its KURL. // If none of the icons is appropriate, this returns an empty URL. - KURL PickBestIconForDisplay(ExecutionContext* execution_context, - const WebSize& icon_display_size_pixels); + KURL PickBestIconForDisplay(ExecutionContext* execution_context); - bool stopped_ = false; - scoped_refptr<SharedBuffer> data_; - IconCallback icon_callback_; + // Decodes the |data| to a SkBitmap using the image decoders and resizes it to + // be no larger than |icon_display_size_pixels_|. + void DecodeAndResizeImageOnBackgroundThread( + scoped_refptr<base::SingleThreadTaskRunner> task_runner, + scoped_refptr<SegmentReader> data); + + // Called when the image has been decoded and resized on a background thread. + void DidFinishDecoding(); + HeapVector<ManifestImageResource> icons_; + IconCallback icon_callback_; + Member<ThreadableLoader> threadable_loader_; + + // Size at which the icon will be presented to the user. + WebSize icon_display_size_pixels_; + + // Data received from the ThreadableLoader. Will be invalidated when decoding + // of the image data starts. + scoped_refptr<SharedBuffer> data_; + + // Result of decoding the icon on the background thread. + SkBitmap decoded_icon_; + + // Whether the icon loading operation has been stopped. The process should + // be aborted then, and |icon_callback_| must not be invoked anymore. + bool stopped_ = false; }; } // namespace blink
diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader_test.cc b/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader_test.cc index 7871f336..f0b6786 100644 --- a/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader_test.cc +++ b/third_party/blink/renderer/modules/background_fetch/background_fetch_icon_loader_test.cc
@@ -64,11 +64,15 @@ // Callback for BackgroundFetchIconLoader. This will set up the state of the // load as either success or failed based on whether the bitmap is empty. - void IconLoaded(const SkBitmap& bitmap) { - if (!bitmap.empty()) + void IconLoaded(base::OnceClosure quit_closure, const SkBitmap& bitmap) { + bitmap_ = bitmap; + + if (!bitmap_.isNull()) loaded_ = BackgroundFetchLoadState::kLoadSuccessful; else loaded_ = BackgroundFetchLoadState::kLoadFailed; + + std::move(quit_closure).Run(); } ManifestImageResource CreateTestIcon(const String& url_str, @@ -84,10 +88,14 @@ KURL PickRightIcon(HeapVector<ManifestImageResource> icons, const WebSize& ideal_display_size) { loader_->icons_ = std::move(icons); - return loader_->PickBestIconForDisplay(GetContext(), ideal_display_size); + loader_->icon_display_size_pixels_ = ideal_display_size; + + return loader_->PickBestIconForDisplay(GetContext()); } - void LoadIcon(const KURL& url) { + void LoadIcon(const KURL& url, + const WebSize& maximum_size, + base::OnceClosure quit_closure) { ManifestImageResource icon; icon.setSrc(url.GetString()); icon.setType("image/png"); @@ -97,8 +105,9 @@ loader_->icons_ = std::move(icons); loader_->DidGetIconDisplaySizeIfSoLoadIcon( GetContext(), - Bind(&BackgroundFetchIconLoaderTest::IconLoaded, WTF::Unretained(this)), - WebSize(192, 192)); + WTF::Bind(&BackgroundFetchIconLoaderTest::IconLoaded, + WTF::Unretained(this), WTF::Passed(std::move(quit_closure))), + maximum_size); } ExecutionContext* GetContext() const { return &GetDocument(); } @@ -106,15 +115,30 @@ protected: ScopedTestingPlatformSupport<TestingPlatformSupport> platform_; BackgroundFetchLoadState loaded_ = BackgroundFetchLoadState::kNotLoaded; + SkBitmap bitmap_; private: Persistent<BackgroundFetchIconLoader> loader_; }; TEST_F(BackgroundFetchIconLoaderTest, SuccessTest) { - LoadIcon(KURL(kBackgroundFetchImageLoaderIcon500x500FullPath)); + base::RunLoop run_loop; + + WebSize maximum_size{192, 168}; + LoadIcon(KURL(kBackgroundFetchImageLoaderIcon500x500FullPath), maximum_size, + run_loop.QuitClosure()); + platform_->GetURLLoaderMockFactory()->ServeAsynchronousRequests(); - EXPECT_EQ(BackgroundFetchLoadState::kLoadSuccessful, loaded_); + + run_loop.Run(); + + ASSERT_EQ(BackgroundFetchLoadState::kLoadSuccessful, loaded_); + ASSERT_FALSE(bitmap_.drawsNothing()); + + // Resizing a 500x500 image to fit on a canvas of 192x168 pixels should yield + // a decoded image size of 168x168, avoiding image data to get lost. + EXPECT_EQ(bitmap_.width(), 168); + EXPECT_EQ(bitmap_.height(), 168); } TEST_F(BackgroundFetchIconLoaderTest, PickIconRelativePath) {
diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetch_update_event.cc b/third_party/blink/renderer/modules/background_fetch/background_fetch_update_event.cc index c900e6a8..50f3d35 100644 --- a/third_party/blink/renderer/modules/background_fetch/background_fetch_update_event.cc +++ b/third_party/blink/renderer/modules/background_fetch/background_fetch_update_event.cc
@@ -46,6 +46,16 @@ ScriptPromise BackgroundFetchUpdateEvent::updateUI( ScriptState* script_state, const BackgroundFetchUIOptions& ui_options) { + if (update_ui_called_) { + // Return a rejected promise as this method should only be called once. + return ScriptPromise::Reject( + script_state, + V8ThrowException::CreateTypeError(script_state->GetIsolate(), + "updateUI may only be called once.")); + } + + update_ui_called_ = true; + if (!registration_) { // Return a Promise that will never settle when a developer calls this // method on a BackgroundFetchedEvent instance they created themselves.
diff --git a/third_party/blink/renderer/modules/background_fetch/background_fetch_update_event.h b/third_party/blink/renderer/modules/background_fetch/background_fetch_update_event.h index 890bfb1..fd494fb5 100644 --- a/third_party/blink/renderer/modules/background_fetch/background_fetch_update_event.h +++ b/third_party/blink/renderer/modules/background_fetch/background_fetch_update_event.h
@@ -64,6 +64,8 @@ void DidUpdateUI(ScriptPromiseResolver* resolver, mojom::blink::BackgroundFetchError error); + bool update_ui_called_ = false; + Member<ServiceWorkerRegistration> registration_; Member<BackgroundFetchIconLoader> loader_; };
diff --git a/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc b/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc index c67b013a..9f399a23 100644 --- a/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc +++ b/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc
@@ -378,7 +378,9 @@ authenticator_buffer, signature_buffer, user_handle); AuthenticationExtensionsClientOutputs extension_outputs; - extension_outputs.setAppid(credential->echo_appid_extension); + if (credential->echo_appid_extension) { + extension_outputs.setAppid(credential->appid_extension); + } resolver->Resolve(PublicKeyCredential::Create(credential->info->id, raw_id, authenticator_response, extension_outputs));
diff --git a/third_party/blink/renderer/modules/locks/lock.idl b/third_party/blink/renderer/modules/locks/lock.idl index df2dd98..24d444a 100644 --- a/third_party/blink/renderer/modules/locks/lock.idl +++ b/third_party/blink/renderer/modules/locks/lock.idl
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://github.com/inexorabletash/web-locks +// https://wicg.github.io/web-locks/#lock [ SecureContext, Exposed=(Window,Worker),
diff --git a/third_party/blink/renderer/modules/locks/lock_info.idl b/third_party/blink/renderer/modules/locks/lock_info.idl index 93eae86..f788995 100644 --- a/third_party/blink/renderer/modules/locks/lock_info.idl +++ b/third_party/blink/renderer/modules/locks/lock_info.idl
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://github.com/inexorabletash/web-locks +// https://wicg.github.io/web-locks/#dictdef-lockinfo dictionary LockInfo { DOMString name; LockMode mode;
diff --git a/third_party/blink/renderer/modules/locks/lock_manager.idl b/third_party/blink/renderer/modules/locks/lock_manager.idl index e2185df..cfc6025d 100644 --- a/third_party/blink/renderer/modules/locks/lock_manager.idl +++ b/third_party/blink/renderer/modules/locks/lock_manager.idl
@@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://github.com/inexorabletash/web-locks - +// https://wicg.github.io/web-locks/#callbackdef-lockgrantedcallback callback LockGrantedCallback = any (Lock lock); + +// https://wicg.github.io/web-locks/#lockmanager [ SecureContext, Exposed=(Window,Worker),
diff --git a/third_party/blink/renderer/modules/locks/lock_manager_snapshot.idl b/third_party/blink/renderer/modules/locks/lock_manager_snapshot.idl index 279b5ed..a53b8e5 100644 --- a/third_party/blink/renderer/modules/locks/lock_manager_snapshot.idl +++ b/third_party/blink/renderer/modules/locks/lock_manager_snapshot.idl
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://github.com/inexorabletash/web-locks +// https://wicg.github.io/web-locks/#dictdef-lockmanagersnapshot dictionary LockManagerSnapshot { sequence<LockInfo> held; sequence<LockInfo> pending;
diff --git a/third_party/blink/renderer/modules/locks/lock_options.idl b/third_party/blink/renderer/modules/locks/lock_options.idl index cbe48a99..6afdfd87 100644 --- a/third_party/blink/renderer/modules/locks/lock_options.idl +++ b/third_party/blink/renderer/modules/locks/lock_options.idl
@@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://github.com/inexorabletash/web-locks +// https://wicg.github.io/web-locks/#enumdef-lockmode enum LockMode { "shared", "exclusive" }; +// https://wicg.github.io/web-locks/#dictdef-lockoptions dictionary LockOptions { LockMode mode = "exclusive"; boolean ifAvailable = false;
diff --git a/third_party/blink/renderer/modules/locks/navigator_locks.idl b/third_party/blink/renderer/modules/locks/navigator_locks.idl index 3ee3ff4..7b9ef29b 100644 --- a/third_party/blink/renderer/modules/locks/navigator_locks.idl +++ b/third_party/blink/renderer/modules/locks/navigator_locks.idl
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://github.com/inexorabletash/web-locks +// https://wicg.github.io/web-locks/#navigatorlocks [ SecureContext, Exposed=Window,
diff --git a/third_party/blink/renderer/modules/locks/worker_navigator_locks.idl b/third_party/blink/renderer/modules/locks/worker_navigator_locks.idl index 3dc5d02..c8d07dc 100644 --- a/third_party/blink/renderer/modules/locks/worker_navigator_locks.idl +++ b/third_party/blink/renderer/modules/locks/worker_navigator_locks.idl
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// https://github.com/inexorabletash/web-locks +// https://wicg.github.io/web-locks/#navigatorlocks [ SecureContext, Exposed=Worker,
diff --git a/third_party/blink/renderer/modules/service_worker/client.idl b/third_party/blink/renderer/modules/service_worker/client.idl index 2761202..1e5fc45e 100644 --- a/third_party/blink/renderer/modules/service_worker/client.idl +++ b/third_party/blink/renderer/modules/service_worker/client.idl
@@ -10,7 +10,7 @@ readonly attribute USVString url; readonly attribute DOMString id; readonly attribute ClientType type; - [PostMessage, RaisesException, CallWith=ScriptState] void postMessage(any message, optional sequence<object> transfer); + [CallWith=ScriptState, RaisesException] void postMessage(any message, optional sequence<object> transfer = []); // FIXME: frameType is non-standard, see https://crbug.com/697110 [CallWith=ScriptState] readonly attribute ContextFrameType frameType;
diff --git a/third_party/blink/renderer/modules/service_worker/navigator_service_worker.cc b/third_party/blink/renderer/modules/service_worker/navigator_service_worker.cc index b3b78c4..157a288 100644 --- a/third_party/blink/renderer/modules/service_worker/navigator_service_worker.cc +++ b/third_party/blink/renderer/modules/service_worker/navigator_service_worker.cc
@@ -18,9 +18,24 @@ NavigatorServiceWorker::NavigatorServiceWorker(Navigator& navigator) {} NavigatorServiceWorker* NavigatorServiceWorker::From(Document& document) { - if (!document.GetFrame() || !document.GetFrame()->DomWindow()) + LocalFrame* frame = document.GetFrame(); + if (!frame) return nullptr; - Navigator& navigator = *document.GetFrame()->DomWindow()->navigator(); + + // Bail-out if we are about to be navigated away. + // We check that DocumentLoader is attached since: + // - This serves as the signal since the DocumentLoader is detached in + // FrameLoader::PrepareForCommit(). + // - Creating ServiceWorkerProvider in + // RenderFrameImpl::CreateServiceWorkerProvider() assumes that there is a + // DocumentLoader attached to the frame. + if (!frame->Loader().GetDocumentLoader()) + return nullptr; + + LocalDOMWindow* dom_window = frame->DomWindow(); + if (!dom_window) + return nullptr; + Navigator& navigator = *dom_window->navigator(); return &From(navigator); }
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker.cc b/third_party/blink/renderer/modules/service_worker/service_worker.cc index 35d1012..89bb541 100644 --- a/third_party/blink/renderer/modules/service_worker/service_worker.cc +++ b/third_party/blink/renderer/modules/service_worker/service_worker.cc
@@ -34,10 +34,12 @@ #include "third_party/blink/public/mojom/service_worker/service_worker_state.mojom-blink.h" #include "third_party/blink/public/platform/web_string.h" #include "third_party/blink/renderer/bindings/core/v8/callback_promise_adapter.h" +#include "third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h" #include "third_party/blink/renderer/core/dom/events/event.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/messaging/blink_transferable_message.h" #include "third_party/blink/renderer/core/messaging/message_port.h" +#include "third_party/blink/renderer/core/messaging/post_message_options.h" #include "third_party/blink/renderer/modules/event_target_modules.h" #include "third_party/blink/renderer/modules/service_worker/service_worker_container_client.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" @@ -50,8 +52,8 @@ } void ServiceWorker::postMessage(ScriptState* script_state, - scoped_refptr<SerializedScriptValue> message, - const MessagePortArray& ports, + const ScriptValue& message, + Vector<ScriptValue>& transfer, ExceptionState& exception_state) { ServiceWorkerContainerClient* client = ServiceWorkerContainerClient::From(GetExecutionContext()); @@ -62,10 +64,24 @@ return; } + PostMessageOptions options; + Transferables transferables; + if (!transfer.IsEmpty()) + options.setTransfer(transfer); + + scoped_refptr<SerializedScriptValue> serialized_message = + PostMessageHelper::SerializeMessageByCopy(script_state->GetIsolate(), + message, options, transferables, + exception_state); + if (exception_state.HadException()) + return; + DCHECK(serialized_message); + BlinkTransferableMessage msg; - msg.message = message; + msg.message = serialized_message; msg.ports = MessagePort::DisentanglePorts( - ExecutionContext::From(script_state), ports, exception_state); + ExecutionContext::From(script_state), transferables.message_ports, + exception_state); if (exception_state.HadException()) return;
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker.h b/third_party/blink/renderer/modules/service_worker/service_worker.h index bdd5d3a..35d78f5 100644 --- a/third_party/blink/renderer/modules/service_worker/service_worker.h +++ b/third_party/blink/renderer/modules/service_worker/service_worker.h
@@ -63,10 +63,9 @@ EAGERLY_FINALIZE(); void postMessage(ScriptState*, - scoped_refptr<SerializedScriptValue> message, - const MessagePortArray&, + const ScriptValue& message, + Vector<ScriptValue>& transfer, ExceptionState&); - static bool CanTransferArrayBuffersAndImageBitmaps() { return false; } String scriptURL() const; String state() const;
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker.idl b/third_party/blink/renderer/modules/service_worker/service_worker.idl index 505ea01..61dafe1 100644 --- a/third_party/blink/renderer/modules/service_worker/service_worker.idl +++ b/third_party/blink/renderer/modules/service_worker/service_worker.idl
@@ -43,7 +43,7 @@ SecureContext ] interface ServiceWorker : EventTarget { - [PostMessage, RaisesException] void postMessage(any message, optional sequence<object> transfer); + [CallWith=ScriptState, RaisesException] void postMessage(any message, optional sequence<object> transfer = []); readonly attribute USVString scriptURL; readonly attribute ServiceWorkerState state;
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_client.cc b/third_party/blink/renderer/modules/service_worker/service_worker_client.cc index 4a1d2df..1619a6f 100644 --- a/third_party/blink/renderer/modules/service_worker/service_worker_client.cc +++ b/third_party/blink/renderer/modules/service_worker/service_worker_client.cc
@@ -11,10 +11,11 @@ #include "third_party/blink/public/mojom/service_worker/service_worker_client.mojom-blink.h" #include "third_party/blink/public/platform/web_string.h" #include "third_party/blink/renderer/bindings/core/v8/callback_promise_adapter.h" -#include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h" +#include "third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/frame/use_counter.h" #include "third_party/blink/renderer/core/messaging/blink_transferable_message.h" +#include "third_party/blink/renderer/core/messaging/post_message_options.h" #include "third_party/blink/renderer/modules/service_worker/service_worker_global_scope_client.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/bindings/script_state.h" @@ -86,15 +87,28 @@ return String(); } -void ServiceWorkerClient::postMessage( - ScriptState* script_state, - scoped_refptr<SerializedScriptValue> message, - const MessagePortArray& ports, - ExceptionState& exception_state) { +void ServiceWorkerClient::postMessage(ScriptState* script_state, + const ScriptValue& message, + Vector<ScriptValue>& transfer, + ExceptionState& exception_state) { ExecutionContext* context = ExecutionContext::From(script_state); + PostMessageOptions options; + Transferables transferables; + if (!transfer.IsEmpty()) + options.setTransfer(transfer); + + scoped_refptr<SerializedScriptValue> serialized_message = + PostMessageHelper::SerializeMessageByCopy(script_state->GetIsolate(), + message, options, transferables, + exception_state); + if (exception_state.HadException()) + return; + DCHECK(serialized_message); + BlinkTransferableMessage msg; - msg.message = message; - msg.ports = MessagePort::DisentanglePorts(context, ports, exception_state); + msg.message = serialized_message; + msg.ports = MessagePort::DisentanglePorts( + context, transferables.message_ports, exception_state); if (exception_state.HadException()) return;
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_client.h b/third_party/blink/renderer/modules/service_worker/service_worker_client.h index 7cbe781..fef76e89 100644 --- a/third_party/blink/renderer/modules/service_worker/service_worker_client.h +++ b/third_party/blink/renderer/modules/service_worker/service_worker_client.h
@@ -8,7 +8,6 @@ #include <memory> #include "third_party/blink/public/platform/modules/service_worker/web_service_worker_clients_info.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise.h" -#include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/heap/handle.h" @@ -38,12 +37,10 @@ String frameType(ScriptState*) const; String id() const { return uuid_; } void postMessage(ScriptState*, - scoped_refptr<SerializedScriptValue> message, - const MessagePortArray&, + const ScriptValue& message, + Vector<ScriptValue>& transfer, ExceptionState&); - static bool CanTransferArrayBuffersAndImageBitmaps() { return false; } - protected: explicit ServiceWorkerClient(const WebServiceWorkerClientInfo&);
diff --git a/third_party/blink/renderer/modules/storage/BUILD.gn b/third_party/blink/renderer/modules/storage/BUILD.gn index d6c8f876..4a5dba16 100644 --- a/third_party/blink/renderer/modules/storage/BUILD.gn +++ b/third_party/blink/renderer/modules/storage/BUILD.gn
@@ -6,6 +6,8 @@ blink_modules_sources("storage") { sources = [ + "cached_storage_area.cc", + "cached_storage_area.h", "dom_window_storage.cc", "dom_window_storage.h", "dom_window_storage_controller.cc", @@ -28,7 +30,11 @@ jumbo_source_set("unit_tests") { testonly = true sources = [ + "cached_storage_area_test.cc", "storage_area_map_test.cc", + "testing/fake_area_source.h", + "testing/mock_storage_area.cc", + "testing/mock_storage_area.h", ] configs += [
diff --git a/third_party/blink/renderer/modules/storage/cached_storage_area.cc b/third_party/blink/renderer/modules/storage/cached_storage_area.cc new file mode 100644 index 0000000..0cf5180 --- /dev/null +++ b/third_party/blink/renderer/modules/storage/cached_storage_area.cc
@@ -0,0 +1,630 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/modules/storage/cached_storage_area.h" + +#include "base/metrics/histogram_macros.h" +#include "base/rand_util.h" +#include "mojo/public/cpp/bindings/strong_associated_binding.h" +#include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h" +#include "third_party/blink/renderer/platform/weborigin/kurl.h" +#include "third_party/blink/renderer/platform/wtf/functional.h" +#include "third_party/blink/renderer/platform/wtf/text/string_buffer.h" +#include "third_party/blink/renderer/platform/wtf/text/unicode.h" +#include "third_party/blink/renderer/platform/wtf/text/utf8.h" + +namespace blink { + +namespace { + +// Don't change or reorder any of the values in this enum, as these values +// are serialized on disk. +enum class StorageFormat : uint8_t { UTF16 = 0, Latin1 = 1 }; + +class GetAllCallback : public mojom::blink::StorageAreaGetAllCallback { + public: + static mojom::blink::StorageAreaGetAllCallbackAssociatedPtrInfo CreateAndBind( + base::OnceCallback<void(bool)> callback) { + mojom::blink::StorageAreaGetAllCallbackAssociatedPtrInfo ptr_info; + auto request = mojo::MakeRequest(&ptr_info); + mojo::MakeStrongAssociatedBinding( + base::WrapUnique(new GetAllCallback(std::move(callback))), + std::move(request)); + return ptr_info; + } + + private: + explicit GetAllCallback(base::OnceCallback<void(bool)> callback) + : m_callback(std::move(callback)) {} + void Complete(bool success) override { std::move(m_callback).Run(success); } + + base::OnceCallback<void(bool)> m_callback; +}; + +// These methods are used to pack and unpack the page_url/storage_area_id into +// source strings to/from the browser. +String PackSource(const KURL& page_url, const String& storage_area_id) { + return page_url.GetString() + "\n" + storage_area_id; +} + +void UnpackSource(const String& source, + KURL* page_url, + String* storage_area_id) { + Vector<String> result; + source.Split("\n", true, result); + DCHECK_EQ(result.size(), 2u); + *page_url = KURL(result[0]); + *storage_area_id = result[1]; +} + +} // namespace + +// static +scoped_refptr<CachedStorageArea> CachedStorageArea::CreateForLocalStorage( + scoped_refptr<const SecurityOrigin> origin, + mojo::InterfacePtr<mojom::blink::StorageArea> area, + scoped_refptr<base::SingleThreadTaskRunner> ipc_runner) { + return base::AdoptRef(new CachedStorageArea( + std::move(origin), std::move(area), std::move(ipc_runner))); +} + +// static +scoped_refptr<CachedStorageArea> CachedStorageArea::CreateForSessionStorage( + scoped_refptr<const SecurityOrigin> origin, + mojo::AssociatedInterfacePtr<mojom::blink::StorageArea> area, + scoped_refptr<base::SingleThreadTaskRunner> ipc_runner) { + return base::AdoptRef(new CachedStorageArea( + std::move(origin), std::move(area), std::move(ipc_runner))); +} + +unsigned CachedStorageArea::GetLength() { + EnsureLoaded(); + return map_->GetLength(); +} + +String CachedStorageArea::GetKey(unsigned index) { + EnsureLoaded(); + return map_->GetKey(index); +} + +String CachedStorageArea::GetItem(const String& key) { + EnsureLoaded(); + return map_->GetItem(key); +} + +bool CachedStorageArea::SetItem(const String& key, + const String& value, + Source* source) { + DCHECK(areas_.Contains(source)); + + // A quick check to reject obviously overbudget items to avoid priming the + // cache. + if ((key.length() + value.length()) * 2 > + mojom::blink::StorageArea::kPerStorageAreaQuota) + return false; + + EnsureLoaded(); + String old_value; + if (!map_->SetItem(key, value, &old_value)) + return false; + + // Determine data formats. + const FormatOption key_format = GetKeyFormat(); + const FormatOption value_format = GetValueFormat(); + + // Ignore mutations to |key| until OnSetItemComplete. + auto ignore_add_result = ignore_key_mutations_.insert(key, 1); + if (!ignore_add_result.is_new_entry) + ignore_add_result.stored_value->value++; + + base::Optional<Vector<uint8_t>> optional_old_value; + if (!old_value.IsNull()) + optional_old_value = StringToUint8Vector(old_value, value_format); + + KURL page_url = source->GetPageUrl(); + String source_id = areas_.at(source); + + blink::WebScopedVirtualTimePauser virtual_time_pauser = + source->CreateWebScopedVirtualTimePauser( + "CachedStorageArea", + WebScopedVirtualTimePauser::VirtualTaskDuration::kNonInstant); + virtual_time_pauser.PauseVirtualTime(); + mojo_area_->Put(StringToUint8Vector(key, key_format), + StringToUint8Vector(value, value_format), optional_old_value, + PackSource(page_url, source_id), + WTF::Bind(&CachedStorageArea::OnSetItemComplete, + weak_factory_.GetWeakPtr(), key, + std::move(virtual_time_pauser))); + if (IsSessionStorage() && old_value != value) { + for (const auto& area : areas_) { + if (area.key != source) + area.key->EnqueueStorageEvent(key, old_value, value, page_url); + } + } + return true; +} + +void CachedStorageArea::RemoveItem(const String& key, Source* source) { + DCHECK(areas_.Contains(source)); + + EnsureLoaded(); + String old_value; + if (!map_->RemoveItem(key, &old_value)) + return; + + // Determine data formats. + const FormatOption key_format = GetKeyFormat(); + const FormatOption value_format = GetValueFormat(); + + // Ignore mutations to |key| until OnRemoveItemComplete. + auto ignore_add_result = ignore_key_mutations_.insert(key, 1); + if (!ignore_add_result.is_new_entry) + ignore_add_result.stored_value->value++; + + base::Optional<Vector<uint8_t>> optional_old_value; + if (should_send_old_value_on_mutations_) + optional_old_value = StringToUint8Vector(old_value, value_format); + + KURL page_url = source->GetPageUrl(); + String source_id = areas_.at(source); + + blink::WebScopedVirtualTimePauser virtual_time_pauser = + source->CreateWebScopedVirtualTimePauser( + "CachedStorageArea", + WebScopedVirtualTimePauser::VirtualTaskDuration::kNonInstant); + virtual_time_pauser.PauseVirtualTime(); + mojo_area_->Delete(StringToUint8Vector(key, key_format), optional_old_value, + PackSource(page_url, source_id), + WTF::Bind(&CachedStorageArea::OnRemoveItemComplete, + weak_factory_.GetWeakPtr(), key, + std::move(virtual_time_pauser))); + if (IsSessionStorage()) { + for (const auto& area : areas_) { + if (area.key != source) + area.key->EnqueueStorageEvent(key, old_value, String(), page_url); + } + } +} + +void CachedStorageArea::Clear(Source* source) { + DCHECK(areas_.Contains(source)); + + bool already_empty = false; + if (IsSessionStorage()) { + EnsureLoaded(); + already_empty = map_->GetLength() == 0u; + } + // No need to prime the cache in this case. + Reset(); + map_ = std::make_unique<StorageAreaMap>( + mojom::blink::StorageArea::kPerStorageAreaQuota); + ignore_all_mutations_ = true; + + KURL page_url = source->GetPageUrl(); + String source_id = areas_.at(source); + + blink::WebScopedVirtualTimePauser virtual_time_pauser = + source->CreateWebScopedVirtualTimePauser( + "CachedStorageArea", + WebScopedVirtualTimePauser::VirtualTaskDuration::kNonInstant); + virtual_time_pauser.PauseVirtualTime(); + mojo_area_->DeleteAll( + PackSource(page_url, source_id), + WTF::Bind(&CachedStorageArea::OnClearComplete, weak_factory_.GetWeakPtr(), + std::move(virtual_time_pauser))); + if (IsSessionStorage() && !already_empty) { + for (const auto& area : areas_) { + if (area.key != source) + area.key->EnqueueStorageEvent(String(), String(), String(), page_url); + } + } +} + +String CachedStorageArea::RegisterSource(Source* source) { + String id = String::Number(base::RandUint64()); + areas_.insert(source, id); + return id; +} + +CachedStorageArea::CachedStorageArea( + scoped_refptr<const SecurityOrigin> origin, + mojo::InterfacePtr<mojom::blink::StorageArea> area, + scoped_refptr<base::SingleThreadTaskRunner> ipc_runner) + : origin_(std::move(origin)), + mojo_area_(area.get()), + mojo_area_ptr_(std::move(area)), + binding_(this), + weak_factory_(this) { + mojom::blink::StorageAreaObserverAssociatedPtrInfo ptr_info; + binding_.Bind(mojo::MakeRequest(&ptr_info), std::move(ipc_runner)); + mojo_area_->AddObserver(std::move(ptr_info)); +} + +CachedStorageArea::CachedStorageArea( + scoped_refptr<const SecurityOrigin> origin, + mojo::AssociatedInterfacePtr<mojom::blink::StorageArea> area, + scoped_refptr<base::SingleThreadTaskRunner> ipc_runner) + : origin_(std::move(origin)), + mojo_area_(area.get()), + mojo_area_associated_ptr_(std::move(area)), + binding_(this), + weak_factory_(this) { + mojom::blink::StorageAreaObserverAssociatedPtrInfo ptr_info; + binding_.Bind(mojo::MakeRequest(&ptr_info), std::move(ipc_runner)); + mojo_area_->AddObserver(std::move(ptr_info)); +} + +CachedStorageArea::~CachedStorageArea() = default; + +void CachedStorageArea::KeyAdded(const Vector<uint8_t>& key, + const Vector<uint8_t>& value, + const String& source) { + DCHECK(!IsSessionStorage()); + KeyAddedOrChanged(key, value, String(), source); +} + +void CachedStorageArea::KeyChanged(const Vector<uint8_t>& key, + const Vector<uint8_t>& new_value, + const Vector<uint8_t>& old_value, + const String& source) { + DCHECK(!IsSessionStorage()); + KeyAddedOrChanged( + key, new_value, + Uint8VectorToString(old_value, FormatOption::kLocalStorageDetectFormat), + source); +} + +void CachedStorageArea::KeyDeleted(const Vector<uint8_t>& key, + const Vector<uint8_t>& old_value, + const String& source) { + DCHECK(!IsSessionStorage()); + KURL page_url; + String storage_area_id; + UnpackSource(source, &page_url, &storage_area_id); + + String key_string = + Uint8VectorToString(key, FormatOption::kLocalStorageDetectFormat); + + bool from_local_area = false; + for (const auto& area : areas_) { + if (area.value == storage_area_id) { + from_local_area = true; + } else { + area.key->EnqueueStorageEvent( + key_string, + Uint8VectorToString(old_value, + FormatOption::kLocalStorageDetectFormat), + String(), page_url); + } + } + + if (map_ && !from_local_area) { + // This was from another process or the storage area is gone. If the former, + // remove it from our cache if we haven't already changed it and are waiting + // for the confirmation callback. In the latter case, we won't do anything + // because ignore_key_mutations_ won't be updated until the callback runs. + if (!ignore_all_mutations_ && + ignore_key_mutations_.find(key_string) == ignore_key_mutations_.end()) + map_->RemoveItem(key_string, nullptr); + } +} + +void CachedStorageArea::AllDeleted(const String& source) { + KURL page_url; + String storage_area_id; + UnpackSource(source, &page_url, &storage_area_id); + + bool from_local_area = false; + for (const auto& area : areas_) { + if (area.value == storage_area_id) { + from_local_area = true; + } else { + area.key->EnqueueStorageEvent(String(), String(), String(), page_url); + } + } + + if (map_ && !from_local_area && !ignore_all_mutations_) { + auto old = std::move(map_); + map_ = std::make_unique<StorageAreaMap>( + mojom::blink::StorageArea::kPerStorageAreaQuota); + + // We have to retain local additions which happened after this clear + // operation from another process. + auto iter = ignore_key_mutations_.begin(); + while (iter != ignore_key_mutations_.end()) { + String value = old->GetItem(iter->key); + if (!value.IsNull()) + map_->SetItemIgnoringQuota(iter->key, value); + ++iter; + } + } +} + +void CachedStorageArea::ShouldSendOldValueOnMutations(bool value) { + DCHECK(!IsSessionStorage()); + should_send_old_value_on_mutations_ = value; +} + +void CachedStorageArea::KeyAddedOrChanged(const Vector<uint8_t>& key, + const Vector<uint8_t>& new_value, + const String& old_value, + const String& source) { + DCHECK(!IsSessionStorage()); + KURL page_url; + String storage_area_id; + UnpackSource(source, &page_url, &storage_area_id); + + String key_string = + Uint8VectorToString(key, FormatOption::kLocalStorageDetectFormat); + String new_value_string = + Uint8VectorToString(new_value, FormatOption::kLocalStorageDetectFormat); + + bool from_local_area = false; + for (const auto& area : areas_) { + if (area.value == storage_area_id) { + from_local_area = true; + } else { + area.key->EnqueueStorageEvent(key_string, old_value, new_value_string, + page_url); + } + } + + if (map_ && !from_local_area) { + // This was from another process or the storage area is gone. If the former, + // apply it to our cache if we haven't already changed it and are waiting + // for the confirmation callback. In the latter case, we won't do anything + // because ignore_key_mutations_ won't be updated until the callback runs. + if (!ignore_all_mutations_ && + ignore_key_mutations_.find(key_string) == ignore_key_mutations_.end()) { + // We turn off quota checking here to accommodate the over budget + // allowance that's provided in the browser process. + map_->SetItemIgnoringQuota(key_string, new_value_string); + } + } +} + +void CachedStorageArea::OnSetItemComplete(const String& key, + WebScopedVirtualTimePauser, + bool success) { + if (!success) { + Reset(); + return; + } + + auto it = ignore_key_mutations_.find(key); + DCHECK(it != ignore_key_mutations_.end()); + if (--it->value == 0) + ignore_key_mutations_.erase(it); +} + +void CachedStorageArea::OnRemoveItemComplete(const String& key, + WebScopedVirtualTimePauser, + bool success) { + DCHECK(success); + auto it = ignore_key_mutations_.find(key); + DCHECK(it != ignore_key_mutations_.end()); + if (--it->value == 0) + ignore_key_mutations_.erase(it); +} + +void CachedStorageArea::OnClearComplete(WebScopedVirtualTimePauser, + bool success) { + DCHECK(success); + DCHECK(ignore_all_mutations_); + ignore_all_mutations_ = false; +} + +void CachedStorageArea::OnGetAllComplete(bool success) { + // Since the GetAll method is synchronous, we need this asynchronously + // delivered notification to avoid applying changes to the returned array + // that we already have. + DCHECK(success); + DCHECK(ignore_all_mutations_); + ignore_all_mutations_ = false; +} + +void CachedStorageArea::EnsureLoaded() { + if (map_) + return; + + base::TimeTicks before = base::TimeTicks::Now(); + + ignore_all_mutations_ = true; + bool success = false; + Vector<mojom::blink::KeyValuePtr> data; + mojo_area_->GetAll( + GetAllCallback::CreateAndBind(WTF::Bind( + &CachedStorageArea::OnGetAllComplete, weak_factory_.GetWeakPtr())), + &success, &data); + + // Determine data formats. + const FormatOption key_format = GetKeyFormat(); + const FormatOption value_format = GetValueFormat(); + + map_ = std::make_unique<StorageAreaMap>( + mojom::blink::StorageArea::kPerStorageAreaQuota); + for (const auto& item : data) { + map_->SetItemIgnoringQuota(Uint8VectorToString(item->key, key_format), + Uint8VectorToString(item->value, value_format)); + } + + base::TimeDelta time_to_prime = base::TimeTicks::Now() - before; + UMA_HISTOGRAM_TIMES("LocalStorage.MojoTimeToPrime", time_to_prime); + + size_t local_storage_size_kb = map_->quota_used() / 1024; + // Track localStorage size, from 0-6MB. Note that the maximum size should be + // 10MB, but we add some slop since we want to make sure the max size is + // always above what we see in practice, since histograms can't change. + UMA_HISTOGRAM_CUSTOM_COUNTS("LocalStorage.MojoSizeInKB", + local_storage_size_kb, 1, 6 * 1024, 50); + if (local_storage_size_kb < 100) { + UMA_HISTOGRAM_TIMES("LocalStorage.MojoTimeToPrimeForUnder100KB", + time_to_prime); + } else if (local_storage_size_kb < 1000) { + UMA_HISTOGRAM_TIMES("LocalStorage.MojoTimeToPrimeFor100KBTo1MB", + time_to_prime); + } else { + UMA_HISTOGRAM_TIMES("LocalStorage.MojoTimeToPrimeFor1MBTo5MB", + time_to_prime); + } +} + +void CachedStorageArea::Reset() { + map_ = nullptr; + ignore_key_mutations_.clear(); + ignore_all_mutations_ = false; + weak_factory_.InvalidateWeakPtrs(); +} + +CachedStorageArea::FormatOption CachedStorageArea::GetKeyFormat() const { + return IsSessionStorage() ? FormatOption::kSessionStorageForceUTF8 + : FormatOption::kLocalStorageDetectFormat; +} + +CachedStorageArea::FormatOption CachedStorageArea::GetValueFormat() const { + return IsSessionStorage() ? FormatOption::kSessionStorageForceUTF16 + : FormatOption::kLocalStorageDetectFormat; +} + +bool CachedStorageArea::IsSessionStorage() const { + return mojo_area_associated_ptr_.is_bound(); +} + +// static +String CachedStorageArea::Uint8VectorToString(const Vector<uint8_t>& input, + FormatOption format_option) { + if (input.IsEmpty()) + return g_empty_string; + const size_t input_size = input.size(); + String result; + bool corrupt = false; + switch (format_option) { + case FormatOption::kSessionStorageForceUTF16: { + if (input_size % sizeof(UChar) != 0) { + corrupt = true; + break; + } + StringBuffer<UChar> buffer(input_size / sizeof(UChar)); + std::memcpy(buffer.Characters(), input.data(), input_size); + result = String::Adopt(buffer); + break; + } + case FormatOption::kSessionStorageForceUTF8: { + // TODO(mek): When this lived in content it used to do a "lenient" + // conversion, while this is a strict conversion. Figure out if that + // difference actually matters in practice. + result = String::FromUTF8(input.data(), input_size); + if (result.IsNull()) { + corrupt = true; + break; + } + break; + } + case FormatOption::kLocalStorageDetectFormat: { + StorageFormat format = static_cast<StorageFormat>(input[0]); + const size_t payload_size = input_size - 1; + switch (format) { + case StorageFormat::UTF16: { + if (payload_size % sizeof(UChar) != 0) { + corrupt = true; + break; + } + StringBuffer<UChar> buffer(payload_size / sizeof(UChar)); + std::memcpy(buffer.Characters(), input.data() + 1, payload_size); + result = String::Adopt(buffer); + break; + } + case StorageFormat::Latin1: + result = String(reinterpret_cast<const char*>(input.data() + 1), + payload_size); + break; + default: + corrupt = true; + } + break; + } + } + if (corrupt) { + // TODO(mek): Better error recovery when corrupt (or otherwise invalid) data + // is detected. + LOCAL_HISTOGRAM_BOOLEAN("LocalStorageCachedArea.CorruptData", true); + LOG(ERROR) << "Corrupt data in domstorage"; + return g_empty_string; + } + return result; +} + +// static +Vector<uint8_t> CachedStorageArea::StringToUint8Vector( + const String& input, + FormatOption format_option) { + switch (format_option) { + case FormatOption::kSessionStorageForceUTF16: { + Vector<uint8_t> result(input.length() * sizeof(UChar)); + input.CopyTo(reinterpret_cast<UChar*>(result.data()), 0, input.length()); + return result; + } + case FormatOption::kSessionStorageForceUTF8: { + unsigned length = input.length(); + if (input.Is8Bit() && input.ContainsOnlyASCII()) { + Vector<uint8_t> result(length); + std::memcpy(result.data(), input.Characters8(), length); + return result; + } + // Handle 8 bit case where it's not only ascii. + if (input.Is8Bit()) { + // This code is copied from WTF::String::Utf8(), except the vector + // doesn't have a stack-allocated capacity. + // We do this because there isn't a way to transform the CString we get + // from WTF::String::Utf8() to a Vector without an extra copy. + if (length > std::numeric_limits<unsigned>::max() / 3) + return Vector<uint8_t>(); + Vector<uint8_t> buffer_vector(length * 3); + uint8_t* buffer = buffer_vector.data(); + const LChar* characters = input.Characters8(); + + WTF::Unicode::ConversionResult result = + WTF::Unicode::ConvertLatin1ToUTF8( + &characters, characters + length, + reinterpret_cast<char**>(&buffer), + reinterpret_cast<char*>(buffer + buffer_vector.size())); + // (length * 3) should be sufficient for any conversion + DCHECK_NE(result, WTF::Unicode::kTargetExhausted); + buffer_vector.Shrink(buffer - buffer_vector.data()); + return buffer_vector; + } + + // TODO(dmurph): Figure out how to avoid a copy here. + // TODO(dmurph): Handle invalid UTF16 better. https://crbug.com/873280. + CString utf8 = input.Utf8( + WTF::kStrictUTF8ConversionReplacingUnpairedSurrogatesWithFFFD); + Vector<uint8_t> result(utf8.length()); + std::memcpy(result.data(), utf8.data(), utf8.length()); + return result; + } + case FormatOption::kLocalStorageDetectFormat: { + if (input.ContainsOnlyLatin1()) { + Vector<uint8_t> result(input.length() + 1); + result[0] = static_cast<uint8_t>(StorageFormat::Latin1); + if (input.Is8Bit()) { + std::memcpy(result.data() + 1, input.Characters8(), input.length()); + } else { + for (unsigned i = 0; i < input.length(); ++i) { + result[i + 1] = input[i]; + } + } + return result; + } + DCHECK(!input.Is8Bit()); + Vector<uint8_t> result(input.length() * sizeof(UChar) + 1); + result[0] = static_cast<uint8_t>(StorageFormat::UTF16); + std::memcpy(result.data() + 1, input.Characters16(), + input.length() * sizeof(UChar)); + return result; + } + } + NOTREACHED(); +} + +} // namespace blink
diff --git a/third_party/blink/renderer/modules/storage/cached_storage_area.h b/third_party/blink/renderer/modules/storage/cached_storage_area.h new file mode 100644 index 0000000..006552e --- /dev/null +++ b/third_party/blink/renderer/modules/storage/cached_storage_area.h
@@ -0,0 +1,170 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_STORAGE_CACHED_STORAGE_AREA_H_ +#define THIRD_PARTY_BLINK_RENDERER_MODULES_STORAGE_CACHED_STORAGE_AREA_H_ + +#include "mojo/public/cpp/bindings/associated_binding.h" +#include "mojo/public/cpp/bindings/associated_interface_ptr.h" +#include "mojo/public/cpp/bindings/interface_ptr.h" +#include "third_party/blink/public/mojom/dom_storage/storage_area.mojom-blink.h" +#include "third_party/blink/public/platform/web_scoped_virtual_time_pauser.h" +#include "third_party/blink/renderer/modules/modules_export.h" +#include "third_party/blink/renderer/modules/storage/storage_area_map.h" +#include "third_party/blink/renderer/platform/heap/heap_allocator.h" +#include "third_party/blink/renderer/platform/heap/persistent.h" +#include "third_party/blink/renderer/platform/weborigin/security_origin.h" +#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" + +namespace blink { + +// An in-process implementation of LocalStorage using a LevelDB Mojo service. +// Maintains a complete cache of the origin's Map of key/value pairs for fast +// access. The cache is primed on first access and changes are written to the +// backend through the level db interface pointer. Mutations originating in +// other processes are applied to the cache via mojom::LevelDBObserver +// callbacks. +// There is one CachedStorageArea for potentially many LocalStorageArea +// objects. +class MODULES_EXPORT CachedStorageArea + : public mojom::blink::StorageAreaObserver, + public RefCounted<CachedStorageArea> { + public: + // Instances of this class are used to identify the "source" of any changes + // made to this storage area, as well as to dispatch any incoming change + // events. Change events are not sent back to the source that caused the + // change. The source passed to the various methods that modify storage + // should have been registered first by calling RegisterSource. + class Source : public GarbageCollectedMixin { + public: + virtual ~Source() {} + virtual KURL GetPageUrl() const = 0; + virtual void EnqueueStorageEvent(const String& key, + const String& old_value, + const String& new_value, + const String& url) = 0; + virtual blink::WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser( + const char* name, + WebScopedVirtualTimePauser::VirtualTaskDuration duration) = 0; + }; + + static scoped_refptr<CachedStorageArea> CreateForLocalStorage( + scoped_refptr<const SecurityOrigin> origin, + mojo::InterfacePtr<mojom::blink::StorageArea> area, + scoped_refptr<base::SingleThreadTaskRunner> ipc_runner); + static scoped_refptr<CachedStorageArea> CreateForSessionStorage( + scoped_refptr<const SecurityOrigin> origin, + mojo::AssociatedInterfacePtr<mojom::blink::StorageArea> area, + scoped_refptr<base::SingleThreadTaskRunner> ipc_runner); + + // These correspond to blink::Storage. + unsigned GetLength(); + String GetKey(unsigned index); + String GetItem(const String& key); + bool SetItem(const String& key, const String& value, Source* source); + void RemoveItem(const String& key, Source* source); + void Clear(Source* source); + + // Allow this object to keep track of the Source instances corresponding to + // it, which is needed for mutation event notifications. + // Returns the (unique) id allocated for this source for testing purposes. + String RegisterSource(Source* source); + + size_t memory_used() const { return map_ ? map_->quota_used() : 0; } + + // Only public to allow tests to parametrize on this type. + enum class FormatOption { + kLocalStorageDetectFormat, + kSessionStorageForceUTF16, + kSessionStorageForceUTF8 + }; + + private: + CachedStorageArea(scoped_refptr<const SecurityOrigin> origin, + mojo::InterfacePtr<mojom::blink::StorageArea> area, + scoped_refptr<base::SingleThreadTaskRunner> ipc_runner); + CachedStorageArea( + scoped_refptr<const SecurityOrigin> origin, + mojo::AssociatedInterfacePtr<mojom::blink::StorageArea> area, + scoped_refptr<base::SingleThreadTaskRunner> ipc_runner); + + friend class RefCounted<CachedStorageArea>; + ~CachedStorageArea() override; + + friend class CachedStorageAreaTest; + friend class CachedStorageAreaStringFormatTest; + + // StorageAreaObserver: + void KeyAdded(const Vector<uint8_t>& key, + const Vector<uint8_t>& value, + const String& source) override; + void KeyChanged(const Vector<uint8_t>& key, + const Vector<uint8_t>& new_value, + const Vector<uint8_t>& old_value, + const String& source) override; + void KeyDeleted(const Vector<uint8_t>& key, + const Vector<uint8_t>& old_value, + const String& source) override; + void AllDeleted(const String& source) override; + void ShouldSendOldValueOnMutations(bool value) override; + + // Common helper for KeyAdded() and KeyChanged() + void KeyAddedOrChanged(const Vector<uint8_t>& key, + const Vector<uint8_t>& new_value, + const String& old_value, + const String& source); + + void OnSetItemComplete(const String& key, + WebScopedVirtualTimePauser, + bool success); + void OnRemoveItemComplete(const String& key, + WebScopedVirtualTimePauser, + bool success); + void OnClearComplete(WebScopedVirtualTimePauser, bool success); + void OnGetAllComplete(bool success); + + // Synchronously fetches the areas data if it hasn't been fetched already. + void EnsureLoaded(); + + // Resets the object back to its newly constructed state. + void Reset(); + + bool IsSessionStorage() const; + FormatOption GetKeyFormat() const; + FormatOption GetValueFormat() const; + + static String Uint8VectorToString(const Vector<uint8_t>& input, + FormatOption format_option); + static Vector<uint8_t> StringToUint8Vector(const String& input, + FormatOption format_option); + + scoped_refptr<const SecurityOrigin> origin_; + + std::unique_ptr<StorageAreaMap> map_; + + HashMap<String, int> ignore_key_mutations_; + bool ignore_all_mutations_ = false; + + // See ShouldSendOldValueOnMutations(). + bool should_send_old_value_on_mutations_ = true; + + // Depending on if this is a session storage or local storage area only one of + // |mojo_area_ptr_| and |mojo_area_associated_ptr_| will be non-null. Either + // way |mojo_area_| will be equal to the non-null one. + mojom::blink::StorageArea* mojo_area_; + mojo::InterfacePtr<mojom::blink::StorageArea> mojo_area_ptr_; + mojo::AssociatedInterfacePtr<mojom::blink::StorageArea> + mojo_area_associated_ptr_; + mojo::AssociatedBinding<mojom::blink::StorageAreaObserver> binding_; + + PersistentHeapHashMap<WeakMember<Source>, String> areas_; + + base::WeakPtrFactory<CachedStorageArea> weak_factory_; + + DISALLOW_COPY_AND_ASSIGN(CachedStorageArea); +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_STORAGE_CACHED_STORAGE_AREA_H_
diff --git a/third_party/blink/renderer/modules/storage/cached_storage_area_test.cc b/third_party/blink/renderer/modules/storage/cached_storage_area_test.cc new file mode 100644 index 0000000..e38be68 --- /dev/null +++ b/third_party/blink/renderer/modules/storage/cached_storage_area_test.cc
@@ -0,0 +1,574 @@ +// Copyright 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/modules/storage/cached_storage_area.h" + +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/platform/scheduler/test/fake_renderer_scheduler.h" +#include "third_party/blink/renderer/modules/storage/testing/fake_area_source.h" +#include "third_party/blink/renderer/modules/storage/testing/mock_storage_area.h" +#include "third_party/blink/renderer/platform/weborigin/kurl.h" +#include "third_party/blink/renderer/platform/weborigin/security_origin.h" + +namespace blink { + +using FormatOption = CachedStorageArea::FormatOption; + +class CachedStorageAreaTest : public testing::Test { + public: + const scoped_refptr<SecurityOrigin> kOrigin = + SecurityOrigin::CreateFromString("http://dom_storage/"); + const String kKey = "key"; + const String kValue = "value"; + const String kValue2 = "another value"; + const KURL kPageUrl = KURL("http://dom_storage/page"); + const KURL kPageUrl2 = KURL("http://dom_storage/other_page"); + const String kRemoteSourceId = "1234"; + const String kRemoteSource = kPageUrl2.GetString() + "\n" + kRemoteSourceId; + + void SetUp() override { + if (IsSessionStorage()) { + cached_area_ = CachedStorageArea::CreateForSessionStorage( + kOrigin, mock_storage_area_.GetAssociatedInterfacePtr(), + renderer_scheduler_->IPCTaskRunner()); + } else { + cached_area_ = CachedStorageArea::CreateForLocalStorage( + kOrigin, mock_storage_area_.GetInterfacePtr(), + renderer_scheduler_->IPCTaskRunner()); + } + source_area_ = new FakeAreaSource(kPageUrl); + source_area_id_ = cached_area_->RegisterSource(source_area_); + source_ = kPageUrl.GetString() + "\n" + source_area_id_; + source_area2_ = new FakeAreaSource(kPageUrl2); + cached_area_->RegisterSource(source_area2_); + } + + virtual bool IsSessionStorage() { return false; } + + bool IsCacheLoaded() { return cached_area_->map_.get(); } + + bool IsIgnoringAllMutations() { return cached_area_->ignore_all_mutations_; } + + void ResetCache() { cached_area_->Reset(); } + + bool IsIgnoringKeyMutations(const String& key) { + return cached_area_->ignore_key_mutations_.find(key) != + cached_area_->ignore_key_mutations_.end(); + } + + static Vector<uint8_t> StringToUint8Vector(const String& input, + FormatOption format) { + return CachedStorageArea::StringToUint8Vector(input, format); + } + + static String Uint8VectorToString(const Vector<uint8_t>& input, + FormatOption format) { + return CachedStorageArea::Uint8VectorToString(input, format); + } + + Vector<uint8_t> KeyToUint8Vector(const String& key) { + return StringToUint8Vector( + key, IsSessionStorage() ? FormatOption::kSessionStorageForceUTF8 + : FormatOption::kLocalStorageDetectFormat); + } + + Vector<uint8_t> ValueToUint8Vector(const String& value) { + return StringToUint8Vector( + value, IsSessionStorage() ? FormatOption::kSessionStorageForceUTF16 + : FormatOption::kLocalStorageDetectFormat); + } + + String KeyFromUint8Vector(const Vector<uint8_t>& key) { + return Uint8VectorToString( + key, IsSessionStorage() ? FormatOption::kSessionStorageForceUTF8 + : FormatOption::kLocalStorageDetectFormat); + } + + String ValueFromUint8Vector(const Vector<uint8_t>& value) { + return Uint8VectorToString( + value, IsSessionStorage() ? FormatOption::kSessionStorageForceUTF16 + : FormatOption::kLocalStorageDetectFormat); + } + + protected: + std::unique_ptr<scheduler::WebThreadScheduler> renderer_scheduler_ = + std::make_unique<scheduler::FakeRendererScheduler>(); + MockStorageArea mock_storage_area_; + Persistent<FakeAreaSource> source_area_; + Persistent<FakeAreaSource> source_area2_; + scoped_refptr<CachedStorageArea> cached_area_; + String source_area_id_; + String source_; +}; + +class CachedStorageAreaTestWithParam + : public CachedStorageAreaTest, + public testing::WithParamInterface<bool> { + public: + bool IsSessionStorage() override { return GetParam(); } +}; + +INSTANTIATE_TEST_CASE_P(CachedStorageAreaTest, + CachedStorageAreaTestWithParam, + ::testing::Bool()); + +TEST_P(CachedStorageAreaTestWithParam, Basics) { + EXPECT_FALSE(IsCacheLoaded()); + + EXPECT_EQ(0u, cached_area_->GetLength()); + EXPECT_TRUE(cached_area_->SetItem(kKey, kValue, source_area_)); + EXPECT_EQ(1u, cached_area_->GetLength()); + EXPECT_EQ(kKey, cached_area_->GetKey(0)); + EXPECT_EQ(kValue, cached_area_->GetItem(kKey)); + cached_area_->RemoveItem(kKey, source_area_); + EXPECT_EQ(0u, cached_area_->GetLength()); + + mock_storage_area_.Flush(); + EXPECT_EQ(1u, mock_storage_area_.observer_count()); +} + +TEST_P(CachedStorageAreaTestWithParam, GetLength) { + // GetLength, we expect to see one call to load in the db. + EXPECT_FALSE(IsCacheLoaded()); + EXPECT_EQ(0u, cached_area_->GetLength()); + EXPECT_TRUE(IsCacheLoaded()); + EXPECT_TRUE(mock_storage_area_.observed_get_all()); + EXPECT_EQ(1u, mock_storage_area_.pending_callbacks_count()); + EXPECT_TRUE(IsIgnoringAllMutations()); + mock_storage_area_.CompleteAllPendingCallbacks(); + mock_storage_area_.Flush(); + EXPECT_FALSE(IsIgnoringAllMutations()); +} + +TEST_P(CachedStorageAreaTestWithParam, GetKey) { + // GetKey, expect the one call to load. + EXPECT_FALSE(IsCacheLoaded()); + EXPECT_TRUE(cached_area_->GetKey(2).IsNull()); + EXPECT_TRUE(IsCacheLoaded()); + EXPECT_TRUE(mock_storage_area_.observed_get_all()); + EXPECT_EQ(1u, mock_storage_area_.pending_callbacks_count()); +} + +TEST_P(CachedStorageAreaTestWithParam, GetItem) { + // GetItem, ditto. + EXPECT_FALSE(IsCacheLoaded()); + EXPECT_TRUE(cached_area_->GetItem(kKey).IsNull()); + EXPECT_TRUE(IsCacheLoaded()); + EXPECT_TRUE(mock_storage_area_.observed_get_all()); + EXPECT_EQ(1u, mock_storage_area_.pending_callbacks_count()); +} + +TEST_P(CachedStorageAreaTestWithParam, SetItem) { + // SetItem, we expect a call to load followed by a call to put in the db. + EXPECT_FALSE(IsCacheLoaded()); + EXPECT_TRUE(cached_area_->SetItem(kKey, kValue, source_area_)); + mock_storage_area_.Flush(); + EXPECT_TRUE(IsCacheLoaded()); + EXPECT_TRUE(mock_storage_area_.observed_get_all()); + EXPECT_TRUE(mock_storage_area_.observed_put()); + EXPECT_EQ(source_, mock_storage_area_.observed_source()); + EXPECT_EQ(KeyToUint8Vector(kKey), mock_storage_area_.observed_key()); + EXPECT_EQ(ValueToUint8Vector(kValue), mock_storage_area_.observed_value()); + EXPECT_EQ(2u, mock_storage_area_.pending_callbacks_count()); + + EXPECT_TRUE(source_area_->events.IsEmpty()); + if (IsSessionStorage()) { + ASSERT_EQ(1u, source_area2_->events.size()); + EXPECT_EQ(kKey, source_area2_->events[0].key); + EXPECT_TRUE(source_area2_->events[0].old_value.IsNull()); + EXPECT_EQ(kValue, source_area2_->events[0].new_value); + EXPECT_EQ(kPageUrl, source_area2_->events[0].url); + } else { + EXPECT_TRUE(source_area2_->events.IsEmpty()); + } +} + +TEST_P(CachedStorageAreaTestWithParam, Clear_AlreadyEmpty) { + // Clear, we expect just the one call to clear in the db since + // there's no need to load the data prior to deleting it. + // Except if we're testing session storage, in which case we also expect a + // load call first, since it needs that for event dispatching. + EXPECT_FALSE(IsCacheLoaded()); + cached_area_->Clear(source_area_); + mock_storage_area_.Flush(); + EXPECT_TRUE(IsCacheLoaded()); + EXPECT_TRUE(mock_storage_area_.observed_delete_all()); + EXPECT_EQ(source_, mock_storage_area_.observed_source()); + if (IsSessionStorage()) { + EXPECT_TRUE(mock_storage_area_.observed_get_all()); + EXPECT_EQ(2u, mock_storage_area_.pending_callbacks_count()); + } else { + EXPECT_FALSE(mock_storage_area_.observed_get_all()); + EXPECT_EQ(1u, mock_storage_area_.pending_callbacks_count()); + } + + // Neither should have events since area was already empty. + EXPECT_TRUE(source_area_->events.IsEmpty()); + EXPECT_TRUE(source_area2_->events.IsEmpty()); +} + +TEST_P(CachedStorageAreaTestWithParam, Clear_WithData) { + mock_storage_area_.mutable_get_all_return_values().push_back( + mojom::blink::KeyValue::New(KeyToUint8Vector(kKey), + ValueToUint8Vector(kValue))); + + EXPECT_FALSE(IsCacheLoaded()); + cached_area_->Clear(source_area_); + mock_storage_area_.Flush(); + EXPECT_TRUE(IsCacheLoaded()); + EXPECT_TRUE(mock_storage_area_.observed_delete_all()); + EXPECT_EQ(source_, mock_storage_area_.observed_source()); + if (IsSessionStorage()) { + EXPECT_TRUE(mock_storage_area_.observed_get_all()); + EXPECT_EQ(2u, mock_storage_area_.pending_callbacks_count()); + } else { + EXPECT_FALSE(mock_storage_area_.observed_get_all()); + EXPECT_EQ(1u, mock_storage_area_.pending_callbacks_count()); + } + + EXPECT_TRUE(source_area_->events.IsEmpty()); + if (IsSessionStorage()) { + ASSERT_EQ(1u, source_area2_->events.size()); + EXPECT_TRUE(source_area2_->events[0].key.IsNull()); + EXPECT_TRUE(source_area2_->events[0].old_value.IsNull()); + EXPECT_TRUE(source_area2_->events[0].new_value.IsNull()); + EXPECT_EQ(kPageUrl, source_area2_->events[0].url); + } else { + EXPECT_TRUE(source_area2_->events.IsEmpty()); + } +} + +TEST_P(CachedStorageAreaTestWithParam, RemoveItem_NothingToRemove) { + // RemoveItem with nothing to remove, expect just one call to load. + EXPECT_FALSE(IsCacheLoaded()); + cached_area_->RemoveItem(kKey, source_area_); + mock_storage_area_.Flush(); + EXPECT_TRUE(IsCacheLoaded()); + EXPECT_TRUE(mock_storage_area_.observed_get_all()); + EXPECT_FALSE(mock_storage_area_.observed_delete()); + EXPECT_EQ(1u, mock_storage_area_.pending_callbacks_count()); + + // Neither should have events since area was already empty. + EXPECT_TRUE(source_area_->events.IsEmpty()); + EXPECT_TRUE(source_area2_->events.IsEmpty()); +} + +TEST_P(CachedStorageAreaTestWithParam, RemoveItem) { + // RemoveItem with something to remove, expect a call to load followed + // by a call to remove. + mock_storage_area_.mutable_get_all_return_values().push_back( + mojom::blink::KeyValue::New(KeyToUint8Vector(kKey), + ValueToUint8Vector(kValue))); + EXPECT_FALSE(IsCacheLoaded()); + cached_area_->RemoveItem(kKey, source_area_); + mock_storage_area_.Flush(); + EXPECT_TRUE(IsCacheLoaded()); + EXPECT_TRUE(mock_storage_area_.observed_get_all()); + EXPECT_TRUE(mock_storage_area_.observed_delete()); + EXPECT_EQ(source_, mock_storage_area_.observed_source()); + EXPECT_EQ(KeyToUint8Vector(kKey), mock_storage_area_.observed_key()); + EXPECT_EQ(2u, mock_storage_area_.pending_callbacks_count()); + + EXPECT_TRUE(source_area_->events.IsEmpty()); + if (IsSessionStorage()) { + ASSERT_EQ(1u, source_area2_->events.size()); + EXPECT_EQ(kKey, source_area2_->events[0].key); + EXPECT_EQ(kValue, source_area2_->events[0].old_value); + EXPECT_TRUE(source_area2_->events[0].new_value.IsNull()); + EXPECT_EQ(kPageUrl, source_area2_->events[0].url); + } else { + EXPECT_TRUE(source_area2_->events.IsEmpty()); + } +} + +TEST_P(CachedStorageAreaTestWithParam, BrowserDisconnect) { + // GetLength to prime the cache. + mock_storage_area_.mutable_get_all_return_values().push_back( + mojom::blink::KeyValue::New(KeyToUint8Vector(kKey), + ValueToUint8Vector(kValue))); + EXPECT_EQ(1u, cached_area_->GetLength()); + EXPECT_TRUE(IsCacheLoaded()); + mock_storage_area_.CompleteAllPendingCallbacks(); + mock_storage_area_.ResetObservations(); + + // Now disconnect the pipe from the browser, simulating situations where the + // browser might be forced to destroy the LevelDBWrapperImpl. + mock_storage_area_.CloseAllBindings(); + + // Getters should still function. + EXPECT_EQ(1u, cached_area_->GetLength()); + EXPECT_EQ(kValue, cached_area_->GetItem(kKey)); + + // And setters should also still function. + cached_area_->RemoveItem(kKey, source_area_); + EXPECT_EQ(0u, cached_area_->GetLength()); + EXPECT_TRUE(cached_area_->GetItem(kKey).IsNull()); + + // TODO(mek): This should work for session storage too, but for some reason + // instead just hangs. + if (!IsSessionStorage()) { + // Even resetting the cache should still allow class to function properly. + ResetCache(); + EXPECT_TRUE(cached_area_->GetItem(kKey).IsNull()); + EXPECT_TRUE(cached_area_->SetItem(kKey, kValue, source_area_)); + EXPECT_EQ(1u, cached_area_->GetLength()); + EXPECT_EQ(kValue, cached_area_->GetItem(kKey)); + } +} + +TEST_F(CachedStorageAreaTest, MutationsAreIgnoredUntilLoadCompletion) { + mojom::blink::StorageAreaObserver* observer = cached_area_.get(); + + EXPECT_TRUE(cached_area_->GetItem(kKey).IsNull()); + EXPECT_TRUE(IsCacheLoaded()); + EXPECT_TRUE(IsIgnoringAllMutations()); + + // Before load completion, the mutation should be ignored. + observer->KeyAdded(KeyToUint8Vector(kKey), ValueToUint8Vector(kValue), + kRemoteSource); + EXPECT_TRUE(cached_area_->GetItem(kKey).IsNull()); + + // Call the load completion callback. + mock_storage_area_.CompleteOnePendingCallback(true); + mock_storage_area_.Flush(); + EXPECT_FALSE(IsIgnoringAllMutations()); + + // Verify that mutations are now applied. + observer->KeyAdded(KeyToUint8Vector(kKey), ValueToUint8Vector(kValue), + kRemoteSource); + EXPECT_EQ(kValue, cached_area_->GetItem(kKey)); +} + +TEST_F(CachedStorageAreaTest, MutationsAreIgnoredUntilClearCompletion) { + cached_area_->Clear(source_area_); + mock_storage_area_.Flush(); + EXPECT_TRUE(IsIgnoringAllMutations()); + mock_storage_area_.CompleteOnePendingCallback(true); + mock_storage_area_.Flush(); + EXPECT_FALSE(IsIgnoringAllMutations()); + + // Verify that calling Clear twice works as expected, the first + // completion callback should have been cancelled. + ResetCache(); + cached_area_->Clear(source_area_); + mock_storage_area_.Flush(); + EXPECT_TRUE(IsIgnoringAllMutations()); + cached_area_->Clear(source_area_); + mock_storage_area_.Flush(); + EXPECT_TRUE(IsIgnoringAllMutations()); + mock_storage_area_.CompleteOnePendingCallback(true); + mock_storage_area_.Flush(); + EXPECT_TRUE(IsIgnoringAllMutations()); + mock_storage_area_.CompleteOnePendingCallback(true); + mock_storage_area_.Flush(); + EXPECT_FALSE(IsIgnoringAllMutations()); +} + +TEST_F(CachedStorageAreaTest, KeyMutationsAreIgnoredUntilCompletion) { + mojom::blink::StorageAreaObserver* observer = cached_area_.get(); + + // SetItem + EXPECT_TRUE(cached_area_->SetItem(kKey, kValue, source_area_)); + mock_storage_area_.CompleteOnePendingCallback(true); // load completion + mock_storage_area_.Flush(); + EXPECT_FALSE(IsIgnoringAllMutations()); + EXPECT_TRUE(IsIgnoringKeyMutations(kKey)); + observer->KeyDeleted(KeyToUint8Vector(kKey), {0}, kRemoteSource); + mock_storage_area_.Flush(); + EXPECT_EQ(kValue, cached_area_->GetItem(kKey)); + mock_storage_area_.CompleteOnePendingCallback(true); // set completion + mock_storage_area_.Flush(); + EXPECT_FALSE(IsIgnoringKeyMutations(kKey)); + + // RemoveItem + cached_area_->RemoveItem(kKey, source_area_); + mock_storage_area_.Flush(); + EXPECT_TRUE(IsIgnoringKeyMutations(kKey)); + mock_storage_area_.CompleteOnePendingCallback(true); // remove completion + mock_storage_area_.Flush(); + EXPECT_FALSE(IsIgnoringKeyMutations(kKey)); + + // Multiple mutations to the same key. + EXPECT_TRUE(cached_area_->SetItem(kKey, kValue, source_area_)); + cached_area_->RemoveItem(kKey, source_area_); + mock_storage_area_.Flush(); + EXPECT_TRUE(IsIgnoringKeyMutations(kKey)); + mock_storage_area_.CompleteOnePendingCallback(true); // set completion + mock_storage_area_.Flush(); + EXPECT_TRUE(IsIgnoringKeyMutations(kKey)); + mock_storage_area_.CompleteOnePendingCallback(true); // remove completion + mock_storage_area_.Flush(); + EXPECT_FALSE(IsIgnoringKeyMutations(kKey)); + + // A failed set item operation should Reset the cache. + EXPECT_TRUE(cached_area_->SetItem(kKey, kValue, source_area_)); + mock_storage_area_.Flush(); + EXPECT_TRUE(IsIgnoringKeyMutations(kKey)); + mock_storage_area_.CompleteOnePendingCallback(false); + mock_storage_area_.Flush(); + EXPECT_FALSE(IsCacheLoaded()); +} + +TEST_F(CachedStorageAreaTest, ChangeEvents) { + mojom::blink::StorageAreaObserver* observer = cached_area_.get(); + + observer->KeyAdded(KeyToUint8Vector(kKey), ValueToUint8Vector(kValue), + source_); + observer->KeyChanged(KeyToUint8Vector(kKey), ValueToUint8Vector(kValue2), + ValueToUint8Vector(kValue), source_); + observer->KeyDeleted(KeyToUint8Vector(kKey), ValueToUint8Vector(kValue2), + source_); + + observer->KeyAdded(KeyToUint8Vector(kKey), ValueToUint8Vector(kValue), + kRemoteSource); + observer->AllDeleted(kRemoteSource); + + // Source area should have ignored all but the last two events. + ASSERT_EQ(2u, source_area_->events.size()); + + EXPECT_EQ(kKey, source_area_->events[0].key); + EXPECT_TRUE(source_area_->events[0].old_value.IsNull()); + EXPECT_EQ(kValue, source_area_->events[0].new_value); + EXPECT_EQ(kPageUrl2, source_area_->events[0].url); + + EXPECT_TRUE(source_area_->events[1].key.IsNull()); + EXPECT_TRUE(source_area_->events[1].old_value.IsNull()); + EXPECT_TRUE(source_area_->events[1].new_value.IsNull()); + EXPECT_EQ(kPageUrl2, source_area_->events[1].url); + + // Second area should not have ignored any of the events. + ASSERT_EQ(5u, source_area2_->events.size()); + + EXPECT_EQ(kKey, source_area2_->events[0].key); + EXPECT_TRUE(source_area2_->events[0].old_value.IsNull()); + EXPECT_EQ(kValue, source_area2_->events[0].new_value); + EXPECT_EQ(kPageUrl, source_area2_->events[0].url); + + EXPECT_EQ(kKey, source_area2_->events[1].key); + EXPECT_EQ(kValue, source_area2_->events[1].old_value); + EXPECT_EQ(kValue2, source_area2_->events[1].new_value); + EXPECT_EQ(kPageUrl, source_area2_->events[1].url); + + EXPECT_EQ(kKey, source_area2_->events[2].key); + EXPECT_EQ(kValue2, source_area2_->events[2].old_value); + EXPECT_TRUE(source_area2_->events[2].new_value.IsNull()); + EXPECT_EQ(kPageUrl, source_area2_->events[2].url); + + EXPECT_EQ(kKey, source_area2_->events[3].key); + EXPECT_TRUE(source_area2_->events[3].old_value.IsNull()); + EXPECT_EQ(kValue, source_area2_->events[3].new_value); + EXPECT_EQ(kPageUrl2, source_area2_->events[3].url); + + EXPECT_TRUE(source_area2_->events[4].key.IsNull()); + EXPECT_TRUE(source_area2_->events[4].old_value.IsNull()); + EXPECT_TRUE(source_area2_->events[4].new_value.IsNull()); + EXPECT_EQ(kPageUrl2, source_area2_->events[4].url); +} + +namespace { + +class StringEncoding : public CachedStorageAreaTest, + public testing::WithParamInterface<FormatOption> {}; + +INSTANTIATE_TEST_CASE_P( + CachedStorageAreaTest, + StringEncoding, + ::testing::Values(FormatOption::kLocalStorageDetectFormat, + FormatOption::kSessionStorageForceUTF16, + FormatOption::kSessionStorageForceUTF8)); + +TEST_P(StringEncoding, RoundTrip_ASCII) { + String key("simplekey"); + EXPECT_EQ( + Uint8VectorToString(StringToUint8Vector(key, GetParam()), GetParam()), + key); +} + +TEST_P(StringEncoding, RoundTrip_Latin1) { + String key("Test\xf6\xb5"); + EXPECT_TRUE(key.Is8Bit()); + EXPECT_EQ( + Uint8VectorToString(StringToUint8Vector(key, GetParam()), GetParam()), + key); +} + +TEST_P(StringEncoding, RoundTrip_UTF16) { + String key("key"); + key.append(UChar(0xd83d)); + key.append(UChar(0xde00)); + EXPECT_EQ( + Uint8VectorToString(StringToUint8Vector(key, GetParam()), GetParam()), + key); +} + +TEST_P(StringEncoding, RoundTrip_InvalidUTF16) { + String key("foo"); + key.append(UChar(0xd83d)); + key.append(UChar(0xde00)); + key.append(UChar(0xdf01)); + key.append("bar"); + if (GetParam() != FormatOption::kSessionStorageForceUTF8) { + EXPECT_EQ( + Uint8VectorToString(StringToUint8Vector(key, GetParam()), GetParam()), + key); + } else { + String validKey("foo"); + validKey.append(UChar(0xd83d)); + validKey.append(UChar(0xde00)); + validKey.append(UChar(0xfffd)); + validKey.append("bar"); + EXPECT_EQ( + Uint8VectorToString(StringToUint8Vector(key, GetParam()), GetParam()), + validKey); + } +} + +} // namespace + +TEST_F(CachedStorageAreaTest, StringEncoding_LocalStorage) { + String ascii_key("simplekey"); + String non_ascii_key("key"); + non_ascii_key.append(UChar(0xd83d)); + non_ascii_key.append(UChar(0xde00)); + EXPECT_EQ( + StringToUint8Vector(ascii_key, FormatOption::kLocalStorageDetectFormat) + .size(), + ascii_key.length() + 1); + EXPECT_EQ(StringToUint8Vector(non_ascii_key, + FormatOption::kLocalStorageDetectFormat) + .size(), + non_ascii_key.length() * 2 + 1); +} + +TEST_F(CachedStorageAreaTest, StringEncoding_UTF8) { + String ascii_key("simplekey"); + String non_ascii_key("key"); + non_ascii_key.append(UChar(0xd83d)); + non_ascii_key.append(UChar(0xde00)); + EXPECT_EQ( + StringToUint8Vector(ascii_key, FormatOption::kSessionStorageForceUTF8) + .size(), + ascii_key.length()); + EXPECT_EQ( + StringToUint8Vector(non_ascii_key, FormatOption::kSessionStorageForceUTF8) + .size(), + 7u); +} + +TEST_F(CachedStorageAreaTest, StringEncoding_UTF16) { + String ascii_key("simplekey"); + String non_ascii_key("key"); + non_ascii_key.append(UChar(0xd83d)); + non_ascii_key.append(UChar(0xde00)); + EXPECT_EQ( + StringToUint8Vector(ascii_key, FormatOption::kSessionStorageForceUTF16) + .size(), + ascii_key.length() * 2); + EXPECT_EQ(StringToUint8Vector(non_ascii_key, + FormatOption::kSessionStorageForceUTF16) + .size(), + non_ascii_key.length() * 2); +} + +} // namespace blink
diff --git a/third_party/blink/renderer/modules/storage/testing/fake_area_source.h b/third_party/blink/renderer/modules/storage/testing/fake_area_source.h new file mode 100644 index 0000000..92e1cf49 --- /dev/null +++ b/third_party/blink/renderer/modules/storage/testing/fake_area_source.h
@@ -0,0 +1,47 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_STORAGE_TESTING_FAKE_AREA_SOURCE_H_ +#define THIRD_PARTY_BLINK_RENDERER_MODULES_STORAGE_TESTING_FAKE_AREA_SOURCE_H_ + +#include "third_party/blink/public/platform/web_scoped_virtual_time_pauser.h" +#include "third_party/blink/renderer/modules/storage/cached_storage_area.h" +#include "third_party/blink/renderer/platform/weborigin/kurl.h" + +namespace blink { + +class FakeAreaSource : public GarbageCollectedFinalized<FakeAreaSource>, + public CachedStorageArea::Source { + USING_GARBAGE_COLLECTED_MIXIN(FakeAreaSource); + + public: + explicit FakeAreaSource(const KURL& page_url) : page_url_(page_url) {} + + KURL GetPageUrl() const override { return page_url_; } + void EnqueueStorageEvent(const String& key, + const String& old_value, + const String& new_value, + const String& url) override { + events.push_back(Event{key, old_value, new_value, url}); + } + + blink::WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser( + const char* name, + WebScopedVirtualTimePauser::VirtualTaskDuration duration) override { + return blink::WebScopedVirtualTimePauser(); + } + + struct Event { + String key, old_value, new_value, url; + }; + + Vector<Event> events; + + private: + KURL page_url_; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_STORAGE_TESTING_FAKE_AREA_SOURCE_H_
diff --git a/third_party/blink/renderer/modules/storage/testing/mock_storage_area.cc b/third_party/blink/renderer/modules/storage/testing/mock_storage_area.cc new file mode 100644 index 0000000..0586747e --- /dev/null +++ b/third_party/blink/renderer/modules/storage/testing/mock_storage_area.cc
@@ -0,0 +1,81 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/modules/storage/testing/mock_storage_area.h" + +#include "third_party/blink/renderer/platform/wtf/functional.h" + +namespace blink { + +MockStorageArea::MockStorageArea() = default; +MockStorageArea::~MockStorageArea() = default; + +mojom::blink::StorageAreaPtr MockStorageArea::GetInterfacePtr() { + mojom::blink::StorageAreaPtr result; + bindings_.AddBinding(this, MakeRequest(&result)); + return result; +} + +mojom::blink::StorageAreaAssociatedPtr +MockStorageArea::GetAssociatedInterfacePtr() { + mojom::blink::StorageAreaAssociatedPtr result; + associated_bindings_.AddBinding( + this, MakeRequestAssociatedWithDedicatedPipe(&result)); + return result; +} + +void MockStorageArea::AddObserver( + mojom::blink::StorageAreaObserverAssociatedPtrInfo observer) { + ++observer_count_; +} + +void MockStorageArea::Put( + const Vector<uint8_t>& key, + const Vector<uint8_t>& value, + const base::Optional<Vector<uint8_t>>& client_old_value, + const String& source, + PutCallback callback) { + observed_put_ = true; + observed_key_ = key; + observed_value_ = value; + observed_source_ = source; + pending_callbacks_.push_back(std::move(callback)); +} + +void MockStorageArea::Delete( + const Vector<uint8_t>& key, + const base::Optional<Vector<uint8_t>>& client_old_value, + const String& source, + DeleteCallback callback) { + observed_delete_ = true; + observed_key_ = key; + observed_source_ = source; + pending_callbacks_.push_back(std::move(callback)); +} + +void MockStorageArea::DeleteAll(const String& source, + DeleteAllCallback callback) { + observed_delete_all_ = true; + observed_source_ = source; + pending_callbacks_.push_back(std::move(callback)); +} + +void MockStorageArea::Get(const Vector<uint8_t>& key, GetCallback callback) { + NOTREACHED(); +} + +void MockStorageArea::GetAll( + mojom::blink::StorageAreaGetAllCallbackAssociatedPtrInfo complete_callback, + GetAllCallback callback) { + mojom::blink::StorageAreaGetAllCallbackAssociatedPtr complete_ptr; + complete_ptr.Bind(std::move(complete_callback)); + pending_callbacks_.push_back( + WTF::Bind(&mojom::blink::StorageAreaGetAllCallback::Complete, + std::move(complete_ptr))); + + observed_get_all_ = true; + std::move(callback).Run(true, std::move(get_all_return_values_)); +} + +} // namespace blink
diff --git a/third_party/blink/renderer/modules/storage/testing/mock_storage_area.h b/third_party/blink/renderer/modules/storage/testing/mock_storage_area.h new file mode 100644 index 0000000..099b55f --- /dev/null +++ b/third_party/blink/renderer/modules/storage/testing/mock_storage_area.h
@@ -0,0 +1,120 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_STORAGE_TESTING_MOCK_STORAGE_AREA_H_ +#define THIRD_PARTY_BLINK_RENDERER_MODULES_STORAGE_TESTING_MOCK_STORAGE_AREA_H_ + +#include "mojo/public/cpp/bindings/associated_binding_set.h" +#include "mojo/public/cpp/bindings/binding_set.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/mojom/dom_storage/storage_area.mojom-blink.h" +#include "third_party/blink/renderer/platform/wtf/deque.h" + +namespace blink { + +// Mock StorageArea that records all read and write events. +class MockStorageArea : public mojom::blink::StorageArea { + public: + using ResultCallback = base::OnceCallback<void(bool)>; + + MockStorageArea(); + ~MockStorageArea() override; + + mojom::blink::StorageAreaPtr GetInterfacePtr(); + mojom::blink::StorageAreaAssociatedPtr GetAssociatedInterfacePtr(); + + // StorageArea implementation: + void AddObserver( + mojom::blink::StorageAreaObserverAssociatedPtrInfo observer) override; + + void Put(const Vector<uint8_t>& key, + const Vector<uint8_t>& value, + const base::Optional<Vector<uint8_t>>& client_old_value, + const String& source, + PutCallback callback) override; + + void Delete(const Vector<uint8_t>& key, + const base::Optional<Vector<uint8_t>>& client_old_value, + const String& source, + DeleteCallback callback) override; + + void DeleteAll(const String& source, DeleteAllCallback callback) override; + + void Get(const Vector<uint8_t>& key, GetCallback callback) override; + + void GetAll(mojom::blink::StorageAreaGetAllCallbackAssociatedPtrInfo + complete_callback, + GetAllCallback callback) override; + + // Methods and members for use by test fixtures. + bool HasBindings() { + return !bindings_.empty() || !associated_bindings_.empty(); + } + + void ResetObservations() { + observed_get_all_ = false; + observed_put_ = false; + observed_delete_ = false; + observed_delete_all_ = false; + observed_key_.clear(); + observed_value_.clear(); + observed_source_ = String(); + } + + void CompleteAllPendingCallbacks() { + while (!pending_callbacks_.empty()) + CompleteOnePendingCallback(true); + } + + void CompleteOnePendingCallback(bool success) { + ASSERT_TRUE(!pending_callbacks_.empty()); + std::move(pending_callbacks_.front()).Run(success); + pending_callbacks_.pop_front(); + } + + void Flush() { + bindings_.FlushForTesting(); + associated_bindings_.FlushForTesting(); + } + + void CloseAllBindings() { + bindings_.CloseAllBindings(); + associated_bindings_.CloseAllBindings(); + } + + size_t pending_callbacks_count() const { return pending_callbacks_.size(); } + + bool observed_get_all() const { return observed_get_all_; } + bool observed_put() const { return observed_put_; } + bool observed_delete() const { return observed_delete_; } + bool observed_delete_all() const { return observed_delete_all_; } + const Vector<uint8_t>& observed_key() const { return observed_key_; } + const Vector<uint8_t>& observed_value() const { return observed_value_; } + const String& observed_source() const { return observed_source_; } + size_t observer_count() const { return observer_count_; } + + Vector<mojom::blink::KeyValuePtr>& mutable_get_all_return_values() { + return get_all_return_values_; + } + + private: + Deque<ResultCallback> pending_callbacks_; + bool observed_get_all_ = false; + bool observed_put_ = false; + bool observed_delete_ = false; + bool observed_delete_all_ = false; + Vector<uint8_t> observed_key_; + Vector<uint8_t> observed_value_; + String observed_source_; + size_t observer_count_ = 0; + + Vector<mojom::blink::KeyValuePtr> get_all_return_values_; + + mojo::BindingSet<mojom::blink::StorageArea> bindings_; + mojo::AssociatedBindingSet<mojom::blink::StorageArea> associated_bindings_; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_STORAGE_TESTING_MOCK_STORAGE_AREA_H_
diff --git a/third_party/blink/renderer/modules/webdatabase/sqlite/sqlite_file_system_posix.cc b/third_party/blink/renderer/modules/webdatabase/sqlite/sqlite_file_system_posix.cc index c907446..1ac378cd 100644 --- a/third_party/blink/renderer/modules/webdatabase/sqlite/sqlite_file_system_posix.cc +++ b/third_party/blink/renderer/modules/webdatabase/sqlite/sqlite_file_system_posix.cc
@@ -249,7 +249,7 @@ sync_dir); } -// Check the existance and status of the given file. +// Check the existence and status of the given file. // // vfs - pointer to the sqlite3_vfs object. // fileName - the name of the file.
diff --git a/third_party/blink/renderer/modules/webdatabase/sqlite/sqlite_file_system_win.cc b/third_party/blink/renderer/modules/webdatabase/sqlite/sqlite_file_system_win.cc index 40a0d56cd..5480922 100644 --- a/third_party/blink/renderer/modules/webdatabase/sqlite/sqlite_file_system_win.cc +++ b/third_party/blink/renderer/modules/webdatabase/sqlite/sqlite_file_system_win.cc
@@ -83,7 +83,7 @@ false); } -// Check the existance and status of the given file. +// Check the existence and status of the given file. // // vfs - pointer to the sqlite3_vfs object. // fileName - the name of the file.
diff --git a/third_party/blink/renderer/modules/xr/xr_device.cc b/third_party/blink/renderer/modules/xr/xr_device.cc index 25dc3832..2efe3f8 100644 --- a/third_party/blink/renderer/modules/xr/xr_device.cc +++ b/third_party/blink/renderer/modules/xr/xr_device.cc
@@ -76,7 +76,7 @@ // Check to see if the device is capable of supporting the requested session // options. Note that reporting support here does not guarantee that creating // a session with those options will succeed, as other external and - // time-sensitve factors (focus state, existance of another immersive session, + // time-sensitve factors (focus state, existence of another immersive session, // etc.) may prevent the creation of a session as well. const char* reject_reason = checkSessionSupport(options); if (reject_reason) {
diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn index 696801e..1d8b9f00 100644 --- a/third_party/blink/renderer/platform/BUILD.gn +++ b/third_party/blink/renderer/platform/BUILD.gn
@@ -987,8 +987,6 @@ "graphics/mailbox_texture_holder.h", "graphics/offscreen_canvas_placeholder.cc", "graphics/offscreen_canvas_placeholder.h", - "graphics/offscreen_canvas_resource_provider.cc", - "graphics/offscreen_canvas_resource_provider.h", "graphics/paint/clip_paint_property_node.cc", "graphics/paint/clip_paint_property_node.h", "graphics/paint/cull_rect.cc",
diff --git a/third_party/blink/renderer/platform/bindings/script_wrappable_marking_visitor.cc b/third_party/blink/renderer/platform/bindings/script_wrappable_marking_visitor.cc index c683f8f2..ee2a9616 100644 --- a/third_party/blink/renderer/platform/bindings/script_wrappable_marking_visitor.cc +++ b/third_party/blink/renderer/platform/bindings/script_wrappable_marking_visitor.cc
@@ -67,7 +67,6 @@ } void ScriptWrappableMarkingVisitor::AbortTracing() { - CHECK(tracing_in_progress_); CHECK(ThreadState::Current()); should_cleanup_ = true; tracing_in_progress_ = false; @@ -219,12 +218,12 @@ void ScriptWrappableMarkingVisitor::WriteBarrier( v8::Isolate* isolate, const TraceWrapperV8Reference<v8::Value>& dst_object) { - if (!ThreadState::IsAnyWrapperTracing() || dst_object.IsEmpty()) + if (dst_object.IsEmpty() || !ThreadState::IsAnyWrapperTracing()) return; - ScriptWrappableMarkingVisitor* visitor = CurrentVisitor(isolate); if (!visitor->WrapperTracingInProgress()) return; + // Conservatively assume that the source object containing |dst_object| is // marked. visitor->Trace(dst_object); @@ -236,10 +235,10 @@ ScriptWrappable* key) { if (!ThreadState::IsAnyWrapperTracing()) return; - ScriptWrappableMarkingVisitor* visitor = CurrentVisitor(isolate); if (!visitor->WrapperTracingInProgress()) return; + // Conservatively assume that the source object key is marked. visitor->Trace(wrapper_map, key); } @@ -309,32 +308,24 @@ } } -void ScriptWrappableMarkingVisitor::FinalizeAndCleanup() { - FinalizeTracing(); - PerformCleanup(); -} - void ScriptWrappableMarkingVisitor::InvalidateDeadObjectsInMarkingDeque( v8::Isolate* isolate) { ScriptWrappableMarkingVisitor* script_wrappable_visitor = - static_cast<ScriptWrappableMarkingVisitor*>( - V8PerIsolateData::From(isolate)->GetV8HeapController()); + V8PerIsolateData::From(isolate)->GetScriptWrappableMarkingVisitor(); if (script_wrappable_visitor) script_wrappable_visitor->InvalidateDeadObjectsInMarkingDeque(); } void ScriptWrappableMarkingVisitor::PerformCleanup(v8::Isolate* isolate) { ScriptWrappableMarkingVisitor* script_wrappable_visitor = - static_cast<ScriptWrappableMarkingVisitor*>( - V8PerIsolateData::From(isolate)->GetV8HeapController()); + V8PerIsolateData::From(isolate)->GetScriptWrappableMarkingVisitor(); if (script_wrappable_visitor) script_wrappable_visitor->PerformCleanup(); } ScriptWrappableMarkingVisitor* ScriptWrappableMarkingVisitor::CurrentVisitor( v8::Isolate* isolate) { - return static_cast<ScriptWrappableMarkingVisitor*>( - V8PerIsolateData::From(isolate)->GetV8HeapController()); + return V8PerIsolateData::From(isolate)->GetScriptWrappableMarkingVisitor(); } bool ScriptWrappableMarkingVisitor::MarkingDequeContains(void* needle) {
diff --git a/third_party/blink/renderer/platform/bindings/script_wrappable_marking_visitor.h b/third_party/blink/renderer/platform/bindings/script_wrappable_marking_visitor.h index 7327105d..715d062 100644 --- a/third_party/blink/renderer/platform/bindings/script_wrappable_marking_visitor.h +++ b/third_party/blink/renderer/platform/bindings/script_wrappable_marking_visitor.h
@@ -9,7 +9,6 @@ #include "third_party/blink/renderer/platform/bindings/script_wrappable_visitor.h" #include "third_party/blink/renderer/platform/heap/heap_page.h" #include "third_party/blink/renderer/platform/heap/threading_traits.h" -#include "third_party/blink/renderer/platform/heap/v8_heap_controller.h" #include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/wtf/deque.h" #include "third_party/blink/renderer/platform/wtf/time.h" @@ -30,8 +29,8 @@ // reachable wrappers. V8 calls this visitor during its garbage collection, // see v8::EmbedderHeapTracer. class PLATFORM_EXPORT ScriptWrappableMarkingVisitor - : public ScriptWrappableVisitor, - public V8HeapController { + : public v8::EmbedderHeapTracer, + public ScriptWrappableVisitor { DISALLOW_IMPLICIT_CONSTRUCTORS(ScriptWrappableMarkingVisitor); public: @@ -81,9 +80,6 @@ void EnterFinalPause() override; size_t NumberOfWrappersToTrace() override; - // V8HeapController interface. - void FinalizeAndCleanup() override; - // ScriptWrappableVisitor interface. void Visit(const TraceWrapperV8Reference<v8::Value>&) override; void VisitWithWrappers(void*, TraceDescriptor) override;
diff --git a/third_party/blink/renderer/platform/bindings/v8_dom_wrapper.h b/third_party/blink/renderer/platform/bindings/v8_dom_wrapper.h index f4ab456..831498f 100644 --- a/third_party/blink/renderer/platform/bindings/v8_dom_wrapper.h +++ b/third_party/blink/renderer/platform/bindings/v8_dom_wrapper.h
@@ -114,12 +114,13 @@ wrapper->SetAlignedPointerInInternalFields(base::size(indices), indices, values); auto* per_isolate_data = V8PerIsolateData::From(isolate); - // We notify V8HeapController about the new wrapper association, - // so the controller can make sure to trace the association (in case it is + // We notify ScriptWrappableVisitor about the new wrapper association, + // so the visitor can make sure to trace the association (in case it is // currently tracing). Because of some optimizations, V8 will not // necessarily detect wrappers created during its incremental marking. - per_isolate_data->GetV8HeapController()->RegisterV8References({std::make_pair( - const_cast<WrapperTypeInfo*>(wrapper_type_info), wrappable)}); + per_isolate_data->GetScriptWrappableMarkingVisitor()->RegisterV8Reference( + std::make_pair(const_cast<WrapperTypeInfo*>(wrapper_type_info), + wrappable)); } inline void V8DOMWrapper::ClearNativeInfo(v8::Isolate* isolate,
diff --git a/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.cc b/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.cc index f6c5cbf9..44cb5a94 100644 --- a/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.cc +++ b/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.cc
@@ -153,8 +153,9 @@ // Detach V8's garbage collector. isolate->SetEmbedderHeapTracer(nullptr); - data->v8_heap_controller_->FinalizeAndCleanup(); - data->v8_heap_controller_.reset(); + if (data->script_wrappable_visitor_->WrapperTracingInProgress()) + data->script_wrappable_visitor_->AbortTracing(); + data->script_wrappable_visitor_.reset(); } // destroy() clear things that should be cleared after ThreadState::detach() @@ -367,4 +368,16 @@ active_script_wrappables_->insert(wrappable); } +void V8PerIsolateData::TemporaryScriptWrappableVisitorScope:: + SwapWithV8PerIsolateDataVisitor( + std::unique_ptr<ScriptWrappableMarkingVisitor>& visitor) { + ScriptWrappableMarkingVisitor* current = CurrentVisitor(); + if (current) + ScriptWrappableMarkingVisitor::PerformCleanup(isolate_); + + V8PerIsolateData::From(isolate_)->script_wrappable_visitor_.swap( + saved_visitor_); + isolate_->SetEmbedderHeapTracer(CurrentVisitor()); +} + } // namespace blink
diff --git a/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h b/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h index 35cef52..7788274 100644 --- a/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h +++ b/third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h
@@ -33,9 +33,9 @@ #include "gin/public/isolate_holder.h" #include "third_party/blink/renderer/platform/bindings/runtime_call_stats.h" #include "third_party/blink/renderer/platform/bindings/scoped_persistent.h" +#include "third_party/blink/renderer/platform/bindings/script_wrappable_marking_visitor.h" #include "third_party/blink/renderer/platform/bindings/v8_global_value_map.h" #include "third_party/blink/renderer/platform/heap/handle.h" -#include "third_party/blink/renderer/platform/heap/v8_heap_controller.h" #include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/wtf/forward.h" #include "third_party/blink/renderer/platform/wtf/hash_map.h" @@ -200,19 +200,41 @@ return active_script_wrappables_.Get(); } - void SetV8HeapController(std::unique_ptr<V8HeapController> controller) { - DCHECK(!v8_heap_controller_); - v8_heap_controller_ = std::move(controller); - } + class PLATFORM_EXPORT TemporaryScriptWrappableVisitorScope { + WTF_MAKE_NONCOPYABLE(TemporaryScriptWrappableVisitorScope); + STACK_ALLOCATED(); - V8HeapController* GetV8HeapController() const { - return v8_heap_controller_.get(); - } + public: + TemporaryScriptWrappableVisitorScope( + v8::Isolate* isolate, + std::unique_ptr<ScriptWrappableMarkingVisitor> visitor) + : isolate_(isolate), saved_visitor_(std::move(visitor)) { + SwapWithV8PerIsolateDataVisitor(saved_visitor_); + } + ~TemporaryScriptWrappableVisitorScope() { + SwapWithV8PerIsolateDataVisitor(saved_visitor_); + } - void SwapV8HeapController(std::unique_ptr<V8HeapController>& other) { - v8_heap_controller_.swap(other); - } + inline ScriptWrappableMarkingVisitor* CurrentVisitor() { + return V8PerIsolateData::From(isolate_) + ->GetScriptWrappableMarkingVisitor(); + } + private: + void SwapWithV8PerIsolateDataVisitor( + std::unique_ptr<ScriptWrappableMarkingVisitor>&); + + v8::Isolate* isolate_; + std::unique_ptr<ScriptWrappableMarkingVisitor> saved_visitor_; + }; + + void SetScriptWrappableMarkingVisitor( + std::unique_ptr<ScriptWrappableMarkingVisitor> visitor) { + script_wrappable_visitor_ = std::move(visitor); + } + ScriptWrappableMarkingVisitor* GetScriptWrappableMarkingVisitor() { + return script_wrappable_visitor_.get(); + } int IsNearV8HeapLimitHandled() { return handled_near_v8_heap_limit_; } void HandledNearV8HeapLimit() { handled_near_v8_heap_limit_ = true; } @@ -284,8 +306,7 @@ std::unique_ptr<Data> thread_debugger_; Persistent<ActiveScriptWrappableSet> active_script_wrappables_; - - std::unique_ptr<V8HeapController> v8_heap_controller_; + std::unique_ptr<ScriptWrappableMarkingVisitor> script_wrappable_visitor_; RuntimeCallStats runtime_call_stats_; bool handled_near_v8_heap_limit_;
diff --git a/third_party/blink/renderer/platform/bindings/v8_private_property.h b/third_party/blink/renderer/platform/bindings/v8_private_property.h index 34ac3831..d74a5d3 100644 --- a/third_party/blink/renderer/platform/bindings/v8_private_property.h +++ b/third_party/blink/renderer/platform/bindings/v8_private_property.h
@@ -51,8 +51,8 @@ X(SameObject, PerformanceLongTaskTimingAttribution) \ X(SameObject, PushManagerSupportedContentEncodings) \ X(V8ErrorHandler, ErrorHandler) \ - X(V8EventListener, AttributeListener) \ - X(V8EventListener, Listener) \ + X(V8EventListenerOrEventHandler, AttributeListener) \ + X(V8EventListenerOrEventHandler, Listener) \ SCRIPT_PROMISE_PROPERTIES(X, Promise) \ SCRIPT_PROMISE_PROPERTIES(X, Resolver)
diff --git a/third_party/blink/renderer/platform/exported/web_runtime_features.cc b/third_party/blink/renderer/platform/exported/web_runtime_features.cc index 9f404be..40d53dc 100644 --- a/third_party/blink/renderer/platform/exported/web_runtime_features.cc +++ b/third_party/blink/renderer/platform/exported/web_runtime_features.cc
@@ -200,6 +200,14 @@ RuntimeEnabledFeatures::SetLazyFrameVisibleLoadTimeMetricsEnabled(enable); } +void WebRuntimeFeatures::EnableLazyImageLoading(bool enable) { + RuntimeEnabledFeatures::SetLazyImageLoadingEnabled(enable); +} + +void WebRuntimeFeatures::EnableLazyImageVisibleLoadTimeMetrics(bool enable) { + RuntimeEnabledFeatures::SetLazyImageVisibleLoadTimeMetricsEnabled(enable); +} + void WebRuntimeFeatures::EnableLazyParseCSS(bool enable) { RuntimeEnabledFeatures::SetLazyParseCSSEnabled(enable); }
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.cc index 12f0b08..e157415 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.cc
@@ -9,6 +9,7 @@ #include "components/viz/common/quads/compositor_frame.h" #include "components/viz/common/quads/texture_draw_quad.h" #include "components/viz/common/resources/resource_format.h" +#include "components/viz/common/resources/single_release_callback.h" #include "third_party/blink/public/platform/interface_provider.h" #include "third_party/blink/public/platform/modules/frame_sinks/embedded_frame_sink.mojom-blink.h" #include "third_party/blink/public/platform/platform.h" @@ -28,6 +29,21 @@ kMaxUnreclaimedPlaceholderFrames = 3, }; +struct CanvasResourceDispatcher::FrameResource { + FrameResource() = default; + ~FrameResource() { + if (release_callback) + release_callback->Run(sync_token, is_lost); + } + + // TODO(junov): What does this do? + bool spare_lock = true; + + std::unique_ptr<viz::SingleReleaseCallback> release_callback; + gpu::SyncToken sync_token; + bool is_lost = false; +}; + CanvasResourceDispatcher::CanvasResourceDispatcher( CanvasResourceDispatcherClient* client, uint32_t client_id, @@ -43,21 +59,20 @@ num_unreclaimed_frames_posted_(0), client_(client), weak_ptr_factory_(this) { - if (frame_sink_id_.is_valid()) { - // Only frameless canvas pass an invalid frame sink id; we don't create - // mojo channel for this special case. - DCHECK(!sink_.is_bound()); - mojom::blink::EmbeddedFrameSinkProviderPtr provider; - Platform::Current()->GetInterfaceProvider()->GetInterface( - mojo::MakeRequest(&provider)); - DCHECK(provider); + // Frameless canvas pass an invalid |frame_sink_id_|; don't create mojo + // channel for this special case. + if (!frame_sink_id_.is_valid()) + return; - binding_.Bind(mojo::MakeRequest(&client_ptr_)); - provider->CreateCompositorFrameSink(frame_sink_id_, std::move(client_ptr_), - mojo::MakeRequest(&sink_)); - } - offscreen_canvas_resource_provider_ = - std::make_unique<OffscreenCanvasResourceProvider>(); + DCHECK(!sink_.is_bound()); + mojom::blink::EmbeddedFrameSinkProviderPtr provider; + Platform::Current()->GetInterfaceProvider()->GetInterface( + mojo::MakeRequest(&provider)); + DCHECK(provider); + + binding_.Bind(mojo::MakeRequest(&client_ptr_)); + provider->CreateCompositorFrameSink(frame_sink_id_, std::move(client_ptr_), + mojo::MakeRequest(&sink_)); } CanvasResourceDispatcher::~CanvasResourceDispatcher() = default; @@ -86,7 +101,7 @@ scoped_refptr<CanvasResource> image, viz::ResourceId resource_id) { if (placeholder_canvas_id_ == kInvalidPlaceholderCanvasId) { - offscreen_canvas_resource_provider_->ReclaimResource(resource_id); + ReclaimResourceInternal(resource_id); return; } // Determines whether the main thread may be blocked. If unblocked, post the @@ -98,8 +113,7 @@ DCHECK(num_unreclaimed_frames_posted_ == kMaxUnreclaimedPlaceholderFrames); if (latest_unposted_image_) { // The previous unposted image becomes obsolete now. - offscreen_canvas_resource_provider_->ReclaimResource( - latest_unposted_resource_id_); + ReclaimResourceInternal(latest_unposted_resource_id_); } latest_unposted_image_ = std::move(image); @@ -173,13 +187,12 @@ if (!canvas_resource || !VerifyImageSize(canvas_resource->Size())) return false; - offscreen_canvas_resource_provider_->IncNextResourceId(); + next_resource_id_++; // For frameless canvas, we don't get a valid frame_sink_id and should drop. if (!frame_sink_id_.is_valid()) { - PostImageToPlaceholderIfNotBlocked( - std::move(canvas_resource), - offscreen_canvas_resource_provider_->GetNextResourceId()); + PostImageToPlaceholderIfNotBlocked(std::move(canvas_resource), + next_resource_id_); return false; } @@ -238,16 +251,21 @@ } viz::TransferableResource resource; - offscreen_canvas_resource_provider_->SetTransferableResource(&resource, - canvas_resource); + auto frame_resource = std::make_unique<FrameResource>(); + + canvas_resource->PrepareTransferableResource( + &resource, &frame_resource->release_callback, kVerifiedSyncToken); + resource.id = next_resource_id_; + + resources_.insert(next_resource_id_, std::move(frame_resource)); + // TODO(crbug.com/869913): add unit testing for this. const gfx::Size canvas_resource_size(canvas_resource->Size()); commit_type_histogram.Count(commit_type); - PostImageToPlaceholderIfNotBlocked( - std::move(canvas_resource), - offscreen_canvas_resource_provider_->GetNextResourceId()); + PostImageToPlaceholderIfNotBlocked(std::move(canvas_resource), + next_resource_id_); frame->resource_list.push_back(std::move(resource)); @@ -428,11 +446,22 @@ void CanvasResourceDispatcher::ReclaimResources( const WTF::Vector<viz::ReturnedResource>& resources) { - offscreen_canvas_resource_provider_->ReclaimResources(resources); + for (const auto& resource : resources) { + auto it = resources_.find(resource.id); + + DCHECK(it != resources_.end()); + if (it == resources_.end()) + continue; + + it->value->sync_token = resource.sync_token; + it->value->is_lost = resource.lost; + ReclaimResourceInternal(it); + } } void CanvasResourceDispatcher::ReclaimResource(viz::ResourceId resource_id) { - offscreen_canvas_resource_provider_->ReclaimResource(resource_id); + ReclaimResourceInternal(resource_id); + num_unreclaimed_frames_posted_--; // The main thread has become unblocked recently and we have an image that @@ -470,4 +499,20 @@ sink_->DidDeleteSharedBitmap(std::move(id)); } +void CanvasResourceDispatcher::ReclaimResourceInternal( + viz::ResourceId resource_id) { + auto it = resources_.find(resource_id); + if (it != resources_.end()) + ReclaimResourceInternal(it); +} + +void CanvasResourceDispatcher::ReclaimResourceInternal( + const ResourceMap::iterator& it) { + if (it->value->spare_lock) { + it->value->spare_lock = false; + return; + } + resources_.erase(it); +} + } // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h b/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h index 862bc3b4..7ecb4ec 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h +++ b/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h
@@ -11,7 +11,6 @@ #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" #include "mojo/public/cpp/bindings/binding.h" #include "services/viz/public/interfaces/compositing/compositor_frame_sink.mojom-blink.h" -#include "third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.h" #include "third_party/blink/renderer/platform/wtf/compiler.h" namespace blink { @@ -81,11 +80,12 @@ kCommitSoftwareCanvasGPUCompositing = 2, kCommitSoftwareCanvasSoftwareCompositing = 3, kOffscreenCanvasCommitTypeCount, - }; private: friend class CanvasResourceDispatcherTest; + struct FrameResource; + using ResourceMap = HashMap<unsigned, std::unique_ptr<FrameResource>>; bool PrepareFrame(scoped_refptr<CanvasResource>, base::TimeTicks commit_start_time, @@ -112,12 +112,18 @@ virtual void PostImageToPlaceholder(scoped_refptr<CanvasResource>, viz::ResourceId resource_id); + void ReclaimResourceInternal(viz::ResourceId resource_id); + void ReclaimResourceInternal(const ResourceMap::iterator&); + viz::mojom::blink::CompositorFrameSinkPtr sink_; mojo::Binding<viz::mojom::blink::CompositorFrameSinkClient> binding_; viz::mojom::blink::CompositorFrameSinkClientPtr client_ptr_; int placeholder_canvas_id_; + unsigned next_resource_id_ = 0; + ResourceMap resources_; + // The latest_unposted_resource_id_ always refers to the Id of the frame // resource used by the latest_unposted_image_. scoped_refptr<CanvasResource> latest_unposted_image_; @@ -128,9 +134,6 @@ CanvasResourceDispatcherClient* client_; - std::unique_ptr<OffscreenCanvasResourceProvider> - offscreen_canvas_resource_provider_; - base::WeakPtrFactory<CanvasResourceDispatcher> weak_ptr_factory_; };
diff --git a/third_party/blink/renderer/platform/graphics/offscreen_canvas_frame_dispatcher_test.cc b/third_party/blink/renderer/platform/graphics/offscreen_canvas_frame_dispatcher_test.cc index 7079af8..17822636 100644 --- a/third_party/blink/renderer/platform/graphics/offscreen_canvas_frame_dispatcher_test.cc +++ b/third_party/blink/renderer/platform/graphics/offscreen_canvas_frame_dispatcher_test.cc
@@ -30,9 +30,6 @@ class CanvasResourceDispatcherTest : public testing::Test { public: void DispatchOneFrame(); - OffscreenCanvasResourceProvider* GetResourceProvider() { - return dispatcher_->offscreen_canvas_resource_provider_.get(); - } unsigned GetNumUnreclaimedFramesPosted() { return dispatcher_->num_unreclaimed_frames_posted_; @@ -42,10 +39,14 @@ return dispatcher_->latest_unposted_image_.get(); } - unsigned GetLatestUnpostedResourceId() { + viz::ResourceId GetLatestUnpostedResourceId() { return dispatcher_->latest_unposted_resource_id_; } + viz::ResourceId GetCurrentResourceId() { + return dispatcher_->next_resource_id_; + } + protected: CanvasResourceDispatcherTest() { dispatcher_ = std::make_unique<MockCanvasResourceDispatcher>(); @@ -80,7 +81,7 @@ EXPECT_CALL(*(Dispatcher()), PostImageToPlaceholder(_, post_resource_id)); DispatchOneFrame(); EXPECT_EQ(1u, GetNumUnreclaimedFramesPosted()); - EXPECT_EQ(1u, GetResourceProvider()->GetNextResourceId()); + EXPECT_EQ(1u, GetCurrentResourceId()); Mock::VerifyAndClearExpectations(Dispatcher()); // Post second frame @@ -88,7 +89,7 @@ EXPECT_CALL(*(Dispatcher()), PostImageToPlaceholder(_, post_resource_id)); DispatchOneFrame(); EXPECT_EQ(2u, GetNumUnreclaimedFramesPosted()); - EXPECT_EQ(2u, GetResourceProvider()->GetNextResourceId()); + EXPECT_EQ(2u, GetCurrentResourceId()); Mock::VerifyAndClearExpectations(Dispatcher()); // Post third frame @@ -96,7 +97,7 @@ EXPECT_CALL(*(Dispatcher()), PostImageToPlaceholder(_, post_resource_id)); DispatchOneFrame(); EXPECT_EQ(3u, GetNumUnreclaimedFramesPosted()); - EXPECT_EQ(3u, GetResourceProvider()->GetNextResourceId()); + EXPECT_EQ(3u, GetCurrentResourceId()); EXPECT_EQ(nullptr, GetLatestUnpostedImage()); Mock::VerifyAndClearExpectations(Dispatcher()); @@ -131,7 +132,7 @@ DispatchOneFrame(); unsigned post_resource_id = 4u; EXPECT_EQ(3u, GetNumUnreclaimedFramesPosted()); - EXPECT_EQ(post_resource_id, GetResourceProvider()->GetNextResourceId()); + EXPECT_EQ(post_resource_id, GetCurrentResourceId()); EXPECT_TRUE(GetLatestUnpostedImage()); EXPECT_EQ(post_resource_id, GetLatestUnpostedResourceId()); @@ -139,7 +140,7 @@ post_resource_id++; DispatchOneFrame(); EXPECT_EQ(3u, GetNumUnreclaimedFramesPosted()); - EXPECT_EQ(post_resource_id, GetResourceProvider()->GetNextResourceId()); + EXPECT_EQ(post_resource_id, GetCurrentResourceId()); EXPECT_TRUE(GetLatestUnpostedImage()); EXPECT_EQ(post_resource_id, GetLatestUnpostedResourceId()); @@ -154,7 +155,7 @@ // Reclaim 1 frame and post 1 frame, so numPostImagesUnresponded remains as 3 EXPECT_EQ(3u, GetNumUnreclaimedFramesPosted()); // Not generating new resource Id - EXPECT_EQ(post_resource_id, GetResourceProvider()->GetNextResourceId()); + EXPECT_EQ(post_resource_id, GetCurrentResourceId()); EXPECT_FALSE(GetLatestUnpostedImage()); EXPECT_EQ(0u, GetLatestUnpostedResourceId()); Mock::VerifyAndClearExpectations(Dispatcher());
diff --git a/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.cc b/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.cc deleted file mode 100644 index 8b132c3..0000000 --- a/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.cc +++ /dev/null
@@ -1,90 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.h" - -#include "components/viz/common/resources/returned_resource.h" -#include "components/viz/common/resources/single_release_callback.h" -#include "components/viz/common/resources/transferable_resource.h" -#include "third_party/blink/renderer/platform/graphics/canvas_resource.h" -#include "third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h" - -namespace blink { - -OffscreenCanvasResourceProvider::OffscreenCanvasResourceProvider() = default; - -OffscreenCanvasResourceProvider::~OffscreenCanvasResourceProvider() = default; - -std::unique_ptr<OffscreenCanvasResourceProvider::FrameResource> -OffscreenCanvasResourceProvider::CreateOrRecycleFrameResource() { - if (!recyclable_resource_) - return std::make_unique<FrameResource>(); - - recyclable_resource_->spare_lock = true; - return std::move(recyclable_resource_); -} - -void OffscreenCanvasResourceProvider::SetTransferableResource( - viz::TransferableResource* out_resource, - scoped_refptr<CanvasResource> canvas_resource) { - DCHECK(canvas_resource->IsValid()); - - std::unique_ptr<FrameResource> frame_resource = - CreateOrRecycleFrameResource(); - - // TODO(junov): Using verified sync tokens for each offscreencanvas is - // suboptimal in the case where there are multiple offscreen canvases - // commiting frames. Would be more efficient to batch the verifications. - canvas_resource->PrepareTransferableResource( - out_resource, &frame_resource->release_callback, kVerifiedSyncToken); - out_resource->id = next_resource_id_; - - resources_.insert(next_resource_id_, std::move(frame_resource)); -} - -void OffscreenCanvasResourceProvider::ReclaimResources( - const WTF::Vector<viz::ReturnedResource>& resources) { - for (const auto& resource : resources) { - auto it = resources_.find(resource.id); - - DCHECK(it != resources_.end()); - if (it == resources_.end()) - continue; - - it->value->sync_token = resource.sync_token; - it->value->is_lost = resource.lost; - ReclaimResourceInternal(it); - } -} - -void OffscreenCanvasResourceProvider::ReclaimResource(unsigned resource_id) { - auto it = resources_.find(resource_id); - if (it != resources_.end()) - ReclaimResourceInternal(it); -} - -void OffscreenCanvasResourceProvider::ReclaimResourceInternal( - const ResourceMap::iterator& it) { - if (it->value->spare_lock) { - it->value->spare_lock = false; - return; - } - - if (it->value->release_callback) - it->value->release_callback->Run(it->value->sync_token, it->value->is_lost); - - // Recycle resource. - recyclable_resource_ = std::move(it->value); - recyclable_resource_->release_callback = nullptr; - recyclable_resource_->sync_token.Clear(); - recyclable_resource_->is_lost = false; - resources_.erase(it); -} - -OffscreenCanvasResourceProvider::FrameResource::~FrameResource() { - if (release_callback) - release_callback->Run(sync_token, is_lost); -} - -} // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.h b/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.h deleted file mode 100644 index 63a3ce2..0000000 --- a/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.h +++ /dev/null
@@ -1,63 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_OFFSCREEN_CANVAS_RESOURCE_PROVIDER_H_ -#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_OFFSCREEN_CANVAS_RESOURCE_PROVIDER_H_ - -#include "gpu/command_buffer/common/sync_token.h" -#include "third_party/blink/renderer/platform/platform_export.h" -#include "third_party/blink/renderer/platform/wtf/hash_map.h" -#include "third_party/blink/renderer/platform/wtf/ref_counted.h" -#include "third_party/blink/renderer/platform/wtf/vector.h" - -namespace viz { -struct ReturnedResource; -class SingleReleaseCallback; -struct TransferableResource; -} - -namespace blink { - -class CanvasResource; - -class PLATFORM_EXPORT OffscreenCanvasResourceProvider { - public: - OffscreenCanvasResourceProvider(); - ~OffscreenCanvasResourceProvider(); - - void SetTransferableResource(viz::TransferableResource* out_resource, - scoped_refptr<CanvasResource>); - - void ReclaimResource(unsigned resource_id); - void ReclaimResources(const WTF::Vector<viz::ReturnedResource>& resources); - void IncNextResourceId() { next_resource_id_++; } - unsigned GetNextResourceId() { return next_resource_id_; } - - private: - struct FrameResource { - FrameResource() = default; - ~FrameResource(); - - // TODO(junov): What does this do? - bool spare_lock = true; - - std::unique_ptr<viz::SingleReleaseCallback> release_callback; - gpu::SyncToken sync_token; - bool is_lost = false; - }; - - using ResourceMap = HashMap<unsigned, std::unique_ptr<FrameResource>>; - - void SetNeedsBeginFrameInternal(); - std::unique_ptr<FrameResource> CreateOrRecycleFrameResource(); - void ReclaimResourceInternal(const ResourceMap::iterator&); - - unsigned next_resource_id_ = 0; - std::unique_ptr<FrameResource> recyclable_resource_; - ResourceMap resources_; -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_OFFSCREEN_CANVAS_RESOURCE_PROVIDER_H_
diff --git a/third_party/blink/renderer/platform/heap/BUILD.gn b/third_party/blink/renderer/platform/heap/BUILD.gn index 120d392..3859f8c 100644 --- a/third_party/blink/renderer/platform/heap/BUILD.gn +++ b/third_party/blink/renderer/platform/heap/BUILD.gn
@@ -79,7 +79,6 @@ "thread_state.h", "threading_traits.h", "trace_traits.h", - "v8_heap_controller.h", "visitor.h", "worklist.h", ]
diff --git a/third_party/blink/renderer/platform/heap/heap_compact.cc b/third_party/blink/renderer/platform/heap/heap_compact.cc index f4fab530..e8b2cc1 100644 --- a/third_party/blink/renderer/platform/heap/heap_compact.cc +++ b/third_party/blink/renderer/platform/heap/heap_compact.cc
@@ -123,6 +123,12 @@ slot, std::pair<void*, MovingObjectCallback>(callback_data, callback)); } + void RemoveFixupCallback(MovableReference* slot) { + auto it = fixup_callbacks_.find(slot); + if (it != fixup_callbacks_.end()) + fixup_callbacks_.erase(it); + } + void RelocateInteriorFixups(Address from, Address to, size_t size) { SparseHeapBitmap* range = interiors_->HasRange(from, size); if (LIKELY(!range)) @@ -164,7 +170,7 @@ void Relocate(Address from, Address to) { auto it = fixups_.find(from); - /// This means that there is no corresponding slot for a live backing store. + // This means that there is no corresponding slot for a live backing store. // This may happen because a mutator may change the slot to point to a // different backing store after an incremental marking traced the slot (and // marked the old backing store as live). @@ -325,12 +331,6 @@ << " count=" << gc_count_since_last_compaction_ << " free=" << free_list_size_; gc_count_since_last_compaction_++; - // It is only safe to compact during non-conservative GCs. - // TODO: for the main thread, limit this further to only idle GCs. - if (reason != BlinkGC::GCReason::kIdleGC && - reason != BlinkGC::GCReason::kPreciseGC && - reason != BlinkGC::GCReason::kForcedGC) - return false; // If the GCing thread requires a stack scan, do not compact. // Why? Should the stack contain an iterator pointing into its @@ -339,10 +339,22 @@ if (stack_state == BlinkGC::kHeapPointersOnStack) return false; + if (reason == BlinkGC::GCReason::kTesting) { + UpdateHeapResidency(); + return force_compaction_gc_; + } + // TODO(keishi): Should be enable after fixing the crashes. if (marking_type == BlinkGC::kIncrementalMarking) return false; + // TODO(harukamt): Add kIncrementalIdleGC and kIncrementalV8FollowupGC when we + // enable heap compaction for incremental marking. + if (reason != BlinkGC::GCReason::kIdleGC && + reason != BlinkGC::GCReason::kPreciseGC && + reason != BlinkGC::GCReason::kForcedGC) + return false; + // Compaction enable rules: // - It's been a while since the last time. // - "Considerable" amount of heap memory is bound up in freelist @@ -377,6 +389,13 @@ force_compaction_gc_ = false; } +void HeapCompact::RemoveSlot(MovableReference* slot) { + auto it = traced_slots_.find(slot); + if (it != traced_slots_.end()) + traced_slots_.erase(it); + Fixups().RemoveFixupCallback(slot); +} + void HeapCompact::RegisterMovingObjectReference(MovableReference* slot) { if (!do_compact_) return;
diff --git a/third_party/blink/renderer/platform/heap/heap_compact.h b/third_party/blink/renderer/platform/heap/heap_compact.h index bf24885e..780e72f 100644 --- a/third_party/blink/renderer/platform/heap/heap_compact.h +++ b/third_party/blink/renderer/platform/heap/heap_compact.h
@@ -36,12 +36,18 @@ namespace blink { +namespace incremental_marking_test { +class IncrementalMarkingTestDriver; +} + class NormalPageArena; class BasePage; class ThreadState; class ThreadHeap; class PLATFORM_EXPORT HeapCompact final { + friend class incremental_marking_test::IncrementalMarkingTestDriver; + public: static std::unique_ptr<HeapCompact> Create(ThreadHeap* heap) { return base::WrapUnique(new HeapCompact(heap)); @@ -49,6 +55,10 @@ ~HeapCompact(); + // Remove slot from traced_slots_ when a registered slot is destructed by + // mutator + void RemoveSlot(MovableReference* slot); + // Determine if a GC for the given type and reason should also perform // additional heap compaction. //
diff --git a/third_party/blink/renderer/platform/heap/heap_stats_collector.h b/third_party/blink/renderer/platform/heap/heap_stats_collector.h index 30ee866c..05680bb 100644 --- a/third_party/blink/renderer/platform/heap/heap_stats_collector.h +++ b/third_party/blink/renderer/platform/heap/heap_stats_collector.h
@@ -99,14 +99,11 @@ static constexpr int kNumScopeIds = kLastScopeId + 1; - enum TraceDefaultBehavior { - kEnabled, - kDisabled, - }; + enum TraceCategory { kEnabled, kDisabled, kDevTools }; // Trace a particular scope. Will emit a trace event and record the time in // the corresponding ThreadHeapStatsCollector. - template <TraceDefaultBehavior default_behavior = kDisabled> + template <TraceCategory trace_category = kDisabled> class PLATFORM_EXPORT InternalScope { DISALLOW_NEW(); DISALLOW_COPY_AND_ASSIGN(InternalScope); @@ -125,9 +122,14 @@ private: constexpr static const char* TraceCategory() { - return default_behavior == kEnabled - ? "blink_gc" - : TRACE_DISABLED_BY_DEFAULT("blink_gc"); + switch (trace_category) { + case kEnabled: + return "blink_gc"; + case kDisabled: + return TRACE_DISABLED_BY_DEFAULT("blink_gc"); + case kDevTools: + return "blink_gc,devtools.timeline"; + } } void StartTrace() { TRACE_EVENT_BEGIN0(TraceCategory(), ToString(id_)); } @@ -149,6 +151,7 @@ using Scope = InternalScope<kDisabled>; using EnabledScope = InternalScope<kEnabled>; + using DevToolsScope = InternalScope<kDevTools>; // POD to hold interesting data accumulated during a garbage collection cycle. // The event is always fully polulated when looking at previous events but
diff --git a/third_party/blink/renderer/platform/heap/incremental_marking_test.cc b/third_party/blink/renderer/platform/heap/incremental_marking_test.cc index b70d4e3..59d153e 100644 --- a/third_party/blink/renderer/platform/heap/incremental_marking_test.cc +++ b/third_party/blink/renderer/platform/heap/incremental_marking_test.cc
@@ -10,6 +10,7 @@ #include "third_party/blink/renderer/platform/heap/heap.h" #include "third_party/blink/renderer/platform/heap/heap_allocator.h" #include "third_party/blink/renderer/platform/heap/heap_buildflags.h" +#include "third_party/blink/renderer/platform/heap/heap_compact.h" #include "third_party/blink/renderer/platform/heap/heap_terminated_array.h" #include "third_party/blink/renderer/platform/heap/heap_terminated_array_builder.h" #include "third_party/blink/renderer/platform/heap/member.h" @@ -1630,6 +1631,11 @@ thread_state_->CompleteSweep(); } + HashSet<MovableReference*>& GetTracedSlot() { + HeapCompact* compaction = ThreadState::Current()->Heap().Compaction(); + return compaction->traced_slots_; + } + private: ThreadState* const thread_state_; }; @@ -1717,6 +1723,82 @@ driver.FinishGC(); } +TEST(IncrementalMarkingTest, DropReferenceWithHeapCompaction) { + using Store = HeapHashCountedSet<Member<Object>>; + + Persistent<Store> persistent(new Store); + persistent->insert(Object::Create()); + IncrementalMarkingTestDriver driver(ThreadState::Current()); + HeapCompact::ScheduleCompactionGCForTesting(true); + driver.Start(); + driver.FinishSteps(); + persistent->clear(); + // Registration of movable and updatable references should not crash because + // if a slot have nullptr reference, it doesn't call registeration method. + driver.FinishGC(); +} + +TEST(IncrementalMarkingTest, HasInlineCapacityCollectionWithHeapCompaction) { + using Store = HeapVector<Member<Object>, 2>; + + Persistent<Store> persistent(new Store); + Persistent<Store> persistent2(new Store); + + IncrementalMarkingTestDriver driver(ThreadState::Current()); + HeapCompact::ScheduleCompactionGCForTesting(true); + persistent->push_back(Object::Create()); + driver.Start(); + driver.FinishSteps(); + + // Should collect also slots that has only inline buffer and nullptr + // references. + EXPECT_EQ(driver.GetTracedSlot().size(), 2u); + driver.FinishGC(); +} + +TEST(IncrementalMarkingTest, SlotDestruction) { + IncrementalMarkingTestDriver driver(ThreadState::Current()); + HeapCompact::ScheduleCompactionGCForTesting(true); + Vector<MovableReference*> ref(7); + + { + Object* obj = Object::Create(); + PersistentHeapHashSet<Member<Object>> p_hashset; + PersistentHeapHashMap<Member<Object>, Member<Object>> p_hashmap; + PersistentHeapLinkedHashSet<Member<Object>> p_linkedhashset; + PersistentHeapListHashSet<Member<Object>> p_listhashset; + PersistentHeapHashCountedSet<Member<Object>> p_hashcountedset; + PersistentHeapVector<Member<Object>> p_vector; + PersistentHeapDeque<Member<Object>> p_deque; + + p_hashset.insert(obj); + p_hashmap.insert(obj, obj); + p_linkedhashset.insert(obj); + p_listhashset.insert(obj); + p_hashcountedset.insert(obj); + p_vector.push_back(obj); + p_deque.push_back(obj); + + ref[0] = reinterpret_cast<MovableReference*>(&p_hashset); + ref[1] = reinterpret_cast<MovableReference*>(&p_hashmap); + ref[2] = reinterpret_cast<MovableReference*>(&p_linkedhashset); + ref[3] = reinterpret_cast<MovableReference*>(&p_listhashset); + ref[4] = reinterpret_cast<MovableReference*>(&p_hashcountedset); + ref[5] = reinterpret_cast<MovableReference*>(&p_vector); + ref[6] = reinterpret_cast<MovableReference*>(&p_deque); + + driver.Start(); + driver.FinishSteps(); + + for (size_t i = 0; i < ref.size(); ++i) { + EXPECT_TRUE(driver.GetTracedSlot().Contains(ref[i])); + } + } + for (size_t i = 0; i < ref.size(); ++i) { + EXPECT_FALSE(driver.GetTracedSlot().Contains(ref[i])); + } +} + } // namespace incremental_marking_test } // namespace blink
diff --git a/third_party/blink/renderer/platform/heap/persistent.h b/third_party/blink/renderer/platform/heap/persistent.h index a6e11b23..b5bfab9 100644 --- a/third_party/blink/renderer/platform/heap/persistent.h +++ b/third_party/blink/renderer/platform/heap/persistent.h
@@ -7,6 +7,7 @@ #include "base/bind.h" #include "third_party/blink/renderer/platform/heap/heap.h" +#include "third_party/blink/renderer/platform/heap/heap_compact.h" #include "third_party/blink/renderer/platform/heap/member.h" #include "third_party/blink/renderer/platform/heap/persistent_node.h" #include "third_party/blink/renderer/platform/heap/visitor.h" @@ -686,6 +687,11 @@ #if DCHECK_IS_ON() DCHECK_EQ(state_, state); #endif + HeapCompact* compactor = state->Heap().Compaction(); + if (compactor->IsCompacting()) { + compactor->RemoveSlot( + reinterpret_cast<MovableReference*>(this->GetBufferSlot())); + } state->FreePersistentNode(state->GetPersistentRegion(), persistent_node_); persistent_node_ = nullptr; }
diff --git a/third_party/blink/renderer/platform/heap/thread_state.cc b/third_party/blink/renderer/platform/heap/thread_state.cc index 13fa4151..ab2e37f7 100644 --- a/third_party/blink/renderer/platform/heap/thread_state.cc +++ b/third_party/blink/renderer/platform/heap/thread_state.cc
@@ -1453,7 +1453,7 @@ CompleteSweep(); Heap().stats_collector()->NotifyMarkingStarted(reason); { - ThreadHeapStatsCollector::Scope stats_scope( + ThreadHeapStatsCollector::EnabledScope stats_scope( Heap().stats_collector(), ThreadHeapStatsCollector::kIncrementalMarkingStartMarking, "reason", GcReasonString(reason)); @@ -1471,7 +1471,7 @@ } void ThreadState::IncrementalMarkingStep() { - ThreadHeapStatsCollector::Scope stats_scope( + ThreadHeapStatsCollector::EnabledScope stats_scope( Heap().stats_collector(), ThreadHeapStatsCollector::kIncrementalMarkingStep); VLOG(2) << "[state:" << this << "] " @@ -1488,7 +1488,7 @@ } void ThreadState::IncrementalMarkingFinalize() { - ThreadHeapStatsCollector::Scope stats_scope( + ThreadHeapStatsCollector::EnabledScope stats_scope( Heap().stats_collector(), ThreadHeapStatsCollector::kIncrementalMarkingFinalize); VLOG(2) << "[state:" << this << "] " @@ -1577,7 +1577,7 @@ BlinkGC::SweepingType sweeping_type, BlinkGC::GCReason reason) { { - ThreadHeapStatsCollector::EnabledScope stats1( + ThreadHeapStatsCollector::DevToolsScope stats1( Heap().stats_collector(), ThreadHeapStatsCollector::kAtomicPhase); AtomicPauseScope atomic_pause_scope(this); {
diff --git a/third_party/blink/renderer/platform/heap/v8_heap_controller.h b/third_party/blink/renderer/platform/heap/v8_heap_controller.h deleted file mode 100644 index d7e5f43..0000000 --- a/third_party/blink/renderer/platform/heap/v8_heap_controller.h +++ /dev/null
@@ -1,22 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_V8_HEAP_CONTROLLER_H_ -#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_V8_HEAP_CONTROLLER_H_ - -#include "v8/include/v8.h" - -namespace blink { - -// Common interface for all V8 heap tracers used in Blink. -class V8HeapController : public v8::EmbedderHeapTracer { - public: - ~V8HeapController() override = default; - - virtual void FinalizeAndCleanup() = 0; -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_V8_HEAP_CONTROLLER_H_
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_test.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_test.cc index 635c78ca..5d0ef75 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_test.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher_test.cc
@@ -95,6 +95,12 @@ ResourceFetcherTest() = default; ~ResourceFetcherTest() override { GetMemoryCache()->EvictResources(); } + void RunUntilIdle() { + base::SingleThreadTaskRunner* runner = + Context()->GetLoadingTaskRunner().get(); + static_cast<scheduler::FakeTaskRunner*>(runner)->RunUntilIdle(); + } + protected: MockFetchContext* Context() { return platform_->Context(); } void AddResourceToMemoryCache( @@ -905,7 +911,7 @@ new_resource = MockResource::Fetch(fetch_params, fetcher, nullptr); EXPECT_EQ(resource, new_resource); EXPECT_TRUE(GetMemoryCache()->Contains(resource)); - platform_->RunUntilIdle(); + RunUntilIdle(); platform_->GetURLLoaderMockFactory()->ServeAsynchronousRequests(); EXPECT_FALSE(GetMemoryCache()->Contains(resource)); }
diff --git a/third_party/blink/renderer/platform/loader/testing/fetch_testing_platform_support.cc b/third_party/blink/renderer/platform/loader/testing/fetch_testing_platform_support.cc index 5bf9398..0938f6fb4 100644 --- a/third_party/blink/renderer/platform/loader/testing/fetch_testing_platform_support.cc +++ b/third_party/blink/renderer/platform/loader/testing/fetch_testing_platform_support.cc
@@ -30,8 +30,7 @@ MockFetchContext* FetchTestingPlatformSupport::Context() { if (!context_) { context_ = - MockFetchContext::Create(MockFetchContext::kShouldLoadNewResource, - scheduler_->DefaultTaskRunner()); + MockFetchContext::Create(MockFetchContext::kShouldLoadNewResource); } return context_; }
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index f3cb78c..1c2ce4af 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -532,6 +532,7 @@ }, { name: "HeapIncrementalMarking", + status: "stable", }, { name: "HeapIncrementalMarkingStress" @@ -630,6 +631,12 @@ name: "LazyFrameVisibleLoadTimeMetrics", }, { + name: "LazyImageLoading", + }, + { + name: "LazyImageVisibleLoadTimeMetrics", + }, + { name: "LazyInitializeMediaControls", // This is enabled by features::kLazyInitializeMediaControls. }, @@ -815,7 +822,7 @@ }, { name: "NotificationInlineReplies", - status: "experimental", + status: "stable", }, { name: "Notifications",
diff --git a/third_party/blink/renderer/platform/wtf/deque.h b/third_party/blink/renderer/platform/wtf/deque.h index 6a5eb0bb..cc3974ac 100644 --- a/third_party/blink/renderer/platform/wtf/deque.h +++ b/third_party/blink/renderer/platform/wtf/deque.h
@@ -160,6 +160,9 @@ "Cannot put raw pointers to garbage-collected classes into a " "Deque. Use HeapDeque<Member<T>> instead."); + protected: + T** GetBufferSlot() { return buffer_.BufferSlot(); } + private: friend class DequeIteratorBase<T, inlineCapacity, Allocator>;
diff --git a/third_party/blink/renderer/platform/wtf/hash_counted_set.h b/third_party/blink/renderer/platform/wtf/hash_counted_set.h index 25f78180..9e15db75 100644 --- a/third_party/blink/renderer/platform/wtf/hash_counted_set.h +++ b/third_party/blink/renderer/platform/wtf/hash_counted_set.h
@@ -110,6 +110,11 @@ impl_.Trace(visitor); } + protected: + typename ImplType::ValueType** GetBufferSlot() { + return impl_.GetBufferSlot(); + } + private: ImplType impl_;
diff --git a/third_party/blink/renderer/platform/wtf/hash_map.h b/third_party/blink/renderer/platform/wtf/hash_map.h index 6af0a40..96cb4996 100644 --- a/third_party/blink/renderer/platform/wtf/hash_map.h +++ b/third_party/blink/renderer/platform/wtf/hash_map.h
@@ -31,6 +31,12 @@ template <typename KeyTraits, typename MappedTraits> struct HashMapValueTraits; +template <typename Value, + typename HashFunctions, + typename Traits, + typename Allocator> +class HashCountedSet; + struct KeyValuePairKeyExtractor { STATIC_ONLY(KeyValuePairKeyExtractor); template <typename T> @@ -51,6 +57,8 @@ typename Allocator = PartitionAllocator> class HashMap { USE_ALLOCATOR(HashMap, Allocator); + template <typename T, typename U, typename V, typename W> + friend class HashCountedSet; private: typedef KeyTraitsArg KeyTraits; @@ -197,6 +205,9 @@ impl_.Trace(visitor); } + protected: + ValueType** GetBufferSlot() { return impl_.GetBufferSlot(); } + private: template <typename IncomingKeyType, typename IncomingMappedType> AddResult InlineAdd(IncomingKeyType&&, IncomingMappedType&&);
diff --git a/third_party/blink/renderer/platform/wtf/hash_set.h b/third_party/blink/renderer/platform/wtf/hash_set.h index 37d02a7..d7cdeed 100644 --- a/third_party/blink/renderer/platform/wtf/hash_set.h +++ b/third_party/blink/renderer/platform/wtf/hash_set.h
@@ -138,6 +138,9 @@ impl_.Trace(visitor); } + protected: + ValueType** GetBufferSlot() { return impl_.GetBufferSlot(); } + private: HashTableType impl_; };
diff --git a/third_party/blink/renderer/platform/wtf/hash_table.h b/third_party/blink/renderer/platform/wtf/hash_table.h index 3ba8d32..671b055 100644 --- a/third_party/blink/renderer/platform/wtf/hash_table.h +++ b/third_party/blink/renderer/platform/wtf/hash_table.h
@@ -829,6 +829,8 @@ template <typename HashTranslator, typename T> const ValueType* Lookup(const T&) const; + ValueType** GetBufferSlot() { return &table_; } + template <typename VisitorDispatcher, typename A = Allocator> std::enable_if_t<A::kIsGarbageCollected> Trace(VisitorDispatcher);
diff --git a/third_party/blink/renderer/platform/wtf/linked_hash_set.h b/third_party/blink/renderer/platform/wtf/linked_hash_set.h index cbb0cbd8..28bb803 100644 --- a/third_party/blink/renderer/platform/wtf/linked_hash_set.h +++ b/third_party/blink/renderer/platform/wtf/linked_hash_set.h
@@ -317,6 +317,11 @@ impl_.CheckModifications(mods); } + protected: + typename ImplType::ValueType** GetBufferSlot() { + return impl_.GetBufferSlot(); + } + private: Node* Anchor() { return reinterpret_cast<Node*>(&anchor_); } const Node* Anchor() const { return reinterpret_cast<const Node*>(&anchor_); }
diff --git a/third_party/blink/renderer/platform/wtf/list_hash_set.h b/third_party/blink/renderer/platform/wtf/list_hash_set.h index 1cc4ed47..ce91365 100644 --- a/third_party/blink/renderer/platform/wtf/list_hash_set.h +++ b/third_party/blink/renderer/platform/wtf/list_hash_set.h
@@ -234,6 +234,11 @@ template <typename VisitorDispatcher> void Trace(VisitorDispatcher); + protected: + typename ImplType::ValueType** GetBufferSlot() { + return impl_.GetBufferSlot(); + } + private: void Unlink(Node*); void UnlinkAndDelete(Node*);
diff --git a/third_party/blink/renderer/platform/wtf/vector.h b/third_party/blink/renderer/platform/wtf/vector.h index ee3086d..1a3f291 100644 --- a/third_party/blink/renderer/platform/wtf/vector.h +++ b/third_party/blink/renderer/platform/wtf/vector.h
@@ -1295,6 +1295,8 @@ using Base::CheckUnusedSlots; using Base::ClearUnusedSlots; + T** GetBufferSlot() { return Base::BufferSlot(); } + private: void ExpandCapacity(wtf_size_t new_min_capacity); T* ExpandCapacity(wtf_size_t new_min_capacity, T*);
diff --git a/third_party/feed/README.chromium b/third_party/feed/README.chromium index 1fb2c6d5..e659233 100644 --- a/third_party/feed/README.chromium +++ b/third_party/feed/README.chromium
@@ -2,7 +2,7 @@ Short name: feed URL: https://chromium.googlesource.com/feed Version: 0 -Revision: 180fca04760493784b3183a2220fce639e96f1a5 +Revision: 75614b922b359cc739614fb53b34817cabd69d82 License: Apache 2.0 License File: LICENSE Security Critical: yes
diff --git a/third_party/feed/java_sources.gni b/third_party/feed/java_sources.gni index 97744888..7b42c08c 100644 --- a/third_party/feed/java_sources.gni +++ b/third_party/feed/java_sources.gni
@@ -13,6 +13,9 @@ "src/src/main/java/com/google/android/libraries/feed/api/common/PayloadWithId.java", "src/src/main/java/com/google/android/libraries/feed/api/common/SemanticPropertiesWithId.java", "src/src/main/java/com/google/android/libraries/feed/api/common/ThreadUtils.java", + "src/src/main/java/com/google/android/libraries/feed/api/knowncontent/ContentMetadata.java", + "src/src/main/java/com/google/android/libraries/feed/api/knowncontent/ContentRemoval.java", + "src/src/main/java/com/google/android/libraries/feed/api/knowncontent/KnownContentApi.java", "src/src/main/java/com/google/android/libraries/feed/api/lifecycle/AppLifecycleListener.java", "src/src/main/java/com/google/android/libraries/feed/api/modelprovider/FeatureChange.java", "src/src/main/java/com/google/android/libraries/feed/api/modelprovider/FeatureChangeObserver.java", @@ -75,6 +78,7 @@ "src/src/main/java/com/google/android/libraries/feed/common/Result.java", "src/src/main/java/com/google/android/libraries/feed/common/Validators.java", "src/src/main/java/com/google/android/libraries/feed/common/concurrent/AbstractRunner.java", + "src/src/main/java/com/google/android/libraries/feed/common/concurrent/DirectHostSupported.java", "src/src/main/java/com/google/android/libraries/feed/common/concurrent/MainThreadCaller.java", "src/src/main/java/com/google/android/libraries/feed/common/concurrent/MainThreadRunner.java", "src/src/main/java/com/google/android/libraries/feed/common/concurrent/SimpleSettableFuture.java", @@ -165,6 +169,8 @@ "src/src/main/java/com/google/android/libraries/feed/host/stream/SnackbarApi.java", "src/src/main/java/com/google/android/libraries/feed/host/stream/StreamConfiguration.java", "src/src/main/java/com/google/android/libraries/feed/hostimpl/logging/LoggingApiImpl.java", + "src/src/main/java/com/google/android/libraries/feed/hostimpl/network/NetworkClientWrapper.java", + "src/src/main/java/com/google/android/libraries/feed/hostimpl/scheduler/SchedulerApiWrapper.java", "src/src/main/java/com/google/android/libraries/feed/hostimpl/scheduler/TimeoutScheduler.java", "src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/InMemoryContentStorage.java", "src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/InMemoryJournalStorage.java",
diff --git a/third_party/fuchsia-sdk/BUILD.gn b/third_party/fuchsia-sdk/BUILD.gn index a355f4a5..ef4d58a 100644 --- a/third_party/fuchsia-sdk/BUILD.gn +++ b/third_party/fuchsia-sdk/BUILD.gn
@@ -219,9 +219,11 @@ sources = [ "audio.fidl", - "audio_capturer.fidl", + "audio_in.fidl", + "audio_out.fidl", "audio_renderer.fidl", - "media_transport.fidl", + "gain_control.fidl", + "stream.fidl", "stream_type.fidl", ] }
diff --git a/third_party/googletest/BUILD.gn b/third_party/googletest/BUILD.gn index e77ffcdf6..34c1118 100644 --- a/third_party/googletest/BUILD.gn +++ b/third_party/googletest/BUILD.gn
@@ -116,8 +116,12 @@ ] if (gtest_enable_absl_printers) { public_deps += [ + "//third_party/abseil-cpp/absl/debugging:failure_signal_handler", + "//third_party/abseil-cpp/absl/debugging:stacktrace", + "//third_party/abseil-cpp/absl/debugging:symbolize", "//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/types:optional", + "//third_party/abseil-cpp/absl/types:variant", ] } } else {
diff --git a/third_party/harfbuzz-ng/README.chromium b/third_party/harfbuzz-ng/README.chromium index 2df137705..6d7039ad 100644 --- a/third_party/harfbuzz-ng/README.chromium +++ b/third_party/harfbuzz-ng/README.chromium
@@ -1,9 +1,9 @@ Name: harfbuzz-ng Short Name: harfbuzz-ng URL: http://harfbuzz.org -Version: 1.8.3 -Date: 20180711 -Revision: 2b76767bf572364d3d647cdd139f2044a7ad06b2 +Version: 1.8.7 +Date: 20180809 +Revision: b6fdcf4f8bd09e065c767939125861c9dc8ff18f Security Critical: yes License: MIT License File: src/COPYING
diff --git a/third_party/polymer/README.chromium b/third_party/polymer/README.chromium index e038fc8..47d91396 100644 --- a/third_party/polymer/README.chromium +++ b/third_party/polymer/README.chromium
@@ -44,9 +44,6 @@ handler code which was hiding ripples for pointer interactions. - Bundled and minified Polymer 2 with minify_polymer.py, since Polymer 2 repo does not distribute minified files (unlike Polymer 1). -- For iron-list, call event.preventDefault() when up/down arrow is pressed and - the focused item changes. This is to prevent outer vertical scroll from - scrolling when the iron-list vertical scroll has reached the top or bottom. To restore a content of the 'components-chromium' directory from scratch, run ./v1_0/reproduce.sh on a Linux machine.
diff --git a/third_party/polymer/v1_0/bower.json b/third_party/polymer/v1_0/bower.json index 0b84d28..6e6b1ae 100644 --- a/third_party/polymer/v1_0/bower.json +++ b/third_party/polymer/v1_0/bower.json
@@ -17,7 +17,7 @@ "iron-icon": "PolymerElements/iron-icon#2.0.1", "iron-iconset-svg": "PolymerElements/iron-iconset-svg#2.1.1", "iron-input": "PolymerElements/iron-input#2.1.3", - "iron-list": "PolymerElements/iron-list#2.0.18", + "iron-list": "PolymerElements/iron-list#2.0.19", "iron-location": "PolymerElements/iron-location#2.0.3", "iron-media-query": "PolymerElements/iron-media-query#2.0.0", "iron-menu-behavior": "PolymerElements/iron-menu-behavior#2.0.1",
diff --git a/third_party/polymer/v1_0/chromium.patch b/third_party/polymer/v1_0/chromium.patch index edc9030..f7ae1129 100644 --- a/third_party/polymer/v1_0/chromium.patch +++ b/third_party/polymer/v1_0/chromium.patch
@@ -180,29 +180,3 @@ }); /** -diff --git a/components-chromium/iron-list/iron-list-extracted.js b/components-chromium/iron-list/iron-list-extracted.js -index 4fdfbdead5ae..dbfbc9ca3907 100644 ---- a/components-chromium/iron-list/iron-list-extracted.js -+++ b/components-chromium/iron-list/iron-list-extracted.js -@@ -1611,13 +1611,20 @@ - _keydownHandler: function(e) { - switch (e.keyCode) { - case /* ARROW_DOWN */ 40: -- e.preventDefault(); -+ // TODO (aee): remove when iron-list issue is fixed. -+ // https://github.com/PolymerElements/iron-list/issues/542 -+ if (this._focusedVirtualIndex < this._virtualCount - 1) -+ e.preventDefault(); - this._focusPhysicalItem(this._focusedVirtualIndex + (this.grid ? this._itemsPerRow : 1)); - break; - case /* ARROW_RIGHT */ 39: - if (this.grid) this._focusPhysicalItem(this._focusedVirtualIndex + (this._isRTL ? -1 : 1)); - break; - case /* ARROW_UP */ 38: -+ // TODO (aee): remove when iron-list issue is fixed. -+ // https://github.com/PolymerElements/iron-list/issues/542 -+ if (this._focusedVirtualIndex > 0) -+ e.preventDefault(); - this._focusPhysicalItem(this._focusedVirtualIndex - (this.grid ? this._itemsPerRow : 1)); - break; - case /* ARROW_LEFT */ 37:
diff --git a/third_party/polymer/v1_0/components-chromium/iron-list/bower.json b/third_party/polymer/v1_0/components-chromium/iron-list/bower.json index 4ecd2ab0..d036a75 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-list/bower.json +++ b/third_party/polymer/v1_0/components-chromium/iron-list/bower.json
@@ -7,7 +7,7 @@ "list", "virtual-list" ], - "version": "2.0.18", + "version": "2.0.19", "homepage": "https://github.com/PolymerElements/iron-list", "authors": [ "The Polymer Authors"
diff --git a/third_party/polymer/v1_0/components-chromium/iron-list/iron-list-extracted.js b/third_party/polymer/v1_0/components-chromium/iron-list/iron-list-extracted.js index dbfbc9c..0fb8db3 100644 --- a/third_party/polymer/v1_0/components-chromium/iron-list/iron-list-extracted.js +++ b/third_party/polymer/v1_0/components-chromium/iron-list/iron-list-extracted.js
@@ -1611,8 +1611,6 @@ _keydownHandler: function(e) { switch (e.keyCode) { case /* ARROW_DOWN */ 40: - // TODO (aee): remove when iron-list issue is fixed. - // https://github.com/PolymerElements/iron-list/issues/542 if (this._focusedVirtualIndex < this._virtualCount - 1) e.preventDefault(); this._focusPhysicalItem(this._focusedVirtualIndex + (this.grid ? this._itemsPerRow : 1)); @@ -1621,8 +1619,6 @@ if (this.grid) this._focusPhysicalItem(this._focusedVirtualIndex + (this._isRTL ? -1 : 1)); break; case /* ARROW_UP */ 38: - // TODO (aee): remove when iron-list issue is fixed. - // https://github.com/PolymerElements/iron-list/issues/542 if (this._focusedVirtualIndex > 0) e.preventDefault(); this._focusPhysicalItem(this._focusedVirtualIndex - (this.grid ? this._itemsPerRow : 1));
diff --git a/third_party/polymer/v1_0/components_summary.txt b/third_party/polymer/v1_0/components_summary.txt index 8359795..afee955 100644 --- a/third_party/polymer/v1_0/components_summary.txt +++ b/third_party/polymer/v1_0/components_summary.txt
@@ -90,9 +90,9 @@ Name: iron-list Repository: https://github.com/PolymerElements/iron-list.git -Tree: v2.0.18 -Revision: b3daa7050e80c9c94d245f338c084421bb6e89f8 -Tree link: https://github.com/PolymerElements/iron-list/tree/v2.0.18 +Tree: v2.0.19 +Revision: 613dca4aa54ddf6ecf827e2e92ea6dfc4cd58280 +Tree link: https://github.com/PolymerElements/iron-list/tree/v2.0.19 Name: iron-location Repository: https://github.com/PolymerElements/iron-location.git
diff --git a/tools/chrome_proxy/webdriver/protocol_fuzz.py b/tools/chrome_proxy/webdriver/protocol_fuzz.py index 7a28a34..765a5641 100644 --- a/tools/chrome_proxy/webdriver/protocol_fuzz.py +++ b/tools/chrome_proxy/webdriver/protocol_fuzz.py
@@ -130,7 +130,7 @@ } # This string will be used as the response body in every test and will be -# checked for existance on the final loaded page. +# checked for existence on the final loaded page. STATIC_RESPONSE_BODY = 'ok' rand_str_re = re.compile(r'{{RAND_STR\((\d+)\)}}')
diff --git a/tools/cygprofile/check_orderfile.py b/tools/cygprofile/check_orderfile.py index e99107f..51751d2 100755 --- a/tools/cygprofile/check_orderfile.py +++ b/tools/cygprofile/check_orderfile.py
@@ -16,56 +16,45 @@ import symbol_extractor -_MAX_WARNINGS_TO_PRINT = 200 +def _VerifySymbolOrder(orderfile_symbols, symbol_infos, threshold): + """Verify symbol ordering. - -def _IsSameMethod(name1, name2): - """Returns true if name1 or name2 are split method forms of the other.""" - return patch_orderfile.RemoveSuffixes(name1) == \ - patch_orderfile.RemoveSuffixes(name2) - - -def _CountMisorderedSymbols(symbols, symbol_infos): - """Count the number of misordered symbols, and log them. + Checks that the non-section symbols in |orderfile_filename| are consistent + with the offsets |symbol_infos|. Args: - symbols: ordered sequence of symbols from the orderfile - symbol_infos: ordered list of SymbolInfo from the binary + orderfile_symbols: ([str]) list of symbols from orderfile. + symbol_infos: ([SymbolInfo]) symbol infos from binary. + threshold: (int) The number of misordered symbols beyond which we error. Returns: - (misordered_pairs_count, matched_symbols_count, unmatched_symbols_count) + True iff the ordering is consistent within |threshold|. """ - name_to_symbol_info = symbol_extractor.CreateNameToSymbolInfo(symbol_infos) - matched_symbol_infos = [] + last_offset = 0 + name_to_offset = {si.name: si.offset for si in symbol_infos} missing_count = 0 - misordered_count = 0 - - # Find the SymbolInfo matching the orderfile symbols in the binary. - for symbol in symbols: - if symbol in name_to_symbol_info: - matched_symbol_infos.append(name_to_symbol_info[symbol]) - else: + misorder_count = 0 + misordered_syms = [] + for sym in orderfile_symbols: + if '.' in sym: + continue # sym is a section name. + if sym not in name_to_offset: missing_count += 1 - if missing_count < _MAX_WARNINGS_TO_PRINT: - logging.warning('Symbol "%s" is in the orderfile, not in the binary' % - symbol) - logging.info('%d matched symbols, %d un-matched (Only the first %d unmatched' - ' symbols are shown)' % ( - len(matched_symbol_infos), missing_count, - _MAX_WARNINGS_TO_PRINT)) - - # In the order of the orderfile, find all the symbols that are at an offset - # smaller than their immediate predecessor, and record the pair. - previous_symbol_info = symbol_extractor.SymbolInfo( - name='', offset=-1, size=0, section='') - for symbol_info in matched_symbol_infos: - if symbol_info.offset < previous_symbol_info.offset and not ( - _IsSameMethod(symbol_info.name, previous_symbol_info.name)): - logging.warning('Misordered pair: %s - %s' % ( - str(previous_symbol_info), str(symbol_info))) - misordered_count += 1 - previous_symbol_info = symbol_info - return (misordered_count, len(matched_symbol_infos), missing_count) + continue + next_offset = name_to_offset[sym] + if next_offset < last_offset: + misorder_count += 1 + misordered_syms.append((sym, next_offset, last_offset)) + last_offset = next_offset + logging.warning('Missing symbols in verification: %d', missing_count) + if misorder_count: + logging.warning('%d misordered symbols:\n %s', misorder_count, + '\n '.join(str(x) for x in misordered_syms[:10])) + if misorder_count > threshold: + logging.error('%d misordered symbols over threshold %d, failing', + misorder_count, threshold) + return False + return True def main(): @@ -74,7 +63,8 @@ parser.add_option('--target-arch', action='store', dest='arch', choices=['arm', 'arm64', 'x86', 'x86_64', 'x64', 'mips'], help='The target architecture for the binary.') - parser.add_option('--threshold', action='store', dest='threshold', default=20, + parser.add_option('--threshold', action='store', dest='threshold', + default=20, type=int, help='The maximum allowed number of out-of-order symbols.') options, argv = parser.parse_args(sys.argv) if not options.arch: @@ -85,19 +75,11 @@ (binary_filename, orderfile_filename) = argv[1:] symbol_extractor.SetArchitecture(options.arch) - obj_dir = cygprofile_utils.GetObjDir(binary_filename) - symbol_to_sections_map = cyglog_to_orderfile.ObjectFileProcessor( - obj_dir).GetSymbolToSectionsMap() - section_to_symbols_map = cygprofile_utils.InvertMapping( - symbol_to_sections_map) - symbols = patch_orderfile.GetSymbolsFromOrderfile(orderfile_filename, - section_to_symbols_map) symbol_infos = symbol_extractor.SymbolInfosFromBinary(binary_filename) - # Missing symbols is not an error since some of them can be eliminated through - # inlining. - (misordered_pairs_count, matched_symbols, _) = _CountMisorderedSymbols( - symbols, symbol_infos) - return (misordered_pairs_count > options.threshold) or (matched_symbols == 0) + + if not _VerifySymbolOrder([sym.strip() for sym in file(orderfile_filename)], + symbol_infos, options.threshold): + return 1 if __name__ == '__main__':
diff --git a/tools/cygprofile/check_orderfile_unittest.py b/tools/cygprofile/check_orderfile_unittest.py index 8205bc5..9020b52 100755 --- a/tools/cygprofile/check_orderfile_unittest.py +++ b/tools/cygprofile/check_orderfile_unittest.py
@@ -15,31 +15,16 @@ symbol_extractor.SymbolInfo('notProfiled', 0x4, 0, ''), symbol_extractor.SymbolInfo('third', 0x3, 0, ''),] - def testMatchesSymbols(self): - symbols = ['first', 'second', 'third'] - (misordered_pairs_count, matched_count, missing_count) = ( - check_orderfile._CountMisorderedSymbols(symbols, self._SYMBOL_INFOS)) - self.assertEquals( - (misordered_pairs_count, matched_count, missing_count), (0, 3, 0)) - - def testMissingMatches(self): - symbols = ['second', 'third', 'other', 'first'] - (_, matched_count, unmatched_count) = ( - check_orderfile._CountMisorderedSymbols(symbols, self._SYMBOL_INFOS)) - self.assertEquals(matched_count, 3) - self.assertEquals(unmatched_count, 1) - - def testNoUnorderedSymbols(self): - symbols = ['first', 'other', 'second', 'third', 'noMatchEither'] - (misordered_pairs_count, _, _) = ( - check_orderfile._CountMisorderedSymbols(symbols, self._SYMBOL_INFOS)) - self.assertEquals(misordered_pairs_count, 0) - - def testUnorderedSymbols(self): - symbols = ['first', 'other', 'third', 'second', 'noMatchEither'] - (misordered_pairs_count, _, _) = ( - check_orderfile._CountMisorderedSymbols(symbols, self._SYMBOL_INFOS)) - self.assertEquals(misordered_pairs_count, 1) + def testVerifySymbolOrder(self): + self.assertTrue(check_orderfile._VerifySymbolOrder( + ['.second', 'first', 'eighth', 'third'], + self._SYMBOL_INFOS, 0)) + self.assertFalse(check_orderfile._VerifySymbolOrder( + ['second', 'first', 'eighth', 'third'], + self._SYMBOL_INFOS, 0)) + self.assertTrue(check_orderfile._VerifySymbolOrder( + ['second', 'first', 'eighth', 'third'], + self._SYMBOL_INFOS, 1)) if __name__ == '__main__':
diff --git a/tools/cygprofile/cyglog_to_orderfile.py b/tools/cygprofile/cyglog_to_orderfile.py index 6337135..17d5471d 100755 --- a/tools/cygprofile/cyglog_to_orderfile.py +++ b/tools/cygprofile/cyglog_to_orderfile.py
@@ -256,18 +256,13 @@ args.arch = cygprofile_utils.DetectArchitecture() symbol_extractor.SetArchitecture(args.target_arch) - obj_dir = cygprofile_utils.GetObjDir(args.native_library) - offsets = _ReadReachedOffsets(args.reached_offsets) assert offsets _WarnAboutDuplicates(offsets) - generator = OffsetOrderfileGenerator( - process_profiles.SymbolOffsetProcessor(args.native_library), - ObjectFileProcessor(obj_dir)) - - ordered_sections = generator.GetOrderedSections(offsets) - if ordered_sections is None: + processor = process_profiles.SymbolOffsetProcessor(args.native_library) + ordered_symbols = processor.GetOrderedSymbols(offsets) + if ordered_symbols is None: return 1 success = False @@ -276,7 +271,7 @@ try: (fd, temp_filename) = tempfile.mkstemp(dir=os.path.dirname(args.output)) output_file = os.fdopen(fd, 'w') - output_file.write('\n'.join(ordered_sections)) + output_file.write('\n'.join(ordered_symbols)) output_file.close() os.rename(temp_filename, args.output) temp_filename = None
diff --git a/tools/cygprofile/orderfile_generator_backend.py b/tools/cygprofile/orderfile_generator_backend.py index c2a2bfd..c6234c4 100755 --- a/tools/cygprofile/orderfile_generator_backend.py +++ b/tools/cygprofile/orderfile_generator_backend.py
@@ -17,6 +17,7 @@ import argparse import hashlib import json +import glob import logging import os import re @@ -29,6 +30,7 @@ import cyglog_to_orderfile import cygprofile_utils import patch_orderfile +import phased_orderfile import process_profiles import profile_android_startup import symbol_extractor @@ -201,8 +203,8 @@ Args: cmd: A list of command strings. - cwd: Directory in which the command should be executed, defaults to script - location if not specified. + cwd: Directory in which the command should be executed, defaults to build + root of script's location if not specified. raise_on_error: If true will raise a CommandError if the call doesn't succeed and mark the step as failed. stdout: A file to redirect stdout for the command to. @@ -226,7 +228,7 @@ """Handles compilation of clank.""" def __init__(self, out_dir, step_recorder, arch, jobs, max_load, use_goma, - goma_dir): + goma_dir, system_health_profiling): self._out_dir = out_dir self._step_recorder = step_recorder self._arch = arch @@ -234,9 +236,11 @@ self._max_load = max_load self._use_goma = use_goma self._goma_dir = goma_dir - lib_chrome_so_dir = 'lib.unstripped' + self._system_health_profiling = system_health_profiling + + self.obj_dir = os.path.join(self._out_dir, 'Release', 'obj') self.lib_chrome_so = os.path.join( - self._out_dir, 'Release', lib_chrome_so_dir, 'libchrome.so') + self._out_dir, 'Release', 'lib.unstripped', 'libchrome.so') self.chrome_apk = os.path.join( self._out_dir, 'Release', 'apks', 'Chrome.apk') @@ -265,6 +269,9 @@ ] if self._goma_dir: args += ['goma_dir="%s"' % self._goma_dir] + if self._system_health_profiling: + args += ['devtools_instrumentation_dumping = ' + + str(instrumented).lower()] self._step_recorder.RunCommand( ['gn', 'gen', os.path.join(self._out_dir, 'Release'), @@ -393,9 +400,6 @@ generates an updated orderfile. """ _CLANK_REPO = os.path.join(constants.DIR_SOURCE_ROOT, 'clank') - _CYGLOG_TO_ORDERFILE_SCRIPT = os.path.join( - constants.DIR_SOURCE_ROOT, 'tools', 'cygprofile', - 'cyglog_to_orderfile.py') _CHECK_ORDERFILE_SCRIPT = os.path.join( constants.DIR_SOURCE_ROOT, 'tools', 'cygprofile', 'check_orderfile.py') _BUILD_ROOT = os.path.abspath(os.path.dirname(os.path.dirname( @@ -403,8 +407,6 @@ _UNPATCHED_ORDERFILE_FILENAME = os.path.join( _CLANK_REPO, 'orderfiles', 'unpatched_orderfile.%s') - _MERGED_CYGLOG_FILENAME = os.path.join( - constants.GetOutDirectory(), 'merged_cyglog') _PATH_TO_ORDERFILE = os.path.join(_CLANK_REPO, 'orderfiles', 'orderfile.%s.out') @@ -440,6 +442,14 @@ self._profiler = profile_android_startup.AndroidProfileTool( output_directory, host_profile_dir, use_wpr, urls, simulate_user, device=options.device) + if options.pregenerated_profiles: + self._profiler.SetPregeneratedProfiles( + glob.glob(options.pregenerated_profiles)) + else: + assert not options.pregenerated_profiles, ( + '--pregenerated-profiles cannot be used with --skip-profile') + assert not options.profile_save_dir, ( + '--profile-save-dir cannot be used with --skip-profile') self._output_data = {} self._step_recorder = StepRecorder(options.buildbot) @@ -473,14 +483,71 @@ dest.close() def _GenerateAndProcessProfile(self): - """Invokes a script to merge the per-thread traces into one file.""" + """Invokes a script to merge the per-thread traces into one file. + + The produced list of offsets is saved in + self._GetUnpatchedOrderfileFilename(). + """ self._step_recorder.BeginStep('Generate Profile Data') files = [] + logging.getLogger().setLevel(logging.DEBUG) + if self._options.system_health_orderfile: + files = self._profiler.CollectSystemHealthProfile( + self._compiler.chrome_apk) + self._MaybeSaveProfile(files) + try: + self._ProcessPhasedOrderfile(files) + except Exception: + for f in files: + self._SaveForDebugging(f) + self._SaveForDebugging(self._compiler.lib_chrome_so) + raise + finally: + self._profiler.Cleanup() + else: + self._CollectLegacyProfile() + logging.getLogger().setLevel(logging.INFO) + + def _ProcessPhasedOrderfile(self, files): + """Process the phased orderfiles produced by system health benchmarks. + + The offsets will be placed in _GetUnpatchedOrderfileFilename(). + + Args: + file: Profile files pulled locally. + """ + self._step_recorder.BeginStep('Process Phased Orderfile') + profiles = process_profiles.ProfileManager(files) + processor = process_profiles.SymbolOffsetProcessor( + self._compiler.lib_chrome_so) + phaser = phased_orderfile.PhasedAnalyzer(profiles, processor) + if self._options.offsets_for_memory: + profile_offsets = phaser.GetOffsetsForMemoryFootprint() + else: + profile_offsets = phaser.GetOffsetsForStartup() + self._output_data['orderfile_size'] = { + 'startup_kib': processor.OffsetsPrimarySize( + profile_offsets.startup) / 1024, + 'common_kib': processor.OffsetsPrimarySize( + profile_offsets.common) / 1024, + 'interaction_kib': processor.OffsetsPrimarySize( + profile_offsets.interaction) / 1024} + + offsets_list = (profile_offsets.startup + + profile_offsets.common + + profile_offsets.interaction) + ordered_symbols = processor.GetOrderedSymbols(offsets_list) + if not ordered_symbols: + raise Exception('Failed to get ordered symbols') + with open(self._GetUnpatchedOrderfileFilename(), 'w') as orderfile: + orderfile.write('\n'.join(ordered_symbols)) + + def _CollectLegacyProfile(self): try: - logging.getLogger().setLevel(logging.DEBUG) files = self._profiler.CollectProfile( self._compiler.chrome_apk, constants.PACKAGE_INFO['chrome']) + self._MaybeSaveProfile(files) self._step_recorder.BeginStep('Process profile') assert os.path.exists(self._compiler.lib_chrome_so) offsets = process_profiles.GetReachedOffsetsFromDumpFiles( @@ -488,35 +555,27 @@ if not offsets: raise Exception('No profiler offsets found in {}'.format( '\n'.join(files))) - with open(self._MERGED_CYGLOG_FILENAME, 'w') as f: - f.write('\n'.join(map(str, offsets))) + processor = process_profiles.SymbolOffsetProcessor( + self._compiler.lib_chrome_so) + ordered_symbols = processor.GetOrderedSymbols(offsets) + if not ordered_symbols: + raise Exception('No symbol names from offsets found in {}'.format( + '\n'.join(files))) + with open(self._GetUnpatchedOrderfileFilename(), 'w') as orderfile: + orderfile.write('\n'.join(ordered_symbols)) except Exception: for f in files: self._SaveForDebugging(f) raise finally: self._profiler.Cleanup() - logging.getLogger().setLevel(logging.INFO) - try: - command_args = [ - '--target-arch=' + self._options.arch, - '--native-library=' + self._compiler.lib_chrome_so, - '--output=' + self._GetUnpatchedOrderfileFilename()] - command_args.append('--reached-offsets=' + self._MERGED_CYGLOG_FILENAME) - self._step_recorder.RunCommand( - [self._CYGLOG_TO_ORDERFILE_SCRIPT] + command_args) - except CommandError: - self._SaveForDebugging(self._MERGED_CYGLOG_FILENAME) - self._SaveForDebuggingWithOverwrite(self._compiler.lib_chrome_so) - raise - - def _DeleteTempFiles(self): - """Deletes intermediate step output files.""" - print 'Delete %s' % ( - self._MERGED_CYGLOG_FILENAME) - if os.path.isfile(self._MERGED_CYGLOG_FILENAME): - os.unlink(self._MERGED_CYGLOG_FILENAME) + def _MaybeSaveProfile(self, files): + if self._options.profile_save_dir: + logging.info('Saving profiles to %s', self._options.profile_save_dir) + for f in files: + shutil.copy(f, self._options.profile_save_dir) + logging.info('Saved profile %s', f) def _PatchOrderfile(self): """Patches the orderfile using clean version of libchrome.so.""" @@ -619,6 +678,13 @@ assert (bool(self._options.profile) ^ bool(self._options.manual_symbol_offsets)) + if self._options.system_health_orderfile and not self._options.profile: + raise AssertionError('--system_health_orderfile must be not be used ' + 'with --skip-profile') + if (self._options.manual_symbol_offsets and + not self._options.system_health_orderfile): + raise AssertionError('--manual-symbol-offsets must be used with ' + '--system_health_orderfile.') if self._options.profile: try: @@ -627,13 +693,12 @@ self._instrumented_out_dir, self._step_recorder, self._options.arch, self._options.jobs, self._options.max_load, self._options.use_goma, - self._options.goma_dir) + self._options.goma_dir, self._options.system_health_orderfile) self._compiler.CompileChromeApk(True) self._GenerateAndProcessProfile() self._MaybeArchiveOrderfile(self._GetUnpatchedOrderfileFilename()) profile_uploaded = True finally: - self._DeleteTempFiles() _StashOutputDirectory(self._instrumented_out_dir) elif self._options.manual_symbol_offsets: assert self._options.manual_libname @@ -660,7 +725,8 @@ self._compiler = ClankCompiler( self._uninstrumented_out_dir, self._step_recorder, self._options.arch, self._options.jobs, self._options.max_load, - self._options.use_goma, self._options.goma_dir) + self._options.use_goma, self._options.goma_dir, + self._options.system_health_orderfile) self._compiler.CompileLibchrome(False) self._PatchOrderfile() # Because identical code folding is a bit different with and without @@ -736,6 +802,15 @@ '--use-goma', action='store_true', help='Enable GOMA.', default=False) parser.add_argument('--adb-path', help='Path to the adb binary.') + parser.add_argument('--system-health-orderfile', action='store_true', + help=('Create an orderfile based on system health ' + 'benchmarks.'), + default=False) + parser.add_argument('--offsets-for-memory', action='store_true', + help=('Favor memory savings in the orderfile. Used ' + 'with --system-health-orderfile.'), + default=False) + parser.add_argument('--manual-symbol-offsets', default=None, type=str, help=('File of list of ordered symbol offsets generated ' 'by manual profiling. Must set other --manual* ' @@ -746,6 +821,14 @@ parser.add_argument('--manual-objdir', default=None, type=str, help=('Root of object file directory corresponding to ' '--manual-symbol-offsets.')) + parser.add_argument('--pregenerated-profiles', default=None, type=str, + help=('Pregenerated profiles to use instead of running ' + 'profile step. Cannot be used with ' + '--skip-profiles.')) + parser.add_argument('--profile-save-dir', default=None, type=str, + help=('Directory to save any profiles created. These can ' + 'be used with --pregenerated-profiles. Cannot be ' + 'used with --skip-profiles.')) profile_android_startup.AddProfileCollectionArguments(parser) return parser
diff --git a/tools/cygprofile/patch_orderfile.py b/tools/cygprofile/patch_orderfile.py index 071861e5..d73e2392 100755 --- a/tools/cygprofile/patch_orderfile.py +++ b/tools/cygprofile/patch_orderfile.py
@@ -6,14 +6,11 @@ """Patch an orderfile. Starting with a list of symbols in a binary and an orderfile (ordered list of -sections), matches the symbols in the orderfile and augments each symbol with +symbols), matches the symbols in the orderfile and augments each symbol with the symbols residing at the same address (due to having identical code). The -output is a list of section or symbols matching rules appropriate for the linker -option -section-ordering-file for gold and --symbol-ordering-file for lld. Both -linkers are fine with extra directives that aren't matched in the binary, so we -construct a file suitable for both, concatenating sections and symbols. We -assume that the unpatched orderfile is built for gold, that is, it only contains -sections. +output is a list of symbols appropriate for the linker +option --symbol-ordering-file for lld. Note this is not usable with gold (which +uses section names to order the binary). Note: It is possible to have. - Several symbols mapping to the same offset in the binary. @@ -25,10 +22,7 @@ 2. Get the symbol names from the orderfile 3. Find the orderfile symbol names in the symbols coming from the binary 4. For each symbol found, get all the symbols at the same address -5. Output them to an updated orderfile suitable for gold and lld -6. Output catch-all section matching rules for unprofiled methods. This is - ineffective for lld, as it doesn't handle wildcards, but puts unordered - symbols after the ordered ones. +5. Output them to an updated orderfile suitable lld """ import argparse @@ -40,13 +34,7 @@ import cygprofile_utils import symbol_extractor -# Prefixes for the symbols. We strip them from the incoming symbols, and add -# them back in the output file. -# Output sections are constructed as prefix + symbol_name, hence the empty -# prefix is used to generate the symbol entry for lld. -_PREFIXES = ('.text.hot.', '.text.unlikely.', '.text.', '') - -# Suffixes for the symbols. These are due to method splitting for inlining and +# Suffixes for symbols. These are due to method splitting for inlining and # method cloning for various reasons including constant propagation and # inter-procedural optimization. _SUFFIXES = ('.clone.', '.part.', '.isra.', '.constprop.') @@ -89,272 +77,49 @@ return _FilteringFunction -def _GroupSymbolInfosFromBinary(binary_filename): - """Group all the symbols from a binary by name and offset. +def _GroupSymbolsByOffset(binary_filename): + """Produce a map symbol name -> all symbol names at same offset. - Args: - binary_filename: path to the binary. - - Returns: - A tuple of dict: - (offset_to_symbol_infos, name_to_symbol_infos): - - offset_to_symbol_infos: {offset: [symbol_info1, ...]} - - name_to_symbol_infos: {name: [symbol_info1, ...]} + Suffixes are stripped. """ - symbol_infos = symbol_extractor.SymbolInfosFromBinary(binary_filename) - symbol_infos_no_suffixes = [ - s._replace(name=RemoveSuffixes(s.name)) for s in symbol_infos] - return (symbol_extractor.GroupSymbolInfosByOffset(symbol_infos_no_suffixes), - symbol_extractor.GroupSymbolInfosByName(symbol_infos_no_suffixes)) - - -def _StripPrefix(line): - """Strips the linker section name prefix from a symbol line. - - Args: - line: a line from an orderfile, usually in the form: - .text.SymbolName - - Returns: - The symbol, SymbolName in the example above. - """ - # Went away with GCC, make sure it doesn't come back, as the orderfile - # no longer contains it. - assert not line.startswith('.text.startup.') - for prefix in _PREFIXES: - if prefix and line.startswith(prefix): - return line[len(prefix):] - return line # Unprefixed case - - -def _SectionNameToSymbols(section_name, section_to_symbols_map): - """Yields all symbols which could be referred to by section_name. - - If the section name is present in the map, the names in the map are returned. - Otherwise, any clone annotations and prefixes are stripped from the section - name and the remainder is returned. - """ - if (not section_name or - section_name == '.text' or - section_name.endswith('*')): - return # Don't return anything for catch-all sections - if section_name in section_to_symbols_map: - for symbol in section_to_symbols_map[section_name]: - yield symbol - else: - name = _StripPrefix(section_name) - if name: - yield name - - -def GetSectionsFromOrderfile(filename): - """Yields the sections from an orderfile. - - Args: - filename: The name of the orderfile. - - Yields: - A list of symbol names. - """ - with open(filename, 'r') as f: - for line in f.xreadlines(): - line = line.rstrip('\n') - if line: - yield line - - -@_UniqueGenerator -def GetSymbolsFromOrderfile(filename, section_to_symbols_map): - """Yields the symbols from an orderfile. Output elements do not repeat. - - Args: - filename: The name of the orderfile. - section_to_symbols_map: The mapping from section to symbol names. If a - section name is missing from the mapping, the - symbol name is assumed to be the section name with - prefixes and suffixes stripped. - - Yields: - A list of symbol names. - """ - # TODO(lizeb,pasko): Move this method to symbol_extractor.py - for section in GetSectionsFromOrderfile(filename): - for symbol in _SectionNameToSymbols(RemoveSuffixes(section), - section_to_symbols_map): - yield symbol - - -def _SymbolsWithSameOffset(profiled_symbol, name_to_symbol_info, - offset_to_symbol_info): - """Expands a symbol to include all symbols with the same offset. - - Args: - profiled_symbol: the string symbol name to be expanded. - name_to_symbol_info: {name: [symbol_info1], ...}, as returned by - GetSymbolInfosFromBinary - offset_to_symbol_info: {offset: [symbol_info1, ...], ...} - - Returns: - A list of symbol names, or an empty list if profiled_symbol was not in - name_to_symbol_info. - """ - if profiled_symbol not in name_to_symbol_info: - return [] - symbol_infos = name_to_symbol_info[profiled_symbol] - expanded = [] - for symbol_info in symbol_infos: - expanded += (s.name for s in offset_to_symbol_info[symbol_info.offset]) - return expanded - - -@_UniqueGenerator -def _SectionMatchingRules(section_name, name_to_symbol_infos, - offset_to_symbol_infos, section_to_symbols_map, - symbol_to_sections_map, suffixed_sections): - """Gets the set of section matching rules for section_name. - - These rules will include section_name, but also any sections which may - contain the same code due to cloning, splitting, or identical code folding. - - Args: - section_name: The section to expand. - name_to_symbol_infos: {name: [symbol_info1], ...}, as returned by - GetSymbolInfosFromBinary. - offset_to_symbol_infos: {offset: [symbol_info1, ...], ...} - section_to_symbols_map: The mapping from section to symbol name. Missing - section names are treated as per _SectionNameToSymbols. - symbol_to_sections_map: The mapping from symbol name to names of linker - sections containing the symbol. If a symbol isn't in the mapping, the - section names are generated from the set of _PREFIXES with the symbol - name. - suffixed_sections: A set of sections which can have suffixes. - - Yields: - Section names including at least section_name. - """ - for name in _ExpandSection(section_name, name_to_symbol_infos, - offset_to_symbol_infos, section_to_symbols_map, - symbol_to_sections_map): - yield name - # Since only a subset of methods (mostly those compiled with O2) ever get - # suffixes, don't emit the wildcards for ones where it won't be helpful. - # Otherwise linking takes too long. - if name in suffixed_sections: - # TODO(lizeb,pasko): instead of just appending .*, append .suffix.* for - # _SUFFIXES. We can't do this right now because that many wildcards - # seems to kill the linker (linking libchrome takes 3 hours). This gets - # almost all the benefit at a much lower link-time cost, but could cause - # problems with unexpected suffixes. - yield name + '.*' - - -def _ExpandSection(section_name, name_to_symbol_infos, offset_to_symbol_infos, - section_to_symbols_map, symbol_to_sections_map): - """Yields the set of section names for section_name. - - This set will include section_name, but also any sections which may contain - the same code due to identical code folding. - - Args: - section_name: The section to expand. - name_to_symbol_infos: {name: [symbol_info1], ...}, as returned by - GetSymbolInfosFromBinary. - offset_to_symbol_infos: {offset: [symbol_info1, ...], ...} - section_to_symbols_map: The mapping from section to symbol name. Missing - section names are treated as per _SectionNameToSymbols. - symbol_to_sections_map: The mapping from symbol name to names of linker - sections containing the symbol. If a symbol isn't in the mapping, the - section names are generated from the set of _PREFIXES with the symbol - name. - - Yields: - Section names including at least section_name. - """ - yield section_name - for first_sym in _SectionNameToSymbols(section_name, - section_to_symbols_map): - for symbol in _SymbolsWithSameOffset(first_sym, name_to_symbol_infos, - offset_to_symbol_infos): - if symbol in symbol_to_sections_map: - for section in symbol_to_sections_map[symbol]: - yield section - for prefix in _PREFIXES: - yield prefix + symbol - - -@_UniqueGenerator -def _ExpandSections(section_names, name_to_symbol_infos, - offset_to_symbol_infos, section_to_symbols_map, - symbol_to_sections_map, suffixed_sections): - """Gets an ordered set of section matching rules for a list of sections. - - Rules will not be repeated. - - Args: - section_names: The sections to expand. - name_to_symbol_infos: {name: [symbol_info1], ...}, as returned by - _GroupSymbolInfosFromBinary. - offset_to_symbol_infos: {offset: [symbol_info1, ...], ...} - section_to_symbols_map: The mapping from section to symbol names. - symbol_to_sections_map: The mapping from symbol name to names of linker - sections containing the symbol. - suffixed_sections: A set of sections which can have suffixes. - - Yields: - Section matching rules including at least section_names. - """ - for profiled_section in section_names: - for section in _SectionMatchingRules( - profiled_section, name_to_symbol_infos, offset_to_symbol_infos, - section_to_symbols_map, symbol_to_sections_map, suffixed_sections): - yield section - - -def _CombineSectionListsByPrimaryName(symbol_to_sections_map): - """Combines values of the symbol_to_sections_map by stripping suffixes. - - Example: - {foo: [.text.foo, .text.bar.part.1], - foo.constprop.4: [.text.baz.constprop.3]} -> - {foo: [.text.foo, .text.bar, .text.baz]} - - Args: - symbol_to_sections_map: Mapping from symbol name to list of section names - - Returns: - The same mapping, but with symbol and section names suffix-stripped. - """ - simplified = {} - for suffixed_symbol, suffixed_sections in symbol_to_sections_map.iteritems(): - symbol = RemoveSuffixes(suffixed_symbol) - sections = [RemoveSuffixes(section) for section in suffixed_sections] - simplified.setdefault(symbol, []).extend(sections) - return simplified - - -def _SectionsWithSuffixes(symbol_to_sections_map): - """Finds sections which have suffixes applied. - - Args: - symbol_to_sections_map: a map where the values are lists of section names. - - Returns: - A set containing all section names which were seen with suffixes applied. - """ - sections_with_suffixes = set() - for suffixed_sections in symbol_to_sections_map.itervalues(): - for suffixed_section in suffixed_sections: - section = RemoveSuffixes(suffixed_section) - if section != suffixed_section: - sections_with_suffixes.add(section) - return sections_with_suffixes + symbol_infos = [ + s._replace(name=RemoveSuffixes(s.name)) + for s in symbol_extractor.SymbolInfosFromBinary(binary_filename)] + offset_map = symbol_extractor.GroupSymbolInfosByOffset(symbol_infos) + missing_offsets = 0 + sym_to_matching = {} + for sym in symbol_infos: + if sym.offset not in offset_map: + missing_offsets += 1 + continue + matching = [s.name for s in offset_map[sym.offset]] + assert sym.name in matching + sym_to_matching[sym.name] = matching + return sym_to_matching def _StripSuffixes(section_list): - """Remove all suffixes on items in a list of sections or symbols.""" + """Remove all suffixes on items in a list of symbols.""" return [RemoveSuffixes(section) for section in section_list] +@_UniqueGenerator +def ReadOrderfile(orderfile): + """Reads an orderfile and cleans up symbols. + + Args: + orderfile: The name of the orderfile. + + Yields: + Symbol names, cleaned and unique. + """ + with open(orderfile) as f: + for line in f.xreadlines(): + line = line.strip() + if line: + yield line + + def GeneratePatchedOrderfile(unpatched_orderfile, native_lib_filename, output_filename): """Writes a patched orderfile. @@ -364,20 +129,22 @@ native_lib_filename: (str) Path to the native library. output_filename: (str) Path to the patched orderfile. """ - (offset_to_symbol_infos, name_to_symbol_infos) = _GroupSymbolInfosFromBinary( - native_lib_filename) - obj_dir = cygprofile_utils.GetObjDir(native_lib_filename) - raw_symbol_map = cyglog_to_orderfile.ObjectFileProcessor( - obj_dir).GetSymbolToSectionsMap() - suffixed = _SectionsWithSuffixes(raw_symbol_map) - symbol_to_sections_map = _CombineSectionListsByPrimaryName(raw_symbol_map) - section_to_symbols_map = cygprofile_utils.InvertMapping( - symbol_to_sections_map) - profiled_sections = _StripSuffixes( - GetSectionsFromOrderfile(unpatched_orderfile)) - expanded_sections = _ExpandSections( - profiled_sections, name_to_symbol_infos, offset_to_symbol_infos, - section_to_symbols_map, symbol_to_sections_map, suffixed) + symbol_to_matching = _GroupSymbolsByOffset(native_lib_filename) + profiled_symbols = ReadOrderfile(unpatched_orderfile) + missing_symbol_count = 0 + seen_symbols = set() + patched_symbols = [] + for sym in profiled_symbols: + if sym not in symbol_to_matching: + missing_symbol_count += 1 + continue + if sym in seen_symbols: + continue + for matching in symbol_to_matching[sym]: + patched_symbols.append(matching) + seen_symbols.add(matching) + assert sym in seen_symbols + logging.warning('missing symbol count = %d', missing_symbol_count) with open(output_filename, 'w') as f: # Make sure the anchor functions are located in the right place, here and @@ -386,28 +153,14 @@ # # __cxx_global_var_init is one of the largest symbols (~38kB as of May # 2018), called extremely early, and not instrumented. - first_sections = ('dummy_function_start_of_ordered_text', - '__cxx_global_var_init') - for section in first_sections: - for prefix in _PREFIXES: - f.write(prefix + section + '\n') + for first_section in ('dummy_function_start_of_ordered_text', + '__cxx_global_var_init'): + f.write(first_section + '\n') - for section in expanded_sections: - f.write(section + '\n') + for sym in patched_symbols: + f.write(sym + '\n') - for prefix in _PREFIXES: - f.write(prefix + 'dummy_function_end_of_ordered_text\n') - - # The following is needed otherwise Gold only applies a partial sort. - f.write('.text\n') # gets methods not in a section, such as assembly - f.write('.text.*\n') # gets everything else - - # Since wildcards are not supported by lld, the "end of text" anchor symbol - # is not emitted, a different mechanism is used instead. See comments in the - # file above. - for prefix in _PREFIXES: - if prefix: - f.write(prefix + 'dummy_function_at_the_end_of_text\n') + f.write('dummy_function_end_of_ordered_text') def _CreateArgumentParser():
diff --git a/tools/cygprofile/patch_orderfile_unittest.py b/tools/cygprofile/patch_orderfile_unittest.py index 3f59e0d..db225b2 100755 --- a/tools/cygprofile/patch_orderfile_unittest.py +++ b/tools/cygprofile/patch_orderfile_unittest.py
@@ -20,80 +20,6 @@ self.assertEquals( 'this.is.a', patch_orderfile.RemoveSuffixes(with_part)) - def testSymbolsWithSameOffset(self): - symbol_name = "dummySymbol" - symbol_name2 = "other" - name_to_symbol_infos = {symbol_name: [ - symbol_extractor.SymbolInfo(symbol_name, 0x42, 0x12, - section='.text')]} - offset_to_symbol_infos = { - 0x42: [symbol_extractor.SymbolInfo(symbol_name, 0x42, 0x12, - section='.text'), - symbol_extractor.SymbolInfo(symbol_name2, 0x42, 0x12, - section='.text')]} - symbol_names = patch_orderfile._SymbolsWithSameOffset( - symbol_name, name_to_symbol_infos, offset_to_symbol_infos) - self.assertEquals(len(symbol_names), 2) - self.assertEquals(symbol_names[0], symbol_name) - self.assertEquals(symbol_names[1], symbol_name2) - self.assertEquals([], patch_orderfile._SymbolsWithSameOffset( - "symbolThatShouldntMatch", - name_to_symbol_infos, offset_to_symbol_infos)) - - def testSectionNameToSymbols(self): - mapping = {'.text.foo': ['foo'], - '.text.hot.bar': ['bar', 'bar1']} - self.assertEquals(list(patch_orderfile._SectionNameToSymbols( - '.text.foo', mapping)), - ['foo']) - self.assertEquals(list(patch_orderfile._SectionNameToSymbols( - '.text.hot.bar', mapping)), - ['bar', 'bar1']) - self.assertEquals(list(patch_orderfile._SectionNameToSymbols( - '.text.hot.bar', mapping)), - ['bar', 'bar1']) - self.assertEquals(list(patch_orderfile._SectionNameToSymbols( - '.text.hot.foobar', mapping)), - ['foobar']) - self.assertEquals(list(patch_orderfile._SectionNameToSymbols( - '.text.unlikely.*', mapping)), - []) - - def testSectionMatchingRules(self): - symbol_name1 = 'symbol1' - symbol_name2 = 'symbol2' - symbol_name3 = 'symbol3' - section_name1 = '.text.' + symbol_name1 - section_name3 = '.text.foo' - suffixed = set([section_name3]) - name_to_symbol_infos = {symbol_name1: [ - symbol_extractor.SymbolInfo(symbol_name1, 0x42, 0x12, - section='.text')]} - offset_to_symbol_infos = { - 0x42: [symbol_extractor.SymbolInfo(symbol_name1, 0x42, 0x12, - section='.text'), - symbol_extractor.SymbolInfo(symbol_name2, 0x42, 0x12, - section='.text')]} - section_to_symbols_map = {section_name1: [symbol_name1], - section_name3: [symbol_name1, symbol_name3]} - symbol_to_sections_map = {symbol_name1: - [section_name1, section_name3], - symbol_name3: [section_name3]} - expected = [ - section_name1, - section_name3, - section_name3 + '.*', - '.text.hot.' + symbol_name1, - '.text.unlikely.' + symbol_name1, - symbol_name1, - '.text.hot.symbol2', - '.text.unlikely.symbol2', - '.text.symbol2', - 'symbol2'] - self.assertEqual(expected, list(patch_orderfile._SectionMatchingRules( - section_name1, name_to_symbol_infos, offset_to_symbol_infos, - section_to_symbols_map, symbol_to_sections_map, suffixed))) - def testUniqueGenerator(self): @patch_orderfile._UniqueGenerator def TestIterator(): @@ -104,21 +30,6 @@ self.assertEqual(list(TestIterator()), [1,2,3]) - def testCombineSectionListsByPrimaryName(self): - self.assertEqual(patch_orderfile._CombineSectionListsByPrimaryName( - {'foo': ['.text.foo', '.text.bar.constprop.1'], - 'foo.part.1': ['.text.baz'], - 'foobar': ['.text.foobar']}), - {'foo': ['.text.foo', '.text.bar', '.text.baz'], - 'foobar': ['.text.foobar']}) - - def testSectionsWithSuffixes(self): - self.assertEqual(patch_orderfile._SectionsWithSuffixes( - {'foo': ['.text.foo', '.text.bar.constprop.1'], - 'foo.part.1': ['.text.baz'], - 'foobar': ['.text.foobar']}), - set(['.text.bar'])) - if __name__ == "__main__": unittest.main()
diff --git a/tools/cygprofile/phased_orderfile.py b/tools/cygprofile/phased_orderfile.py index 58b5706..73b20b9 100755 --- a/tools/cygprofile/phased_orderfile.py +++ b/tools/cygprofile/phased_orderfile.py
@@ -197,7 +197,8 @@ process in question. The offsets are sorted arbitrarily. """ (startup, common, interaction) = ([], [], []) - assert self._profiles.GetPhases() == set([0,1]), 'Unexpected phases' + assert self._profiles.GetPhases() == set([0,1]), ( + 'Unexpected phases {}'.format(self._profiles.GetPhases())) for o in self._GetAnnotatedOffsets(): startup_count = o.Count(0, process) interaction_count = o.Count(1, process) @@ -216,6 +217,11 @@ if self._annotated_offsets is None: self._annotated_offsets = self._profiles.GetAnnotatedOffsets() self._processor.TranslateAnnotatedSymbolOffsets(self._annotated_offsets) + # A warning for missing offsets has already been emitted in + # TranslateAnnotatedSymbolOffsets. + self._annotated_offsets = filter( + lambda offset: offset.Offset() is not None, + self._annotated_offsets) return self._annotated_offsets def _GetProcessList(self): @@ -300,14 +306,15 @@ processor = process_profiles.SymbolOffsetProcessor(os.path.join( args.instrumented_build_dir, 'lib.unstripped', args.library_name)) phaser = PhasedAnalyzer(profiles, processor) - stability = phaser.ComputeStability() - print 'Stability: {:.2} {:.2} {:.2}'.format(*[s[0] for s in stability]) - print 'Sizes: {} {} {}'.format(*[s[1] for s in stability]) - if args.offset_output_base is not None: - for name, offsets in zip( - ['_for_memory', '_for_startup'], - [phaser.GetOffsetsForMemoryFootprint(), - phaser.GetOffsetsForStartup()]): + for name, offsets in ( + ('_for_memory', phaser.GetOffsetsForMemoryFootprint()), + ('_for_startup', phaser.GetOffsetsForStartup())): + logging.info('%s Offset sizes (KiB):\n' + '%s startup\n%s common\n%s interaction', + name, processor.OffsetsPrimarySize(offsets.startup) / 1024, + processor.OffsetsPrimarySize(offsets.common) / 1024, + processor.OffsetsPrimarySize(offsets.interaction) / 1024) + if args.offset_output_base is not None: with file(args.offset_output_base + name, 'w') as output: output.write('\n'.join( str(i) for i in (offsets.startup + offsets.common +
diff --git a/tools/cygprofile/phased_orderfile_unittest.py b/tools/cygprofile/phased_orderfile_unittest.py index 47b908b9..100121c9 100755 --- a/tools/cygprofile/phased_orderfile_unittest.py +++ b/tools/cygprofile/phased_orderfile_unittest.py
@@ -101,7 +101,7 @@ def testGetOffsetVariations(self): mgr = TestProfileManager({ ProfileFile(40, 0, ''): [1, 2, 3], - ProfileFile(50, 1, ''): [3, 4, 5], + ProfileFile(50, 1, ''): [3, 4, -10, 5], ProfileFile(51, 0, 'renderer'): [2, 3, 6], ProfileFile(51, 1, 'gpu-process'): [6, 7], ProfileFile(70, 0, ''): [2, 6, 8, 9],
diff --git a/tools/cygprofile/process_profiles.py b/tools/cygprofile/process_profiles.py index 916750f6..592cce9 100755 --- a/tools/cygprofile/process_profiles.py +++ b/tools/cygprofile/process_profiles.py
@@ -126,6 +126,30 @@ self.SymbolInfos()) return self._offset_to_symbols + def GetOrderedSymbols(self, offsets): + """Maps a list of offsets to symbol names, retaining ordering. + + The symbol name is the primary symbol. This also deals with thumb + instruction (which have odd offsets). + + Args:: + offsets (int iterable) a set of offsets. + + Returns + [str] list of symbol names. + """ + symbols = [] + not_found = 0 + for o in offsets: + if o in self.OffsetToPrimaryMap(): + symbols.append(self.OffsetToPrimaryMap()[o].name) + elif o % 2 and (o - 1) in self.OffsetToPrimaryMap(): + symbols.append(self.OffsetToPrimaryMap()[o - 1].name) + else: + not_found += 1 + logging.warning('%d offsets do not have matching symbol', not_found) + return symbols + def OffsetsPrimarySize(self, offsets): """Computes the total primary size of a set of offsets.
diff --git a/tools/cygprofile/process_profiles_unittest.py b/tools/cygprofile/process_profiles_unittest.py index c896a49..3bda20d 100755 --- a/tools/cygprofile/process_profiles_unittest.py +++ b/tools/cygprofile/process_profiles_unittest.py
@@ -58,6 +58,11 @@ self.assertDictEqual({8: symbol_infos[0], 40: symbol_infos[2]}, processor.OffsetToPrimaryMap()) + def testGetOrderedSymbols(self): + processor = TestSymbolOffsetProcessor(self.symbol_infos) + self.assertListEqual(['1', '3', '0'], + processor.GetOrderedSymbols([8, 41, 6, 0])) + def testOffsetToSymbolsMap(self): symbol_infos = [SimpleTestSymbol('1', 8, 16), SimpleTestSymbol('AnAlias', 8, 16),
diff --git a/tools/cygprofile/profile_android_startup.py b/tools/cygprofile/profile_android_startup.py index 57499a4..d8437d6 100755 --- a/tools/cygprofile/profile_android_startup.py +++ b/tools/cygprofile/profile_android_startup.py
@@ -215,6 +215,18 @@ self._urls = urls self._simulate_user = simulate_user self._SetUpDevice() + self._pregenerated_profiles = None + + def SetPregeneratedProfiles(self, files): + """Set pregenerated profiles. + + The pregenerated files will be returned as profile data instead of running + an actual profiling step. + + Args: + files: ([str]) List of pregenerated files. + """ + self._pregenerated_profiles = files def RunCygprofileTests(self): """Run the cygprofile unit tests suite on the device. @@ -248,6 +260,10 @@ Raises: NoProfileDataError: No data was found on the device. """ + if self._pregenerated_profiles: + logging.info('Using pregenerated profiles instead of running profile') + logging.info('Profile files: %s', '\n'.join(self._pregenerated_profiles)) + return self._pregenerated_profiles self._Install(apk) try: changer = self._SetChromeFlags(package_info) @@ -265,6 +281,44 @@ self._DeleteDeviceData() return data + def CollectSystemHealthProfile(self, apk): + """Run the orderfile system health benchmarks and collect log files. + + Args: + apk: The location of the chrome apk file to profile. + + Returns: + A list of cygprofile data files. + + Raises: + NoProfileDataError: No data was found on the device. + """ + self._SetUpDeviceFolders() + self._RunCommand(['tools/perf/run_benchmark', + '--device={}'.format(self._device.serial), + '--browser=exact', + '--browser-executable={}'.format(apk), + 'orderfile_generation.training']) + data = self._PullProfileData() + self._DeleteDeviceData() + return data + + @classmethod + def _RunCommand(cls, command): + """Run a command from current build directory root. + + Args: + command: A list of command strings. + + Returns: + The process's return code. + """ + root = constants.DIR_SOURCE_ROOT + print 'Executing {} in {}'.format(' '.join(command), root) + process = subprocess.Popen(command, cwd=root, env=os.environ) + process.wait() + return process.returncode + def _RunProfileCollection(self, package_info, simulate_user): """Runs the profile collection tasks.
diff --git a/tools/licenses.py b/tools/licenses.py index 3862aa0a..e75bc891 100755 --- a/tools/licenses.py +++ b/tools/licenses.py
@@ -193,6 +193,13 @@ "URL": "http://code.google.com/p/v8-i18n/", "License": "Apache 2.0", }, + os.path.join('third_party', 'blink'): { + "Name": "Blink", + "URL": "https://wwww.chromium.org/", + "License": "BSD and LGPL v2 and LGPL v2.1", + # Absolute path here is resolved as relative to the source root. + "License File": "/LICENSE", + }, os.path.join('third_party', 'WebKit'): { "Name": "WebKit", "URL": "http://webkit.org/",
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml index 7ac944cc..b62c1f9 100644 --- a/tools/metrics/actions/actions.xml +++ b/tools/metrics/actions/actions.xml
@@ -16938,6 +16938,8 @@ </action> <action name="Signin_SigninNewAccount_FromAvatarBubbleSignin"> + <obsolete>Deprecated 08/2018</obsolete> + <owner>bsazonov@chromium.org</owner> <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point @@ -16947,6 +16949,8 @@ </action> <action name="Signin_SigninNewAccount_FromBookmarkBubble"> + <obsolete>Deprecated 08/2018</obsolete> + <owner>bsazonov@chromium.org</owner> <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point @@ -16956,7 +16960,10 @@ </action> <action name="Signin_SigninNewAccount_FromBookmarkManager"> + <obsolete>Deprecated 08/2018</obsolete> + <owner>bsazonov@chromium.org</owner> <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER, with a new @@ -16965,6 +16972,8 @@ </action> <action name="Signin_SigninNewAccount_FromExtensionInstallBubble"> + <obsolete>Deprecated 08/2018</obsolete> + <owner>bsazonov@chromium.org</owner> <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point @@ -16974,7 +16983,9 @@ </action> <action name="Signin_SigninNewAccount_FromNTPContentSuggestions"> + <obsolete>Deprecated 08/2018</obsolete> <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point signin_metrics::AccessPoint::ACCESS_POINT_NTP_CONTENT_SUGGESTIONS, with a @@ -16983,6 +16994,8 @@ </action> <action name="Signin_SigninNewAccount_FromPasswordBubble"> + <obsolete>Deprecated 08/2018</obsolete> + <owner>bsazonov@chromium.org</owner> <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point @@ -16992,7 +17005,10 @@ </action> <action name="Signin_SigninNewAccount_FromRecentTabs"> + <obsolete>Deprecated 08/2018</obsolete> + <owner>bsazonov@chromium.org</owner> <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS, with a new account. @@ -17000,8 +17016,11 @@ </action> <action name="Signin_SigninNewAccount_FromSaveCardBubble"> - <owner>manasverma@google.com</owner> + <obsolete>Deprecated 08/2018</obsolete> + <owner>bsazonov@chromium.org</owner> <owner>jsaul@chromium.org</owner> + <owner>manasverma@google.com</owner> + <owner>msarda@chromium.org</owner> <owner>sebsg@chromium.org</owner> <description> Recorded on sign in start from access point @@ -17011,7 +17030,10 @@ </action> <action name="Signin_SigninNewAccount_FromSettings"> + <obsolete>Deprecated 08/2018</obsolete> + <owner>bsazonov@chromium.org</owner> <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS, with a new account. @@ -17019,14 +17041,343 @@ </action> <action name="Signin_SigninNewAccount_FromTabSwitcher"> + <obsolete>Deprecated 08/2018</obsolete> + <owner>bsazonov@chromium.org</owner> <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point signin_metrics::AccessPoint::ACCESS_POINT_TAB_SWITCHER, with a new account. </description> </action> +<action name="Signin_SigninNewAccountExistingAccount_FromAvatarBubbleSignin"> + <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN, with a new + account, while Chrome already has other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountExistingAccount_FromBookmarkBubble"> + <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_BUBBLE, with a new + account, while Chrome already has other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountExistingAccount_FromBookmarkManager"> + <owner>bsazonov@chromium.org</owner> + <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER, with a new + account, while Chrome already has other accounts. + </description> +</action> + +<action + name="Signin_SigninNewAccountExistingAccount_FromExtensionInstallBubble"> + <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_EXTENSION_INSTALL_BUBBLE, with a + new account, while Chrome already has other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountExistingAccount_FromNTPContentSuggestions"> + <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_NTP_CONTENT_SUGGESTIONS, with a + new account, while Chrome already has other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountExistingAccount_FromPasswordBubble"> + <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_PASSWORD_BUBBLE, with a new + account, while Chrome already has other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountExistingAccount_FromRecentTabs"> + <owner>bsazonov@chromium.org</owner> + <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS, with a new account, + while Chrome already has other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountExistingAccount_FromSaveCardBubble"> + <owner>bsazonov@chromium.org</owner> + <owner>jsaul@chromium.org</owner> + <owner>manasverma@google.com</owner> + <owner>msarda@chromium.org</owner> + <owner>sebsg@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_SAVE_CARD_BUBBLE, with a new + account, while Chrome already has other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountExistingAccount_FromSettings"> + <owner>bsazonov@chromium.org</owner> + <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS, with a new account, + while Chrome already has other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountExistingAccount_FromTabSwitcher"> + <owner>bsazonov@chromium.org</owner> + <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_TAB_SWITCHER, with a new account, + while Chrome already has other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountNoExistingAccount_FromAvatarBubbleSignin"> + <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN, with a new + account, while Chrome does not have other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountNoExistingAccount_FromBookmarkBubble"> + <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_BUBBLE, with a new + account, while Chrome does not have other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountNoExistingAccount_FromBookmarkManager"> + <owner>bsazonov@chromium.org</owner> + <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER, with a new + account, while Chrome does not have other accounts. + </description> +</action> + +<action + name="Signin_SigninNewAccountNoExistingAccount_FromExtensionInstallBubble"> + <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_EXTENSION_INSTALL_BUBBLE, with a + new account, while Chrome does not have other accounts. + </description> +</action> + +<action + name="Signin_SigninNewAccountNoExistingAccount_FromNTPContentSuggestions"> + <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_NTP_CONTENT_SUGGESTIONS, with a + new account, while Chrome does not have other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountNoExistingAccount_FromPasswordBubble"> + <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_PASSWORD_BUBBLE, with a new + account, while Chrome does not have other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountNoExistingAccount_FromRecentTabs"> + <owner>bsazonov@chromium.org</owner> + <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS, with a new account, + while Chrome does not have other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountNoExistingAccount_FromSaveCardBubble"> + <owner>bsazonov@chromium.org</owner> + <owner>jsaul@chromium.org</owner> + <owner>manasverma@google.com</owner> + <owner>msarda@chromium.org</owner> + <owner>sebsg@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_SAVE_CARD_BUBBLE, with a new + account, while Chrome does not have other accounts, while Chrome does not + have other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountNoExistingAccount_FromSettings"> + <owner>bsazonov@chromium.org</owner> + <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS, with a new account, + while Chrome does not have other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountNoExistingAccount_FromTabSwitcher"> + <owner>bsazonov@chromium.org</owner> + <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_TAB_SWITCHER, with a new account, + while Chrome does not have other accounts. + </description> +</action> + +<action name="Signin_SigninNewAccountPreDice_FromAvatarBubbleSignin"> + <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_AVATAR_BUBBLE_SIGN_IN, with a new + account, on desktop pre-Dice. + </description> +</action> + +<action name="Signin_SigninNewAccountPreDice_FromBookmarkBubble"> + <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_BUBBLE, with a new + account, on desktop pre-Dice. + </description> +</action> + +<action name="Signin_SigninNewAccountPreDice_FromBookmarkManager"> + <owner>bsazonov@chromium.org</owner> + <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER, with a new + account, on desktop pre-Dice. + </description> +</action> + +<action name="Signin_SigninNewAccountPreDice_FromExtensionInstallBubble"> + <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_EXTENSION_INSTALL_BUBBLE, with a + new account, on desktop pre-Dice. + </description> +</action> + +<action name="Signin_SigninNewAccountPreDice_FromNTPContentSuggestions"> + <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_NTP_CONTENT_SUGGESTIONS, with a + new account, on desktop pre-Dice. + </description> +</action> + +<action name="Signin_SigninNewAccountPreDice_FromPasswordBubble"> + <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_PASSWORD_BUBBLE, with a new + account, on desktop pre-Dice. + </description> +</action> + +<action name="Signin_SigninNewAccountPreDice_FromRecentTabs"> + <owner>bsazonov@chromium.org</owner> + <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS, with a new account, + on desktop pre-Dice. + </description> +</action> + +<action name="Signin_SigninNewAccountPreDice_FromSaveCardBubble"> + <owner>bsazonov@chromium.org</owner> + <owner>jsaul@chromium.org</owner> + <owner>manasverma@google.com</owner> + <owner>msarda@chromium.org</owner> + <owner>sebsg@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_SAVE_CARD_BUBBLE, with a new + account, while Chrome does not have other accounts, on desktop pre-Dice. + </description> +</action> + +<action name="Signin_SigninNewAccountPreDice_FromSettings"> + <owner>bsazonov@chromium.org</owner> + <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS, with a new account, on + desktop pre-Dice. + </description> +</action> + +<action name="Signin_SigninNewAccountPreDice_FromTabSwitcher"> + <owner>bsazonov@chromium.org</owner> + <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> + <description> + Recorded on sign in start from access point + signin_metrics::AccessPoint::ACCESS_POINT_TAB_SWITCHER, with a new account, + on desktop pre-Dice. + </description> +</action> + <action name="Signin_SigninNotDefault_FromAvatarBubbleSignin"> + <owner>bsazonov@chromium.org</owner> <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point @@ -17036,6 +17387,7 @@ </action> <action name="Signin_SigninNotDefault_FromBookmarkBubble"> + <owner>bsazonov@chromium.org</owner> <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point @@ -17045,7 +17397,9 @@ </action> <action name="Signin_SigninNotDefault_FromBookmarkManager"> + <owner>bsazonov@chromium.org</owner> <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER, using another @@ -17054,6 +17408,7 @@ </action> <action name="Signin_SigninNotDefault_FromExtensionInstallBubble"> + <owner>bsazonov@chromium.org</owner> <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point @@ -17064,6 +17419,7 @@ <action name="Signin_SigninNotDefault_FromNTPContentSuggestions"> <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point signin_metrics::AccessPoint::ACCESS_POINT_NTP_CONTENT_SUGGESTIONS, using @@ -17072,6 +17428,7 @@ </action> <action name="Signin_SigninNotDefault_FromPasswordBubble"> + <owner>bsazonov@chromium.org</owner> <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point @@ -17081,7 +17438,9 @@ </action> <action name="Signin_SigninNotDefault_FromRecentTabs"> + <owner>bsazonov@chromium.org</owner> <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS, using another account @@ -17090,8 +17449,10 @@ </action> <action name="Signin_SigninNotDefault_FromSaveCardBubble"> - <owner>manasverma@google.com</owner> + <owner>bsazonov@chromium.org</owner> <owner>jsaul@chromium.org</owner> + <owner>manasverma@google.com</owner> + <owner>msarda@chromium.org</owner> <owner>sebsg@chromium.org</owner> <description> Recorded on sign in start from access point @@ -17101,7 +17462,9 @@ </action> <action name="Signin_SigninNotDefault_FromSettings"> + <owner>bsazonov@chromium.org</owner> <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS, using another account @@ -17110,7 +17473,9 @@ </action> <action name="Signin_SigninNotDefault_FromTabSwitcher"> + <owner>bsazonov@chromium.org</owner> <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point signin_metrics::AccessPoint::ACCESS_POINT_TAB_SWITCHER, using another @@ -17129,6 +17494,7 @@ </action> <action name="Signin_SigninWithDefault_FromAvatarBubbleSignin"> + <owner>bsazonov@chromium.org</owner> <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point @@ -17138,6 +17504,7 @@ </action> <action name="Signin_SigninWithDefault_FromBookmarkBubble"> + <owner>bsazonov@chromium.org</owner> <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point @@ -17147,7 +17514,9 @@ </action> <action name="Signin_SigninWithDefault_FromBookmarkManager"> + <owner>bsazonov@chromium.org</owner> <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_MANAGER, using the @@ -17156,6 +17525,7 @@ </action> <action name="Signin_SigninWithDefault_FromExtensionInstallBubble"> + <owner>bsazonov@chromium.org</owner> <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point @@ -17166,6 +17536,7 @@ <action name="Signin_SigninWithDefault_FromNTPContentSuggestions"> <owner>bsazonov@chromium.org</owner> + <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point signin_metrics::AccessPoint::ACCESS_POINT_NTP_CONTENT_SUGGESTIONS, using the @@ -17174,6 +17545,7 @@ </action> <action name="Signin_SigninWithDefault_FromPasswordBubble"> + <owner>bsazonov@chromium.org</owner> <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point @@ -17183,7 +17555,9 @@ </action> <action name="Signin_SigninWithDefault_FromRecentTabs"> + <owner>bsazonov@chromium.org</owner> <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS, using the default @@ -17192,8 +17566,10 @@ </action> <action name="Signin_SigninWithDefault_FromSaveCardBubble"> - <owner>manasverma@google.com</owner> + <owner>bsazonov@chromium.org</owner> <owner>jsaul@chromium.org</owner> + <owner>manasverma@google.com</owner> + <owner>msarda@chromium.org</owner> <owner>sebsg@chromium.org</owner> <description> Recorded on sign in start from access point @@ -17203,7 +17579,9 @@ </action> <action name="Signin_SigninWithDefault_FromSettings"> + <owner>bsazonov@chromium.org</owner> <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS, using the default @@ -17212,7 +17590,9 @@ </action> <action name="Signin_SigninWithDefault_FromTabSwitcher"> + <owner>bsazonov@chromium.org</owner> <owner>jlebel@chromium.org</owner> + <owner>msarda@chromium.org</owner> <description> Recorded on sign in start from access point signin_metrics::AccessPoint::ACCESS_POINT_TAB_SWITCHER, using the default
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index dd84536..ba7204c 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -2775,6 +2775,12 @@ <int value="1" label="Selected popup entry"/> </enum> +<enum name="AutofillManageCardsPrompt"> + <int value="0" label="Shown"/> + <int value="1" label="Done button pressed"/> + <int value="2" label="Manage cards button pressed"/> +</enum> + <enum name="AutofillProfileAction"> <int value="0" label="Existing profile used"/> <int value="1" label="Existing profile updated"/> @@ -13997,6 +14003,7 @@ <int value="463" label="DeviceLocalAccountManagedSessionEnabled"/> <int value="464" label="WebRtcEventLogCollectionAllowed"/> <int value="465" label="PowerSmartDimEnabled"/> + <int value="466" label="CoalesceH2ConnectionsWithClientCertificatesForHosts"/> </enum> <enum name="EnterprisePolicyInvalidations"> @@ -28152,6 +28159,7 @@ <int value="-1126217973" label="IdleTimeSpellChecking:disabled"/> <int value="-1125840399" label="ViewsBrowserWindows:enabled"/> <int value="-1125133283" label="disable-threaded-scrolling"/> + <int value="-1122853453" label="LazyImageLoading:enabled"/> <int value="-1121931029" label="DownloadsForeground:enabled"/> <int value="-1119700637" label="ui-disable-partial-swap"/> <int value="-1112782121" label="AndroidSigninPromos:disabled"/> @@ -28428,6 +28436,7 @@ <int value="-536230323" label="SingleClickAutofill:disabled"/> <int value="-535662704" label="BundledConnectionHelp:enabled"/> <int value="-535208779" label="enable-native-cups"/> + <int value="-534221085" label="LazyImageLoading:disabled"/> <int value="-533552313" label="AutofillUpstreamEditableCardholderName:enabled"/> <int value="-531810064" label="saveas-menu-label"/> @@ -28499,6 +28508,7 @@ <int value="-378033324" label="disable-win32k-renderer-lockdown"/> <int value="-374657496" label="OmniboxEnableClipboardProvider:enabled"/> <int value="-374423260" label="OmniboxTabSwitchSuggestions:disabled"/> + <int value="-373233195" label="SyncUSSAutofillWalletData:enabled"/> <int value="-367474066" label="DialogTouchBar:enabled"/> <int value="-366949535" label="KeyboardShortcutViewerApp:enabled"/> <int value="-365920680" label="ImageCaptureAPI:disabled"/> @@ -28647,6 +28657,7 @@ <int value="-68877684" label="BackgroundVideoTrackOptimization:enabled"/> <int value="-68225452" label="enable-translate-new-ux"/> <int value="-67297229" label="OfflinePagesDescriptivePendingStatus:disabled"/> + <int value="-64839201" label="SyncUSSAutofillWalletData:disabled"/> <int value="-59530055" label="ChromeVoxArcSupport:enabled"/> <int value="-59401847" label="ContentSuggestionsLargeThumbnail:disabled"/> <int value="-58242474" label="ash-disable-swipe-to-close-in-overview-mode"/> @@ -29494,6 +29505,7 @@ <int value="1689183477" label="enable-merge-key-char-events"/> <int value="1690837904" label="save-previous-document-resources"/> <int value="1691568199" label="AndroidSpellCheckerNonLowEnd:disabled"/> + <int value="1694562245" label="UseSurfaceLayerForVideoMS:disabled"/> <int value="1694766748" label="AutofillRestrictUnownedFieldsToFormlessCheckout:enabled"/> <int value="1694798717" label="NewNetErrorPageUI:enabled"/> @@ -29580,6 +29592,7 @@ <int value="1862207743" label="enable-android-spellchecker"/> <int value="1863622457" label="WebAuthentication:enabled"/> <int value="1865068568" label="disable-audio-support-for-desktop-share"/> + <int value="1865702649" label="UseSurfaceLayerForVideoMS:enabled"/> <int value="1865799183" label="javascript-harmony"/> <int value="1865963858" label="tls13-variant"/> <int value="1866079109" label="team-drives"/> @@ -32360,6 +32373,9 @@ <int value="0" label="None"/> <int value="1" label="Infobar shown"/> <int value="2" label="Link clicked on the infobar"/> + <int value="3" label="A navigation suggestion is found using top sites list"/> + <int value="4" + label="A navigation suggestion is found using site engagement"/> </enum> <enum name="NavigationWasServedFromCache"> @@ -35171,6 +35187,9 @@ <int value="8" label="Browser_actions"> Namespace used when offline page is saved from browser actions. </int> + <int value="9" label="Live_page_sharing"> + Namespace used when offline page is saved for live page sharing. + </int> </enum> <enum name="OfflinePagesOfflineUsage"> @@ -44136,6 +44155,7 @@ <int value="24" label="MISSING_FILES_NO_SD_CARD"/> <int value="25" label="OFFLINE_INDICATOR"/> <int value="26" label="FEED_NTP_STREAM"/> + <int value="27" label="WEBAPK_TWA_PRIVACY_DISCLOSURE"/> </enum> <enum name="SnippetOpenMethod">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index c746b2f45..cab7ce1 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -6854,6 +6854,16 @@ </summary> </histogram> +<histogram name="Autofill.ManageCardsPrompt" enum="AutofillManageCardsPrompt" + expires_after="2019-09-01"> + <owner>manasverma@google.com</owner> + <owner>jsaul@google.com</owner> + <owner>sebsg@chromium.org</owner> + <summary> + The frequency of user interactions with the Manage Cards prompt. + </summary> +</histogram> + <histogram name="Autofill.NumberOfEditedAutofilledFieldsAtSubmission" units="fields"> <owner>mathp@chromium.org</owner> @@ -7637,6 +7647,14 @@ </summary> </histogram> +<histogram base="true" name="BackgroundFetch.Storage" + enum="BackgroundFetchStorageError"> +<!-- Name completed by histogram_suffixes name="BackgroundFetchDatabaseStorageErrors" --> + + <owner>rayankans@chromium.org</owner> + <summary>Records the storage error when running a database task.</summary> +</histogram> + <histogram name="BackgroundMode.BackgroundApplicationsCount"> <owner>atwilson@chromium.org</owner> <owner>mvanouwerkerk@chromium.org</owner> @@ -34506,16 +34524,19 @@ </histogram> <histogram name="History.InMemoryURLIndexingTime" units="ms" - expires_after="2018-08-30"> + expires_after="2019-08-30"> <owner>mpearson@chromium.org</owner> + <owner>ssid@chromium.org</owner> <summary> Time to rebuild in-memory url index from main history database. Recorded once shortly after profile open. </summary> </histogram> -<histogram name="History.InMemoryURLIndexRestoreCacheTime" units="ms"> +<histogram name="History.InMemoryURLIndexRestoreCacheTime" units="ms" + expires_after="2019-08-30"> <owner>mpearson@chromium.org</owner> + <owner>ssid@chromium.org</owner> <summary> Time to restore the in-memory url index from disk cache. Recorded on profile open. @@ -34523,8 +34544,9 @@ </histogram> <histogram name="History.InMemoryURLIndexSaveCacheTime" units="ms" - expires_after="2018-08-30"> + expires_after="2019-08-30"> <owner>mpearson@chromium.org</owner> + <owner>ssid@chromium.org</owner> <summary> Time to write in-memory url index to disk cache. Recorded once shortly after profile open (after rebuilding the in-memory url index from history) and @@ -90293,8 +90315,9 @@ </histogram> <histogram name="Search.DefaultSearchProviderType" - enum="OmniboxSearchEngineType"> + enum="OmniboxSearchEngineType" expires_after="2020-07-30"> <owner>mpearson@chromium.org</owner> + <owner>csharp@chromium.org</owner> <summary> The type of the default search engine that is loaded when a profile is opened or after a profile reset. Note that at least one profile is opened @@ -93067,8 +93090,10 @@ </summary> </histogram> -<histogram name="Settings.HomePageEngineType" enum="OmniboxSearchEngineType"> +<histogram name="Settings.HomePageEngineType" enum="OmniboxSearchEngineType" + expires_after="2020-07-30"> <owner>mpearson@chromium.org</owner> + <owner>csharp@chromium.org</owner> <summary> Tries to pretend the home page URL is a search URL, and records the search engine type of that URL by comparing the TLD+1 of the home page URL with @@ -93213,8 +93238,9 @@ </histogram> <histogram name="Settings.PinnedTabEngineTypes" enum="OmniboxSearchEngineType" - expires_after="2018-08-30"> + expires_after="2020-07-30"> <owner>mpearson@chromium.org</owner> + <owner>csharp@chromium.org</owner> <summary> Tries to pretend pinned tab URLs are search URLs, and records the search engine types of those URLs by comparing the TLD+1s of the URLs with those of @@ -93355,8 +93381,9 @@ </histogram> <histogram name="Settings.StartupPageEngineTypes" - enum="OmniboxSearchEngineType" expires_after="2018-08-30"> + enum="OmniboxSearchEngineType" expires_after="2020-07-30"> <owner>mpearson@chromium.org</owner> + <owner>csharp@chromium.org</owner> <summary> Tries to pretend the startup page URLs are search URLs, and records the search engine types of those URLs by comparing the TLD+1s of the URLs with @@ -117030,6 +117057,12 @@ <affected-histogram name="Autofill.LocalCardMigrationBubbleUserInteraction"/> </histogram_suffixes> +<histogram_suffixes name="AutofillManageCardsPrompt" separator="."> + <suffix name="Local" label="Card was saved locally"/> + <suffix name="Upload" label="Card was uploaded to server"/> + <affected-histogram name="Autofill.ManageCardsPrompt"/> +</histogram_suffixes> + <histogram_suffixes name="AutofillPayloadCompressionType" separator="."> <suffix name="Query" label="Query request compression"/> <suffix name="Upload" label="Upload request compression"/> @@ -117143,6 +117176,24 @@ <affected-histogram name="Autofill.UnmaskPrompt.Duration"/> </histogram_suffixes> +<histogram_suffixes name="BackgroundFetchDatabaseStorageErrors" separator="."> + <suffix name="CleanupTask" label="CleanupTask"/> + <suffix name="CreateMetadataTask" label="CreateMetadata DatabaseTask"/> + <suffix name="GetDeveloperIdsTask" label="GetDeveloperIds DatabaseTask"/> + <suffix name="GetInitializationDataTask" + label="GetInitializationData DatabaseTask"/> + <suffix name="GetRegistrationTask" label="GetRegistration DatabaseTask"/> + <suffix name="MarkRegistrationForDeletionTask" + label="MarkRegistrationForDeletion DatabaseTask"/> + <suffix name="MarkRequestCompleteTask" + label="MarkRequestComplete DatabaseTask"/> + <suffix name="StartNextPendingRequestTask" + label="StartNextPendingRequest DatabaseTask"/> + <suffix name="UpdateRegistrationUITask" + label="UpdateRegistrationUI DatabaseTask"/> + <affected-histogram name="BackgroundFetch.Storage"/> +</histogram_suffixes> + <histogram_suffixes name="BackgroundFetchEvents" separator="."> <suffix name="AbortEvent" label="BackgroundFetchAbortEvent"/> <suffix name="ClickEvent" label="BackgroundFetchClickEvent"/> @@ -127015,6 +127066,7 @@ </obsolete> </suffix> <suffix name="INSTALL" label="INSTALL"/> + <suffix name="LONG_RUNNING_MESSAGE" label="LONG_RUNNING_MESSAGE"/> <suffix name="MESSAGE" label="MESSAGE"/> <suffix name="NAVIGATION_HINT" label="NAVIGATION_HINT"/> <suffix name="NAVIGATION_HINT_LINK_MOUSE_DOWN" @@ -127404,7 +127456,19 @@ </histogram_suffixes> <histogram_suffixes name="SigninAccountStatus" separator="."> - <suffix name="NewAccount" label="Using a new account, in the sign-in promo."/> + <suffix name="NewAccount" label="Using a new account, in the sign-in promo."> + <obsolete> + Deprecated as of 2018-8. + </obsolete> + </suffix> + <suffix name="NewAccountExistingAccount" + label="Using a new account, in the sign-in promo, while Chrome knows + about other accounts."/> + <suffix name="NewAccountNoExistingAccount" + label="Using a new account, in the sign-in promo, while Chrome does not + know about other accounts."/> + <suffix name="NewAccountPreDice" + label="Using a new account on Desktop, pre-Dice."/> <suffix name="NotDefault" label="Using not the default account, in the sign-in promo."/> <suffix name="WithDefault"
diff --git a/tools/perf/chrome_telemetry_build/BUILD.gn b/tools/perf/chrome_telemetry_build/BUILD.gn index 12b83ef..64598f0 100644 --- a/tools/perf/chrome_telemetry_build/BUILD.gn +++ b/tools/perf/chrome_telemetry_build/BUILD.gn
@@ -14,14 +14,12 @@ testonly = true data_deps = [ - ":telemetry_chrome_test_without_chrome" + ":telemetry_chrome_test_without_chrome", ] data = [] if (is_android) { - data_deps += [ - "//chrome/android:chrome_public_apk", - ] + data_deps += [ "//chrome/android:chrome_public_apk" ] if (public_android_sdk) { data_deps += [ @@ -90,7 +88,146 @@ data = [ "//tools/perf/core/", # chrome_telemetry_build/ depends on core/ "//tools/perf/chrome_telemetry_build/", - "//third_party/catapult/", "//components/crash/content/tools/generate_breakpad_symbols.py", ] + + data += [ + "//third_party/catapult/common/", + "//third_party/catapult/dependency_manager/", + "//third_party/catapult/devil/", + "//third_party/catapult/systrace/", + "//third_party/catapult/trace_processor/", + "//third_party/catapult/web_page_replay_go/", + ] + + # //third_party/catapult/tracing/ stuff + # mostly excluding test_data/ + data += [ + "//third_party/catapult/tracing/bin/", + "//third_party/catapult/tracing/third_party/", + "//third_party/catapult/tracing/tracing/", + "//third_party/catapult/tracing/tracing_build/", + "//third_party/catapult/tracing/tracing_project.py", + ] + + # //third_party/catapult/third_party/ stuff + # excluding google-endpoints/, Paste/, polymer2/ + data += [ + "//third_party/catapult/third_party/beautifulsoup4/", + "//third_party/catapult/third_party/chai/", + "//third_party/catapult/third_party/cloudstorage/", + "//third_party/catapult/third_party/coverage/", + "//third_party/catapult/third_party/d3/", + "//third_party/catapult/third_party/flot/", + "//third_party/catapult/third_party/graphy/", + "//third_party/catapult/third_party/gsutil/", + "//third_party/catapult/third_party/html5lib-python/", + "//third_party/catapult/third_party/httplib2/", + "//third_party/catapult/third_party/idb/", + "//third_party/catapult/third_party/jquery/", + "//third_party/catapult/third_party/mapreduce/", + "//third_party/catapult/third_party/mocha/", + "//third_party/catapult/third_party/mock/", + "//third_party/catapult/third_party/mox3/", + "//third_party/catapult/third_party/oauth2client/", + "//third_party/catapult/third_party/pipeline/", + "//third_party/catapult/third_party/polymer/", + "//third_party/catapult/third_party/pyfakefs/", + "//third_party/catapult/third_party/pyserial/", + "//third_party/catapult/third_party/python_gflags/", + "//third_party/catapult/third_party/redux/", + "//third_party/catapult/third_party/six/", + "//third_party/catapult/third_party/snap-it/", + "//third_party/catapult/third_party/typ/", + "//third_party/catapult/third_party/uritemplate/", + "//third_party/catapult/third_party/webapp2/", + "//third_party/catapult/third_party/WebOb/", + "//third_party/catapult/third_party/webtest/", + "//third_party/catapult/third_party/zipfile/", + ] + + # //third_party/catapult/third_party/vinn/ stuff + # making third_part/v8/ binary data platform specific + data += [ + "//third_party/catapult/third_party/vinn/bin/", + "//third_party/catapult/third_party/vinn/third_party/parse5/", + "//third_party/catapult/third_party/vinn/vinn/", + ] + if (is_win) { + data += [ "//third_party/catapult/third_party/vinn/third_party/v8/win/" ] + } else if (is_mac) { + data += [ "//third_party/catapult/third_party/vinn/third_party/v8/mac/" ] + } else if (is_linux) { + data += [ + "//third_party/catapult/third_party/vinn/third_party/v8/linux/x86_64/", + ] + if (is_chromeos) { + data += [ + "//third_party/catapult/third_party/vinn/third_party/v8/linux/arm/", + "//third_party/catapult/third_party/vinn/third_party/v8/linux/mips/", + "//third_party/catapult/third_party/vinn/third_party/v8/linux/mips64/", + ] + } + } else if (is_android) { + # android-marshmallow-arm64-rel needs this for telemetry_perf_unittests + # this is because the host is linux x64 + data += [ + "//third_party/catapult/third_party/vinn/third_party/v8/linux/x86_64/", + ] + } + + # //third_party/catapult/telemetry/ stuff + # excluding telemetry/internal/actions/bin/ + data += [ + "//third_party/catapult/telemetry/bin/", + "//third_party/catapult/telemetry/build/", + "//third_party/catapult/telemetry/examples/", + "//third_party/catapult/telemetry/third_party/", + "//third_party/catapult/telemetry/cloud_storage", + "//third_party/catapult/telemetry/json_format", + "//third_party/catapult/telemetry/validate_binary_dependencies", + ] + data += [ + "//third_party/catapult/telemetry/telemetry/android/", + "//third_party/catapult/telemetry/telemetry/core/", + "//third_party/catapult/telemetry/telemetry/page/", + "//third_party/catapult/telemetry/telemetry/story/", + "//third_party/catapult/telemetry/telemetry/testing/", + "//third_party/catapult/telemetry/telemetry/timeline/", + "//third_party/catapult/telemetry/telemetry/util/", + "//third_party/catapult/telemetry/telemetry/value/", + "//third_party/catapult/telemetry/telemetry/web_perf/", + "//third_party/catapult/telemetry/telemetry/wpr/", + "//third_party/catapult/telemetry/telemetry/__init__.py", + "//third_party/catapult/telemetry/telemetry/benchmark.py", + "//third_party/catapult/telemetry/telemetry/benchmark_run_unittest.py", + "//third_party/catapult/telemetry/telemetry/benchmark_runner.py", + "//third_party/catapult/telemetry/telemetry/benchmark_runner_unittest.py", + "//third_party/catapult/telemetry/telemetry/benchmark_unittest.py", + "//third_party/catapult/telemetry/telemetry/decorators.py", + "//third_party/catapult/telemetry/telemetry/decorators_unittest.py", + "//third_party/catapult/telemetry/telemetry/project_config.py", + "//third_party/catapult/telemetry/telemetry/record_wpr.py", + "//third_party/catapult/telemetry/telemetry/record_wpr_unittest.py", + "//third_party/catapult/telemetry/telemetry/telemetry_unittest_deps.json", + ] + data += [ + "//third_party/catapult/telemetry/telemetry/internal/actions/", + "//third_party/catapult/telemetry/telemetry/internal/app/", + "//third_party/catapult/telemetry/telemetry/internal/backends/", + "//third_party/catapult/telemetry/telemetry/internal/browser/", + "//third_party/catapult/telemetry/telemetry/internal/browser_profiles/", + "//third_party/catapult/telemetry/telemetry/internal/forwarders/", + "//third_party/catapult/telemetry/telemetry/internal/image_processing/", + "//third_party/catapult/telemetry/telemetry/internal/platform/", + "//third_party/catapult/telemetry/telemetry/internal/results/", + "//third_party/catapult/telemetry/telemetry/internal/testing/", + "//third_party/catapult/telemetry/telemetry/internal/util/", + "//third_party/catapult/telemetry/telemetry/internal/__init__.py", + "//third_party/catapult/telemetry/telemetry/internal/binary_dependencies.json", + "//third_party/catapult/telemetry/telemetry/internal/snap_page_util.py", + "//third_party/catapult/telemetry/telemetry/internal/snap_page_util_unittest.py", + "//third_party/catapult/telemetry/telemetry/internal/story_runner.py", + "//third_party/catapult/telemetry/telemetry/internal/story_runner_unittest.py", + ] }
diff --git a/tools/perf/contrib/cros_benchmarks/.gitignore b/tools/perf/contrib/cros_benchmarks/.gitignore index 4769397..cadd44c5 100644 --- a/tools/perf/contrib/cros_benchmarks/.gitignore +++ b/tools/perf/contrib/cros_benchmarks/.gitignore
@@ -1,2 +1,3 @@ -*.wpr +*.wprgo +*.fetchts data/send_key_tab_switch
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py index 9d5d890..a99b6cf 100755 --- a/tools/perf/core/perf_data_generator.py +++ b/tools/perf/core/perf_data_generator.py
@@ -71,14 +71,6 @@ 'OBBS Mac 10.12 Perf': { 'tests': [ { - 'isolate': 'performance_test_suite', - 'extra_args': [ - '--run-ref-build', - '--test-shard-map-filename=mac1012_5_shard_map.json', - ], - 'num_shards': 5 - }, - { 'isolate': 'net_perftests', 'num_shards': 1, 'telemetry': False, @@ -87,6 +79,14 @@ 'isolate': 'views_perftests', 'num_shards': 1, 'telemetry': False, + }, + { + 'isolate': 'performance_test_suite', + 'extra_args': [ + '--run-ref-build', + '--test-shard-map-filename=mac1012_5_shard_map.json', + ], + 'num_shards': 5 } ], 'platform': 'mac', @@ -949,11 +949,20 @@ def generate_telemetry_tests(testers, tests): for tester, tester_config in testers['testers'].iteritems(): - isolated_scripts = [] + telemetry_tests = [] + gtest_tests = [] for test in tester_config['tests']: - isolated_scripts.append(generate_performance_test(tester_config, test)) + generated_script = generate_performance_test(tester_config, test) + if test.get('telemetry', True): + telemetry_tests.append(generated_script) + else: + gtest_tests.append(generated_script) + telemetry_tests.sort(key=lambda x: x['name']) + gtest_tests.sort(key=lambda x: x['name']) tests[tester] = { - 'isolated_scripts': sorted(isolated_scripts, key=lambda x: x['name']) + # Put Telemetry tests as the end since they tend to run longer to avoid + # starving gtests (see crbug.com/873389). + 'isolated_scripts': gtest_tests + telemetry_tests }
diff --git a/tools/perf/core/perf_json_config_validator.py b/tools/perf/core/perf_json_config_validator.py index 3eb2e616..dfefede8 100644 --- a/tools/perf/core/perf_json_config_validator.py +++ b/tools/perf/core/perf_json_config_validator.py
@@ -101,7 +101,9 @@ def ValidateTestingBuilder(builder_name, builder_data): isolated_scripts = builder_data['isolated_scripts'] + test_names = [] for test_config in isolated_scripts: + test_names.append(test_config['name']) _ValidateSwarmingDimension( builder_name, swarming_dimensions=test_config['swarming'].get('dimension_sets', {})) @@ -110,6 +112,17 @@ _ValidateShardingData(builder_name, test_config) _ValidateBrowserType(builder_name, test_config) + if ('performance_test_suite' in test_names or + 'performance_webview_test_suite' in test_names): + if test_names[-1] not in ('performance_test_suite', + 'performance_webview_test_suite'): + raise ValueError( + 'performance_test_suite or performance_webview_test_suite must run ' + 'at the end of builder %s to avoid starving other test step ' + '(see crbug.com/873389). Instead found %s' % ( + repr(builder_name), test_names[-1])) + + def _IsBuilderName(name): return not name.startswith('AAA')
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config index 4400c427..265e2733 100644 --- a/tools/perf/expectations.config +++ b/tools/perf/expectations.config
@@ -114,6 +114,12 @@ crbug.com/871421 [ Android_One ] loading.mobile/Dramaq_3g [ Skip ] crbug.com/873032 [ Android_Webview ] loading.mobile/GoogleRedirectToGoogleJapan_3g [ Skip ] crbug.com/873033 [ Android_but_not_webview ] loading.mobile/FlipKart_warm_3g [ Skip ] +crbug.com/676612 [ Nexus6_Webview ] loading.mobile/FlipBoard_cold_3g [ Skip ] +crbug.com/676612 [ Nexus6_Webview ] loading.mobile/FlipBoard_warm_3g [ Skip ] +crbug.com/676612 [ Nexus6_Webview ] loading.mobile/TribunNews_3g [ Skip ] +crbug.com/676612 [ Nexus6_Webview ] loading.mobile/FlipKart_warm_3g [ Skip ] +crbug.com/676612 [ Nexus6_Webview ] loading.mobile/OLX_3g [ Skip ] +crbug.com/676612 [ Nexus6_Webview ] loading.mobile/Youtube_3g [ Skip ] # Benchmark: memory.long_running_idle_gmail_tbmv2 crbug.com/611167 [ Android_Svelte ] memory.long_running_idle_gmail_tbmv2/* [ Skip ] @@ -232,7 +238,6 @@ crbug.com/869118 [ Linux ] system_health.memory_desktop/long_running:tools:gmail-background [ Skip ] crbug.com/836447 [ ChromeOS ] system_health.memory_desktop/multitab:misc:typical24 [ Skip ] crbug.com/799734 [ Win ] system_health.memory_desktop/browse:media:tumblr [ Skip ] -crbug.com/870852 [ Win ] system_health.memory_desktop/browse:media:pinterest [ Skip ] # Benchmark: system_health.memory_mobile crbug.com/787001 [ Android_Webview ] system_health.memory_mobile/load:media:soundcloud [ Skip ]
diff --git a/tools/perf/page_sets/data/rendering_desktop.json b/tools/perf/page_sets/data/rendering_desktop.json index d3c2477..f3ca1cb 100644 --- a/tools/perf/page_sets/data/rendering_desktop.json +++ b/tools/perf/page_sets/data/rendering_desktop.json
@@ -1,291 +1,291 @@ { "archives": { "accu_weather_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "amazon_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "blogspot_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "booking.com_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "cnn_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "ebay_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "espn_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "facebook_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "gmail_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "google_calendar_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "google_docs_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "google_image_search_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "google_plus_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "google_web_search_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "linkedin_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "pinterest_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "techcrunch_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "twitch_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "twitter_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "wikipedia_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "wordpress_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "yahoo_answers_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "yahoo_news_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "yahoo_sports_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "youtube_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "gmail_move_2018": { - "DEFAULT": "key_desktop_move_cases_003.wprgo" - }, - "maps_move_2018": { - "DEFAULT": "key_desktop_move_cases_003.wprgo" - }, - "filter_terrain_svg": { - "DEFAULT": "tough_filters_cases_002.wprgo" - }, - "motion_mark_focus": { - "DEFAULT": "tough_filters_cases_002.wprgo" - }, - "analog_clock_svg": { - "DEFAULT": "tough_filters_cases_002.wprgo" - }, - "ie_pirate_mark": { - "DEFAULT": "tough_filters_cases_002.wprgo" - }, - "guimark_vector_chart": { - "DEFAULT": "tough_path_rendering_cases_002.wprgo" - }, - "motion_mark_canvas_fill_shapes": { - "DEFAULT": "tough_path_rendering_cases_002.wprgo" - }, - "motion_mark_canvas_stroke_shapes": { - "DEFAULT": "tough_path_rendering_cases_002.wprgo" - }, - "ie_chalkboard": { - "DEFAULT": "tough_path_rendering_cases_002.wprgo" - }, - "geo_apis": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "hakim": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_tweet_map": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_video_city": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_worker_fountains": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_asteroid_belt": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_fireflies": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_fish_ie_tank": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_snow": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_speed_reading": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "jarro_doverson": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "mix_10k": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "runway": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "spielzeugz": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "man_in_blue": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "chip_tune": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "crafty_mind": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "effect_games": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "kevs_3d": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "megi_dish": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "smash_cat": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_performance": { - "DEFAULT": "tough_animation_cases_000.wprgo" - }, - "aquarium_20k": { - "DEFAULT": "tough_webgl_cases_006.wprgo" - }, - "animometer_webgl": { - "DEFAULT": "tough_webgl_cases_006.wprgo" - }, - "aquarium": { - "DEFAULT": "tough_webgl_cases_006.wprgo" - }, - "blob": { - "DEFAULT": "tough_webgl_cases_006.wprgo" - }, - "dynamic_cube_map": { - "DEFAULT": "tough_webgl_cases_006.wprgo" - }, - "nvidia_vertex_buffer_object": { - "DEFAULT": "tough_webgl_cases_006.wprgo" - }, - "particles": { - "DEFAULT": "tough_webgl_cases_006.wprgo" - }, - "san_angeles": { - "DEFAULT": "tough_webgl_cases_006.wprgo" - }, - "earth": { - "DEFAULT": "tough_webgl_cases_006.wprgo" - }, - "many_planets_deep": { - "DEFAULT": "tough_webgl_cases_006.wprgo" + "DEFAULT": "rendering_desktop_000.wprgo" }, "accu_weather_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "amazon_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" }, "amazon_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "analog_clock_svg": { + "DEFAULT": "rendering_desktop_002.wprgo" + }, + "animometer_webgl": { + "DEFAULT": "rendering_desktop_006.wprgo" + }, + "aquarium": { + "DEFAULT": "rendering_desktop_006.wprgo" + }, + "aquarium_20k": { + "DEFAULT": "rendering_desktop_006.wprgo" + }, + "blob": { + "DEFAULT": "rendering_desktop_006.wprgo" + }, + "blogspot_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" }, "blogspot_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "booking.com_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" }, "booking_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" - }, - "cnn_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" - }, - "ebay_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" - }, - "espn_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" - }, - "facebook_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" - }, - "gmail_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" - }, - "google_calendar_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" - }, - "google_image_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" - }, - "google_search_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" - }, - "linkedin_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" - }, - "twitch_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" - }, - "twitter_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" - }, - "yahoo_news_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" - }, - "yahoo_sports_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" - }, - "youtube_pinch_2018": { - "DEFAULT": "tough_pinch_zoom_cases_001.wprgo" + "DEFAULT": "rendering_desktop_007.wprgo" }, "cats_unscaled": { - "DEFAULT": "tough_image_decode_cases_000.wprgo" + "DEFAULT": "rendering_desktop_008.wprgo" }, "cats_viewport_width": { - "DEFAULT": "tough_image_decode_cases_000.wprgo" - }, - "js_full_screen_invalidation": { - "DEFAULT": "tough_compositor_cases_001.wprgo" - }, - "new_tilings": { - "DEFAULT": "tough_compositor_cases_002.wprgo" + "DEFAULT": "rendering_desktop_008.wprgo" }, "cc_poster_circle": { - "DEFAULT": "tough_compositor_cases_001.wprgo" - }, - "js_poster_circle": { - "DEFAULT": "tough_compositor_cases_001.wprgo" - }, - "js_scroll_200_layer_grid": { - "DEFAULT": "tough_compositor_cases_001.wprgo" - }, - "cc_scroll_text_only": { - "DEFAULT": "tough_compositor_cases_001.wprgo" - }, - "js_scroll_text_only": { - "DEFAULT": "tough_compositor_cases_001.wprgo" + "DEFAULT": "rendering_desktop_009.wprgo" }, "cc_scroll_200_layer_grid": { - "DEFAULT": "tough_compositor_cases_001.wprgo" + "DEFAULT": "rendering_desktop_009.wprgo" + }, + "cc_scroll_text_only": { + "DEFAULT": "rendering_desktop_009.wprgo" + }, + "chip_tune": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "cnn_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "cnn_pinch_2018": { + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "crafty_mind": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "dynamic_cube_map": { + "DEFAULT": "rendering_desktop_006.wprgo" + }, + "earth": { + "DEFAULT": "rendering_desktop_006.wprgo" + }, + "ebay_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "ebay_pinch_2018": { + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "effect_games": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "espn_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "espn_pinch_2018": { + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "facebook_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "facebook_pinch_2018": { + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "filter_terrain_svg": { + "DEFAULT": "rendering_desktop_002.wprgo" + }, + "geo_apis": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "gmail_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "gmail_move_2018": { + "DEFAULT": "rendering_desktop_001.wprgo" + }, + "gmail_pinch_2018": { + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "google_calendar_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "google_calendar_pinch_2018": { + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "google_docs_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "google_image_pinch_2018": { + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "google_image_search_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "google_plus_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "google_search_pinch_2018": { + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "google_web_search_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "guimark_vector_chart": { + "DEFAULT": "rendering_desktop_003.wprgo" + }, + "hakim": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "ie_chalkboard": { + "DEFAULT": "rendering_desktop_003.wprgo" + }, + "ie_pirate_mark": { + "DEFAULT": "rendering_desktop_002.wprgo" + }, + "jarro_doverson": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "js_full_screen_invalidation": { + "DEFAULT": "rendering_desktop_009.wprgo" + }, + "js_poster_circle": { + "DEFAULT": "rendering_desktop_009.wprgo" + }, + "js_scroll_200_layer_grid": { + "DEFAULT": "rendering_desktop_009.wprgo" + }, + "js_scroll_text_only": { + "DEFAULT": "rendering_desktop_009.wprgo" + }, + "kevs_3d": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "linkedin_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "linkedin_pinch_2018": { + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "man_in_blue": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "many_planets_deep": { + "DEFAULT": "rendering_desktop_006.wprgo" + }, + "maps_move_2018": { + "DEFAULT": "rendering_desktop_001.wprgo" + }, + "megi_dish": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "microsoft_asteroid_belt": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "microsoft_fireflies": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "microsoft_fish_ie_tank": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "microsoft_performance": { + "DEFAULT": "rendering_desktop_005.wprgo" + }, + "microsoft_snow": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "microsoft_speed_reading": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "microsoft_tweet_map": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "microsoft_video_city": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "microsoft_worker_fountains": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "mix_10k": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "motion_mark_canvas_fill_shapes": { + "DEFAULT": "rendering_desktop_003.wprgo" + }, + "motion_mark_canvas_stroke_shapes": { + "DEFAULT": "rendering_desktop_003.wprgo" + }, + "motion_mark_focus": { + "DEFAULT": "rendering_desktop_002.wprgo" + }, + "new_tilings": { + "DEFAULT": "rendering_desktop_010.wprgo" + }, + "nvidia_vertex_buffer_object": { + "DEFAULT": "rendering_desktop_006.wprgo" + }, + "particles": { + "DEFAULT": "rendering_desktop_006.wprgo" + }, + "pinterest_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "runway": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "san_angeles": { + "DEFAULT": "rendering_desktop_006.wprgo" + }, + "smash_cat": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "spielzeugz": { + "DEFAULT": "rendering_desktop_004.wprgo" + }, + "techcrunch_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "twitch_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "twitch_pinch_2018": { + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "twitter_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "twitter_pinch_2018": { + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "wikipedia_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "wordpress_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "yahoo_answers_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "yahoo_news_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "yahoo_news_pinch_2018": { + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "yahoo_sports_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "yahoo_sports_pinch_2018": { + "DEFAULT": "rendering_desktop_007.wprgo" + }, + "youtube_2018": { + "DEFAULT": "rendering_desktop_000.wprgo" + }, + "youtube_pinch_2018": { + "DEFAULT": "rendering_desktop_007.wprgo" } }, "description": "Describes the Web Page Replay archives for a story set. Don't edit by hand! Use record_wpr for updating.", "platform_specific": true -} +} \ No newline at end of file
diff --git a/tools/perf/page_sets/data/top_25_012.wprgo.sha1 b/tools/perf/page_sets/data/rendering_desktop_000.wprgo.sha1 similarity index 100% rename from tools/perf/page_sets/data/top_25_012.wprgo.sha1 rename to tools/perf/page_sets/data/rendering_desktop_000.wprgo.sha1
diff --git a/tools/perf/page_sets/data/key_desktop_move_cases_003.wprgo.sha1 b/tools/perf/page_sets/data/rendering_desktop_001.wprgo.sha1 similarity index 100% rename from tools/perf/page_sets/data/key_desktop_move_cases_003.wprgo.sha1 rename to tools/perf/page_sets/data/rendering_desktop_001.wprgo.sha1
diff --git a/tools/perf/page_sets/data/tough_filters_cases_002.wprgo.sha1 b/tools/perf/page_sets/data/rendering_desktop_002.wprgo.sha1 similarity index 100% rename from tools/perf/page_sets/data/tough_filters_cases_002.wprgo.sha1 rename to tools/perf/page_sets/data/rendering_desktop_002.wprgo.sha1
diff --git a/tools/perf/page_sets/data/tough_path_rendering_cases_002.wprgo.sha1 b/tools/perf/page_sets/data/rendering_desktop_003.wprgo.sha1 similarity index 100% rename from tools/perf/page_sets/data/tough_path_rendering_cases_002.wprgo.sha1 rename to tools/perf/page_sets/data/rendering_desktop_003.wprgo.sha1
diff --git a/tools/perf/page_sets/data/tough_canvas_cases_001.wprgo.sha1 b/tools/perf/page_sets/data/rendering_desktop_004.wprgo.sha1 similarity index 100% rename from tools/perf/page_sets/data/tough_canvas_cases_001.wprgo.sha1 rename to tools/perf/page_sets/data/rendering_desktop_004.wprgo.sha1
diff --git a/tools/perf/page_sets/data/rendering_desktop_005.wprgo.sha1 b/tools/perf/page_sets/data/rendering_desktop_005.wprgo.sha1 new file mode 100644 index 0000000..fcc4fba7 --- /dev/null +++ b/tools/perf/page_sets/data/rendering_desktop_005.wprgo.sha1
@@ -0,0 +1 @@ +04c3b77dd4e18e4035dad2771bbfe20cf47c9c5b \ No newline at end of file
diff --git a/tools/perf/page_sets/data/tough_webgl_cases_006.wprgo.sha1 b/tools/perf/page_sets/data/rendering_desktop_006.wprgo.sha1 similarity index 100% rename from tools/perf/page_sets/data/tough_webgl_cases_006.wprgo.sha1 rename to tools/perf/page_sets/data/rendering_desktop_006.wprgo.sha1
diff --git a/tools/perf/page_sets/data/rendering_desktop_007.wprgo.sha1 b/tools/perf/page_sets/data/rendering_desktop_007.wprgo.sha1 new file mode 100644 index 0000000..f523acf --- /dev/null +++ b/tools/perf/page_sets/data/rendering_desktop_007.wprgo.sha1
@@ -0,0 +1 @@ +f343b7d0516f9fa2890a445be57842e12177dd69 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/tough_image_decode_cases_000.wprgo.sha1 b/tools/perf/page_sets/data/rendering_desktop_008.wprgo.sha1 similarity index 100% rename from tools/perf/page_sets/data/tough_image_decode_cases_000.wprgo.sha1 rename to tools/perf/page_sets/data/rendering_desktop_008.wprgo.sha1
diff --git a/tools/perf/page_sets/data/tough_compositor_cases_001.wprgo.sha1 b/tools/perf/page_sets/data/rendering_desktop_009.wprgo.sha1 similarity index 100% rename from tools/perf/page_sets/data/tough_compositor_cases_001.wprgo.sha1 rename to tools/perf/page_sets/data/rendering_desktop_009.wprgo.sha1
diff --git a/tools/perf/page_sets/data/tough_compositor_cases_002.wprgo.sha1 b/tools/perf/page_sets/data/rendering_desktop_010.wprgo.sha1 similarity index 100% rename from tools/perf/page_sets/data/tough_compositor_cases_002.wprgo.sha1 rename to tools/perf/page_sets/data/rendering_desktop_010.wprgo.sha1
diff --git a/tools/perf/page_sets/data/rendering_mobile.json b/tools/perf/page_sets/data/rendering_mobile.json index c40adf47..0a2ea0a 100644 --- a/tools/perf/page_sets/data/rendering_mobile.json +++ b/tools/perf/page_sets/data/rendering_mobile.json
@@ -1,696 +1,693 @@ { "archives": { - "amazon_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "amazon_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "androidpolice_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "androidpolice_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "androidpolice_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "baidu_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "baidu_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "bing_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "bing_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "blogspot_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "blogspot_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "boingboing_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "boingboing_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "booking.com_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "booking.com_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "capitolvolkswagen_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "capitolvolkswagen_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "cnn_article_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "cnn_article_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "cnn_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "cnn_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "deviantart_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "deviantart_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "digg_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "digg_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "ebay_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "ebay_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "espn_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "espn_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "facebook_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "facebook_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "forecast.io_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "forecast.io_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "google_plus_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "google_plus_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "google_web_search_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "google_web_search_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "linkedin_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "linkedin_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "mlb_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "mlb_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "nytimes_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "nytimes_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "pinterest_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "pinterest_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "reddit_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "reddit_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "sfgate_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "sfgate_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "slashdot_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "slashdot_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "techcrunch_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "techcrunch_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "theverge_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "theverge_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "twitter_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "twitter_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "usatoday_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "usatoday_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "wikipedia_delayed_scroll_start_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "wikipedia_delayed_scroll_start_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "wikipedia_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "wikipedia_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "wordpress_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "wordpress_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "worldjournal_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "worldjournal_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "wowwiki_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "wowwiki_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "wsj_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "wsj_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "yahoo_answers_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "yahoo_answers_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "yahoo_news_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "yahoo_news_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "youtube_mobile_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "youtube_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_016.wprgo" - }, - "google_image_search_mobile_2018": { - "DEFAULT": "key_mobile_sites_020.wprgo" - }, - "google_image_search_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_020.wprgo" - }, - "google_news_mobile_2018": { - "DEFAULT": "key_mobile_sites_018.wprgo" - }, - "google_news_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_018.wprgo" - }, - "gsp.ro_mobile_2018": { - "DEFAULT": "key_mobile_sites_019.wprgo" - }, - "gsp.ro_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_019.wprgo" - }, - "theverge_article_mobile_2018": { - "DEFAULT": "key_mobile_sites_017.wprgo" - }, - "theverge_article_mobile_sync_scroll_2018": { - "DEFAULT": "key_mobile_sites_017.wprgo" - }, "accu_weather_2018": { - "DEFAULT": "top_25_012.wprgo" + "DEFAULT": "rendering_mobile_000.wprgo" }, "accu_weather_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "twitch_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "twitch_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "google_docs_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "google_docs_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "facebook_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "facebook_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "wikipedia_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "wikipedia_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "yahoo_answers_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "yahoo_answers_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "booking.com_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "booking.com_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "wordpress_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "wordpress_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "espn_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "espn_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "blogspot_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "blogspot_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "yahoo_news_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "yahoo_news_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "pinterest_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "pinterest_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "yahoo_sports_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "yahoo_sports_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "techcrunch_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "techcrunch_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" + "DEFAULT": "rendering_mobile_000.wprgo" }, "amazon_2018": { - "DEFAULT": "top_25_012.wprgo" + "DEFAULT": "rendering_mobile_000.wprgo" }, "amazon_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" + "DEFAULT": "rendering_mobile_000.wprgo" }, - "cnn_2018": { - "DEFAULT": "top_25_012.wprgo" + "amazon_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, - "cnn_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "ebay_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "ebay_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "linkedin_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "linkedin_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "youtube_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "youtube_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "gmail_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "gmail_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "google_plus_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "google_plus_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "twitter_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "twitter_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "google_web_search_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "google_web_search_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "google_calendar_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "google_calendar_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "google_image_search_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "google_image_search_desktop_gpu_raster_2018": { - "DEFAULT": "top_25_012.wprgo" - }, - "filter_terrain_svg": { - "DEFAULT": "tough_filters_cases_002.wprgo" - }, - "motion_mark_focus": { - "DEFAULT": "tough_filters_cases_002.wprgo" + "amazon_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, "analog_clock_svg": { - "DEFAULT": "tough_filters_cases_002.wprgo" + "DEFAULT": "rendering_mobile_002.wprgo" }, - "ie_pirate_mark": { - "DEFAULT": "tough_filters_cases_002.wprgo" - }, - "guimark_vector_chart": { - "DEFAULT": "tough_path_rendering_cases_002.wprgo" + "androidpolice_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, - "motion_mark_canvas_fill_shapes": { - "DEFAULT": "tough_path_rendering_cases_002.wprgo" - }, - "motion_mark_canvas_stroke_shapes": { - "DEFAULT": "tough_path_rendering_cases_002.wprgo" - }, - "ie_chalkboard": { - "DEFAULT": "tough_path_rendering_cases_002.wprgo" - }, - "geo_apis": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "hakim": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_tweet_map": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_video_city": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_worker_fountains": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_asteroid_belt": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_fireflies": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_fish_ie_tank": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_snow": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_speed_reading": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "jarro_doverson": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "mix_10k": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "runway": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "spielzeugz": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "man_in_blue": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "chip_tune": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "crafty_mind": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "effect_games": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "kevs_3d": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "megi_dish": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "smash_cat": { - "DEFAULT": "tough_canvas_cases_001.wprgo" - }, - "microsoft_performance": { - "DEFAULT": "tough_animation_cases_000.wprgo" - }, - "ebay_scroll_2018": { - "DEFAULT": "simple_mobile_sites_003.wprgo" - }, - "flickr_scroll_2018": { - "DEFAULT": "simple_mobile_sites_003.wprgo" - }, - "nyc_gov_scroll_2018": { - "DEFAULT": "simple_mobile_sites_003.wprgo" - }, - "nytimes_scroll_2018": { - "DEFAULT": "simple_mobile_sites_003.wprgo" - }, - "aquarium_20k": { - "DEFAULT": "tough_webgl_cases_006.wprgo" + "androidpolice_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, "animometer_webgl": { - "DEFAULT": "tough_webgl_cases_006.wprgo" + "DEFAULT": "rendering_mobile_006.wprgo" }, "aquarium": { - "DEFAULT": "tough_webgl_cases_006.wprgo" + "DEFAULT": "rendering_mobile_006.wprgo" }, - "blob": { - "DEFAULT": "tough_webgl_cases_006.wprgo" + "aquarium_20k": { + "DEFAULT": "rendering_mobile_006.wprgo" }, - "dynamic_cube_map": { - "DEFAULT": "tough_webgl_cases_006.wprgo" + "baidu_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, - "nvidia_vertex_buffer_object": { - "DEFAULT": "tough_webgl_cases_006.wprgo" - }, - "particles": { - "DEFAULT": "tough_webgl_cases_006.wprgo" - }, - "san_angeles": { - "DEFAULT": "tough_webgl_cases_006.wprgo" - }, - "earth": { - "DEFAULT": "tough_webgl_cases_006.wprgo" - }, - "many_planets_deep": { - "DEFAULT": "tough_webgl_cases_006.wprgo" - }, - "core_scroll_header_panel": { - "DEFAULT": "polymer_001.wprgo" - }, - "paper_button": { - "DEFAULT": "polymer_001.wprgo" - }, - "paper_calculator": { - "DEFAULT": "polymer_001.wprgo" - }, - "paper_checkbox": { - "DEFAULT": "polymer_001.wprgo" - }, - "paper_fab": { - "DEFAULT": "polymer_001.wprgo" - }, - "paper_icon_button": { - "DEFAULT": "polymer_001.wprgo" - }, - "paper_shadow": { - "DEFAULT": "polymer_001.wprgo" - }, - "paper_tabs": { - "DEFAULT": "polymer_001.wprgo" - }, - "paper_toggle_button": { - "DEFAULT": "polymer_001.wprgo" - }, - "cats_unscaled": { - "DEFAULT": "tough_image_decode_cases_000.wprgo" - }, - "cats_viewport_width": { - "DEFAULT": "tough_image_decode_cases_000.wprgo" - }, - "list_recycle_transform": { - "DEFAULT": "key_silk_cases_001.wprgo" - }, - "sticky_using_webkit": { - "DEFAULT": "key_silk_cases_001.wprgo" - }, - "card_expansion": { - "DEFAULT": "key_silk_cases_014.wprgo" - }, - "card_expansion_animated": { - "DEFAULT": "key_silk_cases_014.wprgo" - }, - "card_flying": { - "DEFAULT": "key_silk_cases_014.wprgo" - }, - "zoom_in_animation": { - "DEFAULT": "key_silk_cases_014.wprgo" - }, - "swipe_to_dismiss": { - "DEFAULT": "key_silk_cases_014.wprgo" - }, - "horizontal_vertical_expansion": { - "DEFAULT": "key_silk_cases_014.wprgo" - }, - "vertical_expansion": { - "DEFAULT": "key_silk_cases_014.wprgo" - }, - "parallax_effect": { - "DEFAULT": "key_silk_cases_014.wprgo" - }, - "coordinated_animation": { - "DEFAULT": "key_silk_cases_014.wprgo" - }, - "mask_transition_animation": { - "DEFAULT": "key_silk_cases_014.wprgo" - }, - "card_expansion_images_text": { - "DEFAULT": "key_silk_cases_015.wprgo" - }, - "physical_simulation": { - "DEFAULT": "key_silk_cases_014.wprgo" + "baidu_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, "basic_stream": { - "DEFAULT": "key_silk_cases_002.wprgo" + "DEFAULT": "rendering_mobile_019.wprgo" }, - "google_news_ios": { - "DEFAULT": "key_silk_cases_002.wprgo" + "bing_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, - "mobile_news_sandbox": { - "DEFAULT": "key_silk_cases_002.wprgo" + "bing_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, - "famo_us_twitter_demo": { - "DEFAULT": "key_silk_cases_002.wprgo" + "blob": { + "DEFAULT": "rendering_mobile_006.wprgo" }, - "svg_icon_raster": { - "DEFAULT": "key_silk_cases_016.wprgo" + "blogspot_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" }, - "gws_google_expansion": { - "DEFAULT": "key_silk_cases_002.wprgo" + "blogspot_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" }, - "gws_boogie_expansion": { - "DEFAULT": "key_silk_cases_017.wprgo" + "blogspot_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, - "polymer_topeka": { - "DEFAULT": "key_silk_cases_018.wprgo" + "blogspot_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, - "cnn_pathological_2018": { - "DEFAULT": "pathological_mobile_sites_012.wprgo" + "boingboing_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, - "espn_pathological_2018": { - "DEFAULT": "pathological_mobile_sites_012.wprgo" + "boingboing_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, - "guardian_pathological_2018": { - "DEFAULT": "pathological_mobile_sites_012.wprgo" + "booking.com_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" }, - "latimes_pathological_2018": { - "DEFAULT": "pathological_mobile_sites_012.wprgo" + "booking.com_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" }, - "linkedin_pathological_2018": { - "DEFAULT": "pathological_mobile_sites_012.wprgo" + "booking.com_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, - "pbs_pathological_2018": { - "DEFAULT": "pathological_mobile_sites_012.wprgo" + "booking.com_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, - "recode_pathological_2018": { - "DEFAULT": "pathological_mobile_sites_012.wprgo" + "capitolvolkswagen_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, - "wow_wiki_pathological_2018": { - "DEFAULT": "pathological_mobile_sites_012.wprgo" + "capitolvolkswagen_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" }, - "yahoo_sports_pathological_2018": { - "DEFAULT": "pathological_mobile_sites_012.wprgo" + "card_expansion": { + "DEFAULT": "rendering_mobile_020.wprgo" }, - "zdnet_pathological_2018": { - "DEFAULT": "pathological_mobile_sites_012.wprgo" + "card_expansion_animated": { + "DEFAULT": "rendering_mobile_020.wprgo" }, - "js_full_screen_invalidation": { - "DEFAULT": "tough_compositor_cases_001.wprgo" + "card_expansion_images_text": { + "DEFAULT": "rendering_mobile_021.wprgo" }, - "new_tilings": { - "DEFAULT": "tough_compositor_cases_002.wprgo" + "card_flying": { + "DEFAULT": "rendering_mobile_020.wprgo" + }, + "cats_unscaled": { + "DEFAULT": "rendering_mobile_008.wprgo" + }, + "cats_viewport_width": { + "DEFAULT": "rendering_mobile_008.wprgo" }, "cc_poster_circle": { - "DEFAULT": "tough_compositor_cases_001.wprgo" - }, - "js_poster_circle": { - "DEFAULT": "tough_compositor_cases_001.wprgo" - }, - "js_scroll_200_layer_grid": { - "DEFAULT": "tough_compositor_cases_001.wprgo" - }, - "cc_scroll_text_only": { - "DEFAULT": "tough_compositor_cases_001.wprgo" - }, - "js_scroll_text_only": { - "DEFAULT": "tough_compositor_cases_001.wprgo" + "DEFAULT": "rendering_mobile_009.wprgo" }, "cc_scroll_200_layer_grid": { - "DEFAULT": "tough_compositor_cases_001.wprgo" + "DEFAULT": "rendering_mobile_009.wprgo" + }, + "cc_scroll_text_only": { + "DEFAULT": "rendering_mobile_009.wprgo" + }, + "chip_tune": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "cnn_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "cnn_article_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "cnn_article_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "cnn_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "cnn_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "cnn_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "cnn_pathological_2018": { + "DEFAULT": "rendering_mobile_025.wprgo" + }, + "coordinated_animation": { + "DEFAULT": "rendering_mobile_020.wprgo" + }, + "core_scroll_header_panel": { + "DEFAULT": "rendering_mobile_017.wprgo" + }, + "crafty_mind": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "deviantart_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "deviantart_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "digg_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "digg_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "dynamic_cube_map": { + "DEFAULT": "rendering_mobile_006.wprgo" + }, + "earth": { + "DEFAULT": "rendering_mobile_006.wprgo" + }, + "ebay_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "ebay_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "ebay_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "ebay_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "ebay_scroll_2018": { + "DEFAULT": "rendering_mobile_016.wprgo" + }, + "effect_games": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "espn_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "espn_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "espn_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "espn_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "espn_pathological_2018": { + "DEFAULT": "rendering_mobile_025.wprgo" + }, + "facebook_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "facebook_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "facebook_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "facebook_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "famo_us_twitter_demo": { + "DEFAULT": "rendering_mobile_019.wprgo" + }, + "filter_terrain_svg": { + "DEFAULT": "rendering_mobile_002.wprgo" + }, + "flickr_scroll_2018": { + "DEFAULT": "rendering_mobile_016.wprgo" + }, + "forecast.io_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "forecast.io_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "geo_apis": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "gmail_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "gmail_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "google_calendar_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "google_calendar_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "google_docs_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "google_docs_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "google_image_search_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "google_image_search_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "google_image_search_mobile_2018": { + "DEFAULT": "rendering_mobile_015.wprgo" + }, + "google_image_search_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_015.wprgo" + }, + "google_news_ios": { + "DEFAULT": "rendering_mobile_019.wprgo" + }, + "google_news_mobile_2018": { + "DEFAULT": "rendering_mobile_013.wprgo" + }, + "google_news_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_013.wprgo" + }, + "google_plus_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "google_plus_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "google_plus_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "google_plus_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "google_web_search_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "google_web_search_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "google_web_search_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "google_web_search_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "gsp.ro_mobile_2018": { + "DEFAULT": "rendering_mobile_014.wprgo" + }, + "gsp.ro_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_014.wprgo" + }, + "guardian_pathological_2018": { + "DEFAULT": "rendering_mobile_025.wprgo" + }, + "guimark_vector_chart": { + "DEFAULT": "rendering_mobile_003.wprgo" + }, + "gws_boogie_expansion": { + "DEFAULT": "rendering_mobile_023.wprgo" + }, + "gws_google_expansion": { + "DEFAULT": "rendering_mobile_019.wprgo" + }, + "hakim": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "horizontal_vertical_expansion": { + "DEFAULT": "rendering_mobile_020.wprgo" + }, + "ie_chalkboard": { + "DEFAULT": "rendering_mobile_003.wprgo" + }, + "ie_pirate_mark": { + "DEFAULT": "rendering_mobile_002.wprgo" + }, + "jarro_doverson": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "js_full_screen_invalidation": { + "DEFAULT": "rendering_mobile_009.wprgo" + }, + "js_poster_circle": { + "DEFAULT": "rendering_mobile_009.wprgo" + }, + "js_scroll_200_layer_grid": { + "DEFAULT": "rendering_mobile_009.wprgo" + }, + "js_scroll_text_only": { + "DEFAULT": "rendering_mobile_009.wprgo" + }, + "kevs_3d": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "latimes_pathological_2018": { + "DEFAULT": "rendering_mobile_025.wprgo" + }, + "linkedin_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "linkedin_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "linkedin_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "linkedin_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "linkedin_pathological_2018": { + "DEFAULT": "rendering_mobile_025.wprgo" + }, + "list_recycle_transform": { + "DEFAULT": "rendering_mobile_018.wprgo" + }, + "man_in_blue": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "many_planets_deep": { + "DEFAULT": "rendering_mobile_006.wprgo" + }, + "mask_transition_animation": { + "DEFAULT": "rendering_mobile_020.wprgo" + }, + "megi_dish": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "microsoft_asteroid_belt": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "microsoft_fireflies": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "microsoft_fish_ie_tank": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "microsoft_performance": { + "DEFAULT": "rendering_mobile_005.wprgo" + }, + "microsoft_snow": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "microsoft_speed_reading": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "microsoft_tweet_map": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "microsoft_video_city": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "microsoft_worker_fountains": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "mix_10k": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "mlb_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "mlb_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "mobile_news_sandbox": { + "DEFAULT": "rendering_mobile_019.wprgo" + }, + "motion_mark_canvas_fill_shapes": { + "DEFAULT": "rendering_mobile_003.wprgo" + }, + "motion_mark_canvas_stroke_shapes": { + "DEFAULT": "rendering_mobile_003.wprgo" + }, + "motion_mark_focus": { + "DEFAULT": "rendering_mobile_002.wprgo" + }, + "new_tilings": { + "DEFAULT": "rendering_mobile_010.wprgo" + }, + "nvidia_vertex_buffer_object": { + "DEFAULT": "rendering_mobile_006.wprgo" + }, + "nyc_gov_scroll_2018": { + "DEFAULT": "rendering_mobile_016.wprgo" + }, + "nytimes_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "nytimes_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "nytimes_scroll_2018": { + "DEFAULT": "rendering_mobile_016.wprgo" + }, + "paper_button": { + "DEFAULT": "rendering_mobile_017.wprgo" + }, + "paper_calculator": { + "DEFAULT": "rendering_mobile_017.wprgo" + }, + "paper_checkbox": { + "DEFAULT": "rendering_mobile_017.wprgo" + }, + "paper_fab": { + "DEFAULT": "rendering_mobile_017.wprgo" + }, + "paper_icon_button": { + "DEFAULT": "rendering_mobile_017.wprgo" + }, + "paper_shadow": { + "DEFAULT": "rendering_mobile_017.wprgo" + }, + "paper_tabs": { + "DEFAULT": "rendering_mobile_017.wprgo" + }, + "paper_toggle_button": { + "DEFAULT": "rendering_mobile_017.wprgo" + }, + "parallax_effect": { + "DEFAULT": "rendering_mobile_020.wprgo" + }, + "particles": { + "DEFAULT": "rendering_mobile_006.wprgo" + }, + "pbs_pathological_2018": { + "DEFAULT": "rendering_mobile_025.wprgo" + }, + "physical_simulation": { + "DEFAULT": "rendering_mobile_020.wprgo" + }, + "pinterest_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "pinterest_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "pinterest_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "pinterest_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "polymer_topeka": { + "DEFAULT": "rendering_mobile_024.wprgo" + }, + "recode_pathological_2018": { + "DEFAULT": "rendering_mobile_025.wprgo" + }, + "reddit_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "reddit_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "runway": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "san_angeles": { + "DEFAULT": "rendering_mobile_006.wprgo" + }, + "sfgate_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "sfgate_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "slashdot_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "slashdot_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "smash_cat": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "spielzeugz": { + "DEFAULT": "rendering_mobile_004.wprgo" + }, + "sticky_using_webkit": { + "DEFAULT": "rendering_mobile_018.wprgo" + }, + "svg_icon_raster": { + "DEFAULT": "rendering_mobile_022.wprgo" + }, + "swipe_to_dismiss": { + "DEFAULT": "rendering_mobile_020.wprgo" + }, + "techcrunch_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "techcrunch_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "techcrunch_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "techcrunch_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "theverge_article_mobile_2018": { + "DEFAULT": "rendering_mobile_012.wprgo" + }, + "theverge_article_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_012.wprgo" + }, + "theverge_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "theverge_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "twitch_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "twitch_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "twitter_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "twitter_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "twitter_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "twitter_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "usatoday_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "usatoday_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "vertical_expansion": { + "DEFAULT": "rendering_mobile_020.wprgo" + }, + "wikipedia_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "wikipedia_delayed_scroll_start_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "wikipedia_delayed_scroll_start_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "wikipedia_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "wikipedia_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "wikipedia_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "wordpress_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "wordpress_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "wordpress_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "wordpress_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "worldjournal_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "worldjournal_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "wow_wiki_pathological_2018": { + "DEFAULT": "rendering_mobile_025.wprgo" + }, + "wowwiki_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "wowwiki_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "wsj_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "wsj_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "yahoo_answers_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "yahoo_answers_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "yahoo_answers_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "yahoo_answers_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "yahoo_news_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "yahoo_news_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "yahoo_news_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "yahoo_news_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "yahoo_sports_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "yahoo_sports_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "yahoo_sports_pathological_2018": { + "DEFAULT": "rendering_mobile_025.wprgo" + }, + "youtube_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "youtube_desktop_gpu_raster_2018": { + "DEFAULT": "rendering_mobile_000.wprgo" + }, + "youtube_mobile_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "youtube_mobile_sync_scroll_2018": { + "DEFAULT": "rendering_mobile_011.wprgo" + }, + "zdnet_pathological_2018": { + "DEFAULT": "rendering_mobile_025.wprgo" + }, + "zoom_in_animation": { + "DEFAULT": "rendering_mobile_020.wprgo" } }, "description": "Describes the Web Page Replay archives for a story set. Don't edit by hand! Use record_wpr for updating.", "platform_specific": true -} +} \ No newline at end of file
diff --git a/tools/perf/page_sets/data/top_25_012.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_000.wprgo.sha1 similarity index 100% copy from tools/perf/page_sets/data/top_25_012.wprgo.sha1 copy to tools/perf/page_sets/data/rendering_mobile_000.wprgo.sha1
diff --git a/tools/perf/page_sets/data/tough_filters_cases_002.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_002.wprgo.sha1 similarity index 100% copy from tools/perf/page_sets/data/tough_filters_cases_002.wprgo.sha1 copy to tools/perf/page_sets/data/rendering_mobile_002.wprgo.sha1
diff --git a/tools/perf/page_sets/data/tough_path_rendering_cases_002.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_003.wprgo.sha1 similarity index 100% copy from tools/perf/page_sets/data/tough_path_rendering_cases_002.wprgo.sha1 copy to tools/perf/page_sets/data/rendering_mobile_003.wprgo.sha1
diff --git a/tools/perf/page_sets/data/tough_canvas_cases_001.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_004.wprgo.sha1 similarity index 100% copy from tools/perf/page_sets/data/tough_canvas_cases_001.wprgo.sha1 copy to tools/perf/page_sets/data/rendering_mobile_004.wprgo.sha1
diff --git a/tools/perf/page_sets/data/rendering_mobile_005.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_005.wprgo.sha1 new file mode 100644 index 0000000..fcc4fba7 --- /dev/null +++ b/tools/perf/page_sets/data/rendering_mobile_005.wprgo.sha1
@@ -0,0 +1 @@ +04c3b77dd4e18e4035dad2771bbfe20cf47c9c5b \ No newline at end of file
diff --git a/tools/perf/page_sets/data/tough_webgl_cases_006.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_006.wprgo.sha1 similarity index 100% copy from tools/perf/page_sets/data/tough_webgl_cases_006.wprgo.sha1 copy to tools/perf/page_sets/data/rendering_mobile_006.wprgo.sha1
diff --git a/tools/perf/page_sets/data/tough_image_decode_cases_000.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_008.wprgo.sha1 similarity index 100% copy from tools/perf/page_sets/data/tough_image_decode_cases_000.wprgo.sha1 copy to tools/perf/page_sets/data/rendering_mobile_008.wprgo.sha1
diff --git a/tools/perf/page_sets/data/tough_compositor_cases_001.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_009.wprgo.sha1 similarity index 100% copy from tools/perf/page_sets/data/tough_compositor_cases_001.wprgo.sha1 copy to tools/perf/page_sets/data/rendering_mobile_009.wprgo.sha1
diff --git a/tools/perf/page_sets/data/tough_compositor_cases_002.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_010.wprgo.sha1 similarity index 100% copy from tools/perf/page_sets/data/tough_compositor_cases_002.wprgo.sha1 copy to tools/perf/page_sets/data/rendering_mobile_010.wprgo.sha1
diff --git a/tools/perf/page_sets/data/rendering_mobile_011.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_011.wprgo.sha1 new file mode 100644 index 0000000..6428f690 --- /dev/null +++ b/tools/perf/page_sets/data/rendering_mobile_011.wprgo.sha1
@@ -0,0 +1 @@ +426a18415a403b36311e5611626af487a1017642 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/rendering_mobile_012.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_012.wprgo.sha1 new file mode 100644 index 0000000..4f2799d8 --- /dev/null +++ b/tools/perf/page_sets/data/rendering_mobile_012.wprgo.sha1
@@ -0,0 +1 @@ +58491427488fac00fc00b426980d9ce830fb7850 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/rendering_mobile_013.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_013.wprgo.sha1 new file mode 100644 index 0000000..d1afb75f --- /dev/null +++ b/tools/perf/page_sets/data/rendering_mobile_013.wprgo.sha1
@@ -0,0 +1 @@ +6f54d2b7b9035366354c133e1b226082f53af263 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/rendering_mobile_014.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_014.wprgo.sha1 new file mode 100644 index 0000000..96e681c --- /dev/null +++ b/tools/perf/page_sets/data/rendering_mobile_014.wprgo.sha1
@@ -0,0 +1 @@ +b2399395a1f9245fa39aff6cf2612e2f894ef4f9 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/rendering_mobile_015.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_015.wprgo.sha1 new file mode 100644 index 0000000..00e70f3 --- /dev/null +++ b/tools/perf/page_sets/data/rendering_mobile_015.wprgo.sha1
@@ -0,0 +1 @@ +65a6cb2f94319afba4464d6d43c934744d439d0a \ No newline at end of file
diff --git a/tools/perf/page_sets/data/simple_mobile_sites_003.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_016.wprgo.sha1 similarity index 100% rename from tools/perf/page_sets/data/simple_mobile_sites_003.wprgo.sha1 rename to tools/perf/page_sets/data/rendering_mobile_016.wprgo.sha1
diff --git a/tools/perf/page_sets/data/polymer_001.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_017.wprgo.sha1 similarity index 100% rename from tools/perf/page_sets/data/polymer_001.wprgo.sha1 rename to tools/perf/page_sets/data/rendering_mobile_017.wprgo.sha1
diff --git a/tools/perf/page_sets/data/rendering_mobile_018.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_018.wprgo.sha1 new file mode 100644 index 0000000..0c306e9 --- /dev/null +++ b/tools/perf/page_sets/data/rendering_mobile_018.wprgo.sha1
@@ -0,0 +1 @@ +1fa8b311caf4c57c5478fac16efe800d1bc63be9 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/rendering_mobile_019.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_019.wprgo.sha1 new file mode 100644 index 0000000..2db3b7c --- /dev/null +++ b/tools/perf/page_sets/data/rendering_mobile_019.wprgo.sha1
@@ -0,0 +1 @@ +6c4cc257cb1483cee8cc7fe11bfea612d964753d \ No newline at end of file
diff --git a/tools/perf/page_sets/data/rendering_mobile_020.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_020.wprgo.sha1 new file mode 100644 index 0000000..2814c57 --- /dev/null +++ b/tools/perf/page_sets/data/rendering_mobile_020.wprgo.sha1
@@ -0,0 +1 @@ +d2e0ca9fd56dc6df65add5a29d27739b3b8d4508 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/rendering_mobile_021.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_021.wprgo.sha1 new file mode 100644 index 0000000..3ecc078f --- /dev/null +++ b/tools/perf/page_sets/data/rendering_mobile_021.wprgo.sha1
@@ -0,0 +1 @@ +5569820a33492162cfb547f8597af086d4817193 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/rendering_mobile_022.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_022.wprgo.sha1 new file mode 100644 index 0000000..6803bec2 --- /dev/null +++ b/tools/perf/page_sets/data/rendering_mobile_022.wprgo.sha1
@@ -0,0 +1 @@ +33b52f63d944dce5e854021705c3d402e516b2e1 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/rendering_mobile_023.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_023.wprgo.sha1 new file mode 100644 index 0000000..1989377 --- /dev/null +++ b/tools/perf/page_sets/data/rendering_mobile_023.wprgo.sha1
@@ -0,0 +1 @@ +818024542b7da020273beeb7a58cb659329c343f \ No newline at end of file
diff --git a/tools/perf/page_sets/data/rendering_mobile_024.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_024.wprgo.sha1 new file mode 100644 index 0000000..0c7d440 --- /dev/null +++ b/tools/perf/page_sets/data/rendering_mobile_024.wprgo.sha1
@@ -0,0 +1 @@ +5ef089f33fe58ce5a4ac5dada9aab2fa5a20c447 \ No newline at end of file
diff --git a/tools/perf/page_sets/data/pathological_mobile_sites_012.wprgo.sha1 b/tools/perf/page_sets/data/rendering_mobile_025.wprgo.sha1 similarity index 100% rename from tools/perf/page_sets/data/pathological_mobile_sites_012.wprgo.sha1 rename to tools/perf/page_sets/data/rendering_mobile_025.wprgo.sha1
diff --git a/tools/perf/page_sets/rendering/tough_webgl_cases.py b/tools/perf/page_sets/rendering/tough_webgl_cases.py index 8548b0d..80e554e 100644 --- a/tools/perf/page_sets/rendering/tough_webgl_cases.py +++ b/tools/perf/page_sets/rendering/tough_webgl_cases.py
@@ -25,8 +25,7 @@ @property def skipped_gpus(self): # crbug.com/462729 - return ['arm', 'broadcom', 'hisilicon', 'imagination', 'qualcomm', - 'vivante'] + return ['arm', 'broadcom', 'hisilicon', 'imagination', 'vivante'] def RunNavigateSteps(self, action_runner): super(ToughWebglPage, self).RunNavigateSteps(action_runner)
diff --git a/tools/perf/process_perf_results.py b/tools/perf/process_perf_results.py index d0b405a..3d279c3 100755 --- a/tools/perf/process_perf_results.py +++ b/tools/perf/process_perf_results.py
@@ -404,10 +404,8 @@ build_properties, output_json_file, service_account_file)) # Kick off the uploads in mutliple processes - # Maximimze the parallelization by setting the number of parallel processes - # to the number of invocations. This is because a significant part of - # uploading are I/Os bounds. - pool = mp.Pool(len(invocations)) + cpus = mp.cpu_count() + pool = mp.Pool(cpus) try: async_result = pool.map_async( _upload_individual_benchmark, invocations)
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml index f5a06d7..b509c28 100644 --- a/tools/traffic_annotation/summary/annotations.xml +++ b/tools/traffic_annotation/summary/annotations.xml
@@ -40,6 +40,7 @@ <item id="certificate_verifier" hash_code="113553577" type="0" content_hash_code="62346354" os_list="linux,windows" file_path="net/cert_net/cert_net_fetcher_impl.cc"/> <item id="chrome_apps_socket_api" hash_code="8591273" type="0" content_hash_code="70868355" os_list="linux,windows" file_path="extensions/browser/api/socket/socket.cc"/> <item id="chrome_cleaner" hash_code="27071967" type="0" content_hash_code="111240292" os_list="windows" file_path="chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_fetcher_win.cc"/> + <item id="chrome_cleanup_report" hash_code="71102679" type="0" content_hash_code="26537237" os_list="windows" file_path="chrome/chrome_cleaner/logging/cleaner_logging_service.cc"/> <item id="chrome_feedback_report_app" hash_code="134729048" type="0" content_hash_code="73916972" os_list="linux,windows" file_path="components/feedback/feedback_uploader.cc"/> <item id="chrome_variations_service" hash_code="115188287" type="0" content_hash_code="32485683" os_list="linux,windows" file_path="components/variations/service/variations_service.cc"/> <item id="client_download_request" hash_code="125522256" type="0" content_hash_code="23897505" os_list="linux,windows" file_path="chrome/browser/safe_browsing/download_protection/check_client_download_request.cc"/> @@ -178,7 +179,7 @@ <item id="per_user_topic_registration_request" hash_code="10498172" type="0" content_hash_code="32495619" os_list="linux,windows" file_path="components/invalidation/impl/per_user_topic_registration_request.cc"/> <item id="permission_reporting" hash_code="131741641" type="0" deprecated="2018-03-06" content_hash_code="7213535" file_path=""/> <item id="permission_request_creator" hash_code="43206794" type="0" content_hash_code="73571699" os_list="linux,windows" file_path="chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc"/> - <item id="persist_blob_to_indexed_db" hash_code="32030464" type="0" content_hash_code="35410079" os_list="linux,windows" file_path="content/browser/indexed_db/indexed_db_backing_store.cc"/> + <item id="persist_blob_to_indexed_db" hash_code="32030464" type="0" content_hash_code="35410079" os_list="windows" file_path="content/browser/indexed_db/indexed_db_backing_store.cc"/> <item id="plugins_resource_service" hash_code="49601082" type="0" content_hash_code="6877335" os_list="linux,windows" file_path="chrome/browser/plugins/plugins_resource_service.cc"/> <item id="popular_sites_fetch" hash_code="50755044" type="0" content_hash_code="6910083" os_list="linux,windows" file_path="components/ntp_tiles/popular_sites_impl.cc"/> <item id="port_forwarding_controller_socket" hash_code="95075845" type="0" content_hash_code="122163428" os_list="linux,windows" file_path="chrome/browser/devtools/device/port_forwarding_controller.cc"/> @@ -255,6 +256,7 @@ <item id="translate_url_fetcher" hash_code="137116619" type="0" content_hash_code="104217506" os_list="linux,windows" file_path="components/translate/core/browser/translate_url_fetcher.cc"/> <item id="ui_devtools_server" hash_code="4986170" type="0" content_hash_code="62670263" os_list="linux,windows" file_path="components/ui_devtools/devtools_server.cc"/> <item id="undefined" hash_code="45578882" type="0" reserved="1" os_list="linux,windows" file_path=""/> + <item id="unwanted_software_report" hash_code="43759504" type="0" content_hash_code="111455033" os_list="windows" file_path="chrome/chrome_cleaner/logging/reporter_logging_service.cc"/> <item id="url_fetcher_downloader" hash_code="113231892" type="0" content_hash_code="61085066" os_list="linux,windows" file_path="components/update_client/url_fetcher_downloader.cc"/> <item id="url_prevision_fetcher" hash_code="118389509" type="0" content_hash_code="66145513" os_list="linux,windows" file_path="content/browser/media/url_provision_fetcher.cc"/> <item id="user_info_fetcher" hash_code="22265491" type="0" content_hash_code="72016232" os_list="linux,windows" file_path="components/policy/core/common/cloud/user_info_fetcher.cc"/> @@ -263,7 +265,7 @@ <item id="web_history_expire_between_dates" hash_code="126122632" type="1" second_id="110307337" content_hash_code="34304787" os_list="linux,windows" semantics_fields="2,3,4" policy_fields="4" file_path="components/history/core/browser/history_service.cc"/> <item id="web_history_query" hash_code="17400350" type="1" second_id="110307337" content_hash_code="36075147" os_list="linux,windows" semantics_fields="2,3,4" policy_fields="4" file_path="components/history/core/browser/browsing_history_service.cc"/> <item id="web_history_service" hash_code="110307337" type="2" content_hash_code="16140045" os_list="linux,windows" semantics_fields="1,5" policy_fields="-1,3" file_path="components/history/core/browser/web_history_service.cc"/> - <item id="webrtc_event_log_uploader" hash_code="24186190" type="0" content_hash_code="107123816" os_list="linux,windows" file_path="chrome/browser/media/webrtc/webrtc_event_log_uploader.cc"/> + <item id="webrtc_event_log_uploader" hash_code="24186190" type="0" content_hash_code="11005245" os_list="linux,windows" file_path="chrome/browser/media/webrtc/webrtc_event_log_uploader.cc"/> <item id="webrtc_log_upload" hash_code="62443804" type="0" content_hash_code="33661169" os_list="linux,windows" file_path="chrome/browser/media/webrtc/webrtc_log_uploader.cc"/> <item id="webrtc_peer_connection" hash_code="63497370" type="0" content_hash_code="60553259" os_list="linux,windows" file_path="content/renderer/media/webrtc/peer_connection_dependency_factory.cc"/> <item id="websocket_basic_stream" hash_code="51586722" type="0" content_hash_code="68121427" os_list="linux,windows" file_path="net/websockets/websocket_basic_stream.cc"/> @@ -273,6 +275,4 @@ <item id="webstore_installer" hash_code="18764319" type="0" content_hash_code="11030110" os_list="linux,windows" file_path="chrome/browser/extensions/webstore_installer.cc"/> <item id="webui_content_scripts_download" hash_code="100545943" type="0" content_hash_code="119898059" os_list="linux,windows" file_path="extensions/browser/guest_view/web_view/web_ui/web_ui_url_fetcher.cc"/> <item id="xmpp_signal_strategy" hash_code="88906454" type="0" content_hash_code="88958321" os_list="linux,windows" file_path="remoting/signaling/xmpp_signal_strategy.cc"/> - <item id="chrome_cleanup_report" hash_code="71102679" type="0" content_hash_code="26537237" os_list="windows" file_path="chrome/chrome_cleaner/logging/cleaner_logging_service.cc"/> - <item id="unwanted_software_report" hash_code="43759504" type="0" content_hash_code="111455033" os_list="windows" file_path="chrome/chrome_cleaner/logging/reporter_logging_service.cc"/> </annotations>
diff --git a/tools/win/CreateTempFilesPerfEvaluation/CreateTempFilesPerfEval.cc b/tools/win/CreateTempFilesPerfEvaluation/CreateTempFilesPerfEval.cc index c427ff9f..664a39f 100644 --- a/tools/win/CreateTempFilesPerfEvaluation/CreateTempFilesPerfEval.cc +++ b/tools/win/CreateTempFilesPerfEvaluation/CreateTempFilesPerfEval.cc
@@ -4,7 +4,6 @@ #include <windows.h> -#include <shlwapi.h> #include <stdio.h> #include <tchar.h> @@ -13,6 +12,8 @@ #include <sstream> #include <string> +#include "base/win/shlwapi.h" + #pragma warning(disable : 4996) // Create |count| number of temp files at |folder_path| using GUID based method.
diff --git a/tools/win/ShowGlobals/ShowGlobals.cc b/tools/win/ShowGlobals/ShowGlobals.cc index 82f78e2a..792c671 100644 --- a/tools/win/ShowGlobals/ShowGlobals.cc +++ b/tools/win/ShowGlobals/ShowGlobals.cc
@@ -20,13 +20,14 @@ // Global variables are not necessarily a problem but it is useful to understand // them, and monitoring their changes can be instructive. -#include <atlbase.h> #include <dia2.h> #include <stdio.h> #include <algorithm> #include <vector> +#include "base/win/atl.h" + // Helper function for comparing strings - returns a strcmp/wcscmp compatible // value. int StringCompare(const std::wstring& lhs, const std::wstring& rhs) {
diff --git a/ui/accelerated_widget_mac/ca_transaction_observer.h b/ui/accelerated_widget_mac/ca_transaction_observer.h index 26ecb0a..40fd5d0 100644 --- a/ui/accelerated_widget_mac/ca_transaction_observer.h +++ b/ui/accelerated_widget_mac/ca_transaction_observer.h
@@ -51,11 +51,21 @@ virtual base::TimeDelta PreCommitTimeout() = 0; }; - class PostCommitObserver { + // PostCommitObserver sub-classes must communicate with the IO thread. The + // CATransactionCoordinator will retain registered observers to ensure that + // they are not deleted while registered. + class PostCommitObserver + : public base::RefCountedThreadSafe<PostCommitObserver> { public: virtual void OnActivateForTransaction() = 0; virtual void OnEnterPostCommit() = 0; virtual bool ShouldWaitInPostCommit() = 0; + + protected: + virtual ~PostCommitObserver() {} + + private: + friend class base::RefCountedThreadSafe<PostCommitObserver>; }; static CATransactionCoordinator& Get(); @@ -66,8 +76,8 @@ void AddPreCommitObserver(PreCommitObserver*); void RemovePreCommitObserver(PreCommitObserver*); - void AddPostCommitObserver(PostCommitObserver*); - void RemovePostCommitObserver(PostCommitObserver*); + void AddPostCommitObserver(scoped_refptr<PostCommitObserver>); + void RemovePostCommitObserver(scoped_refptr<PostCommitObserver>); private: friend class base::NoDestructor<CATransactionCoordinator>; @@ -82,7 +92,7 @@ bool active_ = false; bool disabled_for_testing_ = false; base::ObserverList<PreCommitObserver> pre_commit_observers_; - base::ObserverList<PostCommitObserver> post_commit_observers_; + std::set<scoped_refptr<PostCommitObserver>> post_commit_observers_; DISALLOW_COPY_AND_ASSIGN(CATransactionCoordinator); };
diff --git a/ui/accelerated_widget_mac/ca_transaction_observer.mm b/ui/accelerated_widget_mac/ca_transaction_observer.mm index 88c9096..e6d8b28f 100644 --- a/ui/accelerated_widget_mac/ca_transaction_observer.mm +++ b/ui/accelerated_widget_mac/ca_transaction_observer.mm
@@ -49,7 +49,7 @@ active_ = true; for (auto& observer : post_commit_observers_) - observer.OnActivateForTransaction(); + observer->OnActivateForTransaction(); [CATransaction addCommitHandler:^{ PreCommitHandler(); @@ -90,7 +90,7 @@ TRACE_EVENT0("ui", "CATransactionCoordinator: post-commit handler"); for (auto& observer : post_commit_observers_) - observer.OnEnterPostCommit(); + observer->OnEnterPostCommit(); auto* clock = base::DefaultTickClock::GetInstance(); const base::TimeTicks deadline = clock->NowTicks() + kPostCommitTimeout; @@ -131,13 +131,15 @@ } void CATransactionCoordinator::AddPostCommitObserver( - PostCommitObserver* observer) { - post_commit_observers_.AddObserver(observer); + scoped_refptr<PostCommitObserver> observer) { + DCHECK(!post_commit_observers_.count(observer)); + post_commit_observers_.insert(std::move(observer)); } void CATransactionCoordinator::RemovePostCommitObserver( - PostCommitObserver* observer) { - post_commit_observers_.RemoveObserver(observer); + scoped_refptr<PostCommitObserver> observer) { + DCHECK(post_commit_observers_.count(observer)); + post_commit_observers_.erase(std::move(observer)); } } // namespace ui
diff --git a/ui/accessibility/platform/ax_platform_node_win.h b/ui/accessibility/platform/ax_platform_node_win.h index 3c8e560..7aa39d9 100644 --- a/ui/accessibility/platform/ax_platform_node_win.h +++ b/ui/accessibility/platform/ax_platform_node_win.h
@@ -5,8 +5,6 @@ #ifndef UI_ACCESSIBILITY_PLATFORM_AX_PLATFORM_NODE_WIN_H_ #define UI_ACCESSIBILITY_PLATFORM_AX_PLATFORM_NODE_WIN_H_ -#include <atlbase.h> -#include <atlcom.h> #include <objbase.h> #include <oleacc.h> #include <oleauto.h> @@ -20,6 +18,7 @@ #include "base/compiler_specific.h" #include "base/metrics/histogram_macros.h" #include "base/observer_list.h" +#include "base/win/atl.h" #include "third_party/iaccessible2/ia2_api_all.h" #include "ui/accessibility/ax_export.h" #include "ui/accessibility/ax_text_utils.h"
diff --git a/ui/accessibility/platform/ax_platform_node_win_unittest.cc b/ui/accessibility/platform/ax_platform_node_win_unittest.cc index c7623ed..c47d1f46 100644 --- a/ui/accessibility/platform/ax_platform_node_win_unittest.cc +++ b/ui/accessibility/platform/ax_platform_node_win_unittest.cc
@@ -4,13 +4,12 @@ #include "ui/accessibility/platform/ax_platform_node.h" -#include <atlbase.h> -#include <atlcom.h> #include <oleacc.h> #include <wrl/client.h> #include <memory> +#include "base/win/atl.h" #include "base/win/scoped_bstr.h" #include "base/win/scoped_variant.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ui/accessibility/platform/ax_platform_relation_win.h b/ui/accessibility/platform/ax_platform_relation_win.h index 80ffd749..84fef44 100644 --- a/ui/accessibility/platform/ax_platform_relation_win.h +++ b/ui/accessibility/platform/ax_platform_relation_win.h
@@ -5,8 +5,6 @@ #ifndef UI_ACCESSIBILITY_PLATFORM_AX_PLATFORM_RELATION_WIN_H_ #define UI_ACCESSIBILITY_PLATFORM_AX_PLATFORM_RELATION_WIN_H_ -#include <atlbase.h> -#include <atlcom.h> #include <oleacc.h> #include <wrl/client.h> #include <vector> @@ -14,6 +12,7 @@ #include "base/compiler_specific.h" #include "base/metrics/histogram_macros.h" #include "base/observer_list.h" +#include "base/win/atl.h" #include "third_party/iaccessible2/ia2_api_all.h" #include "ui/accessibility/ax_export.h" #include "ui/accessibility/ax_text_utils.h"
diff --git a/ui/android/view_android.cc b/ui/android/view_android.cc index ec031a8..023147c 100644 --- a/ui/android/view_android.cc +++ b/ui/android/view_android.cc
@@ -182,6 +182,16 @@ children_.splice(children_.end(), children_, it); } +void ViewAndroid::MoveToBack(ViewAndroid* child) { + DCHECK(child); + auto it = std::find(children_.begin(), children_.end(), child); + DCHECK(it != children_.end()); + + // Bottom element is placed at the beginning of the list. + if (*it != children_.front()) + children_.splice(children_.begin(), children_, it); +} + void ViewAndroid::RemoveFromParent() { if (parent_) parent_->RemoveChild(this);
diff --git a/ui/android/view_android.h b/ui/android/view_android.h index 8591685e..5562418 100644 --- a/ui/android/view_android.h +++ b/ui/android/view_android.h
@@ -126,6 +126,9 @@ // Moves the give child ViewAndroid to the front of the list so that it can be // the first responder of events. void MoveToFront(ViewAndroid* child); + // Moves the given child ViewAndroid to the back of the list so that any other + // view may respond to events first. + void MoveToBack(ViewAndroid* child); // Detaches this view from its parent. void RemoveFromParent(); @@ -178,6 +181,10 @@ ViewAndroid* parent() const { return parent_; } + bool OnTouchEventForTesting(const MotionEventAndroid& event) { + return OnTouchEvent(event); + } + protected: void RemoveAllChildren(bool attached_to_window);
diff --git a/ui/android/view_android_unittests.cc b/ui/android/view_android_unittests.cc index 71c758d..2a72742 100644 --- a/ui/android/view_android_unittests.cc +++ b/ui/android/view_android_unittests.cc
@@ -118,6 +118,11 @@ root_.MoveToFront(&view2_); GenerateTouchEventAt(100.f, 100.f); ExpectHit(handler2_); + + // View 2 moves back to the bottom, and events should hit View 1 again. + root_.MoveToBack(&view2_); + GenerateTouchEventAt(100.f, 100.f); + ExpectHit(handler1_); } TEST_F(ViewAndroidBoundsTest, MatchesViewArea) {
diff --git a/ui/aura/BUILD.gn b/ui/aura/BUILD.gn index 8320a4a..a479ecda 100644 --- a/ui/aura/BUILD.gn +++ b/ui/aura/BUILD.gn
@@ -58,6 +58,7 @@ "mus/property_utils.h", "mus/system_input_injector_mus.h", "mus/text_input_client_impl.h", + "mus/topmost_window_tracker.h", "mus/user_activity_forwarder.h", "mus/window_mus.h", "mus/window_port_mus.h", @@ -125,6 +126,7 @@ "mus/property_utils.cc", "mus/system_input_injector_mus.cc", "mus/text_input_client_impl.cc", + "mus/topmost_window_tracker.cc", "mus/user_activity_forwarder.cc", "mus/window_port_mus.cc", "mus/window_tree_client.cc",
diff --git a/ui/aura/env.cc b/ui/aura/env.cc index b8c4f9a..517d973 100644 --- a/ui/aura/env.cc +++ b/ui/aura/env.cc
@@ -6,7 +6,6 @@ #include "base/command_line.h" #include "base/lazy_instance.h" -#include "base/threading/thread_local.h" #include "services/ui/public/interfaces/window_tree.mojom.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/env_input_state_controller.h" @@ -34,9 +33,9 @@ namespace { -// Env is thread local so that aura may be used on multiple threads. -base::LazyInstance<base::ThreadLocalPointer<Env>>::Leaky lazy_tls_ptr = - LAZY_INSTANCE_INITIALIZER; +// Instance created by all static functions, except +// CreateLocalInstanceForInProcess(). See GetInstance() for details. +Env* g_primary_instance = nullptr; } // namespace @@ -52,14 +51,29 @@ for (EnvObserver& observer : observers_) observer.OnWillDestroyEnv(); - DCHECK_EQ(this, lazy_tls_ptr.Pointer()->Get()); - lazy_tls_ptr.Pointer()->Set(NULL); + if (this == g_primary_instance) + g_primary_instance = nullptr; } // static std::unique_ptr<Env> Env::CreateInstance(Mode mode) { - DCHECK(!lazy_tls_ptr.Pointer()->Get()); + DCHECK(!g_primary_instance); + // No make_unique as constructor is private. std::unique_ptr<Env> env(new Env(mode)); + g_primary_instance = env.get(); + env->Init(nullptr); + return env; +} + +// static +std::unique_ptr<Env> Env::CreateLocalInstanceForInProcess() { + // It is expected this constructor is called *after* an instance has been + // created of type MUS. The order, and DCHECKs, aren't strictly necessary but + // help reinforce when this should be used. + DCHECK(g_primary_instance); + DCHECK(g_primary_instance->mode() == Mode::MUS); + // No make_unique as constructor is private. + std::unique_ptr<Env> env(new Env(Mode::LOCAL)); env->Init(nullptr); return env; } @@ -68,8 +82,10 @@ // static std::unique_ptr<Env> Env::CreateInstanceToHostViz( service_manager::Connector* connector) { - DCHECK(!lazy_tls_ptr.Pointer()->Get()); + DCHECK(!g_primary_instance); + // No make_unique as constructor is private. std::unique_ptr<Env> env(new Env(Mode::LOCAL)); + g_primary_instance = env.get(); env->Init(connector); return env; } @@ -77,7 +93,7 @@ // static Env* Env::GetInstance() { - Env* env = lazy_tls_ptr.Pointer()->Get(); + Env* env = g_primary_instance; DCHECK(env) << "Env::CreateInstance must be called before getting the " "instance of Env."; return env; @@ -85,7 +101,7 @@ // static Env* Env::GetInstanceDontCreate() { - return lazy_tls_ptr.Pointer()->Get(); + return g_primary_instance; } std::unique_ptr<WindowPort> Env::CreateWindowPort(Window* window) { @@ -193,10 +209,7 @@ get_last_mouse_location_from_mus_(mode_ == Mode::MUS), input_state_lookup_(InputStateLookup::Create()), context_factory_(nullptr), - context_factory_private_(nullptr) { - DCHECK(lazy_tls_ptr.Pointer()->Get() == NULL); - lazy_tls_ptr.Pointer()->Set(this); -} + context_factory_private_(nullptr) {} void Env::Init(service_manager::Connector* connector) { if (mode_ == Mode::MUS) {
diff --git a/ui/aura/env.h b/ui/aura/env.h index c8056133f..a8c1b98b 100644 --- a/ui/aura/env.h +++ b/ui/aura/env.h
@@ -79,6 +79,11 @@ // SetWindowTreeClient() before any windows are created. static std::unique_ptr<Env> CreateInstance(Mode mode = Mode::LOCAL); + // Creates a new Env of type LOCAL. This factory function is intended for + // use when this process is providing the WindowService *and* acting as a + // client of the WindowService, for example, ash with SingleProcessMash. + static std::unique_ptr<Env> CreateLocalInstanceForInProcess(); + #if defined(USE_OZONE) // used to create a new Env that hosts the viz process. |connector| is the // connector used to establish outbound connections. @@ -86,6 +91,14 @@ service_manager::Connector* connector); #endif + // This returns the instance created by CreateInstance() or + // CreateInstanceToHostViz(). This does *not* return the instance returned + // by CreateLocalInstanceForInProcess(). The instance returned by + // CreateLocalInstanceForInProcess() is intended for use when an Env has + // already been created. For example, in chrome with SingleProcessMash an + // instance is created by way of CreateInstance() (which is the instance + // returned by GetInstance()) *and* an instance is created via + // CreateLocalInstanceForInProcess(). static Env* GetInstance(); static Env* GetInstanceDontCreate();
diff --git a/ui/aura/mus/topmost_window_tracker.cc b/ui/aura/mus/topmost_window_tracker.cc new file mode 100644 index 0000000..da1dd99d3 --- /dev/null +++ b/ui/aura/mus/topmost_window_tracker.cc
@@ -0,0 +1,41 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/aura/mus/topmost_window_tracker.h" + +#include "ui/aura/mus/window_mus.h" +#include "ui/aura/mus/window_tree_client.h" +#include "ui/aura/window.h" + +namespace aura { + +namespace { + +Window* GetRootOrNull(WindowMus* window_mus) { + return window_mus ? window_mus->GetWindow()->GetRootWindow() : nullptr; +} + +} // namespace + +TopmostWindowTracker::TopmostWindowTracker(WindowTreeClient* client) + : client_(client) {} + +TopmostWindowTracker::~TopmostWindowTracker() { + client_->StopObservingTopmostWindow(); +} + +void TopmostWindowTracker::OnTopmostWindowChanged( + const std::vector<WindowMus*> topmosts) { + DCHECK_LE(topmosts.size(), 2u); + // topmosts can be empty if the mouse/touch event happens outside of the + // screen. This rarely happens on device but can happen easily when Chrome + // runs within a Linux desktop. It's fine to just ignore such case. + if (topmosts.empty()) + return; + topmost_ = GetRootOrNull(topmosts[0]); + second_topmost_ = + (topmosts.size() > 1) ? GetRootOrNull(topmosts[1]) : topmost_; +} + +} // namespace aura
diff --git a/ui/aura/mus/topmost_window_tracker.h b/ui/aura/mus/topmost_window_tracker.h new file mode 100644 index 0000000..47f590f --- /dev/null +++ b/ui/aura/mus/topmost_window_tracker.h
@@ -0,0 +1,52 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_AURA_MUS_TOPMOST_WINDOW_TRACKER_H_ +#define UI_AURA_MUS_TOPMOST_WINDOW_TRACKER_H_ + +#include <vector> + +#include "base/macros.h" +#include "ui/aura/aura_export.h" + +namespace aura { +class Window; +class WindowMus; +class WindowTreeClient; + +// TopmostWindowTracker keeps track of the topmost window under the touch/mouse. +// It is created through WindowTreeClient::StartObservingTopmostWindow(). +class AURA_EXPORT TopmostWindowTracker { + public: + explicit TopmostWindowTracker(WindowTreeClient* client); + ~TopmostWindowTracker(); + + aura::Window* topmost() { return topmost_; } + aura::Window* second_topmost() { return second_topmost_; } + + private: + friend class WindowTreeClient; + + // Updates the topmost and the real_topmost windows to the specified ones. + // Will be called by WindowTreeClient. + void OnTopmostWindowChanged(const std::vector<WindowMus*> topmosts); + + WindowTreeClient* client_; + + // The root window for the topmost window under the current cursor position. + // This can be the event target. + aura::Window* topmost_ = nullptr; + + // Another root window for the topmost window under the current cursor + // position. This is the second topmost window if the topmost window happens + // to be the current event target. If the topmost window isn't the event + // target, this will point to the same topmost window. + aura::Window* second_topmost_ = nullptr; + + DISALLOW_COPY_AND_ASSIGN(TopmostWindowTracker); +}; + +} // namespace aura + +#endif // UI_AURA_MUS_TOPMOST_WINDOW_TRACKER_H_
diff --git a/ui/aura/mus/window_tree_client.cc b/ui/aura/mus/window_tree_client.cc index 47e7e52..d28883b 100644 --- a/ui/aura/mus/window_tree_client.cc +++ b/ui/aura/mus/window_tree_client.cc
@@ -43,6 +43,7 @@ #include "ui/aura/mus/mus_context_factory.h" #include "ui/aura/mus/property_converter.h" #include "ui/aura/mus/property_utils.h" +#include "ui/aura/mus/topmost_window_tracker.h" #include "ui/aura/mus/window_mus.h" #include "ui/aura/mus/window_port_mus.h" #include "ui/aura/mus/window_tree_client_delegate.h" @@ -1470,6 +1471,38 @@ drag_drop_controller_->OnPerformDragDropCompleted(action_taken); } +std::unique_ptr<TopmostWindowTracker> +WindowTreeClient::StartObservingTopmostWindow(ui::mojom::MoveLoopSource source, + aura::Window* initial_target) { + DCHECK(!topmost_window_tracker_); + WindowMus* window = WindowMus::Get(initial_target->GetRootWindow()); + DCHECK(window); + + tree_->ObserveTopmostWindow(source, window->server_id()); + auto topmost_window_tracker = std::make_unique<TopmostWindowTracker>(this); + topmost_window_tracker_ = topmost_window_tracker.get(); + return topmost_window_tracker; +} + +void WindowTreeClient::StopObservingTopmostWindow() { + DCHECK(topmost_window_tracker_); + tree_->StopObservingTopmostWindow(); + topmost_window_tracker_ = nullptr; +} + +void WindowTreeClient::OnTopmostWindowChanged( + const std::vector<ui::Id>& topmost_ids) { + DCHECK_LE(topmost_ids.size(), 2u); + // There's a slight chance of |topmost_window_tracker_| to be nullptr at the + // end of a session of observing topmost window. + if (!topmost_window_tracker_) + return; + std::vector<WindowMus*> windows; + for (auto& id : topmost_ids) + windows.push_back(GetWindowByServerId(id)); + topmost_window_tracker_->OnTopmostWindowChanged(windows); +} + void WindowTreeClient::OnChangeCompleted(uint32_t change_id, bool success) { std::unique_ptr<InFlightChange> change(std::move(in_flight_map_[change_id])); in_flight_map_.erase(change_id);
diff --git a/ui/aura/mus/window_tree_client.h b/ui/aura/mus/window_tree_client.h index 147cea9..3f638c7 100644 --- a/ui/aura/mus/window_tree_client.h +++ b/ui/aura/mus/window_tree_client.h
@@ -64,6 +64,7 @@ class InFlightPropertyChange; class InFlightVisibleChange; class MusContextFactory; +class TopmostWindowTracker; class WindowMus; class WindowPortMus; class WindowTreeClientDelegate; @@ -173,6 +174,13 @@ // Returns the root of this connection. std::set<Window*> GetRoots(); + // Start observing the topmost window at the cursor. The topmost window is + // tracked by the returned object. |source| specifies the event source which + // causes this, and |initial_target| specifies the target window of the event. + std::unique_ptr<TopmostWindowTracker> StartObservingTopmostWindow( + ui::mojom::MoveLoopSource source, + aura::Window* initial_target); + // Returns true if the specified window was created by this client. bool WasCreatedByThisClient(const WindowMus* window) const; @@ -199,6 +207,7 @@ friend class InFlightPropertyChange; friend class InFlightTransformChange; friend class InFlightVisibleChange; + friend class TopmostWindowTracker; friend class WindowPortMus; friend class WindowTreeClientPrivate; @@ -312,6 +321,10 @@ const gfx::Transform& transform); void SetWindowVisibleFromServer(WindowMus* window, bool visible); + // Stop observing the topmost window at the cursor. This deletes the + // TopmostWindowTracker. + void StopObservingTopmostWindow(); + // Called from OnWindowMusBoundsChanged() and SetRootWindowBounds(). void ScheduleInFlightBoundsChange(WindowMus* window, const gfx::Rect& old_bounds, @@ -430,6 +443,7 @@ bool success, uint32_t action_taken) override; void OnDragDropDone() override; + void OnTopmostWindowChanged(const std::vector<ui::Id>& topmost_ids) override; void OnChangeCompleted(uint32_t change_id, bool success) override; void RequestClose(ui::Id window_id) override; void GetScreenProviderObserver( @@ -524,6 +538,8 @@ bool in_destructor_; + TopmostWindowTracker* topmost_window_tracker_ = nullptr; + // A mapping to shared memory that is one 32 bit integer long. The window // server uses this to let us synchronously read the cursor location. mojo::ScopedSharedBufferMapping cursor_location_mapping_;
diff --git a/ui/aura/test/mus/test_window_tree.cc b/ui/aura/test/mus/test_window_tree.cc index 71f55994..7f6f04d 100644 --- a/ui/aura/test/mus/test_window_tree.cc +++ b/ui/aura/test/mus/test_window_tree.cc
@@ -390,4 +390,8 @@ void TestWindowTree::CancelWindowMove(ui::Id window_id) {} +void TestWindowTree::ObserveTopmostWindow(ui::mojom::MoveLoopSource source, + ui::Id window_id) {} +void TestWindowTree::StopObservingTopmostWindow() {} + } // namespace aura
diff --git a/ui/aura/test/mus/test_window_tree.h b/ui/aura/test/mus/test_window_tree.h index 6633b78..293c076 100644 --- a/ui/aura/test/mus/test_window_tree.h +++ b/ui/aura/test/mus/test_window_tree.h
@@ -239,6 +239,9 @@ ui::mojom::MoveLoopSource source, const gfx::Point& cursor_location) override; void CancelWindowMove(ui::Id window_id) override; + void ObserveTopmostWindow(ui::mojom::MoveLoopSource source, + ui::Id window_id) override; + void StopObservingTopmostWindow() override; struct AckedEvent { uint32_t event_id;
diff --git a/ui/aura/test/test_windows.cc b/ui/aura/test/test_windows.cc index 07328d8..b4bd15b1 100644 --- a/ui/aura/test/test_windows.cc +++ b/ui/aura/test/test_windows.cc
@@ -25,6 +25,10 @@ g_env = env; } +Env* GetEnvForTestWindows() { + return g_env ? g_env : Env::GetInstance(); +} + Window* CreateTestWindowWithId(int id, Window* parent) { return CreateTestWindowWithDelegate(NULL, id, gfx::Rect(), parent); } @@ -55,7 +59,7 @@ const gfx::Rect& bounds, Window* parent, bool show_on_creation) { - Window* window = new Window(delegate, type, g_env); + Window* window = new Window(delegate, type, GetEnvForTestWindows()); window->set_id(id); window->Init(ui::LAYER_TEXTURED); window->SetProperty(aura::client::kResizeBehaviorKey,
diff --git a/ui/aura/test/test_windows.h b/ui/aura/test/test_windows.h index 6379ff1..af3434a 100644 --- a/ui/aura/test/test_windows.h +++ b/ui/aura/test/test_windows.h
@@ -21,6 +21,7 @@ // Sets the Env to use for creation of new Windows. If null, Env::GetInstance() // is used. void SetEnvForTestWindows(Env* env); +Env* GetEnvForTestWindows(); Window* CreateTestWindowWithId(int id, Window* parent); Window* CreateTestWindowWithBounds(const gfx::Rect& bounds, Window* parent);
diff --git a/ui/aura/window.cc b/ui/aura/window.cc index ff65b9e1..62281241 100644 --- a/ui/aura/window.cc +++ b/ui/aura/window.cc
@@ -51,6 +51,12 @@ #include "ui/gfx/scoped_canvas.h" namespace aura { +namespace { +#if DCHECK_IS_ON() +const char* g_env_arg_required_string = nullptr; +#endif + +} // namespace Window::Window(WindowDelegate* delegate, client::WindowType type, Env* env) : Window(delegate, nullptr, type, env) {} @@ -78,6 +84,10 @@ // notification (such as the workspace code). observers_(base::ObserverListPolicy::EXISTING_ONLY) { SetTargetHandler(delegate_); +#if DCHECK_IS_ON() + // NOTE: at the time of adding this this function is only called from ash. + DCHECK(env || !g_env_arg_required_string) << g_env_arg_required_string; +#endif } Window::~Window() { @@ -1150,6 +1160,13 @@ return delegate_ && delegate_->RequiresDoubleTapGestureEvents(); } +#if DCHECK_IS_ON() +// static +void Window::SetEnvArgRequired(const char* error_string) { + g_env_arg_required_string = error_string; +} +#endif + void Window::OnPaintLayer(const ui::PaintContext& context) { Paint(context); }
diff --git a/ui/aura/window.h b/ui/aura/window.h index b042268..080eb1a 100644 --- a/ui/aura/window.h +++ b/ui/aura/window.h
@@ -428,6 +428,13 @@ Env* env() { return env_; } const Env* env() const { return env_; } +#if DCHECK_IS_ON() + // If passed a non-null value then a non-null aura::Env must be supplied to + // the constructor. |error_string| is the string supplied to the DCHECK + // calls. + static void SetEnvArgRequired(const char* error_string); +#endif + // ui::GestureConsumer: bool RequiresDoubleTapGestureEvents() const override;
diff --git a/ui/aura/window_tree_host_platform.cc b/ui/aura/window_tree_host_platform.cc index 75eb9f5..76865a51 100644 --- a/ui/aura/window_tree_host_platform.cc +++ b/ui/aura/window_tree_host_platform.cc
@@ -10,6 +10,7 @@ #include "base/run_loop.h" #include "base/trace_event/trace_event.h" #include "build/build_config.h" +#include "ui/aura/env.h" #include "ui/aura/window.h" #include "ui/aura/window_event_dispatcher.h" #include "ui/base/layout.h" @@ -42,7 +43,10 @@ // static std::unique_ptr<WindowTreeHost> WindowTreeHost::Create( ui::PlatformWindowInitProperties properties) { - return std::make_unique<WindowTreeHostPlatform>(std::move(properties)); + return std::make_unique<WindowTreeHostPlatform>( + std::move(properties), + std::make_unique<aura::Window>(nullptr, client::WINDOW_TYPE_UNKNOWN, + Env::GetInstance())); } WindowTreeHostPlatform::WindowTreeHostPlatform(
diff --git a/ui/aura/window_tree_host_unittest.cc b/ui/aura/window_tree_host_unittest.cc index a2442b8..8207d3b 100644 --- a/ui/aura/window_tree_host_unittest.cc +++ b/ui/aura/window_tree_host_unittest.cc
@@ -11,6 +11,7 @@ #include "ui/compositor/layer.h" #include "ui/compositor/test/draw_waiter_for_test.h" #include "ui/events/event_rewriter.h" +#include "ui/events/keycodes/dom/dom_code.h" #include "ui/platform_window/stub/stub_window.h" namespace { @@ -99,7 +100,7 @@ CounterEventRewriter event_rewriter; host()->AddEventRewriter(&event_rewriter); - ui::KeyEvent key_event('A', ui::VKEY_A, 0); + ui::KeyEvent key_event('A', ui::VKEY_A, ui::DomCode::NONE, 0); ui::EventDispatchDetails details = host()->GetInputMethod()->DispatchKeyEvent(&key_event); ASSERT_TRUE(!details.dispatcher_destroyed && !details.target_destroyed);
diff --git a/ui/base/clipboard/clipboard.cc b/ui/base/clipboard/clipboard.cc index 4b222a58..6697be9 100644 --- a/ui/base/clipboard/clipboard.cc +++ b/ui/base/clipboard/clipboard.cc
@@ -8,7 +8,6 @@ #include <limits> #include <memory> -#include "base/debug/dump_without_crashing.h" #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/stl_util.h" @@ -156,13 +155,12 @@ const base::PlatformThreadId id = base::PlatformThread::CurrentId(); - // TODO(fdoray): Surround this block with #if DCHECK_IS_ON() and remove the - // DumpWithoutCrashing() call once https://crbug.com/662055 is resolved. + // A Clipboard instance must be allocated for every thread that uses the + // clipboard. To prevented unbounded memory use, CHECK that the current thread + // was whitelisted to use the clipboard. This is a CHECK rather than a DCHECK + // to catch incorrect usage in production (e.g. https://crbug.com/872737). AllowedThreadsVector* allowed_threads = allowed_threads_.Pointer(); - if (!allowed_threads->empty() && !base::ContainsValue(*allowed_threads, id)) { - NOTREACHED(); - base::debug::DumpWithoutCrashing(); - } + CHECK(allowed_threads->empty() || base::ContainsValue(*allowed_threads, id)); return id; }
diff --git a/ui/base/clipboard/clipboard_util_win.cc b/ui/base/clipboard/clipboard_util_win.cc index 988dc0f..74d49d48f 100644 --- a/ui/base/clipboard/clipboard_util_win.cc +++ b/ui/base/clipboard/clipboard_util_win.cc
@@ -5,7 +5,6 @@ #include "ui/base/clipboard/clipboard_util_win.h" #include <shellapi.h> -#include <shlwapi.h> #include <wininet.h> // For INTERNET_MAX_URL_LENGTH. #include "base/files/file_path.h" @@ -16,6 +15,7 @@ #include "base/strings/sys_string_conversions.h" #include "base/strings/utf_string_conversions.h" #include "base/win/scoped_hglobal.h" +#include "base/win/shlwapi.h" #include "net/base/filename_util.h" #include "ui/base/clipboard/clipboard.h" #include "ui/base/clipboard/custom_data_helper.h"
diff --git a/ui/base/cocoa/menu_controller.mm b/ui/base/cocoa/menu_controller.mm index 98823e39..089448f 100644 --- a/ui/base/cocoa/menu_controller.mm +++ b/ui/base/cocoa/menu_controller.mm
@@ -191,14 +191,18 @@ [item setTarget:self]; NSValue* modelObject = [NSValue valueWithPointer:model]; [item setRepresentedObject:modelObject]; // Retains |modelObject|. - ui::Accelerator accelerator; - if (model->GetAcceleratorAt(index, &accelerator)) { - NSString* key_equivalent; - NSUInteger modifier_mask; - GetKeyEquivalentAndModifierMaskFromAccelerator( - accelerator, &key_equivalent, &modifier_mask); - [item setKeyEquivalent:key_equivalent]; - [item setKeyEquivalentModifierMask:modifier_mask]; + // On the Mac, context menus never have accelerators. Menus constructed + // for context use have useWithPopUpButtonCell_ set to NO. + if (useWithPopUpButtonCell_) { + ui::Accelerator accelerator; + if (model->GetAcceleratorAt(index, &accelerator)) { + NSString* key_equivalent; + NSUInteger modifier_mask; + GetKeyEquivalentAndModifierMaskFromAccelerator( + accelerator, &key_equivalent, &modifier_mask); + [item setKeyEquivalent:key_equivalent]; + [item setKeyEquivalentModifierMask:modifier_mask]; + } } } [menu insertItem:item atIndex:index];
diff --git a/ui/base/ime/win/tsf_event_router.h b/ui/base/ime/win/tsf_event_router.h index d094e1b..6af6f582 100644 --- a/ui/base/ime/win/tsf_event_router.h +++ b/ui/base/ime/win/tsf_event_router.h
@@ -5,14 +5,13 @@ #ifndef UI_BASE_IME_WIN_TSF_EVENT_ROUTER_H_ #define UI_BASE_IME_WIN_TSF_EVENT_ROUTER_H_ -#include <atlbase.h> -#include <atlcom.h> #include <msctf.h> #include <set> #include "base/callback.h" #include "base/compiler_specific.h" +#include "base/win/atl.h" #include "ui/base/ime/text_input_type.h" #include "ui/base/ime/ui_base_ime_export.h" #include "ui/gfx/range/range.h"
diff --git a/ui/base/material_design/material_design_controller.cc b/ui/base/material_design/material_design_controller.cc index 2ef51d7..eae6b7f 100644 --- a/ui/base/material_design/material_design_controller.cc +++ b/ui/base/material_design/material_design_controller.cc
@@ -176,11 +176,6 @@ } // static -bool MaterialDesignController::IsSecondaryUiMaterial() { - return true; -} - -// static bool MaterialDesignController::IsTouchOptimizedUiEnabled() { return GetMode() == MATERIAL_TOUCH_OPTIMIZED || GetMode() == MATERIAL_TOUCH_REFRESH;
diff --git a/ui/base/material_design/material_design_controller.h b/ui/base/material_design/material_design_controller.h index 4d0ab8b..46051345 100644 --- a/ui/base/material_design/material_design_controller.h +++ b/ui/base/material_design/material_design_controller.h
@@ -38,10 +38,6 @@ // Get the current Mode that should be used by the system. static Mode GetMode(); - // Returns true if the current mode is a material design variant and this mode - // should be extended to cover secondary UI. - static bool IsSecondaryUiMaterial(); - // Returns true if the touch-optimized UI material design mode is enabled. static bool IsTouchOptimizedUiEnabled();
diff --git a/ui/base/ui_base_features.cc b/ui/base/ui_base_features.cc index c7b4721..f97011e3 100644 --- a/ui/base/ui_base_features.cc +++ b/ui/base/ui_base_features.cc
@@ -129,10 +129,17 @@ const base::Feature kMash = {"Mash", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kSingleProcessMash = {"SingleProcessMash", + base::FEATURE_DISABLED_BY_DEFAULT}; + bool IsAshInBrowserProcess() { return !base::FeatureList::IsEnabled(features::kMash); } +bool IsSingleProcessMash() { + return base::FeatureList::IsEnabled(features::kSingleProcessMash); +} + #if defined(OS_MACOSX) // When enabled, the NSWindows for apps will be created in the app's process, // and will forward input to the browser process.
diff --git a/ui/base/ui_base_features.h b/ui/base/ui_base_features.h index b377efb2..ec684017 100644 --- a/ui/base/ui_base_features.h +++ b/ui/base/ui_base_features.h
@@ -50,10 +50,19 @@ // TODO(jamescook): Make flag only available in Chrome OS. UI_BASE_EXPORT extern const base::Feature kMash; +UI_BASE_EXPORT extern const base::Feature kSingleProcessMash; + // Returns true if ash is in process (the default). A value of false means ash // is running in a separate process (and is hosting the UI Service and Viz). UI_BASE_EXPORT bool IsAshInBrowserProcess(); +// Returns true if code outside of ash is using the WindowService. In this mode +// there are two aura::Envs. Ash uses one with Env::Mode::LOCAL. Non-ash code +// uses an aura::Env with a mode of MUS. The non-ash code using mus targets the +// WindowService that ash is running. This exercises the WindowService mojo APIs +// similar to kMash, but leaves ash and browser running in the same process. +UI_BASE_EXPORT bool IsSingleProcessMash(); + #if defined(OS_MACOSX) // Returns true if the NSWindows for apps will be created in the app's process, // and will forward input to the browser process.
diff --git a/ui/base/win/accessibility_misc_utils.h b/ui/base/win/accessibility_misc_utils.h index bfa2767..7af1beb 100644 --- a/ui/base/win/accessibility_misc_utils.h +++ b/ui/base/win/accessibility_misc_utils.h
@@ -4,8 +4,8 @@ #ifndef UI_BASE_WIN_ACCESSIBILITY_MISC_UTILS_H_ #define UI_BASE_WIN_ACCESSIBILITY_MISC_UTILS_H_ -#include <atlbase.h> -#include <atlcom.h> +#include "base/win/atl.h" // Must be before UIAutomationCore.h + #include <UIAutomationCore.h> #include "base/compiler_specific.h"
diff --git a/ui/base/win/atl_module.h b/ui/base/win/atl_module.h index e1468ae..7d6b917 100644 --- a/ui/base/win/atl_module.h +++ b/ui/base/win/atl_module.h
@@ -5,11 +5,9 @@ #ifndef UI_BASE_WIN_ATL_MODULE_H_ #define UI_BASE_WIN_ATL_MODULE_H_ -#include <atlbase.h> -#include <atlcom.h> - #include "base/compiler_specific.h" #include "base/macros.h" +#include "base/win/atl.h" namespace ui { namespace win {
diff --git a/ui/chromeos/resources/default_100_percent/fingerprint/fingerprint.png b/ui/chromeos/resources/default_100_percent/fingerprint/fingerprint.png new file mode 100644 index 0000000..9e471fc0b --- /dev/null +++ b/ui/chromeos/resources/default_100_percent/fingerprint/fingerprint.png Binary files differ
diff --git a/ui/chromeos/resources/default_100_percent/fingerprint/fingerprint_scanner.png b/ui/chromeos/resources/default_100_percent/fingerprint/fingerprint_scanner.png new file mode 100644 index 0000000..c5738fe --- /dev/null +++ b/ui/chromeos/resources/default_100_percent/fingerprint/fingerprint_scanner.png Binary files differ
diff --git a/ui/chromeos/resources/default_100_percent/fingerprint/tick.png b/ui/chromeos/resources/default_100_percent/fingerprint/tick.png new file mode 100644 index 0000000..5eca882 --- /dev/null +++ b/ui/chromeos/resources/default_100_percent/fingerprint/tick.png Binary files differ
diff --git a/ui/chromeos/resources/default_200_percent/fingerprint/fingerprint.png b/ui/chromeos/resources/default_200_percent/fingerprint/fingerprint.png new file mode 100644 index 0000000..37cba2b --- /dev/null +++ b/ui/chromeos/resources/default_200_percent/fingerprint/fingerprint.png Binary files differ
diff --git a/ui/chromeos/resources/default_200_percent/fingerprint/fingerprint_scanner.png b/ui/chromeos/resources/default_200_percent/fingerprint/fingerprint_scanner.png new file mode 100644 index 0000000..57af595 --- /dev/null +++ b/ui/chromeos/resources/default_200_percent/fingerprint/fingerprint_scanner.png Binary files differ
diff --git a/ui/chromeos/resources/default_200_percent/fingerprint/tick.png b/ui/chromeos/resources/default_200_percent/fingerprint/tick.png new file mode 100644 index 0000000..4c8b6b8 --- /dev/null +++ b/ui/chromeos/resources/default_200_percent/fingerprint/tick.png Binary files differ
diff --git a/ui/chromeos/resources/ui_chromeos_resources.grd b/ui/chromeos/resources/ui_chromeos_resources.grd index be8aaee94..0147a127 100644 --- a/ui/chromeos/resources/ui_chromeos_resources.grd +++ b/ui/chromeos/resources/ui_chromeos_resources.grd
@@ -93,6 +93,11 @@ <structure type="chrome_scaled_image" name="IDR_PRINT_NOTIFICATION_PLAY" file="print_notification/play.png" /> <structure type="chrome_scaled_image" name="IDR_PRINT_NOTIFICATION_HELP" file="print_notification/help.png" /> + <!-- Fingerprint images. --> + <structure type="chrome_scaled_image" name="IDR_LOGIN_FINGERPRINT_ICON_ANIMATION" file="fingerprint/fingerprint.png" /> + <structure type="chrome_scaled_image" name="IDR_LOGIN_FINGERPRINT_ENROLLMENT_COMPLETE_ANIMATION" file="fingerprint/tick.png" /> + <structure type="chrome_scaled_image" name="IDR_LOGIN_FINGERPRINT_SCANNER_ANIMATION" file="fingerprint/fingerprint_scanner.png" /> + </structures> </release> </grit>
diff --git a/ui/display/screen.cc b/ui/display/screen.cc index 94d025a..1646062 100644 --- a/ui/display/screen.cc +++ b/ui/display/screen.cc
@@ -5,6 +5,7 @@ #include "ui/display/screen.h" #include "ui/display/display.h" +#include "ui/display/types/display_constants.h" #include "ui/gfx/geometry/rect.h" namespace display { @@ -15,9 +16,9 @@ } // namespace -Screen::Screen() {} +Screen::Screen() : display_id_for_new_windows_(kInvalidDisplayId) {} -Screen::~Screen() {} +Screen::~Screen() = default; // static Screen* Screen::GetScreen() { @@ -38,10 +39,20 @@ return GetDisplayNearestWindow(GetWindowForView(view)); } -Display Screen::GetDisplayForNewWindows() const { +display::Display Screen::GetDisplayForNewWindows() const { + display::Display display; + if (GetDisplayWithDisplayId(display_id_for_new_windows_, &display)) + return display; + + // Fallback to primary display. return GetPrimaryDisplay(); } +void Screen::SetDisplayForNewWindows(int64_t display_id) { + // GetDisplayForNewWindows() handles invalid display ids. + display_id_for_new_windows_ = display_id; +} + gfx::Rect Screen::ScreenToDIPRectInWindow(gfx::NativeView view, const gfx::Rect& screen_rect) const { float scale = GetDisplayNearestView(view).device_scale_factor();
diff --git a/ui/display/screen.h b/ui/display/screen.h index 067edc8..38fb443 100644 --- a/ui/display/screen.h +++ b/ui/display/screen.h
@@ -78,7 +78,10 @@ // Returns a suggested display to use when creating a new window. On most // platforms just returns the primary display. - virtual Display GetDisplayForNewWindows() const; + Display GetDisplayForNewWindows() const; + + // Sets the suggested display to use when creating a new window. + void SetDisplayForNewWindows(int64_t display_id); // Adds/Removes display observers. virtual void AddObserver(DisplayObserver* observer) = 0; @@ -104,6 +107,8 @@ private: static gfx::NativeWindow GetWindowForView(gfx::NativeView view); + int64_t display_id_for_new_windows_; + DISALLOW_COPY_AND_ASSIGN(Screen); };
diff --git a/ui/events/BUILD.gn b/ui/events/BUILD.gn index 33603b8..fb1ca44 100644 --- a/ui/events/BUILD.gn +++ b/ui/events/BUILD.gn
@@ -530,7 +530,7 @@ sources += [ "devices/device_data_manager_unittest.cc" ] } - if (use_ozone) { + if (use_ozone && (is_linux || is_chromeos)) { sources += [ "ozone/chromeos/cursor_controller_unittest.cc", "ozone/evdev/event_converter_evdev_impl_unittest.cc",
diff --git a/ui/events/blink/web_input_event_unittest.cc b/ui/events/blink/web_input_event_unittest.cc index 52e5bc2..ae13e46 100644 --- a/ui/events/blink/web_input_event_unittest.cc +++ b/ui/events/blink/web_input_event_unittest.cc
@@ -486,7 +486,8 @@ } tests[] = { {ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE), blink::WebInputEvent::kRawKeyDown, 0x0}, - {ui::KeyEvent(L'B', ui::VKEY_B, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN), + {ui::KeyEvent(L'B', ui::VKEY_B, ui::DomCode::NONE, + ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN), blink::WebInputEvent::kChar, blink::WebInputEvent::kShiftKey | blink::WebInputEvent::kControlKey}, {ui::KeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::EF_ALT_DOWN),
diff --git a/ui/events/event.cc b/ui/events/event.cc index 6ecb994..d77961d 100644 --- a/ui/events/event.cc +++ b/ui/events/event.cc
@@ -1145,13 +1145,14 @@ KeyEvent::KeyEvent(base::char16 character, KeyboardCode key_code, + DomCode code, int flags, base::TimeTicks time_stamp) : Event(ET_KEY_PRESSED, time_stamp == base::TimeTicks() ? EventTimeForNow() : time_stamp, flags), key_code_(key_code), - code_(DomCode::NONE), + code_(code), is_char_(true), key_(DomKey::FromCharacter(character)) {}
diff --git a/ui/events/event.h b/ui/events/event.h index 8727d475..572c10fa 100644 --- a/ui/events/event.h +++ b/ui/events/event.h
@@ -860,6 +860,7 @@ // Create a character event. KeyEvent(base::char16 character, KeyboardCode key_code, + DomCode code, int flags, base::TimeTicks time_stamp = base::TimeTicks());
diff --git a/ui/events/event_unittest.cc b/ui/events/event_unittest.cc index 2f36ae23..8a63b46a 100644 --- a/ui/events/event_unittest.cc +++ b/ui/events/event_unittest.cc
@@ -73,7 +73,8 @@ // contains Control. // e.g. Control+Shift+2 produces U+200C on "Persian" keyboard. // http://crbug.com/582453 - KeyEvent keyev5(0x200C, VKEY_UNKNOWN, EF_CONTROL_DOWN | EF_SHIFT_DOWN); + KeyEvent keyev5(0x200C, VKEY_UNKNOWN, ui::DomCode::NONE, + EF_CONTROL_DOWN | EF_SHIFT_DOWN); EXPECT_EQ(0x200C, keyev5.GetCharacter()); } @@ -278,7 +279,7 @@ } TEST(EventTest, KeyEventDirectUnicode) { - KeyEvent key(0x1234U, ui::VKEY_UNKNOWN, ui::EF_NONE); + KeyEvent key(0x1234U, ui::VKEY_UNKNOWN, ui::DomCode::NONE, ui::EF_NONE); EXPECT_EQ(0x1234U, key.GetCharacter()); EXPECT_EQ(ET_KEY_PRESSED, key.type()); EXPECT_TRUE(key.is_char());
diff --git a/ui/events/mojo/event_struct_traits.cc b/ui/events/mojo/event_struct_traits.cc index aa2ec74..054e31b 100644 --- a/ui/events/mojo/event_struct_traits.cc +++ b/ui/events/mojo/event_struct_traits.cc
@@ -8,6 +8,7 @@ #include "ui/events/event.h" #include "ui/events/event_utils.h" #include "ui/events/gesture_event_details.h" +#include "ui/events/keycodes/dom/dom_code.h" #include "ui/events/keycodes/dom/keycode_converter.h" #include "ui/events/mojo/event_constants.mojom.h" #include "ui/latency/mojo/latency_info_struct_traits.h" @@ -409,8 +410,8 @@ if (key_data->is_char) { *out = std::make_unique<ui::KeyEvent>( static_cast<base::char16>(key_data->character), - static_cast<ui::KeyboardCode>(key_data->key_code), event.flags(), - time_stamp); + static_cast<ui::KeyboardCode>(key_data->key_code), + ui::DomCode::NONE, event.flags(), time_stamp); } else { *out = std::make_unique<ui::KeyEvent>( event.action() == ui::mojom::EventType::KEY_PRESSED
diff --git a/ui/events/mojo/struct_traits_unittest.cc b/ui/events/mojo/struct_traits_unittest.cc index c7b7df5..1a7bdbb8 100644 --- a/ui/events/mojo/struct_traits_unittest.cc +++ b/ui/events/mojo/struct_traits_unittest.cc
@@ -54,12 +54,12 @@ {ET_KEY_PRESSED, VKEY_A, ui::DomCode::US_A, EF_NONE}, {ET_KEY_PRESSED, VKEY_B, ui::DomCode::US_B, EF_CONTROL_DOWN | EF_ALT_DOWN}, - {'\x12', VKEY_2, EF_CONTROL_DOWN}, - {'Z', VKEY_Z, EF_CAPS_LOCK_ON}, - {'z', VKEY_Z, EF_NONE}, + {'\x12', VKEY_2, ui::DomCode::NONE, EF_CONTROL_DOWN}, + {'Z', VKEY_Z, ui::DomCode::NONE, EF_CAPS_LOCK_ON}, + {'z', VKEY_Z, ui::DomCode::NONE, EF_NONE}, {ET_KEY_PRESSED, VKEY_Z, EF_NONE, base::TimeTicks() + base::TimeDelta::FromMicroseconds(101)}, - {'Z', VKEY_Z, EF_NONE, + {'Z', VKEY_Z, ui::DomCode::NONE, EF_NONE, base::TimeTicks() + base::TimeDelta::FromMicroseconds(102)}, };
diff --git a/ui/events/ozone/BUILD.gn b/ui/events/ozone/BUILD.gn index 13f85b19..48f7ad99 100644 --- a/ui/events/ozone/BUILD.gn +++ b/ui/events/ozone/BUILD.gn
@@ -55,7 +55,7 @@ ] } - if (use_ozone && use_udev) { + if (use_udev) { deps += [ "//device/udev_linux" ] } } @@ -68,114 +68,116 @@ defines = [ "USE_EVDEV_GESTURES" ] } - component("events_ozone_evdev") { - sources = [ - "evdev/device_event_dispatcher_evdev.cc", - "evdev/device_event_dispatcher_evdev.h", - "evdev/event_converter_evdev.cc", - "evdev/event_converter_evdev.h", - "evdev/event_converter_evdev_impl.cc", - "evdev/event_converter_evdev_impl.h", - "evdev/event_device_info.cc", - "evdev/event_device_info.h", - "evdev/event_factory_evdev.cc", - "evdev/event_factory_evdev.h", - "evdev/event_thread_evdev.cc", - "evdev/event_thread_evdev.h", - "evdev/events_ozone_evdev_export.h", - "evdev/gamepad_event_converter_evdev.cc", - "evdev/gamepad_event_converter_evdev.h", - "evdev/input_controller_evdev.cc", - "evdev/input_controller_evdev.h", - "evdev/input_device_factory_evdev.cc", - "evdev/input_device_factory_evdev.h", - "evdev/input_device_factory_evdev_proxy.cc", - "evdev/input_device_factory_evdev_proxy.h", - "evdev/input_device_settings_evdev.cc", - "evdev/input_device_settings_evdev.h", - "evdev/input_injector_evdev.cc", - "evdev/input_injector_evdev.h", - "evdev/keyboard_evdev.cc", - "evdev/keyboard_evdev.h", - "evdev/keyboard_util_evdev.cc", - "evdev/keyboard_util_evdev.h", - "evdev/mouse_button_map_evdev.cc", - "evdev/mouse_button_map_evdev.h", - "evdev/tablet_event_converter_evdev.cc", - "evdev/tablet_event_converter_evdev.h", - "evdev/touch_evdev_debug_buffer.cc", - "evdev/touch_evdev_debug_buffer.h", - "evdev/touch_evdev_types.cc", - "evdev/touch_evdev_types.h", - "evdev/touch_event_converter_evdev.cc", - "evdev/touch_event_converter_evdev.h", - "evdev/touch_filter/edge_touch_filter.cc", - "evdev/touch_filter/edge_touch_filter.h", - "evdev/touch_filter/false_touch_finder.cc", - "evdev/touch_filter/false_touch_finder.h", - "evdev/touch_filter/far_apart_taps_touch_noise_filter.cc", - "evdev/touch_filter/far_apart_taps_touch_noise_filter.h", - "evdev/touch_filter/horizontally_aligned_touch_noise_filter.cc", - "evdev/touch_filter/horizontally_aligned_touch_noise_filter.h", - "evdev/touch_filter/low_pressure_filter.cc", - "evdev/touch_filter/low_pressure_filter.h", - "evdev/touch_filter/single_position_touch_noise_filter.cc", - "evdev/touch_filter/single_position_touch_noise_filter.h", - "evdev/touch_filter/touch_filter.h", - "gamepad/gamepad_event.cc", - "gamepad/gamepad_event.h", - "gamepad/gamepad_mapping.cc", - "gamepad/gamepad_mapping.h", - "gamepad/gamepad_observer.h", - "gamepad/gamepad_provider_ozone.cc", - "gamepad/gamepad_provider_ozone.h", - "gamepad/generic_gamepad_mapping.cc", - "gamepad/generic_gamepad_mapping.h", - "gamepad/static_gamepad_mapping.cc", - "gamepad/static_gamepad_mapping.h", - "gamepad/webgamepad_constants.h", - ] - - defines = [ "EVENTS_OZONE_EVDEV_IMPLEMENTATION" ] - - deps = [ - ":events_ozone", - ":events_ozone_layout", - "//base", - "//ui/display", - "//ui/events", - "//ui/events:dom_keycode_converter", - "//ui/events:events_base", - "//ui/events/devices", - "//ui/events/platform", - "//ui/gfx", - "//ui/ozone:ozone_base", - ] - - public_configs = [ ":evdev" ] - - if (use_ozone && use_evdev_gestures) { - sources += [ - "evdev/libgestures_glue/event_reader_libevdev_cros.cc", - "evdev/libgestures_glue/event_reader_libevdev_cros.h", - "evdev/libgestures_glue/gesture_feedback.cc", - "evdev/libgestures_glue/gesture_feedback.h", - "evdev/libgestures_glue/gesture_interpreter_libevdev_cros.cc", - "evdev/libgestures_glue/gesture_interpreter_libevdev_cros.h", - "evdev/libgestures_glue/gesture_logging.cc", - "evdev/libgestures_glue/gesture_logging.h", - "evdev/libgestures_glue/gesture_property_provider.cc", - "evdev/libgestures_glue/gesture_property_provider.h", - "evdev/libgestures_glue/gesture_timer_provider.cc", - "evdev/libgestures_glue/gesture_timer_provider.h", + if (is_linux || is_chromeos) { + component("events_ozone_evdev") { + sources = [ + "evdev/device_event_dispatcher_evdev.cc", + "evdev/device_event_dispatcher_evdev.h", + "evdev/event_converter_evdev.cc", + "evdev/event_converter_evdev.h", + "evdev/event_converter_evdev_impl.cc", + "evdev/event_converter_evdev_impl.h", + "evdev/event_device_info.cc", + "evdev/event_device_info.h", + "evdev/event_factory_evdev.cc", + "evdev/event_factory_evdev.h", + "evdev/event_thread_evdev.cc", + "evdev/event_thread_evdev.h", + "evdev/events_ozone_evdev_export.h", + "evdev/gamepad_event_converter_evdev.cc", + "evdev/gamepad_event_converter_evdev.h", + "evdev/input_controller_evdev.cc", + "evdev/input_controller_evdev.h", + "evdev/input_device_factory_evdev.cc", + "evdev/input_device_factory_evdev.h", + "evdev/input_device_factory_evdev_proxy.cc", + "evdev/input_device_factory_evdev_proxy.h", + "evdev/input_device_settings_evdev.cc", + "evdev/input_device_settings_evdev.h", + "evdev/input_injector_evdev.cc", + "evdev/input_injector_evdev.h", + "evdev/keyboard_evdev.cc", + "evdev/keyboard_evdev.h", + "evdev/keyboard_util_evdev.cc", + "evdev/keyboard_util_evdev.h", + "evdev/mouse_button_map_evdev.cc", + "evdev/mouse_button_map_evdev.h", + "evdev/tablet_event_converter_evdev.cc", + "evdev/tablet_event_converter_evdev.h", + "evdev/touch_evdev_debug_buffer.cc", + "evdev/touch_evdev_debug_buffer.h", + "evdev/touch_evdev_types.cc", + "evdev/touch_evdev_types.h", + "evdev/touch_event_converter_evdev.cc", + "evdev/touch_event_converter_evdev.h", + "evdev/touch_filter/edge_touch_filter.cc", + "evdev/touch_filter/edge_touch_filter.h", + "evdev/touch_filter/false_touch_finder.cc", + "evdev/touch_filter/false_touch_finder.h", + "evdev/touch_filter/far_apart_taps_touch_noise_filter.cc", + "evdev/touch_filter/far_apart_taps_touch_noise_filter.h", + "evdev/touch_filter/horizontally_aligned_touch_noise_filter.cc", + "evdev/touch_filter/horizontally_aligned_touch_noise_filter.h", + "evdev/touch_filter/low_pressure_filter.cc", + "evdev/touch_filter/low_pressure_filter.h", + "evdev/touch_filter/single_position_touch_noise_filter.cc", + "evdev/touch_filter/single_position_touch_noise_filter.h", + "evdev/touch_filter/touch_filter.h", + "gamepad/gamepad_event.cc", + "gamepad/gamepad_event.h", + "gamepad/gamepad_mapping.cc", + "gamepad/gamepad_mapping.h", + "gamepad/gamepad_observer.h", + "gamepad/gamepad_provider_ozone.cc", + "gamepad/gamepad_provider_ozone.h", + "gamepad/generic_gamepad_mapping.cc", + "gamepad/generic_gamepad_mapping.h", + "gamepad/static_gamepad_mapping.cc", + "gamepad/static_gamepad_mapping.h", + "gamepad/webgamepad_constants.h", ] - deps += [ - "//third_party/gestures", - "//third_party/libevdev", + defines = [ "EVENTS_OZONE_EVDEV_IMPLEMENTATION" ] + + deps = [ + ":events_ozone", + ":events_ozone_layout", + "//base", + "//ui/display", + "//ui/events", + "//ui/events:dom_keycode_converter", + "//ui/events:events_base", + "//ui/events/devices", + "//ui/events/platform", + "//ui/gfx", + "//ui/ozone:ozone_base", ] - public_configs += [ ":evdev_gestures" ] + public_configs = [ ":evdev" ] + + if (use_evdev_gestures) { + sources += [ + "evdev/libgestures_glue/event_reader_libevdev_cros.cc", + "evdev/libgestures_glue/event_reader_libevdev_cros.h", + "evdev/libgestures_glue/gesture_feedback.cc", + "evdev/libgestures_glue/gesture_feedback.h", + "evdev/libgestures_glue/gesture_interpreter_libevdev_cros.cc", + "evdev/libgestures_glue/gesture_interpreter_libevdev_cros.h", + "evdev/libgestures_glue/gesture_logging.cc", + "evdev/libgestures_glue/gesture_logging.h", + "evdev/libgestures_glue/gesture_property_provider.cc", + "evdev/libgestures_glue/gesture_property_provider.h", + "evdev/libgestures_glue/gesture_timer_provider.cc", + "evdev/libgestures_glue/gesture_timer_provider.h", + ] + + deps += [ + "//third_party/gestures", + "//third_party/libevdev", + ] + + public_configs += [ ":evdev_gestures" ] + } } } }
diff --git a/ui/events/ozone/keyboard/event_auto_repeat_handler.cc b/ui/events/ozone/keyboard/event_auto_repeat_handler.cc index 3eea5cf..97abd0c 100644 --- a/ui/events/ozone/keyboard/event_auto_repeat_handler.cc +++ b/ui/events/ozone/keyboard/event_auto_repeat_handler.cc
@@ -68,7 +68,7 @@ } void EventAutoRepeatHandler::StopKeyRepeat() { - repeat_key_ = KEY_RESERVED; + repeat_key_ = kInvalidKey; repeat_sequence_++; }
diff --git a/ui/events/ozone/keyboard/event_auto_repeat_handler.h b/ui/events/ozone/keyboard/event_auto_repeat_handler.h index f95430b..7ff13d92 100644 --- a/ui/events/ozone/keyboard/event_auto_repeat_handler.h +++ b/ui/events/ozone/keyboard/event_auto_repeat_handler.h
@@ -5,8 +5,6 @@ #ifndef UI_EVENTS_OZONE_KEYBOARD_EVENT_AUTO_REPEAT_HANDLER_H #define UI_EVENTS_OZONE_KEYBOARD_EVENT_AUTO_REPEAT_HANDLER_H -#include <linux/input.h> - #include "base/callback.h" #include "base/memory/weak_ptr.h" #include "base/time/time.h" @@ -46,6 +44,8 @@ void GetAutoRepeatRate(base::TimeDelta* delay, base::TimeDelta* interval); private: + static constexpr unsigned int kInvalidKey = 0; + void StartKeyRepeat(unsigned int key, int device_id); void ScheduleKeyRepeat(const base::TimeDelta& delay); void OnRepeatTimeout(unsigned int sequence); @@ -53,7 +53,7 @@ // Key repeat state. bool auto_repeat_enabled_ = true; - unsigned int repeat_key_ = KEY_RESERVED; + unsigned int repeat_key_ = kInvalidKey; unsigned int repeat_sequence_ = 0; int repeat_device_id_ = 0; base::TimeDelta repeat_delay_;
diff --git a/ui/events/win/events_win_utils.cc b/ui/events/win/events_win_utils.cc index 39e95ace..f8bd8d3c 100644 --- a/ui/events/win/events_win_utils.cc +++ b/ui/events/win/events_win_utils.cc
@@ -425,14 +425,14 @@ DCHECK(IsKeyEvent(msg)); EventType type = EventTypeFromMSG(msg); KeyboardCode key_code = KeyboardCodeFromMSG(msg); - DomCode code = UsLayoutKeyboardCodeToDomCode(key_code); + DomCode code = CodeFromMSG(msg); int flags = EventFlagsFromMSG(msg); DomKey key; base::TimeTicks time_stamp = EventTimeFromMSG(msg); if (IsCharFromMSG(msg)) { flags = PlatformKeyMap::ReplaceControlAndAltWithAltGraph(flags); - return KeyEvent(msg.wParam, key_code, flags, time_stamp); + return KeyEvent(msg.wParam, key_code, code, flags, time_stamp); } else { key = PlatformKeyMap::DomKeyFromKeyboardCode(key_code, &flags); return KeyEvent(type, key_code, code, flags, key, time_stamp);
diff --git a/ui/file_manager/BUILD.gn b/ui/file_manager/BUILD.gn index 319c2bd..01983b8 100644 --- a/ui/file_manager/BUILD.gn +++ b/ui/file_manager/BUILD.gn
@@ -50,6 +50,7 @@ group("unit_test_data") { deps = [ + "gallery/js:unit_tests", "gallery/js/image_editor:unit_tests", ] }
diff --git a/ui/file_manager/audio_player/js/BUILD.gn b/ui/file_manager/audio_player/js/BUILD.gn index 4e45a74..2225d46 100644 --- a/ui/file_manager/audio_player/js/BUILD.gn +++ b/ui/file_manager/audio_player/js/BUILD.gn
@@ -19,15 +19,10 @@ externs_list = [ "$externs_path/chrome_extensions.js", "$externs_path/command_line_private.js", - "$externs_path/file_manager_private.js", - "$externs_path/file_system_provider.js", "$externs_path/metrics_private.js", "../../externs/audio_player_foreground.js", "../../externs/entry_location.js", "../../externs/platform.js", - "../../externs/volume_info.js", - "../../externs/volume_info_list.js", - "../../externs/volume_manager.js", "//third_party/analytics/externs.js", ] }
diff --git a/ui/file_manager/externs/gallery_event.js b/ui/file_manager/externs/gallery_event.js deleted file mode 100644 index 2c262ef..0000000 --- a/ui/file_manager/externs/gallery_event.js +++ /dev/null
@@ -1,20 +0,0 @@ -// Copyright 2017 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. - - -/** - * @constructor - * @extends {Event} - */ -var GalleryEvent = function() {}; - -/** - * @type {Entry} - */ -GalleryEvent.prototype.oldEntry; - -/** - * @type {GalleryItem} - */ -GalleryEvent.prototype.item;
diff --git a/ui/file_manager/file_manager/foreground/js/BUILD.gn b/ui/file_manager/file_manager/foreground/js/BUILD.gn index c4410bd..ebf93c6 100644 --- a/ui/file_manager/file_manager/foreground/js/BUILD.gn +++ b/ui/file_manager/file_manager/foreground/js/BUILD.gn
@@ -67,8 +67,6 @@ sources = [] externs_list = [ "$externs_path/command_line_private.js", - "$externs_path/file_manager_private.js", - "$externs_path/file_system_provider.js", "$externs_path/metrics_private.js", "$externs_path/web_animations.js", "../../../externs/app_window_common.js", @@ -611,7 +609,13 @@ "//ui/webui/resources/js/cr/ui:array_data_model", ] externs_list = [ + # Note: volume_info has a dependency on chrome.fileManagerPrivate.IconSet. + # Also, fileManagerPrivate depends on chrome.fileSystemProvider, so these + # must be introduced together. + "$externs_path/file_manager_private.js", + "$externs_path/file_system_provider.js", "../../../externs/background/volume_manager_factory.js", + "../../../externs/volume_info.js", "../../../externs/volume_info_list.js", "../../../externs/volume_manager.js", ]
diff --git a/ui/file_manager/file_manager/foreground/js/ui/BUILD.gn b/ui/file_manager/file_manager/foreground/js/ui/BUILD.gn index 2be8a02..d3105ea 100644 --- a/ui/file_manager/file_manager/foreground/js/ui/BUILD.gn +++ b/ui/file_manager/file_manager/foreground/js/ui/BUILD.gn
@@ -45,8 +45,6 @@ sources = [] externs_list = [ "$externs_path/command_line_private.js", - "$externs_path/file_manager_private.js", - "$externs_path/file_system_provider.js", "$externs_path/metrics_private.js", "$externs_path/web_animations.js", "../../../../externs/app_window_common.js", @@ -55,7 +53,6 @@ "../../../../externs/background/file_operation_manager.js", "../../../../externs/background/import_history.js", "../../../../externs/background/import_history_enum.js", - "../../../../externs/background/volume_manager_factory.js", "../../../../externs/background_window.js", "../../../../externs/chrome_echo_private.js", "../../../../externs/chrome_webstore_widget_private.js", @@ -68,9 +65,6 @@ "../../../../externs/paper_elements.js", "../../../../externs/platform.js", "../../../../externs/search_item.js", - "../../../../externs/volume_info.js", - "../../../../externs/volume_info_list.js", - "../../../../externs/volume_manager.js", "//third_party/analytics/externs.js", ] }
diff --git a/ui/file_manager/gallery/js/BUILD.gn b/ui/file_manager/gallery/js/BUILD.gn index e15fe2e5..9edf7a2 100644 --- a/ui/file_manager/gallery/js/BUILD.gn +++ b/ui/file_manager/gallery/js/BUILD.gn
@@ -3,11 +3,11 @@ # found in the LICENSE file. import("//third_party/closure_compiler/compile_js.gni") +import("//ui/file_manager/js_unit_tests.gni") -js_type_check("closure_compile") { +js_type_check("closure_compile_module") { deps = [ ":background", - ":closure_compile_externs", ":dimmable_ui_controller", ":entry_list_watcher", ":error_banner", @@ -23,20 +23,6 @@ ] } -js_library("closure_compile_externs") { - sources = [] - externs_list = [ - "$externs_path/file_manager_private.js", - "$externs_path/file_system_provider.js", - "$externs_path/metrics_private.js", - "$externs_path/web_animations.js", - "../../externs/entry_location.js", - "../../externs/platform.js", - "../../externs/volume_info.js", - "//third_party/analytics/externs.js", - ] -} - js_library("background") { deps = [ "../../file_manager/background/js:app_window_wrapper", @@ -51,6 +37,17 @@ "image_editor:image_editor_prompt", "//ui/webui/resources/js:assert", ] + externs_list = [ + "$externs_path/chrome.js", + "$externs_path/chrome_extensions.js", # For chrome.accessibilityFeatures. + ] +} + +js_library("dimmable_ui_controller_unittest") { + deps = [ + ":dimmable_ui_controller", + "//ui/webui/resources/js:webui_resource_test", + ] } js_library("entry_list_watcher") { @@ -58,6 +55,7 @@ "//ui/webui/resources/js:assert", "//ui/webui/resources/js/cr/ui:array_data_model", ] + externs_list = [ "$externs_path/file_manager_private.js" ] } js_library("error_banner") { @@ -105,6 +103,7 @@ "image_editor:image_encoder", "image_editor:image_util", ] + externs_list = [ "../../externs/entry_location.js" ] } js_library("gallery_util") { @@ -116,11 +115,21 @@ ] } +js_library("gallery_util_unittest") { + deps = [ + ":gallery_util", + "../../file_manager/common/js:mock_entry", + "../../file_manager/common/js:unittest_util", + "//ui/webui/resources/js:webui_resource_test", + ] +} + js_library("metadata_worker") { } js_library("ribbon") { deps = [ + ":gallery_data_model", ":gallery_item", "../../file_manager/foreground/js:thumbnail_loader", "../../file_manager/foreground/js/metadata:thumbnail_model", @@ -130,6 +139,12 @@ ] } +js_library("ribbon_unittest") { + deps = [ + ":ribbon", + ] +} + js_library("slide_mode") { deps = [ ":dimmable_ui_controller", @@ -163,3 +178,18 @@ "//ui/webui/resources/js/cr/ui:list_selection_model", ] } + +js_unit_tests("unit_tests") { + deps = [ + ":dimmable_ui_controller_unittest", + ":gallery_util_unittest", + ":ribbon_unittest", + ] +} + +group("closure_compile") { + deps = [ + ":closure_compile_module", + ":unit_tests", + ] +}
diff --git a/ui/file_manager/gallery/js/dimmable_ui_controller_unittest.html b/ui/file_manager/gallery/js/dimmable_ui_controller_unittest.html deleted file mode 100644 index 64ba88a..0000000 --- a/ui/file_manager/gallery/js/dimmable_ui_controller_unittest.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<!-- Copyright 2015 The Chromium Authors. All rights reserved. - -- Use of this source code is governed by a BSD-style license that can be - -- found in the LICENSE file. - --> - -<script type="text/javascript"> - var ContentMetadataProvider = {}; - var chrome = { - fileManagerPrivate: { - getStrings: function(/* ignore */) {} - }, - runtime: { - getBackgroundPage: function(/* ignore */) {} - } - }; -</script> - -<script src="../../../webui/resources/js/cr.js"></script> -<script src="../../../webui/resources/js/cr/event_target.js"></script> -<script src="../../../webui/resources/js/cr/ui/array_data_model.js"></script> -<script src="../../file_manager/common/js/async_util.js"></script> -<script src="../../file_manager/foreground/js/volume_manager_wrapper.js"></script> -<script src="gallery.js"></script> -<script src="gallery_constants.js"></script> - -<script src="dimmable_ui_controller.js"></script> - -<script src="dimmable_ui_controller_unittest.js"></script>
diff --git a/ui/file_manager/gallery/js/gallery_util_unittest.html b/ui/file_manager/gallery/js/gallery_util_unittest.html deleted file mode 100644 index 68bf4850..0000000 --- a/ui/file_manager/gallery/js/gallery_util_unittest.html +++ /dev/null
@@ -1,13 +0,0 @@ -<!DOCTYPE html> -<!-- Copyright 2014 The Chromium Authors. All rights reserved. - -- Use of this source code is governed by a BSD-style license that can be - -- found in the LICENSE file. - --> - -<script src="../../file_manager/common/js/file_type.js"></script> -<script src="../../file_manager/common/js/mock_entry.js"></script> -<script src="../../file_manager/common/js/util.js"></script> -<script src="../../file_manager/common/js/unittest_util.js"></script> -<script src="gallery_util.js"></script> - -<script src="gallery_util_unittest.js"></script>
diff --git a/ui/file_manager/gallery/js/ribbon_unittest.html b/ui/file_manager/gallery/js/ribbon_unittest.html deleted file mode 100644 index 53c9ba6a..0000000 --- a/ui/file_manager/gallery/js/ribbon_unittest.html +++ /dev/null
@@ -1,11 +0,0 @@ -<!DOCTYPE html> -<!-- Copyright 2015 The Chromium Authors. All rights reserved. - -- Use of this source code is governed by a BSD-style license that can be - -- found in the LICENSE file. - --> -<script src="../../../webui/resources/js/cr.js"></script> -<script src="../../../webui/resources/js/cr/event_target.js"></script> -<script src="../../../webui/resources/js/cr/ui/array_data_model.js"></script> -<script src="ribbon.js"></script> - -<script src="ribbon_unittest.js"></script>
diff --git a/ui/file_manager/gallery/js/ribbon_unittest.js b/ui/file_manager/gallery/js/ribbon_unittest.js index e24d668..708f93c 100644 --- a/ui/file_manager/gallery/js/ribbon_unittest.js +++ b/ui/file_manager/gallery/js/ribbon_unittest.js
@@ -4,16 +4,13 @@ function testEmptySpliceEvent() { var dataModel = new cr.ui.ArrayDataModel([]); - var selectionModel = { - addEventListener: function() {}, - selectedIndexes: [] - }; - var ribbon = new Ribbon( - document, - window, - dataModel, - selectionModel, - null); + var selectionModel = new cr.ui.ListSelectionModel(); + var thumbnailModel = /** @type{!ThumbnailModel} */ ({}); + var ribbon = + new Ribbon(document, window, dataModel, selectionModel, thumbnailModel); ribbon.enable(); - dataModel.dispatchEvent({type: 'splice', added: [], removed: []}); + var event = new Event('splice'); + event.added = []; + event.removed = []; + dataModel.dispatchEvent(event); }
diff --git a/ui/file_manager/video_player/js/BUILD.gn b/ui/file_manager/video_player/js/BUILD.gn index befacf4..0ca7151 100644 --- a/ui/file_manager/video_player/js/BUILD.gn +++ b/ui/file_manager/video_player/js/BUILD.gn
@@ -20,16 +20,11 @@ externs_list = [ "$externs_path/chrome_extensions.js", "$externs_path/command_line_private.js", - "$externs_path/file_manager_private.js", - "$externs_path/file_system_provider.js", "$externs_path/media_player_private.js", "$externs_path/metrics_private.js", "../../externs/chrome_cast.js", "../../externs/entry_location.js", "../../externs/platform.js", - "../../externs/volume_info.js", - "../../externs/volume_info_list.js", - "../../externs/volume_manager.js", "//third_party/analytics/externs.js", ] }
diff --git a/ui/gl/BUILD.gn b/ui/gl/BUILD.gn index 5ffb9d7b..8a1dcb0 100644 --- a/ui/gl/BUILD.gn +++ b/ui/gl/BUILD.gn
@@ -11,9 +11,9 @@ import("//testing/test.gni") declare_args() { - enable_swiftshader = - (is_win || is_linux || (is_mac && use_egl) || is_chromeos) && - (target_cpu == "x86" || target_cpu == "x64") + enable_swiftshader = (is_win || is_linux || (is_mac && use_egl) || + is_chromeos || is_fuchsia) && + (target_cpu == "x86" || target_cpu == "x64") } use_glx = use_x11 || ozone_platform_x11
diff --git a/ui/keyboard/keyboard_util.cc b/ui/keyboard/keyboard_util.cc index b107861e..ae457211 100644 --- a/ui/keyboard/keyboard_util.cc +++ b/ui/keyboard/keyboard_util.cc
@@ -264,7 +264,7 @@ SendProcessKeyEvent(ui::ET_KEY_PRESSED, host); - ui::KeyEvent char_event(key_value, code, ui::EF_NONE); + ui::KeyEvent char_event(key_value, code, ui::DomCode::NONE, ui::EF_NONE); if (tic) tic->InsertChar(char_event); SendProcessKeyEvent(ui::ET_KEY_RELEASED, host);
diff --git a/ui/message_center/message_center_stats_collector.cc b/ui/message_center/message_center_stats_collector.cc index c6503a3..076da87 100644 --- a/ui/message_center/message_center_stats_collector.cc +++ b/ui/message_center/message_center_stats_collector.cc
@@ -129,9 +129,6 @@ base::RecordAction( base::UserMetricsAction("Notifications.ShowMessageCenter")); break; - case VISIBILITY_SETTINGS: - base::RecordAction(base::UserMetricsAction("Notifications.ShowSettings")); - break; } }
diff --git a/ui/message_center/message_center_types.h b/ui/message_center/message_center_types.h index 32f0f136..94d9206 100644 --- a/ui/message_center/message_center_types.h +++ b/ui/message_center/message_center_types.h
@@ -12,8 +12,6 @@ VISIBILITY_TRANSIENT = 0, // When the message center view is being displayed. VISIBILITY_MESSAGE_CENTER, - // When the settings view is being displayed. - VISIBILITY_SETTINGS, }; // Identifies the source of a displayed notification.
diff --git a/ui/ozone/common/egl_util.cc b/ui/ozone/common/egl_util.cc index 3ffb083..cc0f48a 100644 --- a/ui/ozone/common/egl_util.cc +++ b/ui/ozone/common/egl_util.cc
@@ -34,9 +34,18 @@ FILE_PATH_LITERAL("libGLESv2.so.2"); #if BUILDFLAG(ENABLE_SWIFTSHADER) const base::FilePath::CharType kGLESv2SwiftShaderLibraryName[] = +#if defined(OS_FUCHSIA) + FILE_PATH_LITERAL("libswiftshader_libGLESv2.so"); +#else FILE_PATH_LITERAL("libGLESv2.so"); +#endif // OS_FUCHSIA const base::FilePath::CharType kEGLSwiftShaderLibraryName[] = +#if defined(OS_FUCHSIA) + FILE_PATH_LITERAL("libswiftshader_libEGL.so"); +#else FILE_PATH_LITERAL("libEGL.so"); +#endif // OS_FUCHSIA + #endif // BUILDFLAG(ENABLE_SWIFTSHADER) #endif // defined(OS_WIN) @@ -86,9 +95,11 @@ if (implementation == gl::kGLImplementationSwiftShaderGL) { #if BUILDFLAG(ENABLE_SWIFTSHADER) base::FilePath module_path; +#if !defined(OS_FUCHSIA) if (!base::PathService::Get(base::DIR_MODULE, &module_path)) return false; module_path = module_path.Append(FILE_PATH_LITERAL("swiftshader/")); +#endif glesv2_path = module_path.Append(kGLESv2SwiftShaderLibraryName); egl_path = module_path.Append(kEGLSwiftShaderLibraryName);
diff --git a/ui/ozone/platform/drm/gpu/drm_framebuffer.cc b/ui/ozone/platform/drm/gpu/drm_framebuffer.cc index 4ae423e..b632257 100644 --- a/ui/ozone/platform/drm/gpu/drm_framebuffer.cc +++ b/ui/ozone/platform/drm/gpu/drm_framebuffer.cc
@@ -26,7 +26,7 @@ params.handles, params.strides, params.offsets, modifiers, &framebuffer_id, params.flags)) { - PLOG(ERROR) << "AddFramebuffer2"; + DPLOG(WARNING) << "AddFramebuffer2"; return nullptr; } @@ -38,7 +38,7 @@ params.handles, params.strides, params.offsets, modifiers, &opaque_framebuffer_id, params.flags)) { - PLOG(ERROR) << "AddFramebuffer2"; + DPLOG(WARNING) << "AddFramebuffer2"; drm_device->RemoveFramebuffer(framebuffer_id); return nullptr; }
diff --git a/ui/ozone/platform/drm/gpu/drm_thread.cc b/ui/ozone/platform/drm/gpu/drm_thread.cc index 5e466191..3205de1 100644 --- a/ui/ozone/platform/drm/gpu/drm_thread.cc +++ b/ui/ozone/platform/drm/gpu/drm_thread.cc
@@ -202,9 +202,9 @@ scoped_refptr<DrmFramebuffer> framebuffer; if (buffer->GetFlags() & GBM_BO_USE_SCANOUT) { + // NB: This is not required to succeed; framebuffers are added for + // imported buffers on a best effort basis. framebuffer = DrmFramebuffer::AddFramebuffer(drm, buffer.get()); - if (!framebuffer) - return; } *out_buffer = std::move(buffer);
diff --git a/ui/ozone/platform/wayland/wayland_window_unittest.cc b/ui/ozone/platform/wayland/wayland_window_unittest.cc index 59c2425..2d885e3 100644 --- a/ui/ozone/platform/wayland/wayland_window_unittest.cc +++ b/ui/ozone/platform/wayland/wayland_window_unittest.cc
@@ -4,6 +4,7 @@ #include "ui/ozone/platform/wayland/wayland_window.h" +#include <linux/input.h> #include <wayland-server-core.h> #include <xdg-shell-unstable-v5-server-protocol.h> #include <xdg-shell-unstable-v6-server-protocol.h>
diff --git a/ui/platform_window/android/BUILD.gn b/ui/platform_window/android/BUILD.gn index 9243259..b9708a6 100644 --- a/ui/platform_window/android/BUILD.gn +++ b/ui/platform_window/android/BUILD.gn
@@ -25,6 +25,7 @@ ":platform_window_java", "//base", "//skia", + "//ui/events:dom_keycode_converter", "//ui/events:events", "//ui/events:events_base", "//ui/gfx",
diff --git a/ui/platform_window/android/platform_window_android.cc b/ui/platform_window/android/platform_window_android.cc index c66fe62c..7267e3c 100644 --- a/ui/platform_window/android/platform_window_android.cc +++ b/ui/platform_window/android/platform_window_android.cc
@@ -10,6 +10,7 @@ #include "base/android/jni_android.h" #include "jni/PlatformWindowAndroid_jni.h" #include "ui/events/event.h" +#include "ui/events/keycodes/dom/dom_code.h" #include "ui/events/keycodes/keyboard_code_conversion_android.h" #include "ui/gfx/geometry/point.h" #include "ui/platform_window/platform_window_delegate.h" @@ -137,7 +138,8 @@ delegate()->DispatchEvent(&key_event); if (pressed && unicode_character) { ui::KeyEvent char_event(unicode_character, - ui::KeyboardCodeFromAndroidKeyCode(key_code), 0); + ui::KeyboardCodeFromAndroidKeyCode(key_code), + ui::DomCode::NONE, 0); delegate()->DispatchEvent(&char_event); } return true;
diff --git a/ui/platform_window/x11/x11_window_base.cc b/ui/platform_window/x11/x11_window_base.cc index 4ec56c03..bcbd46c 100644 --- a/ui/platform_window/x11/x11_window_base.cc +++ b/ui/platform_window/x11/x11_window_base.cc
@@ -164,6 +164,8 @@ } void X11WindowBase::SetBounds(const gfx::Rect& bounds) { + DCHECK(!bounds.size().IsEmpty()); + if (xwindow_ != x11::None) { XWindowChanges changes = {0}; unsigned value_mask = 0;
diff --git a/ui/views/cocoa/bridged_content_view.mm b/ui/views/cocoa/bridged_content_view.mm index 019a538..f6e515b26 100644 --- a/ui/views/cocoa/bridged_content_view.mm +++ b/ui/views/cocoa/bridged_content_view.mm
@@ -583,7 +583,7 @@ if (isFinalInsertForKeyEvent && ![self hasMarkedText]) { ui::KeyEvent charEvent([text characterAtIndex:0], ui::KeyboardCodeFromNSEvent(keyDownEvent_), - ui::EF_NONE); + ui::DomCodeFromNSEvent(keyDownEvent_), ui::EF_NONE); [self handleKeyEvent:&charEvent]; hasUnhandledKeyDownEvent_ = NO; if (charEvent.handled()) @@ -606,8 +606,9 @@ // |text|. This is because |keyDownEvent_| will correspond to the event that // caused the composition text to be confirmed, say, Return key press. if (isCharacterEvent) { - textInputClient_->InsertChar(ui::KeyEvent([text characterAtIndex:0], - ui::VKEY_UNKNOWN, ui::EF_NONE)); + textInputClient_->InsertChar( + ui::KeyEvent([text characterAtIndex:0], ui::VKEY_UNKNOWN, + ui::DomCode::NONE, ui::EF_NONE)); // Leave character events that may have triggered IME confirmation for // inline IME (e.g. Korean) as "unhandled". There will be no more // -insertText: messages, but we are unable to handle these via
diff --git a/ui/views/cocoa/bridged_native_widget.h b/ui/views/cocoa/bridged_native_widget.h index 827da47..dca0f604 100644 --- a/ui/views/cocoa/bridged_native_widget.h +++ b/ui/views/cocoa/bridged_native_widget.h
@@ -15,7 +15,7 @@ #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h" #include "ui/accelerated_widget_mac/ca_transaction_observer.h" #include "ui/accelerated_widget_mac/display_ca_layer_tree.h" -#include "ui/base/ime/input_method_delegate.h" +#include "ui/base/ime/text_input_client.h" #import "ui/views/cocoa/bridged_native_widget_owner.h" #import "ui/views/cocoa/cocoa_mouse_capture_delegate.h" #import "ui/views/focus/focus_manager.h" @@ -27,10 +27,6 @@ @class ModalShowAnimationWithLayer; @class ViewsNSWindowDelegate; -namespace ui { -class InputMethod; -} - namespace views { namespace test { class BridgedNativeWidgetTestApi; @@ -48,9 +44,7 @@ // NativeWidgetMac to the Cocoa window. Behaves a bit like an aura::Window. class VIEWS_EXPORT BridgedNativeWidget : public ui::CATransactionCoordinator::PreCommitObserver, - public ui::internal::InputMethodDelegate, public CocoaMouseCaptureDelegate, - public FocusChangeListener, public BridgedNativeWidgetOwner, public DialogObserver { public: @@ -81,10 +75,6 @@ // Invoked at the end of Widget::Init(). void OnWidgetInitDone(); - // Sets or clears the focus manager to use for tracking focused views. - // This does NOT take ownership of |focus_manager|. - void SetFocusManager(FocusManager* focus_manager); - // Changes the bounds of the window and the hosted layer if present. The // origin is a location in screen coordinates except for "child" windows, // which are positioned relative to their parent(). SetBounds() considers a @@ -164,9 +154,6 @@ // itself. void OnShowAnimationComplete(); - // See widget.h for documentation. - ui::InputMethod* GetInputMethod(); - // The restored bounds will be derived from the current NSWindow frame unless // fullscreen or transitioning between fullscreen states. gfx::Rect GetRestoredBounds() const; @@ -224,9 +211,6 @@ bool ShouldWaitInPreCommit() override; base::TimeDelta PreCommitTimeout() override; - // ui::internal::InputMethodDelegate: - ui::EventDispatchDetails DispatchKeyEventPostIME(ui::KeyEvent* key) override; - // views::BridgedNativeWidget: // TODO(ccameron): Rename BridgedNativeWidget to BridgedNativeWidgetImpl, and // make these methods be exposed via the BridgedNativeWidget interface. @@ -238,6 +222,10 @@ // Specify the content to draw in the NSView. void SetCALayerParams(const gfx::CALayerParams& ca_layer_params); + // TODO(ccameron): This method exists temporarily as we move all direct access + // of TextInputClient out of BridgedContentView. + void SetTextInputClient(ui::TextInputClient* text_input_client); + private: friend class test::BridgedNativeWidgetTestApi; @@ -270,12 +258,6 @@ // Creates and attaches a new instance if not found. NSMutableDictionary* GetWindowProperties() const; - // FocusChangeListener: - void OnWillChangeFocus(View* focused_before, - View* focused_now) override; - void OnDidChangeFocus(View* focused_before, - View* focused_now) override; - // BridgedNativeWidgetOwner: NSWindow* GetNSWindow() override; gfx::Vector2d GetChildWindowOffset() const override; @@ -296,12 +278,10 @@ base::scoped_nsobject<ViewsNSWindowDelegate> window_delegate_; base::scoped_nsobject<BridgedContentView> bridged_view_; base::scoped_nsobject<ModalShowAnimationWithLayer> show_animation_; - std::unique_ptr<ui::InputMethod> input_method_; std::unique_ptr<CocoaMouseCapture> mouse_capture_; std::unique_ptr<CocoaWindowMoveLoop> window_move_loop_; std::unique_ptr<TooltipManager> tooltip_manager_; std::unique_ptr<DragDropClientMac> drag_drop_client_; - FocusManager* focus_manager_; // Weak. Owned by our Widget. Widget::InitParams::Type widget_type_; bool is_translucent_window_ = false;
diff --git a/ui/views/cocoa/bridged_native_widget.mm b/ui/views/cocoa/bridged_native_widget.mm index 837d8c5..7ce8ae4 100644 --- a/ui/views/cocoa/bridged_native_widget.mm +++ b/ui/views/cocoa/bridged_native_widget.mm
@@ -19,8 +19,6 @@ #include "ui/accelerated_widget_mac/window_resize_helper_mac.h" #import "ui/base/cocoa/constrained_window/constrained_window_animation.h" #include "ui/base/hit_test.h" -#include "ui/base/ime/input_method.h" -#include "ui/base/ime/input_method_factory.h" #include "ui/base/layout.h" #include "ui/base/ui_base_switches.h" #include "ui/gfx/geometry/dip_util.h" @@ -225,7 +223,6 @@ NativeWidgetMac* parent) : host_(host), native_widget_mac_(parent), - focus_manager_(nullptr), widget_type_(Widget::InitParams::TYPE_WINDOW), // Updated in Init(). parent_(nullptr), target_fullscreen_state_(false), @@ -247,7 +244,6 @@ ui::CATransactionCoordinator::Get().RemovePreCommitObserver(this); RemoveOrDestroyChildren(); DCHECK(child_windows_.empty()); - SetFocusManager(nullptr); SetRootView(nullptr); } @@ -371,27 +367,6 @@ dialog->AddObserver(this); } -void BridgedNativeWidget::SetFocusManager(FocusManager* focus_manager) { - if (focus_manager_ == focus_manager) - return; - - if (focus_manager_) { - // Only the destructor can replace the focus manager (and it passes null). - DCHECK(![window_ delegate]); - DCHECK(!focus_manager); - if (View* old_focus = focus_manager_->GetFocusedView()) - OnDidChangeFocus(old_focus, nullptr); - focus_manager_->RemoveFocusChangeListener(this); - focus_manager_ = nullptr; - return; - } - - focus_manager_ = focus_manager; - focus_manager_->AddFocusChangeListener(this); - if (View* new_focus = focus_manager_->GetFocusedView()) - OnDidChangeFocus(nullptr, new_focus); -} - void BridgedNativeWidget::SetBounds(const gfx::Rect& new_bounds) { Widget* widget = native_widget_mac_->GetWidget(); // -[NSWindow contentMinSize] is only checked by Cocoa for user-initiated @@ -857,16 +832,6 @@ show_animation_.reset(); } -ui::InputMethod* BridgedNativeWidget::GetInputMethod() { - if (!input_method_) { - input_method_ = ui::CreateInputMethod(this, gfx::kNullAcceleratedWidget); - // For now, use always-focused mode on Mac for the input method. - // TODO(tapted): Move this to OnWindowKeyStatusChangedTo() and balance. - input_method_->OnFocus(); - } - return input_method_.get(); -} - gfx::Rect BridgedNativeWidget::GetRestoredBounds() const { if (target_fullscreen_state_ || in_fullscreen_transition_) return bounds_before_fullscreen_; @@ -1012,19 +977,6 @@ } //////////////////////////////////////////////////////////////////////////////// -// BridgedNativeWidget, internal::InputMethodDelegate: - -ui::EventDispatchDetails BridgedNativeWidget::DispatchKeyEventPostIME( - ui::KeyEvent* key) { - DCHECK(focus_manager_); - if (!focus_manager_->OnKeyEvent(*key)) - key->StopPropagation(); - else - native_widget_mac_->GetWidget()->OnKeyEvent(key); - return ui::EventDispatchDetails(); -} - -//////////////////////////////////////////////////////////////////////////////// // BridgedNativeWidget, CocoaMouseCaptureDelegate: void BridgedNativeWidget::PostCapturedEvent(NSEvent* event) { @@ -1040,26 +992,6 @@ } //////////////////////////////////////////////////////////////////////////////// -// BridgedNativeWidget, FocusChangeListener: - -void BridgedNativeWidget::OnWillChangeFocus(View* focused_before, - View* focused_now) { -} - -void BridgedNativeWidget::OnDidChangeFocus(View* focused_before, - View* focused_now) { - ui::InputMethod* input_method = - native_widget_mac_->GetWidget()->GetInputMethod(); - if (input_method) { - ui::TextInputClient* input_client = input_method->GetTextInputClient(); - // Sanity check: When focus moves away from the widget (i.e. |focused_now| - // is nil), then the textInputClient will be cleared. - DCHECK(!!focused_now || !input_client); - [bridged_view_ setTextInputClient:input_client]; - } -} - -//////////////////////////////////////////////////////////////////////////////// // TODO(ccameron): Update class names to: // BridgedNativeWidgetImpl, BridgedNativeWidget: @@ -1086,6 +1018,11 @@ } } +void BridgedNativeWidget::SetTextInputClient( + ui::TextInputClient* text_input_client) { + [bridged_view_ setTextInputClient:text_input_client]; +} + //////////////////////////////////////////////////////////////////////////////// // BridgedNativeWidget, BridgedNativeWidgetOwner:
diff --git a/ui/views/cocoa/bridged_native_widget_host_impl.h b/ui/views/cocoa/bridged_native_widget_host_impl.h index 1b15c1a..0e83d4d 100644 --- a/ui/views/cocoa/bridged_native_widget_host_impl.h +++ b/ui/views/cocoa/bridged_native_widget_host_impl.h
@@ -9,14 +9,16 @@ #include "base/macros.h" #include "ui/accelerated_widget_mac/accelerated_widget_mac.h" +#include "ui/base/ime/input_method_delegate.h" #include "ui/compositor/layer_owner.h" #include "ui/views/cocoa/bridged_native_widget_host.h" +#include "ui/views/focus/focus_manager.h" #include "ui/views/views_export.h" #include "ui/views/widget/widget.h" namespace ui { class RecyclableCompositorMac; -} +} // namespace ui namespace views { @@ -28,6 +30,8 @@ // APIs, and which may live in an app shim process. class VIEWS_EXPORT BridgedNativeWidgetHostImpl : public BridgedNativeWidgetHost, + public FocusChangeListener, + public ui::internal::InputMethodDelegate, public ui::LayerDelegate, public ui::LayerOwner, public ui::AcceleratedWidgetMacNSView { @@ -47,6 +51,13 @@ // Initialize the ui::Compositor and ui::Layer. void CreateCompositor(const Widget::InitParams& params); + // Sets or clears the focus manager to use for tracking focused views. + // This does NOT take ownership of |focus_manager|. + void SetFocusManager(FocusManager* focus_manager); + + // See widget.h for documentation. + ui::InputMethod* GetInputMethod(); + private: void DestroyCompositor(); @@ -69,6 +80,13 @@ gfx::DecoratedText* decorated_word, gfx::Point* baseline_point) override; + // FocusChangeListener: + void OnWillChangeFocus(View* focused_before, View* focused_now) override; + void OnDidChangeFocus(View* focused_before, View* focused_now) override; + + // ui::internal::InputMethodDelegate: + ui::EventDispatchDetails DispatchKeyEventPostIME(ui::KeyEvent* key) override; + // ui::LayerDelegate: void OnPaintLayer(const ui::PaintContext& context) override; void OnDeviceScaleFactorChanged(float old_device_scale_factor, @@ -86,6 +104,9 @@ // instance that may be in another process. std::unique_ptr<BridgedNativeWidget> bridge_; + std::unique_ptr<ui::InputMethod> input_method_; + FocusManager* focus_manager_ = nullptr; // Weak. Owned by our Widget. + std::unique_ptr<ui::RecyclableCompositorMac> compositor_; DISALLOW_COPY_AND_ASSIGN(BridgedNativeWidgetHostImpl);
diff --git a/ui/views/cocoa/bridged_native_widget_host_impl.mm b/ui/views/cocoa/bridged_native_widget_host_impl.mm index 28dfa18..754a4044 100644 --- a/ui/views/cocoa/bridged_native_widget_host_impl.mm +++ b/ui/views/cocoa/bridged_native_widget_host_impl.mm
@@ -5,6 +5,8 @@ #include "ui/views/cocoa/bridged_native_widget_host_impl.h" #include "ui/base/hit_test.h" +#include "ui/base/ime/input_method.h" +#include "ui/base/ime/input_method_factory.h" #include "ui/compositor/recyclable_compositor_mac.h" #include "ui/gfx/geometry/dip_util.h" #include "ui/views/cocoa/bridged_native_widget.h" @@ -25,6 +27,7 @@ // TODO(ccameron): When all communication from |bridge_| to this goes through // the BridgedNativeWidgetHost, this can be replaced with closing that pipe. bridge_.reset(); + SetFocusManager(nullptr); DestroyCompositor(); } @@ -88,6 +91,36 @@ std::move(compositor_)); } +void BridgedNativeWidgetHostImpl::SetFocusManager(FocusManager* focus_manager) { + if (focus_manager_ == focus_manager) + return; + + if (focus_manager_) { + // Only the destructor can replace the focus manager (and it passes null). + DCHECK(!focus_manager); + if (View* old_focus = focus_manager_->GetFocusedView()) + OnDidChangeFocus(old_focus, nullptr); + focus_manager_->RemoveFocusChangeListener(this); + focus_manager_ = nullptr; + return; + } + + focus_manager_ = focus_manager; + focus_manager_->AddFocusChangeListener(this); + if (View* new_focus = focus_manager_->GetFocusedView()) + OnDidChangeFocus(nullptr, new_focus); +} + +ui::InputMethod* BridgedNativeWidgetHostImpl::GetInputMethod() { + if (!input_method_) { + input_method_ = ui::CreateInputMethod(this, gfx::kNullAcceleratedWidget); + // For now, use always-focused mode on Mac for the input method. + // TODO(tapted): Move this to OnWindowKeyStatusChangedTo() and balance. + input_method_->OnFocus(); + } + return input_method_.get(); +} + //////////////////////////////////////////////////////////////////////////////// // BridgedNativeWidgetHostImpl, views::BridgedNativeWidgetHost: @@ -196,6 +229,38 @@ } //////////////////////////////////////////////////////////////////////////////// +// BridgedNativeWidget, FocusChangeListener: + +void BridgedNativeWidgetHostImpl::OnWillChangeFocus(View* focused_before, + View* focused_now) {} + +void BridgedNativeWidgetHostImpl::OnDidChangeFocus(View* focused_before, + View* focused_now) { + ui::InputMethod* input_method = + native_widget_mac_->GetWidget()->GetInputMethod(); + if (input_method) { + ui::TextInputClient* input_client = input_method->GetTextInputClient(); + // Sanity check: When focus moves away from the widget (i.e. |focused_now| + // is nil), then the textInputClient will be cleared. + DCHECK(!!focused_now || !input_client); + bridge_->SetTextInputClient(input_client); + } +} + +//////////////////////////////////////////////////////////////////////////////// +// BridgedNativeWidget, internal::InputMethodDelegate: + +ui::EventDispatchDetails BridgedNativeWidgetHostImpl::DispatchKeyEventPostIME( + ui::KeyEvent* key) { + DCHECK(focus_manager_); + if (!focus_manager_->OnKeyEvent(*key)) + key->StopPropagation(); + else + native_widget_mac_->GetWidget()->OnKeyEvent(key); + return ui::EventDispatchDetails(); +} + +//////////////////////////////////////////////////////////////////////////////// // BridgedNativeWidgetHostImpl, LayerDelegate: void BridgedNativeWidgetHostImpl::OnPaintLayer(
diff --git a/ui/views/cocoa/bridged_native_widget_unittest.mm b/ui/views/cocoa/bridged_native_widget_unittest.mm index b131177..631b856 100644 --- a/ui/views/cocoa/bridged_native_widget_unittest.mm +++ b/ui/views/cocoa/bridged_native_widget_unittest.mm
@@ -301,7 +301,7 @@ delegate()->OnNativeWidgetCreated(true); // To allow events to dispatch to a view, it needs a way to get focus. - bridge()->SetFocusManager(GetWidget()->GetFocusManager()); + bridge_host_for_testing()->SetFocusManager(GetWidget()->GetFocusManager()); } void ReorderNativeViews() override { @@ -788,7 +788,7 @@ } TEST_F(BridgedNativeWidgetTest, GetInputMethodShouldNotReturnNull) { - EXPECT_TRUE(bridge()->GetInputMethod()); + EXPECT_TRUE(bridge_host()->GetInputMethod()); } // A simpler test harness for testing initialization flows.
diff --git a/ui/views/controls/menu/menu_runner_unittest.cc b/ui/views/controls/menu/menu_runner_unittest.cc index 704f2421..299ca60b 100644 --- a/ui/views/controls/menu/menu_runner_unittest.cc +++ b/ui/views/controls/menu/menu_runner_unittest.cc
@@ -12,6 +12,7 @@ #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "ui/base/ui_base_types.h" +#include "ui/events/keycodes/dom/dom_code.h" #include "ui/events/test/event_generator.h" #include "ui/views/controls/menu/menu_controller.h" #include "ui/views/controls/menu/menu_delegate.h" @@ -201,7 +202,7 @@ EXPECT_TRUE(runner->IsRunning()); ui::test::EventGenerator generator(GetContext(), owner()->GetNativeWindow()); - ui::KeyEvent key_press(0x062f, ui::VKEY_N, 0); + ui::KeyEvent key_press(0x062f, ui::VKEY_N, ui::DomCode::NONE, 0); generator.Dispatch(&key_press); views::test::WaitForMenuClosureAnimation(); EXPECT_FALSE(runner->IsRunning());
diff --git a/ui/views/controls/textfield/textfield_unittest.cc b/ui/views/controls/textfield/textfield_unittest.cc index 5e67d10..9237529 100644 --- a/ui/views/controls/textfield/textfield_unittest.cc +++ b/ui/views/controls/textfield/textfield_unittest.cc
@@ -39,6 +39,7 @@ #include "ui/events/event.h" #include "ui/events/event_processor.h" #include "ui/events/event_utils.h" +#include "ui/events/keycodes/dom/dom_code.h" #include "ui/events/keycodes/keyboard_codes.h" #include "ui/events/test/event_generator.h" #include "ui/events/test/keyboard_layout.h" @@ -565,7 +566,7 @@ // keyboard. So they are dispatched directly to the input method. But on // Mac, key events don't pass through InputMethod. Hence they are // dispatched regularly. - ui::KeyEvent event(ch, ui::VKEY_UNKNOWN, flags); + ui::KeyEvent event(ch, ui::VKEY_UNKNOWN, ui::DomCode::NONE, flags); #if defined(OS_MACOSX) event_generator_->Dispatch(&event); #else
diff --git a/ui/views/corewm/tooltip_aura.cc b/ui/views/corewm/tooltip_aura.cc index 80237a0a..c36fdd4 100644 --- a/ui/views/corewm/tooltip_aura.cc +++ b/ui/views/corewm/tooltip_aura.cc
@@ -42,7 +42,8 @@ } // Creates a widget of type TYPE_TOOLTIP -views::Widget* CreateTooltipWidget(aura::Window* tooltip_window) { +views::Widget* CreateTooltipWidget(aura::Window* tooltip_window, + const gfx::Rect& bounds) { views::Widget* widget = new views::Widget; views::Widget::InitParams params; // For aura, since we set the type to TYPE_TOOLTIP, the widget will get @@ -52,6 +53,7 @@ DCHECK(params.context); params.keep_on_top = true; params.accept_events = false; + params.bounds = bounds; if (CanUseTranslucentTooltipWidget()) params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; params.shadow_type = views::Widget::InitParams::SHADOW_TYPE_NONE; @@ -166,8 +168,8 @@ return tooltip_view_->render_text_for_test(); } -void TooltipAura::SetTooltipBounds(const gfx::Point& mouse_pos, - const gfx::Size& tooltip_size) { +gfx::Rect TooltipAura::GetTooltipBounds(const gfx::Point& mouse_pos, + const gfx::Size& tooltip_size) { gfx::Rect tooltip_rect(mouse_pos, tooltip_size); tooltip_rect.Offset(kCursorOffsetX, kCursorOffsetY); display::Screen* screen = display::Screen::GetScreen(); @@ -186,7 +188,7 @@ tooltip_rect.set_y(mouse_pos.y() - tooltip_size.height()); tooltip_rect.AdjustToFit(display_bounds); - widget_->SetBounds(tooltip_rect); + return tooltip_rect; } void TooltipAura::DestroyWidget() { @@ -210,14 +212,17 @@ tooltip_view_->SetMaxWidth(GetMaxWidth(location)); tooltip_view_->SetText(tooltip_text); + const gfx::Rect adjusted_bounds = + GetTooltipBounds(location, tooltip_view_->GetPreferredSize()); + if (!widget_) { - widget_ = CreateTooltipWidget(tooltip_window_); + widget_ = CreateTooltipWidget(tooltip_window_, adjusted_bounds); widget_->SetContentsView(tooltip_view_.get()); widget_->AddObserver(this); + } else { + widget_->SetBounds(adjusted_bounds); } - SetTooltipBounds(location, tooltip_view_->GetPreferredSize()); - ui::NativeTheme* native_theme = widget_->GetNativeTheme(); tooltip_view_->SetBackgroundColor(native_theme->GetSystemColor( ui::NativeTheme::kColorId_TooltipBackground));
diff --git a/ui/views/corewm/tooltip_aura.h b/ui/views/corewm/tooltip_aura.h index 4540c363..02b81cc 100644 --- a/ui/views/corewm/tooltip_aura.h +++ b/ui/views/corewm/tooltip_aura.h
@@ -38,9 +38,9 @@ gfx::RenderText* GetRenderTextForTest(); // Adjusts the bounds given by the arguments to fit inside the desktop - // and applies the adjusted bounds to the label_. - void SetTooltipBounds(const gfx::Point& mouse_pos, - const gfx::Size& tooltip_size); + // and returns the adjusted bounds. + gfx::Rect GetTooltipBounds(const gfx::Point& mouse_pos, + const gfx::Size& tooltip_size); // Destroys |widget_|. void DestroyWidget();
diff --git a/ui/views/mus/ax_remote_host.cc b/ui/views/mus/ax_remote_host.cc index f28c1ce9..280d14c 100644 --- a/ui/views/mus/ax_remote_host.cc +++ b/ui/views/mus/ax_remote_host.cc
@@ -13,6 +13,8 @@ #include "ui/accessibility/platform/ax_unique_id.h" #include "ui/aura/mus/window_tree_client.h" #include "ui/aura/window.h" +#include "ui/display/display.h" +#include "ui/display/screen.h" #include "ui/views/accessibility/ax_aura_obj_wrapper.h" #include "ui/views/mus/ax_tree_source_mus.h" #include "ui/views/mus/mus_client.h" @@ -20,6 +22,9 @@ #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_delegate.h" +using display::Display; +using display::Screen; + namespace views { // For external linkage. @@ -68,12 +73,17 @@ tree_source_ = std::make_unique<AXTreeSourceMus>(contents_wrapper); tree_serializer_ = std::make_unique<AuraAXTreeSerializer>(tree_source_.get()); + // Inform the serializer of the display device scale factor. + UpdateDeviceScaleFactor(); + Screen::GetScreen()->AddObserver(this); + SendEvent(contents_wrapper, ax::mojom::Event::kLoadComplete); } void AXRemoteHost::StopMonitoringWidget() { DCHECK(widget_); DCHECK(widget_->HasObserver(this)); + Screen::GetScreen()->RemoveObserver(this); widget_->RemoveObserver(this); AXAuraObjCache* cache = AXAuraObjCache::GetInstance(); cache->OnRootWindowObjDestroyed(widget_->GetNativeWindow()); @@ -129,6 +139,14 @@ StopMonitoringWidget(); } +void AXRemoteHost::OnDisplayMetricsChanged(const Display& display, + uint32_t metrics) { + if (metrics & display::DisplayObserver::DISPLAY_METRIC_DEVICE_SCALE_FACTOR) { + UpdateDeviceScaleFactor(); + SendEvent(tree_source_->GetRoot(), ax::mojom::Event::kLocationChanged); + } +} + void AXRemoteHost::OnChildWindowRemoved(AXAuraObjWrapper* parent) { if (!enabled_ || !widget_) return; @@ -186,9 +204,12 @@ void AXRemoteHost::SendEvent(AXAuraObjWrapper* aura_obj, ax::mojom::Event event_type) { DCHECK(aura_obj); - if (!enabled_ || !tree_serializer_) + if (!enabled_ || !widget_) return; + DCHECK(tree_source_); + DCHECK(tree_serializer_); + ui::AXTreeUpdate update; if (!tree_serializer_->SerializeChanges(aura_obj, &update)) { LOG(ERROR) << "Unable to serialize accessibility tree."; @@ -228,4 +249,14 @@ hit_view->NotifyAccessibilityEvent(action.hit_test_event_to_fire, true); } +void AXRemoteHost::UpdateDeviceScaleFactor() { + DCHECK(widget_); + DCHECK(tree_source_); + + // Use the scale factor for the widget's window's current display. + Display display = + Screen::GetScreen()->GetDisplayNearestWindow(widget_->GetNativeWindow()); + tree_source_->set_device_scale_factor(display.device_scale_factor()); +} + } // namespace views
diff --git a/ui/views/mus/ax_remote_host.h b/ui/views/mus/ax_remote_host.h index 0f979445..7e506159 100644 --- a/ui/views/mus/ax_remote_host.h +++ b/ui/views/mus/ax_remote_host.h
@@ -12,6 +12,7 @@ #include "mojo/public/cpp/bindings/binding.h" #include "ui/accessibility/ax_tree_serializer.h" #include "ui/accessibility/mojom/ax_host.mojom.h" +#include "ui/display/display_observer.h" #include "ui/views/accessibility/ax_aura_obj_cache.h" #include "ui/views/mus/mus_export.h" #include "ui/views/widget/widget_observer.h" @@ -37,6 +38,7 @@ // (e.g. the keyboard shortcut viewer app). class VIEWS_MUS_EXPORT AXRemoteHost : public ax::mojom::AXRemoteHost, public WidgetObserver, + public display::DisplayObserver, public AXAuraObjCache::Delegate { public: // Well-known tree ID for the remote client. @@ -68,6 +70,10 @@ void OnWidgetClosing(Widget* widget) override; void OnWidgetDestroying(Widget* widget) override; + // display::DisplayObserver: + void OnDisplayMetricsChanged(const display::Display& display, + uint32_t changed_metrics) override; + // AXAuraObjCache::Delegate: void OnChildWindowRemoved(AXAuraObjWrapper* parent) override; void OnEvent(AXAuraObjWrapper* aura_obj, @@ -88,6 +94,9 @@ void PerformHitTest(const ui::AXActionData& action); + // Updates the display device scale factor used when serializing nodes. + void UpdateDeviceScaleFactor(); + // Accessibility host service in the browser. ax::mojom::AXHostPtr ax_host_ptr_;
diff --git a/ui/views/mus/ax_remote_host_unittest.cc b/ui/views/mus/ax_remote_host_unittest.cc index a8fdfad6..94155bb 100644 --- a/ui/views/mus/ax_remote_host_unittest.cc +++ b/ui/views/mus/ax_remote_host_unittest.cc
@@ -8,8 +8,12 @@ #include "base/run_loop.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/accessibility/mojom/ax_host.mojom.h" +#include "ui/display/display.h" +#include "ui/gfx/geometry/vector2d_f.h" +#include "ui/gfx/transform.h" #include "ui/views/accessibility/ax_aura_obj_cache.h" #include "ui/views/mus/mus_client_test_api.h" +#include "ui/views/mus/screen_mus.h" #include "ui/views/test/views_test_base.h" #include "ui/views/widget/widget.h" #include "ui/views/widget/widget_delegate.h" @@ -41,6 +45,7 @@ const ui::AXEvent& event) override { ++event_count_; last_tree_id_ = tree_id; + last_updates_ = updates; last_event_ = event; } @@ -49,6 +54,7 @@ int add_client_count_ = 0; int event_count_ = 0; int last_tree_id_ = 0; + std::vector<ui::AXTreeUpdate> last_updates_; ui::AXEvent last_event_; private: @@ -241,5 +247,26 @@ EXPECT_EQ(ax::mojom::Event::kNone, view.last_event_type_); } +TEST_F(AXRemoteHostTest, ScaleFactor) { + // Set the primary display to high DPI. + ScreenMus* screen = static_cast<ScreenMus*>(display::Screen::GetScreen()); + display::Display display = screen->GetPrimaryDisplay(); + display.set_device_scale_factor(2.f); + screen->display_list().UpdateDisplay(display); + + // Create a widget. + TestAXHostService service(true /*automation_enabled*/); + AXRemoteHost* remote = CreateRemote(&service); + std::unique_ptr<Widget> widget = CreateTestWidget(); + remote->FlushForTesting(); + + // Widget transform is scaled by a factor of 2. + ASSERT_FALSE(service.last_updates_.empty()); + gfx::Transform* transform = service.last_updates_[0].nodes[0].transform.get(); + ASSERT_TRUE(transform); + EXPECT_TRUE(transform->IsScale2d()); + EXPECT_EQ(gfx::Vector2dF(2.f, 2.f), transform->Scale2d()); +} + } // namespace } // namespace views
diff --git a/ui/views/mus/ax_tree_source_mus.cc b/ui/views/mus/ax_tree_source_mus.cc index 6acef96a..7f767c4 100644 --- a/ui/views/mus/ax_tree_source_mus.cc +++ b/ui/views/mus/ax_tree_source_mus.cc
@@ -34,7 +34,15 @@ // However, the contents view in the host (browser) already has an offset // from its Widget, so the root should start at (0,0). out_data->location.set_origin(gfx::PointF()); - out_data->transform.reset(); + + // Adjust for display device scale factor. + if (device_scale_factor_ == 1.f) { + // The AX system represents the identity transform with null. + out_data->transform.reset(); + } else { + out_data->transform = std::make_unique<gfx::Transform>(); + out_data->transform->Scale(device_scale_factor_, device_scale_factor_); + } return; }
diff --git a/ui/views/mus/ax_tree_source_mus.h b/ui/views/mus/ax_tree_source_mus.h index 340f142..6e3681e0 100644 --- a/ui/views/mus/ax_tree_source_mus.h +++ b/ui/views/mus/ax_tree_source_mus.h
@@ -23,6 +23,8 @@ explicit AXTreeSourceMus(AXAuraObjWrapper* root); ~AXTreeSourceMus() override; + void set_device_scale_factor(float scale) { device_scale_factor_ = scale; } + // AXTreeSource: bool GetTreeData(ui::AXTreeData* data) const override; AXAuraObjWrapper* GetRoot() const override; @@ -33,6 +35,9 @@ // The top-level object to use for the AX tree. AXAuraObjWrapper* root_; + // The display device scale factor to use while serializing this update. + float device_scale_factor_ = 1.f; + DISALLOW_COPY_AND_ASSIGN(AXTreeSourceMus); };
diff --git a/ui/views/mus/ax_tree_source_mus_unittest.cc b/ui/views/mus/ax_tree_source_mus_unittest.cc index d652b047..2f7bc9a 100644 --- a/ui/views/mus/ax_tree_source_mus_unittest.cc +++ b/ui/views/mus/ax_tree_source_mus_unittest.cc
@@ -12,6 +12,8 @@ #include "ui/accessibility/ax_tree_data.h" #include "ui/accessibility/platform/ax_unique_id.h" #include "ui/gfx/geometry/rect_f.h" +#include "ui/gfx/geometry/vector2d_f.h" +#include "ui/gfx/transform.h" #include "ui/views/accessibility/ax_aura_obj_cache.h" #include "ui/views/accessibility/ax_aura_obj_wrapper.h" #include "ui/views/controls/label.h" @@ -86,5 +88,23 @@ EXPECT_EQ(root->GetUniqueId().Get(), node_data.offset_container_id); } +TEST_F(AXTreeSourceMusTest, ScaleFactor) { + AXAuraObjCache* cache = AXAuraObjCache::GetInstance(); + AXAuraObjWrapper* root = cache->GetOrCreate(widget_->GetContentsView()); + + // Simulate serializing a widget on a high-dpi display. + AXTreeSourceMus tree(root); + tree.set_device_scale_factor(2.f); + + // Serialize the root. + ui::AXNodeData node_data; + tree.SerializeNode(root, &node_data); + + // Transform is scaled. + ASSERT_TRUE(node_data.transform); + EXPECT_TRUE(node_data.transform->IsScale2d()); + EXPECT_EQ(gfx::Vector2dF(2.f, 2.f), node_data.transform->Scale2d()); +} + } // namespace } // namespace views
diff --git a/ui/views/mus/screen_mus.cc b/ui/views/mus/screen_mus.cc index 2c500aa..e69d2a3 100644 --- a/ui/views/mus/screen_mus.cc +++ b/ui/views/mus/screen_mus.cc
@@ -104,8 +104,7 @@ delegate_->OnWindowManagerFrameValuesChanged(); } - // GetDisplayForNewWindows() can handle ids that are not in the list. - display_id_for_new_windows_ = display_id_for_new_windows; + SetDisplayForNewWindows(display_id_for_new_windows); } display::Display ScreenMus::GetDisplayNearestWindow( @@ -130,13 +129,4 @@ return delegate_->GetWindowAtScreenPoint(point); } -display::Display ScreenMus::GetDisplayForNewWindows() const { - display::Display display; - if (GetDisplayWithDisplayId(display_id_for_new_windows_, &display)) - return display; - - // Fallback to primary display. - return GetPrimaryDisplay(); -} - } // namespace views
diff --git a/ui/views/mus/screen_mus.h b/ui/views/mus/screen_mus.h index 34aaa02..3753e9c 100644 --- a/ui/views/mus/screen_mus.h +++ b/ui/views/mus/screen_mus.h
@@ -33,11 +33,9 @@ gfx::Point GetCursorScreenPoint() override; bool IsWindowUnderCursor(gfx::NativeWindow window) override; aura::Window* GetWindowAtScreenPoint(const gfx::Point& point) override; - display::Display GetDisplayForNewWindows() const override; private: ScreenMusDelegate* delegate_; - int64_t display_id_for_new_windows_ = display::kInvalidDisplayId; DISALLOW_COPY_AND_ASSIGN(ScreenMus); };
diff --git a/ui/views/test/widget_test_mac.mm b/ui/views/test/widget_test_mac.mm index c663b4e9..62f0311 100644 --- a/ui/views/test/widget_test_mac.mm +++ b/ui/views/test/widget_test_mac.mm
@@ -10,6 +10,7 @@ #import "base/mac/scoped_objc_class_swizzler.h" #include "base/macros.h" #import "ui/views/cocoa/bridged_native_widget.h" +#include "ui/views/cocoa/bridged_native_widget_host_impl.h" #include "ui/views/widget/native_widget_mac.h" #include "ui/views/widget/root_view.h" @@ -81,7 +82,9 @@ // static ui::internal::InputMethodDelegate* WidgetTest::GetInputMethodDelegateForWidget( Widget* widget) { - return NativeWidgetMac::GetBridgeForNativeWindow(widget->GetNativeWindow()); + return NativeWidgetMac::GetBridgeForNativeWindow(widget->GetNativeWindow()) + ->native_widget_mac() + ->bridge_host_for_testing(); } // static
diff --git a/ui/views/view_targeter_unittest.cc b/ui/views/view_targeter_unittest.cc index 1427abd4..9998b3b0 100644 --- a/ui/views/view_targeter_unittest.cc +++ b/ui/views/view_targeter_unittest.cc
@@ -8,6 +8,7 @@ #include "base/memory/ptr_util.h" #include "ui/events/event_targeter.h" #include "ui/events/event_utils.h" +#include "ui/events/keycodes/dom/dom_code.h" #include "ui/gfx/path.h" #include "ui/views/masked_targeter_delegate.h" #include "ui/views/test/views_test_base.h" @@ -141,7 +142,7 @@ static_cast<internal::RootView*>(widget.GetRootView()); ui::EventTargeter* targeter = root_view->targeter(); - ui::KeyEvent key_event('a', ui::VKEY_A, ui::EF_NONE); + ui::KeyEvent key_event('a', ui::VKEY_A, ui::DomCode::NONE, ui::EF_NONE); // The focused view should be the initial target of the event. ui::EventTarget* current_target = targeter->FindTargetForEvent(root_view,
diff --git a/ui/views/widget/native_widget_mac.h b/ui/views/widget/native_widget_mac.h index 60d8364..5e757e0f 100644 --- a/ui/views/widget/native_widget_mac.h +++ b/ui/views/widget/native_widget_mac.h
@@ -19,6 +19,7 @@ namespace test { class HitTestNativeWidgetMac; class MockNativeWidgetMac; +class WidgetTest; } class BridgedNativeWidget; @@ -162,6 +163,7 @@ private: friend class test::MockNativeWidgetMac; friend class test::HitTestNativeWidgetMac; + friend class views::test::WidgetTest; internal::NativeWidgetDelegate* delegate_; std::unique_ptr<BridgedNativeWidgetHostImpl> bridge_host_;
diff --git a/ui/views/widget/native_widget_mac.mm b/ui/views/widget/native_widget_mac.mm index 3def277..4e53a164 100644 --- a/ui/views/widget/native_widget_mac.mm +++ b/ui/views/widget/native_widget_mac.mm
@@ -144,7 +144,7 @@ bridge_host_->SetRootView(GetWidget()->GetRootView()); if (auto* focus_manager = GetWidget()->GetFocusManager()) { [window makeFirstResponder:bridge()->ns_view()]; - bridge()->SetFocusManager(focus_manager); + bridge_host_->SetFocusManager(focus_manager); } bridge_host_->CreateCompositor(params); @@ -253,7 +253,7 @@ } ui::InputMethod* NativeWidgetMac::GetInputMethod() { - return bridge() ? bridge()->GetInputMethod() : nullptr; + return bridge_host_ ? bridge_host_->GetInputMethod() : nullptr; } void NativeWidgetMac::CenterWindow(const gfx::Size& size) {
diff --git a/ui/views/widget/root_view_unittest.cc b/ui/views/widget/root_view_unittest.cc index 8295917..d1bee17 100644 --- a/ui/views/widget/root_view_unittest.cc +++ b/ui/views/widget/root_view_unittest.cc
@@ -8,6 +8,7 @@ #include "base/memory/ptr_util.h" #include "build/build_config.h" #include "ui/events/event_utils.h" +#include "ui/events/keycodes/dom/dom_code.h" #include "ui/views/context_menu_controller.h" #include "ui/views/test/views_test_base.h" #include "ui/views/view_targeter.h" @@ -133,7 +134,8 @@ focused_view->RequestFocus(); // No context menu should be shown for a keypress of 'A'. - ui::KeyEvent nomenu_key_event('a', ui::VKEY_A, ui::EF_NONE); + ui::KeyEvent nomenu_key_event('a', ui::VKEY_A, ui::DomCode::NONE, + ui::EF_NONE); ui::EventDispatchDetails details = root_view->OnEventFromSource(&nomenu_key_event); EXPECT_FALSE(details.target_destroyed);
diff --git a/ui/webui/resources/js/i18n_behavior.js b/ui/webui/resources/js/i18n_behavior.js index 5e1bf38..646d6c51 100644 --- a/ui/webui/resources/js/i18n_behavior.js +++ b/ui/webui/resources/js/i18n_behavior.js
@@ -80,6 +80,29 @@ }, /** + * Similar to 'i18nDynamic', but var_args valus are interpreted as keys in + * loadTimeData. This allows generation of strings that take other localized + * strings as parameters. + * @param {string} locale The UI language used. + * @param {string} id The ID of the string to translate. + * @param {...string} var_args Values to replace the placeholders $1 to $9 + * in the string. Values are interpreted as strings IDs if found in the + * list of localized strings. + * @return {string} A translated, sanitized, substituted string. + */ + i18nRecursive: function(locale, id, var_args) { + var args = Array.prototype.slice.call(arguments, 2); + if (args.length > 0) { + // Try to replace IDs with localized values. + var self = this; + args = args.map(function(str) { + return self.i18nExists(str) ? loadTimeData.getString(str) : str; + }); + } + return this.i18nDynamic.apply(this, [locale, id].concat(args)); + }, + + /** * Returns true if a translation exists for |id|. * @param {string} id * @return {boolean}
diff --git a/ui/wm/core/compound_event_filter_unittest.cc b/ui/wm/core/compound_event_filter_unittest.cc index cd04f67..fe5f80dc 100644 --- a/ui/wm/core/compound_event_filter_unittest.cc +++ b/ui/wm/core/compound_event_filter_unittest.cc
@@ -15,6 +15,7 @@ #include "ui/aura/window_event_dispatcher.h" #include "ui/events/event.h" #include "ui/events/event_utils.h" +#include "ui/events/keycodes/dom/dom_code.h" #include "ui/events/test/event_generator.h" #include "ui/wm/core/default_activation_client.h" #include "ui/wm/public/activation_client.h" @@ -64,7 +65,7 @@ aura::test::TestCursorClient cursor_client(root_window()); // Send key event to hide the cursor. - ui::KeyEvent key('a', ui::VKEY_A, ui::EF_NONE); + ui::KeyEvent key('a', ui::VKEY_A, ui::DomCode::NONE, ui::EF_NONE); DispatchEventUsingWindowDispatcher(&key); EXPECT_FALSE(cursor_client.IsCursorVisible()); @@ -89,13 +90,13 @@ // Disallow hiding the cursor on keypress. cursor_client.set_should_hide_cursor_on_key_event(false); - key = ui::KeyEvent('a', ui::VKEY_A, ui::EF_NONE); + key = ui::KeyEvent('a', ui::VKEY_A, ui::DomCode::NONE, ui::EF_NONE); DispatchEventUsingWindowDispatcher(&key); EXPECT_TRUE(cursor_client.IsCursorVisible()); // Allow hiding the cursor on keypress. cursor_client.set_should_hide_cursor_on_key_event(true); - key = ui::KeyEvent('a', ui::VKEY_A, ui::EF_NONE); + key = ui::KeyEvent('a', ui::VKEY_A, ui::DomCode::NONE, ui::EF_NONE); DispatchEventUsingWindowDispatcher(&key); EXPECT_FALSE(cursor_client.IsCursorVisible());
diff --git a/webrunner/BUILD.gn b/webrunner/BUILD.gn index e40e984c..81d4652 100644 --- a/webrunner/BUILD.gn +++ b/webrunner/BUILD.gn
@@ -6,6 +6,7 @@ import("//build/config/fuchsia/fidl_library.gni") import("//build/config/fuchsia/rules.gni") +import("//build/util/process_version.gni") import("//testing/test.gni") import("//tools/grit/repack.gni") @@ -196,3 +197,66 @@ "//third_party/fuchsia-sdk:viewsv1", ] } + +# Build location where all Fuchsia archive source files are placed. +_artifact_root = "$root_out_dir/fuchsia_artifacts" + +# Produces a LICENSE file for webrunner and its transitive dependencies. +_license_path = "$_artifact_root/LICENSE" +action("license") { + script = "//tools/licenses.py" + inputs = [ + "//buildtools/linux64/gn", + ] + outputs = [ + _license_path, + ] + args = [ + "license_file", + rebase_path(_license_path, root_build_dir), + "--gn-target", + "//webrunner:webrunner_pkg", + "--gn-out-dir", + ".", + ] +} + +# Extracts the numeric Chrome build ID and writes it to a file in the output +# directory. +# +# To check out the repository on the commit where the build ID was generated, +# simply call `git checkout <build-id>`, and Git will check out the commit +# associated with the <build-id> tag. +process_version("build_id") { + template_file = "cipd/build_id.template" + sources = [ + "//chrome/VERSION", + ] + output = "$_artifact_root/build_id.txt" + process_only = true +} + +# Puts copies of files at the top level of the CIPD archive's structure. +copy("restaged_packages") { + sources = [ + "$root_gen_dir/webrunner/chromium/chromium.far", + "$root_gen_dir/webrunner/web_runner/web_runner.far", + ] + outputs = [ + "$_artifact_root/{{source_file_part}}", + ] + deps = [ + ":service_pkg", + ":webrunner_pkg", + ] +} + +# Specifies the build steps that must be performed before the creation of +# a CIPD archive. +group("archive_sources") { + deps = [ + ":build_id", + ":license", + ":restaged_packages", + ] +}
diff --git a/webrunner/cipd/build_id.template b/webrunner/cipd/build_id.template new file mode 100644 index 0000000..7bbd81cb --- /dev/null +++ b/webrunner/cipd/build_id.template
@@ -0,0 +1 @@ +@MAJOR@.@MINOR@.@BUILD@.@PATCH@
diff --git a/webrunner/cipd/fidl.yaml b/webrunner/cipd/fidl.yaml new file mode 100644 index 0000000..67724bd --- /dev/null +++ b/webrunner/cipd/fidl.yaml
@@ -0,0 +1,16 @@ +# Copyright 2018 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Creates a CIPD package for the 'chromium' service FIDL definitions. +# +# To create a CIPD package, run the following command from the build output +# directory. +# +# cipd create --pkg-def ../../webrunner/cipd/fidl.yaml \ +# -tag version:$(cat fuchsia_artifacts/build_id.txt) +package: chromium/fuchsia/fidl +description: FIDL definitions for the "chromium" service. +root: ../fidl +data: + - dir: "."
diff --git a/webrunner/cipd/webrunner.yaml b/webrunner/cipd/webrunner.yaml new file mode 100644 index 0000000..73bb6ec --- /dev/null +++ b/webrunner/cipd/webrunner.yaml
@@ -0,0 +1,27 @@ +# Copyright 2018 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Creates a package for the WebRunner and Chromium service binaries. +# The ID of the target architecture (amd64, arm64) must be passed in as +# a pkg-var so that the packages can be archived at the appropriate location +# in the CIPD package hierarchy. +# +# pkg-var arguments: +# outdir: A fully qualified path to the build output directory. +# targetarch: The target architecture, either "amd64" or "arm64". +# +# To create a CIPD package, run the following command from the build output +# directory. +# +# cipd create --pkg-def ../../webrunner/cipd/webrunner.yaml \ +# -pkg-var targetarch:$TARGET_ARCH \ +# -pkg-var outdir:`pwd` \ +# -tag version:$(cat fuchsia_artifacts/build_id.txt) +package: chromium/fuchsia/webrunner-${targetarch} +description: Prebuilt Chrome and Web Runner binaries for Fuchsia. +root: ${outdir}/fuchsia_artifacts +data: + - file: chromium.far + - file: web_runner.far + - file: LICENSE